1 // Copyright 2023 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "net/extras/shared_dictionary/shared_dictionary_isolation_key.h"
6 
7 #include "net/base/isolation_info.h"
8 #include "testing/gtest/include/gtest/gtest.h"
9 #include "url/gurl.h"
10 
11 namespace net {
12 
13 namespace {
14 const GURL kUrl1("https://origin1.test/");
15 const net::SchemefulSite kSite1(GURL("https://origin1.test/"));
16 const net::SchemefulSite kSite2(GURL("https://origin2.test/"));
17 }  // namespace
18 
TEST(SharedDictionaryIsolationKeyTest,MaybeCreate)19 TEST(SharedDictionaryIsolationKeyTest, MaybeCreate) {
20   url::Origin origin = url::Origin::Create(kUrl1);
21   const std::optional<SharedDictionaryIsolationKey> isolation_key =
22       SharedDictionaryIsolationKey::MaybeCreate(
23           net::IsolationInfo::Create(net::IsolationInfo::RequestType::kOther,
24                                      origin, origin, net::SiteForCookies()));
25   EXPECT_TRUE(isolation_key);
26 }
27 
TEST(SharedDictionaryIsolationKeyTest,MaybeCreateOpaqueTopFrameOrigin)28 TEST(SharedDictionaryIsolationKeyTest, MaybeCreateOpaqueTopFrameOrigin) {
29   const std::optional<SharedDictionaryIsolationKey> isolation_key =
30       SharedDictionaryIsolationKey::MaybeCreate(net::IsolationInfo::Create(
31           net::IsolationInfo::RequestType::kOther, url::Origin(),
32           url::Origin::Create(kUrl1), net::SiteForCookies()));
33   EXPECT_FALSE(isolation_key);
34 }
35 
TEST(SharedDictionaryIsolationKeyTest,MaybeCreateOpaqueFrameOrigin)36 TEST(SharedDictionaryIsolationKeyTest, MaybeCreateOpaqueFrameOrigin) {
37   url::Origin origin = url::Origin::Create(kUrl1);
38   const std::optional<SharedDictionaryIsolationKey> isolation_key =
39       SharedDictionaryIsolationKey::MaybeCreate(net::IsolationInfo::Create(
40           net::IsolationInfo::RequestType::kOther, origin, url::Origin(),
41           net::SiteForCookies()));
42   EXPECT_FALSE(isolation_key);
43 }
44 
TEST(SharedDictionaryIsolationKeyTest,MaybeCreateWithNonce)45 TEST(SharedDictionaryIsolationKeyTest, MaybeCreateWithNonce) {
46   const std::optional<SharedDictionaryIsolationKey> isolation_key =
47       SharedDictionaryIsolationKey::MaybeCreate(net::IsolationInfo::Create(
48           net::IsolationInfo::RequestType::kOther, url::Origin::Create(kUrl1),
49           url::Origin(), net::SiteForCookies(),
50           /*nonce=*/base::UnguessableToken::Create()));
51   EXPECT_FALSE(isolation_key);
52 }
53 
TEST(SharedDictionaryIsolationKeyTest,SameFrameOriginSameTopFrameSite)54 TEST(SharedDictionaryIsolationKeyTest, SameFrameOriginSameTopFrameSite) {
55   SharedDictionaryIsolationKey isolation_key1(url::Origin::Create(kUrl1),
56                                               kSite1);
57   SharedDictionaryIsolationKey isolation_key2(url::Origin::Create(kUrl1),
58                                               kSite1);
59   EXPECT_EQ(isolation_key1, isolation_key2);
60 }
61 
TEST(SharedDictionaryIsolationKeyTest,DifferentFrameOriginSameTopFrameSite)62 TEST(SharedDictionaryIsolationKeyTest, DifferentFrameOriginSameTopFrameSite) {
63   SharedDictionaryIsolationKey isolation_key1(
64       url::Origin::Create(GURL("https://www1.origin1.test/")), kSite1);
65   SharedDictionaryIsolationKey isolation_key2(
66       url::Origin::Create(GURL("https://www2.origin1.test/")), kSite1);
67   EXPECT_NE(isolation_key1, isolation_key2);
68 }
69 
TEST(SharedDictionaryIsolationKeyTest,SameFrameOriginDifferentTopFrameSite)70 TEST(SharedDictionaryIsolationKeyTest, SameFrameOriginDifferentTopFrameSite) {
71   SharedDictionaryIsolationKey isolation_key1(url::Origin::Create(kUrl1),
72                                               kSite1);
73   SharedDictionaryIsolationKey isolation_key2(url::Origin::Create(kUrl1),
74                                               kSite2);
75   EXPECT_NE(isolation_key1, isolation_key2);
76 }
77 
78 }  // namespace net
79