Commit cd71c70f authored by Dave Tapuska's avatar Dave Tapuska Committed by Commit Bot

Add load flags and response bits to communicate Stale While Revalidate.

This change does not implement anything other than plumbing load
and response bits from the network stack across from the blink
loader.

BUG=348877

Change-Id: Id2b455352b8b26c93cf5e87bee054db90e774480
Reviewed-on: https://chromium-review.googlesource.com/1101237
Commit-Queue: Dave Tapuska <dtapuska@chromium.org>
Reviewed-by: default avatarKinuko Yasuda <kinuko@chromium.org>
Cr-Commit-Position: refs/heads/master@{#567722}
parent 4cd01738
...@@ -84,6 +84,8 @@ void PopulateResourceResponse( ...@@ -84,6 +84,8 @@ void PopulateResourceResponse(
response->head.socket_address = response_info.socket_address; response->head.socket_address = response_info.socket_address;
response->head.was_fetched_via_proxy = request->was_fetched_via_proxy(); response->head.was_fetched_via_proxy = request->was_fetched_via_proxy();
response->head.network_accessed = response_info.network_accessed; response->head.network_accessed = response_info.network_accessed;
response->head.async_revalidation_requested =
response_info.async_revalidation_requested;
const content::ResourceRequestInfo* request_info = const content::ResourceRequestInfo* request_info =
content::ResourceRequestInfo::ForRequest(request); content::ResourceRequestInfo::ForRequest(request);
if (request_info) { if (request_info) {
......
...@@ -1190,6 +1190,7 @@ void WebURLLoaderImpl::PopulateURLResponse( ...@@ -1190,6 +1190,7 @@ void WebURLLoaderImpl::PopulateURLResponse(
response->SetAlpnNegotiatedProtocol( response->SetAlpnNegotiatedProtocol(
WebString::FromUTF8(info.alpn_negotiated_protocol)); WebString::FromUTF8(info.alpn_negotiated_protocol));
response->SetConnectionInfo(info.connection_info); response->SetConnectionInfo(info.connection_info);
response->SetAsyncRevalidationRequested(info.async_revalidation_requested);
SetSecurityStyleAndDetails(url, info, response, report_security_info); SetSecurityStyleAndDetails(url, info, response, report_security_info);
......
...@@ -291,6 +291,8 @@ int GetLoadFlagsForWebURLRequest(const WebURLRequest& request) { ...@@ -291,6 +291,8 @@ int GetLoadFlagsForWebURLRequest(const WebURLRequest& request) {
if (extra_data->is_for_no_state_prefetch()) if (extra_data->is_for_no_state_prefetch())
load_flags |= net::LOAD_PREFETCH; load_flags |= net::LOAD_PREFETCH;
} }
if (request.SupportsAsyncRevalidation())
load_flags |= net::LOAD_SUPPORT_ASYNC_REVALIDATION;
return load_flags; return load_flags;
} }
......
...@@ -199,6 +199,7 @@ IPC_STRUCT_TRAITS_BEGIN(network::ResourceResponseInfo) ...@@ -199,6 +199,7 @@ IPC_STRUCT_TRAITS_BEGIN(network::ResourceResponseInfo)
IPC_STRUCT_TRAITS_MEMBER(cert_status) IPC_STRUCT_TRAITS_MEMBER(cert_status)
IPC_STRUCT_TRAITS_MEMBER(ssl_info) IPC_STRUCT_TRAITS_MEMBER(ssl_info)
IPC_STRUCT_TRAITS_MEMBER(cors_exposed_header_names) IPC_STRUCT_TRAITS_MEMBER(cors_exposed_header_names)
IPC_STRUCT_TRAITS_MEMBER(async_revalidation_requested)
IPC_STRUCT_TRAITS_END() IPC_STRUCT_TRAITS_END()
IPC_ENUM_TRAITS_MAX_VALUE(network::mojom::FetchResponseType, IPC_ENUM_TRAITS_MAX_VALUE(network::mojom::FetchResponseType,
......
...@@ -59,6 +59,8 @@ scoped_refptr<ResourceResponse> ResourceResponse::DeepCopy() const { ...@@ -59,6 +59,8 @@ scoped_refptr<ResourceResponse> ResourceResponse::DeepCopy() const {
head.did_service_worker_navigation_preload; head.did_service_worker_navigation_preload;
new_response->head.should_report_corb_blocking = new_response->head.should_report_corb_blocking =
head.should_report_corb_blocking; head.should_report_corb_blocking;
new_response->head.async_revalidation_requested =
head.async_revalidation_requested;
return new_response; return new_response;
} }
......
...@@ -29,7 +29,8 @@ ResourceResponseInfo::ResourceResponseInfo() ...@@ -29,7 +29,8 @@ ResourceResponseInfo::ResourceResponseInfo()
effective_connection_type(net::EFFECTIVE_CONNECTION_TYPE_UNKNOWN), effective_connection_type(net::EFFECTIVE_CONNECTION_TYPE_UNKNOWN),
cert_status(0), cert_status(0),
did_service_worker_navigation_preload(false), did_service_worker_navigation_preload(false),
should_report_corb_blocking(false) {} should_report_corb_blocking(false),
async_revalidation_requested(false) {}
ResourceResponseInfo::ResourceResponseInfo(const ResourceResponseInfo& other) = ResourceResponseInfo::ResourceResponseInfo(const ResourceResponseInfo& other) =
default; default;
......
...@@ -181,6 +181,10 @@ struct COMPONENT_EXPORT(NETWORK_CPP_BASE) ResourceResponseInfo { ...@@ -181,6 +181,10 @@ struct COMPONENT_EXPORT(NETWORK_CPP_BASE) ResourceResponseInfo {
// generated in devtools console if this flag is set to true. // generated in devtools console if this flag is set to true.
bool should_report_corb_blocking; bool should_report_corb_blocking;
// True if this resource is stale and needs async revalidation. Will only
// possibly be set if the load_flags indicated SUPPORT_ASYNC_REVALIDATION.
bool async_revalidation_requested;
// NOTE: When adding or changing fields here, also update // NOTE: When adding or changing fields here, also update
// ResourceResponse::DeepCopy in resource_response.cc. // ResourceResponse::DeepCopy in resource_response.cc.
}; };
......
...@@ -65,6 +65,8 @@ void PopulateResourceResponse(net::URLRequest* request, ...@@ -65,6 +65,8 @@ void PopulateResourceResponse(net::URLRequest* request,
response->head.socket_address = response_info.socket_address; response->head.socket_address = response_info.socket_address;
response->head.was_fetched_via_proxy = request->was_fetched_via_proxy(); response->head.was_fetched_via_proxy = request->was_fetched_via_proxy();
response->head.network_accessed = response_info.network_accessed; response->head.network_accessed = response_info.network_accessed;
response->head.async_revalidation_requested =
response_info.async_revalidation_requested;
response->head.effective_connection_type = response->head.effective_connection_type =
net::EFFECTIVE_CONNECTION_TYPE_UNKNOWN; net::EFFECTIVE_CONNECTION_TYPE_UNKNOWN;
......
...@@ -356,6 +356,8 @@ class WebURLRequest { ...@@ -356,6 +356,8 @@ class WebURLRequest {
// due to an Upgrade-Insecure-Requests requirement. // due to an Upgrade-Insecure-Requests requirement.
BLINK_PLATFORM_EXPORT bool UpgradeIfInsecure() const; BLINK_PLATFORM_EXPORT bool UpgradeIfInsecure() const;
BLINK_PLATFORM_EXPORT bool SupportsAsyncRevalidation() 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;
......
...@@ -205,6 +205,8 @@ class WebURLResponse { ...@@ -205,6 +205,8 @@ class WebURLResponse {
BLINK_PLATFORM_EXPORT void SetSecurityDetails(const WebSecurityDetails&); BLINK_PLATFORM_EXPORT void SetSecurityDetails(const WebSecurityDetails&);
BLINK_PLATFORM_EXPORT WebSecurityDetails SecurityDetailsForTesting(); BLINK_PLATFORM_EXPORT WebSecurityDetails SecurityDetailsForTesting();
BLINK_PLATFORM_EXPORT void SetAsyncRevalidationRequested(bool);
#if INSIDE_BLINK #if INSIDE_BLINK
BLINK_PLATFORM_EXPORT const ResourceResponse& ToResourceResponse() const; BLINK_PLATFORM_EXPORT const ResourceResponse& ToResourceResponse() const;
#endif #endif
......
...@@ -425,6 +425,10 @@ bool WebURLRequest::UpgradeIfInsecure() const { ...@@ -425,6 +425,10 @@ bool WebURLRequest::UpgradeIfInsecure() const {
return resource_request_->UpgradeIfInsecure(); return resource_request_->UpgradeIfInsecure();
} }
bool WebURLRequest::SupportsAsyncRevalidation() const {
return resource_request_->AllowsStaleResponse();
}
const ResourceRequest& WebURLRequest::ToResourceRequest() const { const ResourceRequest& WebURLRequest::ToResourceRequest() const {
DCHECK(resource_request_); DCHECK(resource_request_);
return *resource_request_; return *resource_request_;
......
...@@ -443,6 +443,10 @@ void WebURLResponse::SetConnectionInfo( ...@@ -443,6 +443,10 @@ void WebURLResponse::SetConnectionInfo(
resource_response_->SetConnectionInfo(connection_info); resource_response_->SetConnectionInfo(connection_info);
} }
void WebURLResponse::SetAsyncRevalidationRequested(bool requested) {
resource_response_->SetAsyncRevalidationRequested(requested);
}
WebURLResponse::WebURLResponse(ResourceResponse& r) : resource_response_(&r) {} WebURLResponse::WebURLResponse(ResourceResponse& r) : resource_response_(&r) {}
} // namespace blink } // namespace blink
...@@ -57,6 +57,7 @@ ResourceRequest::ResourceRequest(const KURL& url) ...@@ -57,6 +57,7 @@ ResourceRequest::ResourceRequest(const KURL& url)
use_stream_on_response_(false), use_stream_on_response_(false),
keepalive_(false), keepalive_(false),
should_reset_app_cache_(false), should_reset_app_cache_(false),
allow_stale_response_(false),
cache_mode_(mojom::FetchCacheMode::kDefault), cache_mode_(mojom::FetchCacheMode::kDefault),
skip_service_worker_(false), skip_service_worker_(false),
priority_(ResourceLoadPriority::kLowest), priority_(ResourceLoadPriority::kLowest),
......
...@@ -376,6 +376,9 @@ class PLATFORM_EXPORT ResourceRequest final { ...@@ -376,6 +376,9 @@ class PLATFORM_EXPORT ResourceRequest final {
} }
bool UpgradeIfInsecure() const { return upgrade_if_insecure_; } bool UpgradeIfInsecure() const { return upgrade_if_insecure_; }
void SetAllowStaleResponse(bool value) { allow_stale_response_ = value; }
bool AllowsStaleResponse() const { return allow_stale_response_; }
private: private:
using SharableExtraData = using SharableExtraData =
base::RefCountedData<std::unique_ptr<WebURLRequest::ExtraData>>; base::RefCountedData<std::unique_ptr<WebURLRequest::ExtraData>>;
...@@ -407,6 +410,7 @@ class PLATFORM_EXPORT ResourceRequest final { ...@@ -407,6 +410,7 @@ class PLATFORM_EXPORT ResourceRequest final {
bool use_stream_on_response_ : 1; bool use_stream_on_response_ : 1;
bool keepalive_ : 1; bool keepalive_ : 1;
bool should_reset_app_cache_ : 1; bool should_reset_app_cache_ : 1;
bool allow_stale_response_ : 1;
mojom::FetchCacheMode cache_mode_; mojom::FetchCacheMode cache_mode_;
bool skip_service_worker_ : 1; bool skip_service_worker_ : 1;
ResourceLoadPriority priority_; ResourceLoadPriority priority_;
......
...@@ -115,6 +115,7 @@ ResourceResponse::ResourceResponse(CrossThreadResourceResponseData* data) ...@@ -115,6 +115,7 @@ ResourceResponse::ResourceResponse(CrossThreadResourceResponseData* data)
data->was_fallback_required_by_service_worker_; data->was_fallback_required_by_service_worker_;
did_service_worker_navigation_preload_ = did_service_worker_navigation_preload_ =
data->did_service_worker_navigation_preload_; data->did_service_worker_navigation_preload_;
async_revalidation_requested_ = data->async_revalidation_requested_;
response_type_via_service_worker_ = data->response_type_via_service_worker_; response_type_via_service_worker_ = data->response_type_via_service_worker_;
security_style_ = data->security_style_; security_style_ = data->security_style_;
security_details_.protocol = data->security_details_.protocol; security_details_.protocol = data->security_details_.protocol;
...@@ -176,6 +177,7 @@ std::unique_ptr<CrossThreadResourceResponseData> ResourceResponse::CopyData() ...@@ -176,6 +177,7 @@ std::unique_ptr<CrossThreadResourceResponseData> ResourceResponse::CopyData()
was_fallback_required_by_service_worker_; was_fallback_required_by_service_worker_;
data->did_service_worker_navigation_preload_ = data->did_service_worker_navigation_preload_ =
did_service_worker_navigation_preload_; did_service_worker_navigation_preload_;
data->async_revalidation_requested_ = async_revalidation_requested_;
data->response_type_via_service_worker_ = response_type_via_service_worker_; data->response_type_via_service_worker_ = response_type_via_service_worker_;
data->security_style_ = security_style_; data->security_style_ = security_style_;
data->security_details_.protocol = security_details_.protocol.IsolatedCopy(); data->security_details_.protocol = security_details_.protocol.IsolatedCopy();
......
...@@ -409,6 +409,14 @@ class PLATFORM_EXPORT ResourceResponse final { ...@@ -409,6 +409,14 @@ class PLATFORM_EXPORT ResourceResponse final {
} }
void AppendRedirectResponse(const ResourceResponse&); void AppendRedirectResponse(const ResourceResponse&);
bool AsyncRevalidationRequested() const {
return async_revalidation_requested_;
}
void SetAsyncRevalidationRequested(bool requested) {
async_revalidation_requested_ = requested;
}
// This method doesn't compare the all members. // This method doesn't compare the all members.
static bool Compare(const ResourceResponse&, const ResourceResponse&); static bool Compare(const ResourceResponse&, const ResourceResponse&);
...@@ -471,6 +479,10 @@ class PLATFORM_EXPORT ResourceResponse final { ...@@ -471,6 +479,10 @@ class PLATFORM_EXPORT ResourceResponse final {
// the request for this resource. // the request for this resource.
bool did_service_worker_navigation_preload_ = false; bool did_service_worker_navigation_preload_ = false;
// True if this resource is stale and needs async revalidation. Will only
// possibly be set if the load_flags indicated SUPPORT_ASYNC_REVALIDATION.
bool async_revalidation_requested_ = false;
// The type of the response which was returned by the ServiceWorker. // The type of the response which was returned by the ServiceWorker.
network::mojom::FetchResponseType response_type_via_service_worker_ = network::mojom::FetchResponseType response_type_via_service_worker_ =
network::mojom::FetchResponseType::kDefault; network::mojom::FetchResponseType::kDefault;
...@@ -600,6 +612,7 @@ struct CrossThreadResourceResponseData { ...@@ -600,6 +612,7 @@ struct CrossThreadResourceResponseData {
Vector<KURL> url_list_via_service_worker_; Vector<KURL> url_list_via_service_worker_;
String cache_storage_cache_name_; String cache_storage_cache_name_;
bool did_service_worker_navigation_preload_; bool did_service_worker_navigation_preload_;
bool async_revalidation_requested_;
Time response_time_; Time response_time_;
String remote_ip_address_; String remote_ip_address_;
unsigned short remote_port_; unsigned short remote_port_;
......
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