diff --git a/chrome/browser/predictors/loading_predictor_browsertest.cc b/chrome/browser/predictors/loading_predictor_browsertest.cc index f64a58718b79a..7a130c0a5fc92 100644 --- a/chrome/browser/predictors/loading_predictor_browsertest.cc +++ b/chrome/browser/predictors/loading_predictor_browsertest.cc @@ -1307,9 +1307,8 @@ IN_PROC_BROWSER_TEST_P(LoadingPredictorNetworkIsolationKeyBrowserTest, EXPECT_EQ(2u, connection_tracker()->GetAcceptedSocketCount()); EXPECT_EQ(2u, connection_tracker()->GetReadSocketCount()); } else { - // Otherwise, the preconnected socket is used, so counts remain unchanged - // since the last check. - EXPECT_EQ(2u, connection_tracker()->GetAcceptedSocketCount()); + // Otherwise, the preconnected socket cannot be used. + EXPECT_EQ(3u, connection_tracker()->GetAcceptedSocketCount()); EXPECT_EQ(2u, connection_tracker()->GetReadSocketCount()); } diff --git a/components/domain_reliability/uploader_unittest.cc b/components/domain_reliability/uploader_unittest.cc index 96499e27fb3d6..041192d910bab 100644 --- a/components/domain_reliability/uploader_unittest.cc +++ b/components/domain_reliability/uploader_unittest.cc @@ -189,8 +189,6 @@ class DomainReliabilityUploaderTest : public testing::Test { uploader_( DomainReliabilityUploader::Create(&time_, url_request_context_.get())) { - scoped_feature_list_.InitAndEnableFeature( - net::features::kEnableCrossSiteFlagNetworkAnonymizationKey); expected_isolation_info_ = net::IsolationInfo::CreateTransient(); auto interceptor = @@ -216,7 +214,6 @@ class DomainReliabilityUploaderTest : public testing::Test { } private: - base::test::ScopedFeatureList scoped_feature_list_; base::test::SingleThreadTaskEnvironment task_environment_{ base::test::SingleThreadTaskEnvironment::MainThreadType::IO}; diff --git a/net/base/features.cc b/net/base/features.cc index 36ab7bbb5dbeb..a8d8c25882ad1 100644 --- a/net/base/features.cc +++ b/net/base/features.cc @@ -113,10 +113,6 @@ BASE_FEATURE(kPartitionNelAndReportingByNetworkIsolationKey, "PartitionNelAndReportingByNetworkIsolationKey", base::FEATURE_DISABLED_BY_DEFAULT); -BASE_FEATURE(kEnableCrossSiteFlagNetworkAnonymizationKey, - "EnableCrossSiteFlagNetworkAnonymizationKey", - base::FEATURE_DISABLED_BY_DEFAULT); - BASE_FEATURE(kTLS13KeyUpdate, "TLS13KeyUpdate", base::FEATURE_DISABLED_BY_DEFAULT); diff --git a/net/base/features.h b/net/base/features.h index e570b03dc0674..10cd74095727b 100644 --- a/net/base/features.h +++ b/net/base/features.h @@ -148,15 +148,6 @@ NET_EXPORT BASE_DECLARE_FEATURE(kPartitionSSLSessionsByNetworkIsolationKey); // testing. NET_EXPORT BASE_DECLARE_FEATURE(kPartitionNelAndReportingByNetworkIsolationKey); -// Creates a <double key + is_cross_site> NetworkAnonymizationKey which is used -// to partition the network state. This double key will have the following -// properties: `top_frame_site` -> the schemeful site of the top level page. -// `frame_site ` -> nullopt -// `is_cross_site` -> true if the `top_frame_site` is cross site when compared -// to the frame site. The frame site will not be stored in this key so the value -// of is_cross_site will be computed at key construction. -NET_EXPORT BASE_DECLARE_FEATURE(kEnableCrossSiteFlagNetworkAnonymizationKey); - // Enables sending TLS 1.3 Key Update messages on TLS 1.3 connections in order // to ensure that this corner of the spec is exercised. This is currently // disabled by default because we discovered incompatibilities with some diff --git a/net/base/isolation_info.cc b/net/base/isolation_info.cc index c7d00417a1719..fee5d9180afd4 100644 --- a/net/base/isolation_info.cc +++ b/net/base/isolation_info.cc @@ -176,8 +176,7 @@ IsolationInfo IsolationInfo::DoNotUseCreatePartialFromNak( network_anonymization_key.GetTopFrameSite()->site_as_origin_; absl::optional<url::Origin> frame_origin; - if (NetworkAnonymizationKey::IsCrossSiteFlagSchemeEnabled() && - network_anonymization_key.GetIsCrossSite().value()) { + if (network_anonymization_key.GetIsCrossSite().value()) { // If we know that the origin is cross site to the top level site, create an // empty origin to use as the frame origin for the isolation info. This // should be cross site with the top level origin. diff --git a/net/base/isolation_info_unittest.cc b/net/base/isolation_info_unittest.cc index 91145c85c3493..615617e5b5a4a 100644 --- a/net/base/isolation_info_unittest.cc +++ b/net/base/isolation_info_unittest.cc @@ -7,7 +7,6 @@ #include <iostream> #include "base/strings/strcat.h" #include "base/test/gtest_util.h" -#include "base/test/scoped_feature_list.h" #include "base/unguessable_token.h" #include "isolation_info.h" #include "net/base/features.h" @@ -23,47 +22,10 @@ namespace net { -// `IsolationInfoEnabledFeatureFlagsTestingParam ` allows enabling and disabling -// the feature flags that control the key schemes for NetworkAnonymizationKey. -// This allows us to test the possible combinations of flags that will be -// allowed for experimentation. -// -// Presently, only one flag is used, but future experiments will add more. -struct IsolationInfoEnabledFeatureFlagsTestingParam { - const bool enableDoubleKeyAndCrossSiteBitNetworkAnonymizationKey; -}; - -const IsolationInfoEnabledFeatureFlagsTestingParam kFlagsParam[] = { - // 0. Double-keying is enabled for NetworkAnonymizationKey. - {/*enableDoubleKeyAndCrossSiteBitNetworkAnonymizationKey=*/false}, - // 1. Double-keying + cross-site-bit is enabled for NetworkAnonymizationKey. - {/*enableDoubleKeyAndCrossSiteBitNetworkAnonymizationKey=*/true}}; - namespace { -class IsolationInfoTest : public testing::Test, - public testing::WithParamInterface< - IsolationInfoEnabledFeatureFlagsTestingParam> { +class IsolationInfoTest : public testing::Test { public: - IsolationInfoTest() { - std::vector<base::test::FeatureRef> enabled_features = {}; - std::vector<base::test::FeatureRef> disabled_features = {}; - - if (IsDoubleKeyAndCrossSiteBitNetworkAnonymizationKeyEnabled()) { - enabled_features.push_back( - net::features::kEnableCrossSiteFlagNetworkAnonymizationKey); - } else { - disabled_features.push_back( - net::features::kEnableCrossSiteFlagNetworkAnonymizationKey); - } - - scoped_feature_list_.InitWithFeatures(enabled_features, disabled_features); - } - - static bool IsDoubleKeyAndCrossSiteBitNetworkAnonymizationKeyEnabled() { - return GetParam().enableDoubleKeyAndCrossSiteBitNetworkAnonymizationKey; - } - const url::Origin kOrigin1 = url::Origin::Create(GURL("https://a.foo.test")); const url::Origin kSite1 = url::Origin::Create(GURL("https://foo.test")); const url::Origin kOrigin2 = url::Origin::Create(GURL("https://b.bar.test")); @@ -87,16 +49,8 @@ class IsolationInfoTest : public testing::Test, const base::UnguessableToken kNonce1 = base::UnguessableToken::Create(); const base::UnguessableToken kNonce2 = base::UnguessableToken::Create(); - - private: - base::test::ScopedFeatureList scoped_feature_list_; }; -INSTANTIATE_TEST_SUITE_P(All, - IsolationInfoTest, - /*IsolationInfoEnabledFeatureFlagsTestingParam */ - testing::ValuesIn(kFlagsParam)); - void DuplicateAndCompare(const IsolationInfo& isolation_info) { absl::optional<IsolationInfo> duplicate_isolation_info = IsolationInfo::CreateIfConsistent( @@ -112,11 +66,11 @@ void DuplicateAndCompare(const IsolationInfo& isolation_info) { EXPECT_TRUE(isolation_info.IsEqualForTesting(*duplicate_isolation_info)); } -TEST_P(IsolationInfoTest, IsFrameSiteEnabled) { +TEST_F(IsolationInfoTest, IsFrameSiteEnabled) { EXPECT_TRUE(IsolationInfo::IsFrameSiteEnabled()); } -TEST_P(IsolationInfoTest, DebugString) { +TEST_F(IsolationInfoTest, DebugString) { IsolationInfo isolation_info = IsolationInfo::Create( IsolationInfo::RequestType::kMainFrame, kOrigin1, kOrigin2, SiteForCookies::FromOrigin(kOrigin1), kPartyContextEmpty, &kNonce1); @@ -138,7 +92,7 @@ TEST_P(IsolationInfoTest, DebugString) { EXPECT_EQ(isolation_info.DebugString(), base::StrCat(parts)); } -TEST_P(IsolationInfoTest, CreateNetworkAnonymizationKeyForIsolationInfo) { +TEST_F(IsolationInfoTest, CreateNetworkAnonymizationKeyForIsolationInfo) { IsolationInfo isolation_info = IsolationInfo::Create( IsolationInfo::RequestType::kMainFrame, kOrigin1, kOrigin2, SiteForCookies::FromOrigin(kOrigin1), kPartyContextEmpty, &kNonce1); @@ -162,24 +116,18 @@ TEST_P(IsolationInfoTest, CreateNetworkAnonymizationKeyForIsolationInfo) { kNonce1); EXPECT_EQ(isolation_info.nonce().value(), kNonce1); - if (!IsDoubleKeyAndCrossSiteBitNetworkAnonymizationKeyEnabled()) { - // Triple-keyed IsolationInfo + double-keyed NetworkAnonymizationKey case. - EXPECT_EQ(isolation_info.frame_origin(), kOrigin2); - } else { - // Triple-keyed IsolationInfo + double-keyed + cross site bit - // NetworkAnonymizationKey case. - EXPECT_EQ(isolation_info.frame_origin(), kOrigin2); - EXPECT_EQ(isolation_info.network_anonymization_key().GetIsCrossSite(), - true); - EXPECT_EQ( - same_site_isolation_info.network_anonymization_key().GetIsCrossSite(), - false); - } + // Triple-keyed IsolationInfo + double-keyed + cross site bit + // NetworkAnonymizationKey case. + EXPECT_EQ(isolation_info.frame_origin(), kOrigin2); + EXPECT_EQ(isolation_info.network_anonymization_key().GetIsCrossSite(), true); + EXPECT_EQ( + same_site_isolation_info.network_anonymization_key().GetIsCrossSite(), + false); } // A 2.5-keyed NAK created with two identical opaque origins should be // same-site. -TEST_P(IsolationInfoTest, CreateNetworkAnonymizationKeyForIsolationInfoOpaque) { +TEST_F(IsolationInfoTest, CreateNetworkAnonymizationKeyForIsolationInfoOpaque) { url::Origin opaque; IsolationInfo isolation_info = IsolationInfo::Create( IsolationInfo::RequestType::kMainFrame, opaque, opaque, @@ -188,22 +136,16 @@ TEST_P(IsolationInfoTest, CreateNetworkAnonymizationKeyForIsolationInfoOpaque) { isolation_info.CreateNetworkAnonymizationKeyForIsolationInfo( opaque, opaque, &kNonce1); - if (IsDoubleKeyAndCrossSiteBitNetworkAnonymizationKeyEnabled()) { - EXPECT_FALSE(nak.GetIsCrossSite().value()); - } else { - EXPECT_DCHECK_DEATH(nak.GetIsCrossSite()); - } + EXPECT_FALSE(nak.GetIsCrossSite().value()); url::Origin opaque2; nak = isolation_info.CreateNetworkAnonymizationKeyForIsolationInfo( opaque, opaque2, &kNonce1); - if (IsDoubleKeyAndCrossSiteBitNetworkAnonymizationKeyEnabled()) { - EXPECT_TRUE(nak.GetIsCrossSite().value()); - } + EXPECT_TRUE(nak.GetIsCrossSite().value()); } -TEST_P(IsolationInfoTest, RequestTypeMainFrame) { +TEST_F(IsolationInfoTest, RequestTypeMainFrame) { IsolationInfo isolation_info = IsolationInfo::Create( IsolationInfo::RequestType::kMainFrame, kOrigin1, kOrigin1, SiteForCookies::FromOrigin(kOrigin1), kPartyContextEmpty); @@ -241,7 +183,7 @@ TEST_P(IsolationInfoTest, RequestTypeMainFrame) { EXPECT_FALSE(redirected_isolation_info.nonce().has_value()); } -TEST_P(IsolationInfoTest, RequestTypeSubFrame) { +TEST_F(IsolationInfoTest, RequestTypeSubFrame) { IsolationInfo isolation_info = IsolationInfo::Create( IsolationInfo::RequestType::kSubFrame, kOrigin1, kOrigin2, SiteForCookies::FromOrigin(kOrigin1), kPartyContext1); @@ -279,7 +221,7 @@ TEST_P(IsolationInfoTest, RequestTypeSubFrame) { EXPECT_FALSE(redirected_isolation_info.nonce().has_value()); } -TEST_P(IsolationInfoTest, RequestTypeMainFrameWithNonce) { +TEST_F(IsolationInfoTest, RequestTypeMainFrameWithNonce) { IsolationInfo isolation_info = IsolationInfo::Create( IsolationInfo::RequestType::kMainFrame, kOrigin1, kOrigin1, SiteForCookies::FromOrigin(kOrigin1), kPartyContextEmpty, &kNonce1); @@ -316,7 +258,7 @@ TEST_P(IsolationInfoTest, RequestTypeMainFrameWithNonce) { EXPECT_EQ(kNonce1, redirected_isolation_info.nonce().value()); } -TEST_P(IsolationInfoTest, RequestTypeSubFrameWithNonce) { +TEST_F(IsolationInfoTest, RequestTypeSubFrameWithNonce) { IsolationInfo isolation_info = IsolationInfo::Create( IsolationInfo::RequestType::kSubFrame, kOrigin1, kOrigin2, SiteForCookies::FromOrigin(kOrigin1), kPartyContext1, &kNonce1); @@ -353,7 +295,7 @@ TEST_P(IsolationInfoTest, RequestTypeSubFrameWithNonce) { EXPECT_EQ(kNonce1, redirected_isolation_info.nonce().value()); } -TEST_P(IsolationInfoTest, RequestTypeOther) { +TEST_F(IsolationInfoTest, RequestTypeOther) { IsolationInfo isolation_info; EXPECT_EQ(IsolationInfo::RequestType::kOther, isolation_info.request_type()); EXPECT_FALSE(isolation_info.top_frame_origin()); @@ -370,7 +312,7 @@ TEST_P(IsolationInfoTest, RequestTypeOther) { EXPECT_TRUE(isolation_info.IsEqualForTesting(redirected_isolation_info)); } -TEST_P(IsolationInfoTest, RequestTypeOtherWithSiteForCookies) { +TEST_F(IsolationInfoTest, RequestTypeOtherWithSiteForCookies) { IsolationInfo isolation_info = IsolationInfo::Create( IsolationInfo::RequestType::kOther, kOrigin1, kOrigin1, SiteForCookies::FromOrigin(kOrigin1), kPartyContextEmpty); @@ -395,7 +337,7 @@ TEST_P(IsolationInfoTest, RequestTypeOtherWithSiteForCookies) { // Test case of a subresource for cross-site subframe (which has an empty // site-for-cookies). -TEST_P(IsolationInfoTest, RequestTypeOtherWithEmptySiteForCookies) { +TEST_F(IsolationInfoTest, RequestTypeOtherWithEmptySiteForCookies) { IsolationInfo isolation_info = IsolationInfo::Create(IsolationInfo::RequestType::kOther, kOrigin1, kOrigin2, SiteForCookies(), kPartyContext2); @@ -417,7 +359,7 @@ TEST_P(IsolationInfoTest, RequestTypeOtherWithEmptySiteForCookies) { EXPECT_TRUE(isolation_info.IsEqualForTesting(redirected_isolation_info)); } -TEST_P(IsolationInfoTest, CreateTransient) { +TEST_F(IsolationInfoTest, CreateTransient) { IsolationInfo isolation_info = IsolationInfo::CreateTransient(); EXPECT_EQ(IsolationInfo::RequestType::kOther, isolation_info.request_type()); EXPECT_TRUE(isolation_info.top_frame_origin()->opaque()); @@ -435,7 +377,7 @@ TEST_P(IsolationInfoTest, CreateTransient) { EXPECT_TRUE(isolation_info.IsEqualForTesting(redirected_isolation_info)); } -TEST_P(IsolationInfoTest, CreateForInternalRequest) { +TEST_F(IsolationInfoTest, CreateForInternalRequest) { IsolationInfo isolation_info = IsolationInfo::CreateForInternalRequest(kOrigin1); EXPECT_EQ(IsolationInfo::RequestType::kOther, isolation_info.request_type()); @@ -459,7 +401,7 @@ TEST_P(IsolationInfoTest, CreateForInternalRequest) { // Test that in the UpdateNothing case, the SiteForCookies does not have to // match the frame origin, unlike in the HTTP/HTTPS case. -TEST_P(IsolationInfoTest, CustomSchemeRequestTypeOther) { +TEST_F(IsolationInfoTest, CustomSchemeRequestTypeOther) { // Have to register the scheme, or url::Origin::Create() will return an // opaque origin. url::ScopedSchemeRegistryForTests scoped_registry; @@ -491,7 +433,7 @@ TEST_P(IsolationInfoTest, CustomSchemeRequestTypeOther) { // Success cases are covered by other tests, so only need a separate test to // cover the failure cases. -TEST_P(IsolationInfoTest, CreateIfConsistentFails) { +TEST_F(IsolationInfoTest, CreateIfConsistentFails) { // Main frames with inconsistent SiteForCookies. EXPECT_FALSE(IsolationInfo::CreateIfConsistent( IsolationInfo::RequestType::kMainFrame, kOrigin1, kOrigin1, @@ -553,7 +495,7 @@ TEST_P(IsolationInfoTest, CreateIfConsistentFails) { SiteForCookies(), absl::nullopt /* party_context */, &kNonce1)); } -TEST_P(IsolationInfoTest, CreateForRedirectPartyContext) { +TEST_F(IsolationInfoTest, CreateForRedirectPartyContext) { // RequestTypeMainFrame, PartyContext is empty { IsolationInfo isolation_info = IsolationInfo::Create( @@ -592,7 +534,7 @@ TEST_P(IsolationInfoTest, CreateForRedirectPartyContext) { } } -TEST_P(IsolationInfoTest, Serialization) { +TEST_F(IsolationInfoTest, Serialization) { EXPECT_FALSE(IsolationInfo::Deserialize("")); EXPECT_FALSE(IsolationInfo::Deserialize("garbage")); diff --git a/net/base/network_anonymization_key.cc b/net/base/network_anonymization_key.cc index 1d90bff6663da..c5634d9f158eb 100644 --- a/net/base/network_anonymization_key.cc +++ b/net/base/network_anonymization_key.cc @@ -20,27 +20,25 @@ NetworkAnonymizationKey::NetworkAnonymizationKey( const absl::optional<bool> is_cross_site, const absl::optional<base::UnguessableToken> nonce) : top_frame_site_(top_frame_site), - is_cross_site_(IsCrossSiteFlagSchemeEnabled() ? is_cross_site - : absl::nullopt), + is_cross_site_(is_cross_site), nonce_(nonce) { DCHECK(top_frame_site_.has_value()); // If `is_cross_site` is enabled but the value is not populated, and we have // the information to calculate it, do calculate it. - if (IsCrossSiteFlagSchemeEnabled() && !is_cross_site_.has_value() && - frame_site.has_value()) { + if (!is_cross_site_.has_value() && frame_site.has_value()) { is_cross_site_ = frame_site.value() != top_frame_site_.value(); } - if (IsCrossSiteFlagSchemeEnabled()) { - // If `frame_site_` is populated, `is_cross_site_` must be as well. - DCHECK(is_cross_site_.has_value()); - } + + // `is_cross_site_` must be populated. + // TODO(crbug.com/1407287): update constructor signature so this is not + // optional. + DCHECK(is_cross_site_.has_value()); } NetworkAnonymizationKey NetworkAnonymizationKey::CreateFromNetworkIsolationKey( const net::NetworkIsolationKey& network_isolation_key) { // If NIK is double-keyed, a 2.5-keyed NAK cannot be constructed from it. - DCHECK(NetworkIsolationKey::IsFrameSiteEnabled() || - IsDoubleKeySchemeEnabled()); + DCHECK(NetworkIsolationKey::IsFrameSiteEnabled()); // We cannot create a valid NetworkAnonymizationKey from a NetworkIsolationKey // that is not fully populated. @@ -48,16 +46,9 @@ NetworkAnonymizationKey NetworkAnonymizationKey::CreateFromNetworkIsolationKey( return NetworkAnonymizationKey(); } - // If we are unable to determine the value of `is_cross_site` from the - // NetworkIsolationKey, we default the value to `nullopt`. Otherwise we - // calculate what the value will be. If the NetworkAnonymizationKey is being - // constructed in a scheme where the is cross site value is not used this - // value will be overridden in the constructor and set to `nullopt`. - absl::optional<bool> nak_is_cross_site = absl::nullopt; - if (NetworkAnonymizationKey::IsCrossSiteFlagSchemeEnabled()) { - nak_is_cross_site = network_isolation_key.GetTopFrameSite().value() != - network_isolation_key.GetFrameSite().value(); - } + // Determine is_cross_site based on the NIK's triple-key + bool nak_is_cross_site = network_isolation_key.GetTopFrameSite().value() != + network_isolation_key.GetFrameSite().value(); return NetworkAnonymizationKey( network_isolation_key.GetTopFrameSite().value(), absl::nullopt, @@ -87,14 +78,12 @@ NetworkAnonymizationKey NetworkAnonymizationKey::CreateTransient() { } std::string NetworkAnonymizationKey::ToDebugString() const { + if (!IsFullyPopulated()) { + return "null"; + } + std::string str = GetSiteDebugString(top_frame_site_); - std::string cross_site_str = - IsCrossSiteFlagSchemeEnabled() - ? (!GetIsCrossSite().has_value() ? " with empty is_cross_site value" - : GetIsCrossSite().value() ? " cross_site" - : " same_site") - : ""; - str += cross_site_str; + str += GetIsCrossSite().value() ? " cross_site" : " same_site"; // Currently, if the NAK has a nonce it will be marked transient. For debug // purposes we will print the value but if called via @@ -111,8 +100,7 @@ bool NetworkAnonymizationKey::IsEmpty() const { } bool NetworkAnonymizationKey::IsFullyPopulated() const { - return top_frame_site_.has_value() && - (!IsCrossSiteFlagSchemeEnabled() || is_cross_site_.has_value()); + return top_frame_site_.has_value() && is_cross_site_.has_value(); } bool NetworkAnonymizationKey::IsTransient() const { @@ -123,20 +111,9 @@ bool NetworkAnonymizationKey::IsTransient() const { } absl::optional<bool> NetworkAnonymizationKey::GetIsCrossSite() const { - DCHECK(IsCrossSiteFlagSchemeEnabled()); return is_cross_site_; } -bool NetworkAnonymizationKey::IsDoubleKeySchemeEnabled() { - return !base::FeatureList::IsEnabled( - net::features::kEnableCrossSiteFlagNetworkAnonymizationKey); -} - -bool NetworkAnonymizationKey::IsCrossSiteFlagSchemeEnabled() { - return base::FeatureList::IsEnabled( - net::features::kEnableCrossSiteFlagNetworkAnonymizationKey); -} - bool NetworkAnonymizationKey::ToValue(base::Value* out_value) const { if (IsEmpty()) { *out_value = base::Value(base::Value::Type::LIST); @@ -153,14 +130,8 @@ bool NetworkAnonymizationKey::ToValue(base::Value* out_value) const { base::Value::List list; list.Append(std::move(top_frame_value).value()); - // Append frame site for tripe key scheme or is_cross_site flag for double key - // with cross site flag scheme. - if (IsCrossSiteFlagSchemeEnabled()) { - const absl::optional<bool> is_cross_site = GetIsCrossSite(); - if (is_cross_site.has_value()) { - list.Append(is_cross_site.value()); - } - } + const absl::optional<bool> is_cross_site = GetIsCrossSite(); + list.Append(is_cross_site.value()); *out_value = base::Value(std::move(list)); return true; @@ -178,10 +149,12 @@ bool NetworkAnonymizationKey::FromValue( return true; } - // Check top_level_site is valid for any key scheme - if (list.size() < 1 || !list[0].is_string()) { + // Check the format. + if (list.size() != 2 || !list[0].is_string() || !list[1].is_bool()) { return false; } + + // Check top_level_site is valid for any key scheme absl::optional<SchemefulSite> top_frame_site = SchemefulSite::DeserializeWithNonce(list[0].GetString()); if (!top_frame_site) { @@ -191,21 +164,7 @@ bool NetworkAnonymizationKey::FromValue( absl::optional<SchemefulSite> frame_site = absl::nullopt; absl::optional<bool> is_cross_site = absl::nullopt; - // If double key scheme is enabled `list` must be of length 1. list[0] will be - // top_frame_site. - if (IsDoubleKeySchemeEnabled()) { - if (list.size() != 1) { - return false; - } - } else /* if (IsCrossSiteFlagSchemeEnabled()) */ { - // If double key + is cross site scheme is enabled `list` must be of - // length 2. list[0] will be top_frame_site and list[1] will be - // is_cross_site. - if (list.size() != 2 || !list[1].is_bool()) { - return false; - } - is_cross_site = list[1].GetBool(); - } + is_cross_site = list[1].GetBool(); *network_anonymization_key = NetworkAnonymizationKey(std::move(top_frame_site.value()), diff --git a/net/base/network_anonymization_key.h b/net/base/network_anonymization_key.h index 52fd6d78e0eb0..12fd617665b70 100644 --- a/net/base/network_anonymization_key.h +++ b/net/base/network_anonymization_key.h @@ -31,12 +31,9 @@ namespace net { // In order to separate first and third party context from each other this field // will always be populated. -//`is_cross_site` is an expiremental boolean that will be used with the -//`top_frame_site` to create a partition key that separates the -//`top_frame_site`s first party partition from any cross-site iframes. This will -// be used only when `kEnableCrossSiteFlagNetworkAnonymizationKey` is enabled. -// When `kEnableCrossSiteFlagNetworkAnonymizationKey` is disabled, -// `is_cross_site_` will be an empty optional. +// `is_cross_site` is used with the `top_frame_site` to create a partition key +// that separates the `top_frame_site`s first party partition from any +// cross-site iframes. // The following show how the `is_cross_site` boolean is populated for the // innermost frame in the chain. @@ -147,29 +144,6 @@ class NET_EXPORT NetworkAnonymizationKey { return nonce_; } - // Returns true if the NetworkAnonymizationKey has a triple keyed scheme. This - // means the values of the NetworkAnonymizationKey are as follows: - // `top_frame_site` -> the schemeful site of the top level page. - // `frame_site ` -> the schemeful site of the requestor frame - // `is_cross_site` -> nullopt - static bool IsFrameSiteEnabled(); - - // Returns true if the NetworkAnonymizationKey has a double keyed scheme. This - // means the values of the NetworkAnonymizationKey are as follows: - // `top_frame_site` -> the schemeful site of the top level page. - // `frame_site ` -> nullopt - // `is_cross_site` -> nullopt - static bool IsDoubleKeySchemeEnabled(); - - // Returns true if the NetworkAnonymizationKey has a <double keyed + - // is_cross_site> scheme. This means the values of the NetworkAnonymizationKey - // are as follows: - // `top_frame_site` -> the schemeful site of the top level page. - // `frame_site ` -> nullopt - // `is_cross_site` -> a boolean indicating if the requestor frame site is - // cross site from the top level site. - static bool IsCrossSiteFlagSchemeEnabled(); - // Returns a representation of |this| as a base::Value. Returns false on // failure. Succeeds if either IsEmpty() or !IsTransient(). [[nodiscard]] bool ToValue(base::Value* out_value) const; diff --git a/net/base/network_anonymization_key_unittest.cc b/net/base/network_anonymization_key_unittest.cc index cfedaa093ecdf..7053fd7d77507 100644 --- a/net/base/network_anonymization_key_unittest.cc +++ b/net/base/network_anonymization_key_unittest.cc @@ -18,79 +18,15 @@ namespace net { -// `EnabledFeatureFlagsTestingParam ` allows enabling and disabling -// the feature flags that control the key schemes for NetworkAnonymizationKey. -// This allows us to test the possible combinations of flags that will be -// allowed for experimentation. -struct EnabledFeatureFlagsTestingParam { - // True = 2.5-keyed NAK, false = double-keyed NAK. - const bool enableCrossSiteFlagNetworkAnonymizationKey; -}; - -const EnabledFeatureFlagsTestingParam kFlagsParam[] = { - // 0. Double-keying is enabled for NetworkAnonymizationKey. - {/*enableCrossSiteFlagNetworkAnonymizationKey=*/false}, - // 1. Double-keying + cross-site-bit is enabled for NetworkAnonymizationKey. - {/*enableCrossSiteFlagNetworkAnonymizationKey=*/true}}; - -class NetworkAnonymizationKeyTest - : public testing::Test, - public testing::WithParamInterface<EnabledFeatureFlagsTestingParam> { - public: - void SetUp() override { - std::vector<base::test::FeatureRef> enabled_features = {}; - std::vector<base::test::FeatureRef> disabled_features = {}; - - if (IsCrossSiteFlagEnabled()) { - enabled_features.push_back( - net::features::kEnableCrossSiteFlagNetworkAnonymizationKey); - } else { - disabled_features.push_back( - net::features::kEnableCrossSiteFlagNetworkAnonymizationKey); - } - - scoped_feature_list_.InitWithFeatures(enabled_features, disabled_features); - } - - bool IsCrossSiteFlagEnabled() { - return GetParam().enableCrossSiteFlagNetworkAnonymizationKey; - } - +class NetworkAnonymizationKeyTest : public testing::Test { protected: const SchemefulSite kTestSiteA = SchemefulSite(GURL("http://a.test/")); const SchemefulSite kTestSiteB = SchemefulSite(GURL("http://b.test/")); const SchemefulSite kDataSite = SchemefulSite(GURL("data:foo")); const base::UnguessableToken kNonce = base::UnguessableToken::Create(); - - private: - base::test::ScopedFeatureList scoped_feature_list_; }; -INSTANTIATE_TEST_SUITE_P(All, - NetworkAnonymizationKeyTest, - testing::ValuesIn(kFlagsParam)); - -TEST_P(NetworkAnonymizationKeyTest, IsDoubleKeySchemeEnabled) { - // Double key scheme is enabled only when - // `kEnableCrossSiteFlagNetworkAnonymizationKey` is not. - if (!IsCrossSiteFlagEnabled()) { - EXPECT_TRUE(NetworkAnonymizationKey::IsDoubleKeySchemeEnabled()); - } else { - EXPECT_FALSE(NetworkAnonymizationKey::IsDoubleKeySchemeEnabled()); - } -} - -TEST_P(NetworkAnonymizationKeyTest, IsCrossSiteFlagSchemeEnabled) { - // Double key with cross site flag scheme is enabled whenever - // `kEnableCrossSiteFlagNetworkAnonymizationKey` is enabled. - if (IsCrossSiteFlagEnabled()) { - EXPECT_TRUE(NetworkAnonymizationKey::IsCrossSiteFlagSchemeEnabled()); - } else { - EXPECT_FALSE(NetworkAnonymizationKey::IsCrossSiteFlagSchemeEnabled()); - } -} - -TEST_P(NetworkAnonymizationKeyTest, CreateFromNetworkIsolationKey) { +TEST_F(NetworkAnonymizationKeyTest, CreateFromNetworkIsolationKey) { SchemefulSite site_a = SchemefulSite(GURL("http://a.test/")); SchemefulSite site_b = SchemefulSite(GURL("http://b.test/")); SchemefulSite opaque = SchemefulSite(url::Origin()); @@ -102,12 +38,12 @@ TEST_P(NetworkAnonymizationKeyTest, CreateFromNetworkIsolationKey) { &nik_nonce); NetworkIsolationKey empty_nik; - NetworkAnonymizationKey nak_from_cross_site_nik = - NetworkAnonymizationKey::CreateFromNetworkIsolationKey( - populated_cross_site_nik); NetworkAnonymizationKey nak_from_same_site_nik = NetworkAnonymizationKey::CreateFromNetworkIsolationKey( populated_same_site_nik); + NetworkAnonymizationKey nak_from_cross_site_nik = + NetworkAnonymizationKey::CreateFromNetworkIsolationKey( + populated_cross_site_nik); NetworkAnonymizationKey nak_from_same_site_opaque_nik = NetworkAnonymizationKey::CreateFromNetworkIsolationKey( populated_same_site_opaque_nik); @@ -118,47 +54,27 @@ TEST_P(NetworkAnonymizationKeyTest, CreateFromNetworkIsolationKey) { // empty NAK. EXPECT_TRUE(nak_from_empty_nik.IsEmpty()); - // Double-keyed NetworkAnonymizationKey case. - if (!IsCrossSiteFlagEnabled()) { - // Top site should be populated correctly. - EXPECT_EQ(nak_from_cross_site_nik.GetTopFrameSite(), site_a); - EXPECT_EQ(nak_from_same_site_nik.GetTopFrameSite(), site_a); - EXPECT_EQ(nak_from_same_site_opaque_nik.GetTopFrameSite(), opaque); + // Top site should be populated correctly. + EXPECT_EQ(nak_from_same_site_nik.GetTopFrameSite(), site_a); + EXPECT_EQ(nak_from_cross_site_nik.GetTopFrameSite(), site_a); + EXPECT_EQ(nak_from_same_site_opaque_nik.GetTopFrameSite(), opaque); - // Nonce should be populated correctly. - EXPECT_EQ(nak_from_cross_site_nik.GetNonce(), nik_nonce); - EXPECT_EQ(nak_from_same_site_nik.GetNonce(), nik_nonce); - EXPECT_EQ(nak_from_same_site_opaque_nik.GetNonce(), nik_nonce); + // Nonce should be populated correctly. + EXPECT_EQ(nak_from_same_site_nik.GetNonce(), nik_nonce); + EXPECT_EQ(nak_from_cross_site_nik.GetNonce(), nik_nonce); + EXPECT_EQ(nak_from_same_site_opaque_nik.GetNonce(), nik_nonce); - // Double-keyed NAKs created from different third party cross site contexts - // should be the same. - EXPECT_TRUE(nak_from_same_site_nik == nak_from_cross_site_nik); - } + // Is cross site boolean should be populated correctly. + EXPECT_EQ(nak_from_same_site_nik.GetIsCrossSite(), false); + EXPECT_EQ(nak_from_cross_site_nik.GetIsCrossSite(), true); + EXPECT_EQ(nak_from_same_site_opaque_nik.GetIsCrossSite(), false); - // Double-keyed + cross site bit NetworkAnonymizationKey case. - if (IsCrossSiteFlagEnabled()) { - // Top site should be populated correctly. - EXPECT_EQ(nak_from_cross_site_nik.GetTopFrameSite(), site_a); - EXPECT_EQ(nak_from_same_site_nik.GetTopFrameSite(), site_a); - EXPECT_EQ(nak_from_same_site_opaque_nik.GetTopFrameSite(), opaque); - - // Nonce should be populated correctly. - EXPECT_EQ(nak_from_same_site_nik.GetNonce(), nik_nonce); - EXPECT_EQ(nak_from_cross_site_nik.GetNonce(), nik_nonce); - EXPECT_EQ(nak_from_same_site_opaque_nik.GetNonce(), nik_nonce); - - // Is cross site boolean should be populated correctly. - EXPECT_EQ(nak_from_same_site_nik.GetIsCrossSite(), false); - EXPECT_EQ(nak_from_cross_site_nik.GetIsCrossSite(), true); - EXPECT_EQ(nak_from_same_site_opaque_nik.GetIsCrossSite(), false); - - // Double-keyed + cross site bit NAKs created from different third party - // cross site contexts should be the different. - EXPECT_FALSE(nak_from_same_site_nik == nak_from_cross_site_nik); - } + // Double-keyed + cross site bit NAKs created from different third party + // cross site contexts should be the different. + EXPECT_FALSE(nak_from_same_site_nik == nak_from_cross_site_nik); } -TEST_P(NetworkAnonymizationKeyTest, IsEmpty) { +TEST_F(NetworkAnonymizationKeyTest, IsEmpty) { NetworkAnonymizationKey empty_key; NetworkAnonymizationKey populated_key(/*top_frame_site=*/kTestSiteA, /*frame_site=*/kTestSiteB, @@ -169,7 +85,7 @@ TEST_P(NetworkAnonymizationKeyTest, IsEmpty) { EXPECT_FALSE(populated_key.IsEmpty()); } -TEST_P(NetworkAnonymizationKeyTest, CreateTransient) { +TEST_F(NetworkAnonymizationKeyTest, CreateTransient) { NetworkAnonymizationKey transient_key1 = NetworkAnonymizationKey::CreateTransient(); NetworkAnonymizationKey transient_key2 = @@ -180,7 +96,7 @@ TEST_P(NetworkAnonymizationKeyTest, CreateTransient) { EXPECT_FALSE(transient_key1 == transient_key2); } -TEST_P(NetworkAnonymizationKeyTest, IsTransient) { +TEST_F(NetworkAnonymizationKeyTest, IsTransient) { NetworkAnonymizationKey empty_key; NetworkAnonymizationKey populated_key(/*top_frame_site=*/kTestSiteA, /*frame_site=*/kTestSiteB, @@ -215,7 +131,7 @@ TEST_P(NetworkAnonymizationKeyTest, IsTransient) { EXPECT_FALSE(populated_double_key.IsTransient()); } -TEST_P(NetworkAnonymizationKeyTest, IsFullyPopulated) { +TEST_F(NetworkAnonymizationKeyTest, IsFullyPopulated) { NetworkAnonymizationKey empty_key; NetworkAnonymizationKey populated_key(/*top_frame_site=*/kTestSiteA, /*frame_site=*/kTestSiteB, @@ -234,63 +150,59 @@ TEST_P(NetworkAnonymizationKeyTest, IsFullyPopulated) { /*nonce=*/absl::nullopt); EXPECT_TRUE(empty_frame_site_key.IsFullyPopulated()); - // is_cross_site is required when - // `kEnableCrossSiteFlagNetworkAnonymizationKey` is enabled. - // Since we have both the top_frame_site and frame_site values the constructor - // should calculate and set `is_cross_site`. + // is_cross_site is required. Since we have both the top_frame_site and + // frame_site values the constructor should calculate and set `is_cross_site`. EXPECT_TRUE(empty_cross_site_flag_key.IsFullyPopulated()); } -TEST_P(NetworkAnonymizationKeyTest, IsCrossSiteFlagCalculatedInConstructor) { - if (IsCrossSiteFlagEnabled()) { - NetworkAnonymizationKey cross_site_key(/*top_frame_site=*/kTestSiteA, - /*frame_site=*/kTestSiteB, - /*is_cross_site=*/true); - NetworkAnonymizationKey equal_cross_site_key(/*top_frame_site=*/kTestSiteA, - /*frame_site=*/kTestSiteB); - EXPECT_EQ(cross_site_key.GetIsCrossSite().value(), true); - EXPECT_EQ(equal_cross_site_key.GetIsCrossSite().value(), true); - EXPECT_EQ(cross_site_key, equal_cross_site_key); +TEST_F(NetworkAnonymizationKeyTest, IsCrossSiteFlagCalculatedInConstructor) { + NetworkAnonymizationKey cross_site_key(/*top_frame_site=*/kTestSiteA, + /*frame_site=*/kTestSiteB, + /*is_cross_site=*/true); + NetworkAnonymizationKey equal_cross_site_key(/*top_frame_site=*/kTestSiteA, + /*frame_site=*/kTestSiteB); + EXPECT_EQ(cross_site_key.GetIsCrossSite().value(), true); + EXPECT_EQ(equal_cross_site_key.GetIsCrossSite().value(), true); + EXPECT_EQ(cross_site_key, equal_cross_site_key); - NetworkAnonymizationKey same_site_key(/*top_frame_site=*/kTestSiteA, - /*frame_site=*/kTestSiteA, - /*is_cross_site=*/false); - NetworkAnonymizationKey equal_same_site_key(/*top_frame_site=*/kTestSiteA, - /*frame_site=*/kTestSiteA); - EXPECT_EQ(same_site_key.GetIsCrossSite().value(), false); - EXPECT_EQ(equal_same_site_key.GetIsCrossSite().value(), false); - EXPECT_EQ(same_site_key, equal_same_site_key); + NetworkAnonymizationKey same_site_key(/*top_frame_site=*/kTestSiteA, + /*frame_site=*/kTestSiteA, + /*is_cross_site=*/false); + NetworkAnonymizationKey equal_same_site_key(/*top_frame_site=*/kTestSiteA, + /*frame_site=*/kTestSiteA); + EXPECT_EQ(same_site_key.GetIsCrossSite().value(), false); + EXPECT_EQ(equal_same_site_key.GetIsCrossSite().value(), false); + EXPECT_EQ(same_site_key, equal_same_site_key); - SchemefulSite opaque = SchemefulSite(url::Origin()); - NetworkAnonymizationKey same_opaque_site_key(/*top_frame_site=*/opaque, - /*frame_site=*/opaque, - /*is_cross_site=*/false); - NetworkAnonymizationKey equal_same_opaque_site_key( - /*top_frame_site=*/opaque, - /*frame_site=*/opaque); - EXPECT_EQ(same_opaque_site_key.GetIsCrossSite().value(), false); - EXPECT_EQ(equal_same_opaque_site_key.GetIsCrossSite().value(), false); - EXPECT_EQ(same_opaque_site_key, equal_same_opaque_site_key); + SchemefulSite opaque = SchemefulSite(url::Origin()); + NetworkAnonymizationKey same_opaque_site_key(/*top_frame_site=*/opaque, + /*frame_site=*/opaque, + /*is_cross_site=*/false); + NetworkAnonymizationKey equal_same_opaque_site_key( + /*top_frame_site=*/opaque, + /*frame_site=*/opaque); + EXPECT_EQ(same_opaque_site_key.GetIsCrossSite().value(), false); + EXPECT_EQ(equal_same_opaque_site_key.GetIsCrossSite().value(), false); + EXPECT_EQ(same_opaque_site_key, equal_same_opaque_site_key); - SchemefulSite opaque2 = SchemefulSite(url::Origin()); - NetworkAnonymizationKey diff_opaque_site_key(/*top_frame_site=*/opaque, - /*frame_site=*/opaque2, - /*is_cross_site=*/true); - NetworkAnonymizationKey equal_diff_opaque_site_key( - /*top_frame_site=*/opaque, - /*frame_site=*/opaque2); - EXPECT_EQ(diff_opaque_site_key.GetIsCrossSite().value(), true); - EXPECT_EQ(equal_diff_opaque_site_key.GetIsCrossSite().value(), true); - EXPECT_EQ(diff_opaque_site_key, equal_diff_opaque_site_key); + SchemefulSite opaque2 = SchemefulSite(url::Origin()); + NetworkAnonymizationKey diff_opaque_site_key(/*top_frame_site=*/opaque, + /*frame_site=*/opaque2, + /*is_cross_site=*/true); + NetworkAnonymizationKey equal_diff_opaque_site_key( + /*top_frame_site=*/opaque, + /*frame_site=*/opaque2); + EXPECT_EQ(diff_opaque_site_key.GetIsCrossSite().value(), true); + EXPECT_EQ(equal_diff_opaque_site_key.GetIsCrossSite().value(), true); + EXPECT_EQ(diff_opaque_site_key, equal_diff_opaque_site_key); - NetworkAnonymizationKey double_key_cross_site(/*top_frame_site=*/kTestSiteA, - /*frame_site=*/absl::nullopt, - true); - EXPECT_EQ(double_key_cross_site.GetIsCrossSite().value(), true); - } + NetworkAnonymizationKey double_key_cross_site(/*top_frame_site=*/kTestSiteA, + /*frame_site=*/absl::nullopt, + true); + EXPECT_EQ(double_key_cross_site.GetIsCrossSite().value(), true); } -TEST_P(NetworkAnonymizationKeyTest, Getters) { +TEST_F(NetworkAnonymizationKeyTest, Getters) { NetworkAnonymizationKey key(/*top_frame_site=*/kTestSiteA, /*frame_site=*/kTestSiteB, /*is_cross_site=*/true, kNonce); @@ -298,41 +210,25 @@ TEST_P(NetworkAnonymizationKeyTest, Getters) { EXPECT_EQ(key.GetTopFrameSite(), kTestSiteA); EXPECT_EQ(key.GetNonce(), kNonce); - // is_cross_site should only be true when - // `kEnableCrossSiteFlagNetworkAnonymizationKey` is enabled. - if (IsCrossSiteFlagEnabled()) { - EXPECT_TRUE(key.GetIsCrossSite()); - } + EXPECT_TRUE(key.GetIsCrossSite().value()); } -TEST_P(NetworkAnonymizationKeyTest, ToDebugString) { +TEST_F(NetworkAnonymizationKeyTest, ToDebugString) { NetworkAnonymizationKey key(/*top_frame_site=*/kTestSiteA, /*frame_site=*/kTestSiteB, /*is_cross_site=*/true, kNonce); NetworkAnonymizationKey empty_key; - if (!IsCrossSiteFlagEnabled()) { - // When double key scheme is enabled, the `is_cross_site` flag is always - // forced to false. - std::string double_key_expected_string_value = - kTestSiteA.GetDebugString() + " (with nonce " + kNonce.ToString() + ")"; - EXPECT_EQ(key.ToDebugString(), double_key_expected_string_value); - EXPECT_EQ(empty_key.ToDebugString(), "null"); - } else { - // When double key + cross site flag scheme is enabled frame site is null, - // but `is_cross_site` holds the value the key is created with. - std::string double_key_with_cross_site_flag_expected_string_value = - kTestSiteA.GetDebugString() + " cross_site (with nonce " + - kNonce.ToString() + ")"; - EXPECT_EQ(key.ToDebugString(), - double_key_with_cross_site_flag_expected_string_value); - // is_cross_site_ will be stored as nullopt when it's not populated even if - // IsCrossSiteFlagEnabled is enabled. - EXPECT_EQ(empty_key.ToDebugString(), "null with empty is_cross_site value"); - } + // `is_cross_site` holds the value the key is created with. + std::string double_key_with_cross_site_flag_expected_string_value = + kTestSiteA.GetDebugString() + " cross_site (with nonce " + + kNonce.ToString() + ")"; + EXPECT_EQ(key.ToDebugString(), + double_key_with_cross_site_flag_expected_string_value); + EXPECT_EQ(empty_key.ToDebugString(), "null"); } -TEST_P(NetworkAnonymizationKeyTest, Equality) { +TEST_F(NetworkAnonymizationKeyTest, Equality) { NetworkAnonymizationKey key(/*top_frame_site=*/kTestSiteA, /*frame_site=*/kTestSiteB, /*is_cross_site=*/false, kNonce); @@ -347,17 +243,10 @@ TEST_P(NetworkAnonymizationKeyTest, Equality) { /*frame_site=*/kTestSiteB, /*is_cross_site=*/true, kNonce); - // The `is_cross_site` flag only changes the NAK when - // `kEnableCrossSiteFlagNetworkAnonymizationKey` is enabled. - if (IsCrossSiteFlagEnabled()) { - EXPECT_FALSE(key == key_cross_site); - EXPECT_TRUE(key != key_cross_site); - EXPECT_TRUE(key < key_cross_site); - } else { - EXPECT_TRUE(key == key_cross_site); - EXPECT_FALSE(key != key_cross_site); - EXPECT_FALSE(key < key_cross_site); - } + // The `is_cross_site` flag changes the NAK. + EXPECT_FALSE(key == key_cross_site); + EXPECT_TRUE(key != key_cross_site); + EXPECT_TRUE(key < key_cross_site); NetworkAnonymizationKey key_no_nonce(/*top_frame_site=*/kTestSiteA, /*frame_site=*/kTestSiteB, @@ -401,7 +290,7 @@ TEST_P(NetworkAnonymizationKeyTest, Equality) { EXPECT_TRUE(empty_key < key); } -TEST_P(NetworkAnonymizationKeyTest, ValueRoundTripCrossSite) { +TEST_F(NetworkAnonymizationKeyTest, ValueRoundTripCrossSite) { const SchemefulSite kOpaqueSite = SchemefulSite(GURL("data:text/html,junk")); NetworkAnonymizationKey original_key(/*top_frame_site=*/kTestSiteA, /*frame_site=*/kTestSiteB, @@ -415,7 +304,7 @@ TEST_P(NetworkAnonymizationKeyTest, ValueRoundTripCrossSite) { EXPECT_EQ(original_key, from_value_key); } -TEST_P(NetworkAnonymizationKeyTest, ValueRoundTripSameSite) { +TEST_F(NetworkAnonymizationKeyTest, ValueRoundTripSameSite) { const SchemefulSite kOpaqueSite = SchemefulSite(GURL("data:text/html,junk")); NetworkAnonymizationKey original_key(/*top_frame_site=*/kTestSiteA, /*frame_site=*/kTestSiteA, @@ -429,7 +318,7 @@ TEST_P(NetworkAnonymizationKeyTest, ValueRoundTripSameSite) { EXPECT_EQ(original_key, from_value_key); } -TEST_P(NetworkAnonymizationKeyTest, TransientValueRoundTrip) { +TEST_F(NetworkAnonymizationKeyTest, TransientValueRoundTrip) { const SchemefulSite kOpaqueSite = SchemefulSite(GURL("data:text/html,junk")); NetworkAnonymizationKey original_key = NetworkAnonymizationKey::CreateTransient(); @@ -437,7 +326,7 @@ TEST_P(NetworkAnonymizationKeyTest, TransientValueRoundTrip) { ASSERT_FALSE(original_key.ToValue(&value)); } -TEST_P(NetworkAnonymizationKeyTest, EmptyValueRoundTrip) { +TEST_F(NetworkAnonymizationKeyTest, EmptyValueRoundTrip) { const SchemefulSite kOpaqueSite = SchemefulSite(GURL("data:text/html,junk")); NetworkAnonymizationKey original_key; base::Value value; @@ -457,20 +346,27 @@ TEST(NetworkAnonymizationKeyFeatureShiftTest, const SchemefulSite kTestSiteB = SchemefulSite(GURL("http://b.test/")); NetworkAnonymizationKey expected_failure_nak = NetworkAnonymizationKey(); - // Turn double keying on (or disable 2.5-keying) - scoped_feature_list_.Reset(); - scoped_feature_list_.InitAndDisableFeature( - net::features::kEnableCrossSiteFlagNetworkAnonymizationKey); + // Create a cross site double key + cross site flag NetworkAnonymizationKey. + NetworkAnonymizationKey original_cross_site_double_key( + /*top_frame_site=*/kTestSiteA, + /*frame_site=*/kTestSiteB, false); + base::Value cross_site_double_key_value; + ASSERT_TRUE( + original_cross_site_double_key.ToValue(&cross_site_double_key_value)); - // Create a double keyed NetworkAnonymizationKey. - NetworkAnonymizationKey original_double_key(/*top_frame_site=*/kTestSiteA); - // Serialize key to value while double keying is enabled. - base::Value double_key_value; - ASSERT_TRUE(original_double_key.ToValue(&double_key_value)); + // Check that deserializing a double keyed NetworkAnonymizationKey (a + // one-element list) fails, using the serialized site from + // `cross_site_double_key_value` to build it. + base::Value serialized_site = + cross_site_double_key_value.GetList()[0].Clone(); + base::Value::List double_key_list; + double_key_list.Append(serialized_site.Clone()); + base::Value double_key_value = base::Value(std::move(double_key_list)); + EXPECT_FALSE(NetworkAnonymizationKey::FromValue(double_key_value, + &expected_failure_nak)); - // Check that deserializing a triple keyed value fails. Such values - // cannot be constructed, but may still exist on-disk. - base::Value serialized_site = double_key_value.GetList()[0].Clone(); + // Check that deserializing a triple keyed value (a 2-element list containing + // two sites) fails. base::Value::List triple_key_list; triple_key_list.Append(serialized_site.Clone()); triple_key_list.Append(std::move(serialized_site)); @@ -478,49 +374,12 @@ TEST(NetworkAnonymizationKeyFeatureShiftTest, EXPECT_FALSE(NetworkAnonymizationKey::FromValue(triple_key_value, &expected_failure_nak)); - // Convert it back to a double keyed NetworkAnonymizationKey. - NetworkAnonymizationKey from_value_double_key = NetworkAnonymizationKey(); - EXPECT_TRUE(NetworkAnonymizationKey::FromValue(double_key_value, - &from_value_double_key)); - EXPECT_EQ(original_double_key, from_value_double_key); - - // Turn double keying + cross site flag on. - scoped_feature_list_.Reset(); - scoped_feature_list_.InitAndEnableFeature( - net::features::kEnableCrossSiteFlagNetworkAnonymizationKey); - - // Check that deserializing the triple keyed value fails. - EXPECT_FALSE(NetworkAnonymizationKey::FromValue(triple_key_value, - &expected_failure_nak)); - - // Check that deserializing the double keyed value fails. - EXPECT_FALSE(NetworkAnonymizationKey::FromValue(double_key_value, - &expected_failure_nak)); - - // Create a cross site double key + cross site flag NetworkAnonymizationKey. - NetworkAnonymizationKey original_cross_site_double_key( - /*top_frame_site=*/kTestSiteA, - /*frame_site=*/kTestSiteB, false); - // Serialize key to value while double key + cross site flag is enabled. - base::Value cross_site_double_key_value; - ASSERT_TRUE( - original_cross_site_double_key.ToValue(&cross_site_double_key_value)); - - // Convert it back to a double keyed NetworkAnonymizationKey. + // Convert the successful value back to a NAK and verify. NetworkAnonymizationKey from_value_cross_site_double_key = NetworkAnonymizationKey(); EXPECT_TRUE(NetworkAnonymizationKey::FromValue( cross_site_double_key_value, &from_value_cross_site_double_key)); EXPECT_EQ(original_cross_site_double_key, from_value_cross_site_double_key); - - // Turn double keying on (or disable 2.5-keying) - scoped_feature_list_.Reset(); - scoped_feature_list_.InitAndDisableFeature( - net::features::kEnableCrossSiteFlagNetworkAnonymizationKey); - - // Check that deserializing the cross site double keyed value fails. - EXPECT_FALSE(NetworkAnonymizationKey::FromValue(cross_site_double_key_value, - &expected_failure_nak)); } } // namespace net diff --git a/net/http/http_request_info_unittest.cc b/net/http/http_request_info_unittest.cc index a1443646db431..fb2ec085aba28 100644 --- a/net/http/http_request_info_unittest.cc +++ b/net/http/http_request_info_unittest.cc @@ -3,7 +3,6 @@ // found in the LICENSE file. #include "net/http/http_request_info.h" -#include "base/test/scoped_feature_list.h" #include "net/base/features.h" #include "net/base/network_anonymization_key.h" #include "net/base/network_isolation_key.h" @@ -12,30 +11,20 @@ namespace net { TEST(HTTPRequestInfoTest, IsConsistent) { - // TODO(brgoldstein): refactor this test with new testing config enum when - // you update NetworkAnonymizationKey tests and IsolationInfo tests. - const SchemefulSite kTestSiteA = SchemefulSite(GURL("http://a.test/")); const SchemefulSite kTestSiteB = SchemefulSite(GURL("http://b.test/")); - net::HttpRequestInfo triple_nik_double_nak_request_info; - triple_nik_double_nak_request_info.network_isolation_key = + net::HttpRequestInfo with_anon_nak; + with_anon_nak.network_isolation_key = NetworkIsolationKey(kTestSiteA, kTestSiteB); + EXPECT_FALSE(with_anon_nak.IsConsistent()); - // Triple key NIK and double key NAK. - base::test::ScopedFeatureList scoped_feature_list_; - scoped_feature_list_.Reset(); - scoped_feature_list_.InitAndDisableFeature( - net::features::kEnableCrossSiteFlagNetworkAnonymizationKey); - - EXPECT_FALSE(triple_nik_double_nak_request_info.IsConsistent()); - - net::HttpRequestInfo triple_nik_double_xsite_bit_nak_request_info; - triple_nik_double_xsite_bit_nak_request_info.network_isolation_key = + net::HttpRequestInfo cross_site; + cross_site.network_isolation_key = NetworkIsolationKey(kTestSiteA, kTestSiteB); - triple_nik_double_xsite_bit_nak_request_info.network_anonymization_key = + cross_site.network_anonymization_key = NetworkAnonymizationKey(kTestSiteA, kTestSiteB, true); - EXPECT_TRUE(triple_nik_double_xsite_bit_nak_request_info.IsConsistent()); + EXPECT_TRUE(cross_site.IsConsistent()); } } // namespace net diff --git a/net/network_error_logging/network_error_logging_service_unittest.cc b/net/network_error_logging/network_error_logging_service_unittest.cc index 997d26cc4bcf2..42a8e5b03542e 100644 --- a/net/network_error_logging/network_error_logging_service_unittest.cc +++ b/net/network_error_logging/network_error_logging_service_unittest.cc @@ -1151,7 +1151,7 @@ TEST_P(NetworkErrorLoggingServiceTest, StatusAsValue) { { "originPolicies": [ { - "NetworkAnonymizationKey": "https://example.com", + "NetworkAnonymizationKey": "https://example.com same_site", "origin": "https://example.com", "includeSubdomains": false, "expires": "86400000", @@ -1160,7 +1160,7 @@ TEST_P(NetworkErrorLoggingServiceTest, StatusAsValue) { "failureFraction": 1.0, }, { - "NetworkAnonymizationKey": "https://example.com", + "NetworkAnonymizationKey": "https://example.com same_site", "origin": "https://invalid-types.example.com", "includeSubdomains": false, "expires": "86400000", @@ -1169,7 +1169,7 @@ TEST_P(NetworkErrorLoggingServiceTest, StatusAsValue) { "failureFraction": 1.0, }, { - "NetworkAnonymizationKey": "https://example.com", + "NetworkAnonymizationKey": "https://example.com same_site", "origin": "https://somewhere-else.com", "includeSubdomains": false, "expires": "86400000", @@ -1178,7 +1178,7 @@ TEST_P(NetworkErrorLoggingServiceTest, StatusAsValue) { "failureFraction": 1.0, }, { - "NetworkAnonymizationKey": "https://somewhere-else.com", + "NetworkAnonymizationKey": "https://somewhere-else.com same_site", "origin": "https://subdomain.example.com", "includeSubdomains": true, "expires": "86400000", diff --git a/net/socket/client_socket_pool_unittest.cc b/net/socket/client_socket_pool_unittest.cc index 587f22e877f7b..038d9cdb72a26 100644 --- a/net/socket/client_socket_pool_unittest.cc +++ b/net/socket/client_socket_pool_unittest.cc @@ -148,7 +148,7 @@ TEST(ClientSocketPool, GroupIdToString) { SecureDnsPolicy::kAllow) .ToString()); - EXPECT_EQ("https://foo <https://foo.test>", + EXPECT_EQ("https://foo <https://foo.test cross_site>", ClientSocketPool::GroupId( url::SchemeHostPort(url::kHttpsScheme, "foo", 443), PrivacyMode::PRIVACY_MODE_DISABLED, diff --git a/net/url_request/url_request.cc b/net/url_request/url_request.cc index 0ad3f4fc0dbd7..e2fcddd37c941 100644 --- a/net/url_request/url_request.cc +++ b/net/url_request/url_request.cc @@ -1188,8 +1188,7 @@ IsolationInfo URLRequest::CreateIsolationInfoFromNetworkAnonymizationKey( network_anonymization_key.GetTopFrameSite()->site_as_origin_; absl::optional<url::Origin> frame_origin; - if (NetworkAnonymizationKey::IsCrossSiteFlagSchemeEnabled() && - network_anonymization_key.GetIsCrossSite().value()) { + if (network_anonymization_key.GetIsCrossSite().value()) { // If we know that the origin is cross site to the top level site, create an // empty origin to use as the frame origin for the isolation info. This // should be cross site with the top level origin. diff --git a/net/url_request/url_request_unittest.cc b/net/url_request/url_request_unittest.cc index d8a684f69b211..98d9f9fcd861b 100644 --- a/net/url_request/url_request_unittest.cc +++ b/net/url_request/url_request_unittest.cc @@ -12883,12 +12883,7 @@ TEST_F(URLRequestTest, SetURLChain) { } } -TEST_F(URLRequestTest, - SetIsolationInfoFromNakTripleNikDoublePlusCrossSiteBitNak) { - base::test::ScopedFeatureList scoped_feature_list_; - scoped_feature_list_.InitAndEnableFeature( - net::features::kEnableCrossSiteFlagNetworkAnonymizationKey); - +TEST_F(URLRequestTest, SetIsolationInfoFromNak) { TestDelegate d; SchemefulSite site_a = SchemefulSite(GURL("https://a.com/")); SchemefulSite site_b = SchemefulSite(GURL("https://b.com/")); @@ -12946,119 +12941,6 @@ TEST_F(URLRequestTest, d.RunUntilComplete(); } -TEST_F(URLRequestTest, SetIsolationInfoFromNakTripleNikDoubleNak) { - base::test::ScopedFeatureList scoped_feature_list_; - scoped_feature_list_.InitAndDisableFeature( - net::features::kEnableCrossSiteFlagNetworkAnonymizationKey); - - TestDelegate d; - SchemefulSite site_a = SchemefulSite(GURL("https://a.com/")); - SchemefulSite site_b = SchemefulSite(GURL("https://b.com/")); - base::UnguessableToken nak_nonce = base::UnguessableToken::Create(); - NetworkAnonymizationKey populated_cross_site_nak(site_a, site_b, true, - nak_nonce); - NetworkAnonymizationKey populated_same_site_nak(site_a, site_a, false, - nak_nonce); - IsolationInfo expected_isolation_info_populated_same_site_nak = - IsolationInfo::Create(IsolationInfo::RequestType::kOther, - url::Origin::Create(GURL("https://a.com/")), - url::Origin::Create(GURL("https://a.com/")), - SiteForCookies(), - /*party_context=*/absl::nullopt, &nak_nonce); - NetworkAnonymizationKey empty_nak; - - GURL original_url("http://localhost"); - std::unique_ptr<URLRequest> r(default_context().CreateRequest( - original_url, DEFAULT_PRIORITY, &d, TRAFFIC_ANNOTATION_FOR_TESTS)); - - r->set_isolation_info_from_network_anonymization_key( - populated_cross_site_nak); - r->SetLoadFlags(LOAD_DISABLE_CACHE); - r->set_allow_credentials(false); - EXPECT_TRUE(r->is_created_from_network_anonymization_key()); - EXPECT_EQ(r->isolation_info().network_anonymization_key(), - populated_cross_site_nak); - EXPECT_EQ(r->isolation_info().top_frame_origin(), - url::Origin::Create(GURL("https://a.com/"))); - // When double key is enabled for NAK but not for NIK, the frame site of the - // IsolationInfo will be set to the top level site. - EXPECT_EQ(r->isolation_info().frame_origin(), - url::Origin::Create(GURL("https://a.com/"))); - - r->set_isolation_info_from_network_anonymization_key(populated_same_site_nak); - EXPECT_TRUE(r->is_created_from_network_anonymization_key()); - EXPECT_TRUE(r->load_flags() & LOAD_DISABLE_CACHE); - EXPECT_EQ(r->isolation_info().network_anonymization_key(), - populated_same_site_nak); - EXPECT_TRUE(r->isolation_info().IsEqualForTesting( - expected_isolation_info_populated_same_site_nak)); - - r->set_isolation_info_from_network_anonymization_key(empty_nak); - EXPECT_TRUE(r->is_created_from_network_anonymization_key()); - EXPECT_TRUE(r->load_flags() & LOAD_DISABLE_CACHE); - EXPECT_EQ(r->isolation_info().network_anonymization_key(), empty_nak); - EXPECT_FALSE(r->isolation_info().top_frame_origin()); - EXPECT_FALSE(r->isolation_info().frame_origin()); - r->Start(); - d.RunUntilComplete(); -} - -TEST_F(URLRequestTest, - SetIsolationInfoFromNakTripleNikDoubleWithCrossSiteFlagNak) { - base::test::ScopedFeatureList scoped_feature_list_; - scoped_feature_list_.InitAndEnableFeature( - net::features::kEnableCrossSiteFlagNetworkAnonymizationKey); - - TestDelegate d; - SchemefulSite site_a = SchemefulSite(GURL("https://a.com/")); - SchemefulSite site_b = SchemefulSite(GURL("https://b.com/")); - base::UnguessableToken nak_nonce = base::UnguessableToken::Create(); - NetworkAnonymizationKey populated_cross_site_nak( - site_a, site_b, /*is_cross_site=*/true, nak_nonce); - NetworkAnonymizationKey populated_same_site_nak( - site_a, site_a, /*is_cross_site=*/false, nak_nonce); - - NetworkAnonymizationKey empty_nak; - GURL original_url("http://localhost"); - std::unique_ptr<URLRequest> r(default_context().CreateRequest( - original_url, DEFAULT_PRIORITY, &d, TRAFFIC_ANNOTATION_FOR_TESTS)); - - r->set_isolation_info_from_network_anonymization_key( - populated_cross_site_nak); - r->SetLoadFlags(LOAD_DISABLE_CACHE); - r->set_allow_credentials(false); - EXPECT_TRUE(r->is_created_from_network_anonymization_key()); - EXPECT_TRUE(r->load_flags() & LOAD_DISABLE_CACHE); - EXPECT_EQ(r->isolation_info().network_anonymization_key().ToDebugString(), - populated_cross_site_nak.ToDebugString()); - EXPECT_EQ(r->isolation_info().top_frame_origin(), - url::Origin::Create(GURL("https://a.com/"))); - // When double key is enabled for NAK but not for NIK, the frame site of the - // IsolationInfo will be set to the top level site. - EXPECT_TRUE(r->isolation_info().frame_origin()); - - r->set_isolation_info_from_network_anonymization_key(populated_same_site_nak); - EXPECT_TRUE(r->is_created_from_network_anonymization_key()); - EXPECT_TRUE(r->load_flags() & LOAD_DISABLE_CACHE); - EXPECT_EQ(r->isolation_info().network_anonymization_key().ToDebugString(), - populated_same_site_nak.ToDebugString()); - EXPECT_EQ(r->isolation_info().top_frame_origin(), - url::Origin::Create(GURL("https://a.com/"))); - // Cross site double keyed NAKs should set a cross site dummy origin on the - // IsolationInfo. - EXPECT_TRUE(r->isolation_info().frame_origin()); - - r->set_isolation_info_from_network_anonymization_key(empty_nak); - EXPECT_TRUE(r->is_created_from_network_anonymization_key()); - EXPECT_TRUE(r->load_flags() & LOAD_DISABLE_CACHE); - EXPECT_EQ(r->isolation_info().network_anonymization_key(), empty_nak); - EXPECT_FALSE(r->isolation_info().top_frame_origin()); - EXPECT_FALSE(r->isolation_info().frame_origin()); - - r->Start(); - d.RunUntilComplete(); -} - TEST_F(URLRequestTest, CookiePartitionKey) { const url::Origin kOrigin = url::Origin::Create(GURL("http://foo.test/")); @@ -13172,53 +13054,14 @@ INSTANTIATE_TEST_SUITE_P(, URLRequestMaybeAsyncFirstPartySetsTest, testing::Bool()); -namespace { - -// `EnabledFeatureFlagsTestingParam ` allows enabling and disabling -// the feature flags that control the key schemes for NetworkAnonymizationKey. -// This allows us to test the possible combinations of flags that will be -// allowed for experimentation. -// -// Presently, only one flag is used, but future experiments will add more. -struct EnabledFeatureFlagsTestingParam { - // True = 2.5-keyed NAK, false = double-keyed NAK. - const bool enable_cross_site_flag_network_anonymization_key; -}; - -const EnabledFeatureFlagsTestingParam kFlagsParam[] = { - // 0. Double-keying is enabled for NetworkAnonymizationKey. - {/*enable_cross_site_flag_network_anonymization_key=*/false}, - - // 1. Double-keying + cross-site-bit is enabled for NetworkAnonymizationKey. - {/*enable_cross_site_flag_network_anonymization_key=*/true}}; - -} // namespace - -class PartitionConnectionsByNetworkAnonymizationKey - : public URLRequestTest, - public testing::WithParamInterface<EnabledFeatureFlagsTestingParam> { +class PartitionConnectionsByNetworkAnonymizationKey : public URLRequestTest { public: PartitionConnectionsByNetworkAnonymizationKey() { - std::vector<base::test::FeatureRef> enabled_features = { - net::features::kPartitionConnectionsByNetworkIsolationKey, - net::features::kPartitionSSLSessionsByNetworkIsolationKey}; - std::vector<base::test::FeatureRef> disabled_features = {}; - - if (IsCrossSiteFlagEnabled()) { - enabled_features.push_back( - net::features::kEnableCrossSiteFlagNetworkAnonymizationKey); - } else { - disabled_features.push_back( - net::features::kEnableCrossSiteFlagNetworkAnonymizationKey); - } - - scoped_feature_list_.InitWithFeatures(enabled_features, disabled_features); + scoped_feature_list_.InitWithFeatures( + {net::features::kPartitionConnectionsByNetworkIsolationKey, + net::features::kPartitionSSLSessionsByNetworkIsolationKey}, + {}); } - - bool IsCrossSiteFlagEnabled() const { - return GetParam().enable_cross_site_flag_network_anonymization_key; - } - const SchemefulSite kTestSiteA = SchemefulSite(GURL("http://a.test/")); const SchemefulSite kTestSiteB = SchemefulSite(GURL("http://b.test/")); const SchemefulSite kTestSiteC = SchemefulSite(GURL("http://c.test/")); @@ -13229,7 +13072,7 @@ class PartitionConnectionsByNetworkAnonymizationKey base::test::ScopedFeatureList scoped_feature_list_; }; -TEST_P(PartitionConnectionsByNetworkAnonymizationKey, +TEST_F(PartitionConnectionsByNetworkAnonymizationKey, DifferentTopFrameSitesNeverShareConnections) { // Start server EmbeddedTestServer test_server(EmbeddedTestServer::TYPE_HTTPS); @@ -13289,7 +13132,7 @@ TEST_P(PartitionConnectionsByNetworkAnonymizationKey, } } -TEST_P(PartitionConnectionsByNetworkAnonymizationKey, +TEST_F(PartitionConnectionsByNetworkAnonymizationKey, FirstPartyIsSeparatedFromCrossSiteFrames) { // Start server EmbeddedTestServer test_server(EmbeddedTestServer::TYPE_HTTPS); @@ -13343,17 +13186,12 @@ TEST_P(PartitionConnectionsByNetworkAnonymizationKey, d.RunUntilComplete(); EXPECT_THAT(d.request_status(), IsOk()); - // We should only share a connection with r1 if double key - // NetworkAnonymizationKey scheme is enabled. - if (!IsCrossSiteFlagEnabled()) { - EXPECT_EQ(SSLInfo::HANDSHAKE_RESUME, r2->ssl_info().handshake_type); - } else { - EXPECT_EQ(SSLInfo::HANDSHAKE_FULL, r2->ssl_info().handshake_type); - } + // We should not share a connection with r1. + EXPECT_EQ(SSLInfo::HANDSHAKE_FULL, r2->ssl_info().handshake_type); } } -TEST_P( +TEST_F( PartitionConnectionsByNetworkAnonymizationKey, DifferentCrossSiteFramesAreSeparatedOnlyWhenNetworkAnonymizationKeyIsTripleKeyed) { // Start server @@ -13415,7 +13253,7 @@ TEST_P( } } -TEST_P(PartitionConnectionsByNetworkAnonymizationKey, +TEST_F(PartitionConnectionsByNetworkAnonymizationKey, DifferentNoncesAreAlwaysSeparated) { // Start server EmbeddedTestServer test_server(EmbeddedTestServer::TYPE_HTTPS); @@ -13479,8 +13317,4 @@ TEST_P(PartitionConnectionsByNetworkAnonymizationKey, } } -INSTANTIATE_TEST_SUITE_P(All, - PartitionConnectionsByNetworkAnonymizationKey, - testing::ValuesIn(kFlagsParam)); - } // namespace net diff --git a/services/network/public/cpp/network_anonymization_key_mojom_traits.cc b/services/network/public/cpp/network_anonymization_key_mojom_traits.cc index a204d505fbda3..b79517fcfcc12 100644 --- a/services/network/public/cpp/network_anonymization_key_mojom_traits.cc +++ b/services/network/public/cpp/network_anonymization_key_mojom_traits.cc @@ -23,8 +23,7 @@ bool StructTraits<network::mojom::NetworkAnonymizationKeyDataView, // Read is_cross_site boolean flag value. absl::optional<bool> is_cross_site = absl::nullopt; - if (net::NetworkAnonymizationKey::IsCrossSiteFlagSchemeEnabled() && - top_frame_site.has_value()) { + if (top_frame_site.has_value()) { is_cross_site = data.is_cross_site(); } diff --git a/services/network/public/cpp/network_anonymization_key_mojom_traits.h b/services/network/public/cpp/network_anonymization_key_mojom_traits.h index e1bbea49c2d83..6536a5a371cb2 100644 --- a/services/network/public/cpp/network_anonymization_key_mojom_traits.h +++ b/services/network/public/cpp/network_anonymization_key_mojom_traits.h @@ -29,9 +29,6 @@ struct COMPONENT_EXPORT(NETWORK_CPP_BASE) } static bool is_cross_site(const net::NetworkAnonymizationKey& input) { - if (!net::NetworkAnonymizationKey::IsCrossSiteFlagSchemeEnabled()) { - return false; - } return input.GetIsCrossSite().value_or(false); } diff --git a/services/network/public/cpp/network_anonymization_key_mojom_traits_unittest.cc b/services/network/public/cpp/network_anonymization_key_mojom_traits_unittest.cc index fc105de96d537..ff645cc848246 100644 --- a/services/network/public/cpp/network_anonymization_key_mojom_traits_unittest.cc +++ b/services/network/public/cpp/network_anonymization_key_mojom_traits_unittest.cc @@ -15,38 +15,10 @@ #include "url/origin.h" namespace mojo { -TEST(NetworkAnonymizationKeyMojomTraitsTest, SerializeAndDeserializeDoubleKey) { - // Enable double keying. - base::test::ScopedFeatureList scoped_feature_list_; - scoped_feature_list_.InitAndDisableFeature( - net::features::kEnableCrossSiteFlagNetworkAnonymizationKey); - - base::UnguessableToken token = base::UnguessableToken::Create(); - std::vector<net::NetworkAnonymizationKey> keys = { - net::NetworkAnonymizationKey(), - net::NetworkAnonymizationKey::CreateTransient(), - net::NetworkAnonymizationKey(net::SchemefulSite(GURL("http://a.test/")), - net::SchemefulSite(GURL("http://b.test/")), - &token), - net::NetworkAnonymizationKey(net::SchemefulSite(GURL("http://a.test/")))}; - - for (auto& original : keys) { - SCOPED_TRACE(original.ToDebugString()); - net::NetworkAnonymizationKey copied; - EXPECT_TRUE(mojo::test::SerializeAndDeserialize< - network::mojom::NetworkAnonymizationKey>(original, copied)); - EXPECT_EQ(original, copied); - } -} // TODO(crbug.com/1371667): Test is failing. TEST(NetworkAnonymizationKeyMojomTraitsTest, DISABLED_SerializeAndDeserializeDoubleKeyWithCrossSiteFlag) { - // Enable double keying with cross site flag. - base::test::ScopedFeatureList scoped_feature_list_; - scoped_feature_list_.InitAndEnableFeature( - net::features::kEnableCrossSiteFlagNetworkAnonymizationKey); - base::UnguessableToken token = base::UnguessableToken::Create(); std::vector<net::NetworkAnonymizationKey> keys = { net::NetworkAnonymizationKey(), diff --git a/services/network/public/mojom/network_anonymization_key.mojom b/services/network/public/mojom/network_anonymization_key.mojom index 2fe4336bcdfea..e2cc1d9ec45ed 100644 --- a/services/network/public/mojom/network_anonymization_key.mojom +++ b/services/network/public/mojom/network_anonymization_key.mojom @@ -10,9 +10,6 @@ import "services/network/public/mojom/schemeful_site.mojom"; // Mapped to net::NetworkAnonymizationKey. struct NetworkAnonymizationKey { SchemefulSite? top_frame_site; - // This has no effect unless - //`NetworkAnonymizationKey::IsCrossSiteFlagSchemeEnabled()` - // is true. bool is_cross_site; mojo_base.mojom.UnguessableToken? nonce; diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json index 848a2b7b3084f..7ec7f8d23c967 100644 --- a/testing/variations/fieldtrial_testing_config.json +++ b/testing/variations/fieldtrial_testing_config.json @@ -8902,7 +8902,6 @@ { "name": "enabled_triple_nik_cross_site_flag_nak_rollout", "enable_features": [ - "EnableCrossSiteFlagNetworkAnonymizationKey", "PartitionConnectionsByNetworkIsolationKey", "PartitionDomainReliabilityByNetworkIsolationKey", "PartitionHttpServerPropertiesByNetworkIsolationKey",