250 lines
12 KiB
Diff
250 lines
12 KiB
Diff
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<std::string> brand;
|
|
-#if !BUILDFLAG(CHROMIUM_BRANDING)
|
|
- brand = version_info::GetProductName();
|
|
-#endif
|
|
+ brand = "Google Chrome";
|
|
std::optional<std::string> 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<std::vector<network::mojom::WebClientHintsType>>
|
|
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<net::structured_headers::List> 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<int>(type)];
|
|
+ return false;
|
|
}
|
|
|
|
void EnabledClientHints::SetIsEnabled(const WebClientHintsType type,
|
|
@@ -107,6 +108,7 @@ void EnabledClientHints::SetIsEnabled(const WebClientHintsType type,
|
|
|
|
std::vector<WebClientHintsType> EnabledClientHints::GetEnabledHints() const {
|
|
std::vector<WebClientHintsType> 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<NavigatorUABrandVersion> 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",
|
|
--
|