Commit 088b8d24 authored by Tsuyoshi Horo's avatar Tsuyoshi Horo Committed by Commit Bot

Don't use PrefetchedSignedExchangeCache if related features are not enabled.

crrev.com/c/1681309 accidentally enabled
SignedExchangePrefetchCacheForNavigations feature. Prefetched SXGs are stored to
PrefetchedSignedExchangeCache even if both
SignedExchangePrefetchCacheForNavigations and SignedExchangeSubresourcePrefetch
are disabled. This is unintentional. Prefetched SXGs should no be stored to the
cache. This CL fix this.

SignedExchangePrefetchCacheForNavigations feature can be enabled only by flags.
But SignedExchangeSubresourcePrefetch feature can be enabled by both flags and
OriginTrial token which is checked in the renderer process.
So we need |is_signed_exchange_prefetch_cache_enabled| flag in ResourceRequest
to let the PrefetchURLLoader in the browser process whether the prefetched SXG
should be stored to PrefetchedSignedExchangeCache.

This CL adds the flag in blink::FetchParameters, blink::ResourceRequest,
bink::WebURLRequest, network::ResourceRequest and network::mojom::URLRequest,
and sets the flag in PreloadHelper::PrefetchIfNeeded() if
SignedExchangePrefetchCacheForNavigations feature or
SignedExchangeSubresourcePrefetch feature is enabled.

