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