From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Thu, 22 Jul 2021 23:10:52 +0200 Subject: Client hints overrides Disable critical client hints and network early hints Use Google Chrome branding for client hints License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- components/embedder_support/user_agent_utils.cc | 4 +--- content/browser/client_hints/client_hints.cc | 17 +++++++++++------ .../loader/navigation_url_loader_impl.cc | 5 +++++ .../features_cc/Client-hints-overrides.inc | 1 + .../cpp/features_cc/Client-hints-overrides.inc | 1 + net/http/http_network_transaction.cc | 1 + services/network/public/cpp/client_hints.cc | 1 + .../blink/common/client_hints/client_hints.cc | 1 + .../common/client_hints/enabled_client_hints.cc | 4 +++- .../blink/renderer/core/frame/navigator_ua.idl | 4 +++- .../renderer/core/frame/navigator_ua_data.idl | 5 ++++- .../renderer/core/loader/base_fetch_context.cc | 6 ++++-- .../platform/runtime_enabled_features.json5 | 4 ++++ 13 files changed, 40 insertions(+), 14 deletions(-) create mode 100644 cromite_flags/content/common/features_cc/Client-hints-overrides.inc create mode 100644 cromite_flags/services/network/public/cpp/features_cc/Client-hints-overrides.inc diff --git a/components/embedder_support/user_agent_utils.cc b/components/embedder_support/user_agent_utils.cc --- a/components/embedder_support/user_agent_utils.cc +++ b/components/embedder_support/user_agent_utils.cc @@ -187,9 +187,7 @@ const blink::UserAgentBrandList GetUserAgentBrandList( bool parse_result = base::StringToInt(major_version, &major_version_number); DCHECK(parse_result); std::optional brand; -#if !BUILDFLAG(CHROMIUM_BRANDING) - brand = version_info::GetProductName(); -#endif + brand = "Google Chrome"; std::optional maybe_brand_override = base::GetFieldTrialParamValueByFeature(features::kGreaseUACH, "brand_override"); diff --git a/content/browser/client_hints/client_hints.cc b/content/browser/client_hints/client_hints.cc --- a/content/browser/client_hints/client_hints.cc +++ b/content/browser/client_hints/client_hints.cc @@ -55,6 +55,7 @@ #include "third_party/blink/public/common/permissions_policy/origin_with_possible_wildcards.h" #include "third_party/blink/public/common/permissions_policy/permissions_policy.h" #include "third_party/blink/public/common/user_agent/user_agent_metadata.h" +#include "third_party/blink/renderer/platform/runtime_enabled_features.h" #include "ui/display/display.h" #include "ui/display/screen.h" #include "url/origin.h" @@ -516,7 +517,8 @@ void AddPrefersReducedTransparencyHeader(net::HttpRequestHeaders* headers, : network::kPrefersReducedTransparencyNoPreference); } -bool IsValidURLForClientHints(const url::Origin& origin) { +bool IsValidURLForClientHints(const url::Origin& origin) { // disabled in Bromite + if ((true)) return false; return network::IsOriginPotentiallyTrustworthy(origin); } @@ -718,7 +720,8 @@ void UpdateNavigationRequestClientUaHeadersImpl( // value, disable them. This overwrites previous decision from UI. disable_due_to_custom_ua = !ua_metadata.has_value(); } - + if (!blink::RuntimeEnabledFeatures::UserAgentClientHintEnabled()) + disable_due_to_custom_ua = true; if (!disable_due_to_custom_ua) { if (!ua_metadata.has_value()) ua_metadata = delegate->GetUserAgentMetadata(); @@ -900,10 +903,12 @@ void AddRequestClientHintsHeaders( AddEctHeader(headers, network_quality_tracker, url); } - UpdateNavigationRequestClientUaHeadersImpl( - delegate, is_ua_override_on, frame_tree_node, - ClientUaHeaderCallType::kDuringCreation, headers, container_policy, - request_url, data); + if (blink::RuntimeEnabledFeatures::UserAgentClientHintEnabled()) { + UpdateNavigationRequestClientUaHeadersImpl( + delegate, is_ua_override_on, frame_tree_node, + ClientUaHeaderCallType::kDuringCreation, headers, container_policy, + request_url, data); + } if (ShouldAddClientHint(data, WebClientHintsType::kPrefersColorScheme)) { AddPrefersColorSchemeHeader(headers, frame_tree_node); diff --git a/content/browser/loader/navigation_url_loader_impl.cc b/content/browser/loader/navigation_url_loader_impl.cc --- a/content/browser/loader/navigation_url_loader_impl.cc +++ b/content/browser/loader/navigation_url_loader_impl.cc @@ -1091,6 +1091,11 @@ void NavigationURLLoaderImpl::OnAcceptCHFrameReceived( return; } + if (!base::FeatureList::IsEnabled(network::features::kAcceptCHFrame)) { + std::move(callback).Run(net::OK); + return; + } + LogAcceptCHFrameStatus(AcceptCHFrameRestart::kFramePresent); // Given that this is happening in the middle of navigation, there should diff --git a/cromite_flags/content/common/features_cc/Client-hints-overrides.inc b/cromite_flags/content/common/features_cc/Client-hints-overrides.inc new file mode 100644 --- /dev/null +++ b/cromite_flags/content/common/features_cc/Client-hints-overrides.inc @@ -0,0 +1 @@ +SET_CROMITE_FEATURE_DISABLED(kCriticalClientHint); diff --git a/cromite_flags/services/network/public/cpp/features_cc/Client-hints-overrides.inc b/cromite_flags/services/network/public/cpp/features_cc/Client-hints-overrides.inc new file mode 100644 --- /dev/null +++ b/cromite_flags/services/network/public/cpp/features_cc/Client-hints-overrides.inc @@ -0,0 +1 @@ +SET_CROMITE_FEATURE_DISABLED(kAcceptCHFrame); diff --git a/net/http/http_network_transaction.cc b/net/http/http_network_transaction.cc --- a/net/http/http_network_transaction.cc +++ b/net/http/http_network_transaction.cc @@ -101,6 +101,7 @@ const size_t kMaxRestarts = 32; // Returns true when Early Hints are allowed on the given protocol. bool EarlyHintsAreAllowedOn(HttpConnectionInfo connection_info) { + if ((true)) return false; switch (connection_info) { case HttpConnectionInfo::kHTTP0_9: case HttpConnectionInfo::kHTTP1_0: diff --git a/services/network/public/cpp/client_hints.cc b/services/network/public/cpp/client_hints.cc --- a/services/network/public/cpp/client_hints.cc +++ b/services/network/public/cpp/client_hints.cc @@ -120,6 +120,7 @@ const DecodeMap& GetDecodeMap() { std::optional> ParseClientHintsHeader(const std::string& header) { + if ((true)) return absl::nullopt; // Accept-CH is an sh-list of tokens; see: // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-header-structure-19#section-3.1 std::optional maybe_list = diff --git a/third_party/blink/common/client_hints/client_hints.cc b/third_party/blink/common/client_hints/client_hints.cc --- a/third_party/blink/common/client_hints/client_hints.cc +++ b/third_party/blink/common/client_hints/client_hints.cc @@ -105,6 +105,7 @@ const PolicyFeatureToClientHintMap& GetPolicyFeatureToClientHintMap() { } bool IsClientHintSentByDefault(network::mojom::WebClientHintsType type) { + if ((true)) return false; switch (type) { case network::mojom::WebClientHintsType::kSaveData: case network::mojom::WebClientHintsType::kUA: diff --git a/third_party/blink/common/client_hints/enabled_client_hints.cc b/third_party/blink/common/client_hints/enabled_client_hints.cc --- a/third_party/blink/common/client_hints/enabled_client_hints.cc +++ b/third_party/blink/common/client_hints/enabled_client_hints.cc @@ -15,6 +15,7 @@ namespace { using ::network::mojom::WebClientHintsType; bool IsDisabledByFeature(const WebClientHintsType type) { + if ((true)) return true; switch (type) { case WebClientHintsType::kUA: case WebClientHintsType::kUAArch: @@ -96,7 +97,7 @@ bool IsDisabledByFeature(const WebClientHintsType type) { } // namespace bool EnabledClientHints::IsEnabled(const WebClientHintsType type) const { - return enabled_types_[static_cast(type)]; + return false; } void EnabledClientHints::SetIsEnabled(const WebClientHintsType type, @@ -107,6 +108,7 @@ void EnabledClientHints::SetIsEnabled(const WebClientHintsType type, std::vector EnabledClientHints::GetEnabledHints() const { std::vector hints; + if ((true)) return hints; for (const auto& elem : network::GetClientHintToNameMap()) { const auto& type = elem.first; if (IsEnabled(type)) diff --git a/third_party/blink/renderer/core/frame/navigator_ua.idl b/third_party/blink/renderer/core/frame/navigator_ua.idl --- a/third_party/blink/renderer/core/frame/navigator_ua.idl +++ b/third_party/blink/renderer/core/frame/navigator_ua.idl @@ -4,6 +4,8 @@ // https://github.com/WICG/ua-client-hints -interface mixin NavigatorUA { +[ + RuntimeEnabled=UserAgentClientHint +] interface mixin NavigatorUA { [SecureContext] readonly attribute NavigatorUAData userAgentData; }; diff --git a/third_party/blink/renderer/core/frame/navigator_ua_data.idl b/third_party/blink/renderer/core/frame/navigator_ua_data.idl --- a/third_party/blink/renderer/core/frame/navigator_ua_data.idl +++ b/third_party/blink/renderer/core/frame/navigator_ua_data.idl @@ -4,7 +4,10 @@ // https://github.com/WICG/ua-client-hints -[Exposed=(Window,Worker)] interface NavigatorUAData { +[ + RuntimeEnabled=UserAgentClientHint, + Exposed=(Window,Worker) +] interface NavigatorUAData { [HighEntropy, MeasureAs=NavigatorUAData_Brands] readonly attribute FrozenArray brands; [HighEntropy=Direct, MeasureAs=NavigatorUAData_Mobile] readonly attribute boolean mobile; [HighEntropy=Direct, MeasureAs=NavigatorUAData_Platform] readonly attribute DOMString platform; diff --git a/third_party/blink/renderer/core/loader/base_fetch_context.cc b/third_party/blink/renderer/core/loader/base_fetch_context.cc --- a/third_party/blink/renderer/core/loader/base_fetch_context.cc +++ b/third_party/blink/renderer/core/loader/base_fetch_context.cc @@ -167,7 +167,7 @@ void BaseFetchContext::AddClientHintsIfNecessary( // specifying accomponying client hints, in which case we disable sending // them. using network::mojom::blink::WebClientHintsType; - if (ua) { + if (RuntimeEnabledFeatures::UserAgentClientHintEnabled() && ua) { // ShouldSendClientHint is called to make sure UA is controlled by // Permissions Policy. if (ShouldSendClientHint(policy, resource_origin, is_1p_origin, @@ -329,7 +329,7 @@ void BaseFetchContext::AddClientHintsIfNecessary( } // Only send User Agent hints if the info is available - if (ua) { + if (RuntimeEnabledFeatures::UserAgentClientHintEnabled() && ua) { if (ShouldSendClientHint(policy, resource_origin, is_1p_origin, WebClientHintsType::kUAArch, hints_preferences)) { SetHttpHeader(WebClientHintsType::kUAArch, @@ -652,6 +652,8 @@ bool BaseFetchContext::ShouldSendClientHint( bool is_1p_origin, network::mojom::blink::WebClientHintsType type, const ClientHintsPreferences& hints_preferences) const { + if (!RuntimeEnabledFeatures::UserAgentClientHintEnabled()) + return false; // For subresource requests, sending the hint in the fetch request based on // the permissions policy. if ((!policy || diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5 --- a/third_party/blink/renderer/platform/runtime_enabled_features.json5 +++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5 @@ -499,6 +499,10 @@ name: "ByobFetch", status: "stable", }, + { + name: "UserAgentClientHint", // always disabled + status: "experimental", // in bromite + }, { name: "CacheStorageCodeCacheHint", origin_trial_feature_name: "CacheStorageCodeCacheHint", --