Change-Id: I719dbbd1093e05c30b6b0075ad87f56289f00ac7
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1703687Reviewed-by: default avatarKinuko Yasuda <kinuko@chromium.org>
Reviewed-by: default avatarKunihiko Sakamoto <ksakamoto@chromium.org>
Commit-Queue: Tsuyoshi Horo <horo@chromium.org>
Cr-Commit-Position: refs/heads/master@{#678545}
parent b836034a
...@@ -63,8 +63,8 @@ PrefetchURLLoader::PrefetchURLLoader( ...@@ -63,8 +63,8 @@ PrefetchURLLoader::PrefetchURLLoader(
// (https://wicg.github.io/webpackage/draft-yasskin-http-origin-signed-responses.html#internet-media-type-applicationsigned-exchange). // (https://wicg.github.io/webpackage/draft-yasskin-http-origin-signed-responses.html#internet-media-type-applicationsigned-exchange).
resource_request_.headers.SetHeader( resource_request_.headers.SetHeader(
network::kAcceptHeader, kSignedExchangeEnabledAcceptHeaderForPrefetch); network::kAcceptHeader, kSignedExchangeEnabledAcceptHeaderForPrefetch);
if (prefetched_signed_exchange_cache &&
if (prefetched_signed_exchange_cache) { resource_request.is_signed_exchange_prefetch_cache_enabled) {
prefetched_signed_exchange_cache_adapter_ = prefetched_signed_exchange_cache_adapter_ =
std::make_unique<PrefetchedSignedExchangeCacheAdapter>( std::make_unique<PrefetchedSignedExchangeCacheAdapter>(
std::move(prefetched_signed_exchange_cache), std::move(prefetched_signed_exchange_cache),
......
...@@ -498,6 +498,9 @@ void SetIndividualRuntimeFeatures( ...@@ -498,6 +498,9 @@ void SetIndividualRuntimeFeatures(
if (base::FeatureList::IsEnabled(features::kUserAgentClientHint)) if (base::FeatureList::IsEnabled(features::kUserAgentClientHint))
WebRuntimeFeatures::EnableFeatureFromString("UserAgentClientHint", true); WebRuntimeFeatures::EnableFeatureFromString("UserAgentClientHint", true);
WebRuntimeFeatures::EnableSignedExchangePrefetchCacheForNavigations(
base::FeatureList::IsEnabled(
features::kSignedExchangePrefetchCacheForNavigations));
WebRuntimeFeatures::EnableSignedExchangeSubresourcePrefetch( WebRuntimeFeatures::EnableSignedExchangeSubresourcePrefetch(
base::FeatureList::IsEnabled( base::FeatureList::IsEnabled(
features::kSignedExchangeSubresourcePrefetch)); features::kSignedExchangeSubresourcePrefetch));
......
...@@ -822,6 +822,11 @@ void WebURLLoaderImpl::Context::Start(const WebURLRequest& request, ...@@ -822,6 +822,11 @@ void WebURLLoaderImpl::Context::Start(const WebURLRequest& request,
static_cast<int>(ResourceType::kPluginResource)) { static_cast<int>(ResourceType::kPluginResource)) {
resource_request->corb_excluded = true; resource_request->corb_excluded = true;
} }
if (request.IsSignedExchangePrefetchCacheEnabled()) {
DCHECK_EQ(static_cast<int>(ResourceType::kPrefetch),
resource_request->resource_type);
resource_request->is_signed_exchange_prefetch_cache_enabled = true;
}
auto throttles = extra_data->TakeURLLoaderThrottles(); auto throttles = extra_data->TakeURLLoaderThrottles();
// The frame request blocker is only for a frame's subresources. // The frame request blocker is only for a frame's subresources.
......
...@@ -73,7 +73,9 @@ bool ResourceRequest::EqualsForTesting(const ResourceRequest& request) const { ...@@ -73,7 +73,9 @@ bool ResourceRequest::EqualsForTesting(const ResourceRequest& request) const {
custom_proxy_use_alternate_proxy_list == custom_proxy_use_alternate_proxy_list ==
request.custom_proxy_use_alternate_proxy_list && request.custom_proxy_use_alternate_proxy_list &&
fetch_window_id == request.fetch_window_id && fetch_window_id == request.fetch_window_id &&
devtools_request_id == request.devtools_request_id; devtools_request_id == request.devtools_request_id &&
is_signed_exchange_prefetch_cache_enabled ==
request.is_signed_exchange_prefetch_cache_enabled;
} }
bool ResourceRequest::SendsCookies() const { bool ResourceRequest::SendsCookies() const {
......
...@@ -95,6 +95,7 @@ struct COMPONENT_EXPORT(NETWORK_CPP_BASE) ResourceRequest { ...@@ -95,6 +95,7 @@ struct COMPONENT_EXPORT(NETWORK_CPP_BASE) ResourceRequest {
bool custom_proxy_use_alternate_proxy_list = false; bool custom_proxy_use_alternate_proxy_list = false;
base::Optional<base::UnguessableToken> fetch_window_id; base::Optional<base::UnguessableToken> fetch_window_id;
base::Optional<std::string> devtools_request_id; base::Optional<std::string> devtools_request_id;
bool is_signed_exchange_prefetch_cache_enabled = false;
}; };
} // namespace network } // namespace network
......
...@@ -215,6 +215,8 @@ bool StructTraits< ...@@ -215,6 +215,8 @@ bool StructTraits<
out->is_revalidating = data.is_revalidating(); out->is_revalidating = data.is_revalidating();
out->should_also_use_factory_bound_origin_for_cors = out->should_also_use_factory_bound_origin_for_cors =
data.should_also_use_factory_bound_origin_for_cors(); data.should_also_use_factory_bound_origin_for_cors();
out->is_signed_exchange_prefetch_cache_enabled =
data.is_signed_exchange_prefetch_cache_enabled();
return true; return true;
} }
......
...@@ -237,6 +237,10 @@ struct COMPONENT_EXPORT(NETWORK_CPP_BASE) ...@@ -237,6 +237,10 @@ struct COMPONENT_EXPORT(NETWORK_CPP_BASE)
const network::ResourceRequest& request) { const network::ResourceRequest& request) {
return request.devtools_request_id; return request.devtools_request_id;
} }
static bool is_signed_exchange_prefetch_cache_enabled(
const network::ResourceRequest& request) {
return request.is_signed_exchange_prefetch_cache_enabled;
}
static bool Read(network::mojom::URLRequestDataView data, static bool Read(network::mojom::URLRequestDataView data,
network::ResourceRequest* out); network::ResourceRequest* out);
......
...@@ -358,6 +358,12 @@ struct URLRequest { ...@@ -358,6 +358,12 @@ struct URLRequest {
// renderer process and is only present when DevTools is enabled in the // renderer process and is only present when DevTools is enabled in the
// renderer. // renderer.
string? devtools_request_id; string? devtools_request_id;
// True for prefetch requests when SignedExchangePrefetchCacheForNavigations
// feature is enabled by flags or SignedExchangeSubresourcePrefetch feature is
// enabled by flags, or OriginTrial. TODO(horo): Remove this when these
// features are enabled by default.
bool is_signed_exchange_prefetch_cache_enabled;
}; };
// URLRequestBody represents body (i.e. upload data) of a HTTP request. // URLRequestBody represents body (i.e. upload data) of a HTTP request.
......
...@@ -233,6 +233,8 @@ class WebRuntimeFeatures { ...@@ -233,6 +233,8 @@ class WebRuntimeFeatures {
BLINK_PLATFORM_EXPORT static void EnableShadowDOMV0(bool); BLINK_PLATFORM_EXPORT static void EnableShadowDOMV0(bool);
BLINK_PLATFORM_EXPORT static void EnableCustomElementsV0(bool); BLINK_PLATFORM_EXPORT static void EnableCustomElementsV0(bool);
BLINK_PLATFORM_EXPORT static void EnableHTMLImports(bool); BLINK_PLATFORM_EXPORT static void EnableHTMLImports(bool);
BLINK_PLATFORM_EXPORT static void
EnableSignedExchangePrefetchCacheForNavigations(bool);
BLINK_PLATFORM_EXPORT static void EnableSignedExchangeSubresourcePrefetch( BLINK_PLATFORM_EXPORT static void EnableSignedExchangeSubresourcePrefetch(
bool); bool);
BLINK_PLATFORM_EXPORT static void EnableIdleDetection(bool); BLINK_PLATFORM_EXPORT static void EnableIdleDetection(bool);
......
...@@ -388,6 +388,8 @@ class WebURLRequest { ...@@ -388,6 +388,8 @@ class WebURLRequest {
BLINK_PLATFORM_EXPORT bool IsFromOriginDirtyStyleSheet() const; BLINK_PLATFORM_EXPORT bool IsFromOriginDirtyStyleSheet() const;
BLINK_PLATFORM_EXPORT bool IsSignedExchangePrefetchCacheEnabled() const;
#if INSIDE_BLINK #if INSIDE_BLINK
BLINK_PLATFORM_EXPORT ResourceRequest& ToMutableResourceRequest(); BLINK_PLATFORM_EXPORT ResourceRequest& ToMutableResourceRequest();
BLINK_PLATFORM_EXPORT const ResourceRequest& ToResourceRequest() const; BLINK_PLATFORM_EXPORT const ResourceRequest& ToResourceRequest() const;
......
...@@ -480,6 +480,11 @@ Resource* PreloadHelper::PrefetchIfNeeded(const LinkLoadParameters& params, ...@@ -480,6 +480,11 @@ Resource* PreloadHelper::PrefetchIfNeeded(const LinkLoadParameters& params,
link_fetch_params.SetCrossOriginAccessControl( link_fetch_params.SetCrossOriginAccessControl(
document.GetSecurityOrigin(), params.cross_origin); document.GetSecurityOrigin(), params.cross_origin);
} }
link_fetch_params.SetSignedExchangePrefetchCacheEnabled(
RuntimeEnabledFeatures::
SignedExchangePrefetchCacheForNavigationsEnabled() ||
RuntimeEnabledFeatures::SignedExchangeSubresourcePrefetchEnabled(
&document));
return LinkFetchResource::Fetch(ResourceType::kLinkPrefetch, return LinkFetchResource::Fetch(ResourceType::kLinkPrefetch,
link_fetch_params, document.Fetcher()); link_fetch_params, document.Fetcher());
} }
......
...@@ -653,6 +653,12 @@ void WebRuntimeFeatures::EnableHTMLImports(bool enable) { ...@@ -653,6 +653,12 @@ void WebRuntimeFeatures::EnableHTMLImports(bool enable) {
RuntimeEnabledFeatures::SetHTMLImportsOnlyChromeEnabled(enable); RuntimeEnabledFeatures::SetHTMLImportsOnlyChromeEnabled(enable);
} }
void WebRuntimeFeatures::EnableSignedExchangePrefetchCacheForNavigations(
bool enable) {
RuntimeEnabledFeatures::SetSignedExchangePrefetchCacheForNavigationsEnabled(
enable);
}
void WebRuntimeFeatures::EnableSignedExchangeSubresourcePrefetch(bool enable) { void WebRuntimeFeatures::EnableSignedExchangeSubresourcePrefetch(bool enable) {
RuntimeEnabledFeatures::SetSignedExchangeSubresourcePrefetchEnabled(enable); RuntimeEnabledFeatures::SetSignedExchangeSubresourcePrefetchEnabled(enable);
} }
......
...@@ -500,6 +500,10 @@ bool WebURLRequest::IsFromOriginDirtyStyleSheet() const { ...@@ -500,6 +500,10 @@ bool WebURLRequest::IsFromOriginDirtyStyleSheet() const {
return resource_request_->IsFromOriginDirtyStyleSheet(); return resource_request_->IsFromOriginDirtyStyleSheet();
} }
bool WebURLRequest::IsSignedExchangePrefetchCacheEnabled() const {
return resource_request_->IsSignedExchangePrefetchCacheEnabled();
}
WebURLRequest::WebURLRequest(ResourceRequest& r) : resource_request_(&r) {} WebURLRequest::WebURLRequest(ResourceRequest& r) : resource_request_(&r) {}
} // namespace blink } // namespace blink
...@@ -201,6 +201,10 @@ class PLATFORM_EXPORT FetchParameters { ...@@ -201,6 +201,10 @@ class PLATFORM_EXPORT FetchParameters {
is_from_origin_dirty_style_sheet_ = dirty; is_from_origin_dirty_style_sheet_ = dirty;
} }
void SetSignedExchangePrefetchCacheEnabled(bool enabled) {
resource_request_.SetSignedExchangePrefetchCacheEnabled(enabled);
}
private: private:
ResourceRequest resource_request_; ResourceRequest resource_request_;
// |decoder_options_|'s ContentType is set to |kPlainTextContent| in // |decoder_options_|'s ContentType is set to |kPlainTextContent| in
......
...@@ -131,6 +131,8 @@ std::unique_ptr<ResourceRequest> ResourceRequest::CreateRedirectRequest( ...@@ -131,6 +131,8 @@ std::unique_ptr<ResourceRequest> ResourceRequest::CreateRedirectRequest(
request->SetUkmSourceId(GetUkmSourceId()); request->SetUkmSourceId(GetUkmSourceId());
request->SetInspectorId(InspectorId()); request->SetInspectorId(InspectorId());
request->SetFromOriginDirtyStyleSheet(IsFromOriginDirtyStyleSheet()); request->SetFromOriginDirtyStyleSheet(IsFromOriginDirtyStyleSheet());
request->SetSignedExchangePrefetchCacheEnabled(
IsSignedExchangePrefetchCacheEnabled());
return request; return request;
} }
......
...@@ -504,6 +504,13 @@ class PLATFORM_EXPORT ResourceRequest final { ...@@ -504,6 +504,13 @@ class PLATFORM_EXPORT ResourceRequest final {
is_from_origin_dirty_style_sheet_ = dirty; is_from_origin_dirty_style_sheet_ = dirty;
} }
bool IsSignedExchangePrefetchCacheEnabled() const {
return is_signed_exchange_prefetch_cache_enabled_;
}
void SetSignedExchangePrefetchCacheEnabled(bool enabled) {
is_signed_exchange_prefetch_cache_enabled_ = enabled;
}
private: private:
using SharableExtraData = using SharableExtraData =
base::RefCountedData<std::unique_ptr<WebURLRequest::ExtraData>>; base::RefCountedData<std::unique_ptr<WebURLRequest::ExtraData>>;
...@@ -593,6 +600,8 @@ class PLATFORM_EXPORT ResourceRequest final { ...@@ -593,6 +600,8 @@ class PLATFORM_EXPORT ResourceRequest final {
uint64_t inspector_id_ = 0; uint64_t inspector_id_ = 0;
bool is_from_origin_dirty_style_sheet_ = false; bool is_from_origin_dirty_style_sheet_ = false;
bool is_signed_exchange_prefetch_cache_enabled_ = false;
}; };
} // namespace blink } // namespace blink
......
...@@ -1434,6 +1434,10 @@ ...@@ -1434,6 +1434,10 @@
origin_trial_feature_name: "SignatureBasedIntegrity", origin_trial_feature_name: "SignatureBasedIntegrity",
status: "experimental", status: "experimental",
}, },
{
name: "SignedExchangePrefetchCacheForNavigations",
status: "experimental",
},
{ {
name: "SignedExchangeSubresourcePrefetch", name: "SignedExchangeSubresourcePrefetch",
origin_trial_feature_name: "SignedExchangeSubresourcePrefetchM77", origin_trial_feature_name: "SignedExchangeSubresourcePrefetchM77",
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment