service worker: Small cleanups in ServiceWorkerNavigationLoader.
* Remove FallbackToRenderer as CORS isn't needed for navigations.
* Remove ssl_info_ as it's only needed locally in one function.
* Remove FailDueToLostController as it only happens for subresources.
Bug: 715640
Cq-Include-Trybots: master.tryserver.chromium.linux:linux_mojo
Change-Id: I6aab83459f4f60b078efd4c2c8ad1ddb0dca0500
Reviewed-on: https://chromium-review.googlesource.com/1094845
Reviewed-by: Kinuko Yasuda <kinuko@chromium.org>
Commit-Queue: Matt Falkenhagen <falken@chromium.org>
Cr-Commit-Position: refs/heads/master@{#566279}diff --git a/content/browser/service_worker/service_worker_navigation_loader.cc b/content/browser/service_worker/service_worker_navigation_loader.cc
index 382d225..85b774b6 100644
--- a/content/browser/service_worker/service_worker_navigation_loader.cc
+++ b/content/browser/service_worker/service_worker_navigation_loader.cc
@@ -100,11 +100,6 @@
std::move(loader_callback_).Run({});
}
-void ServiceWorkerNavigationLoader::FallbackToNetworkOrRenderer() {
- // TODO(kinuko): Implement this. Now we always fallback to network.
- FallbackToNetwork();
-}
-
void ServiceWorkerNavigationLoader::ForwardToServiceWorker() {
response_type_ = ResponseType::FORWARD_TO_SERVICE_WORKER;
StartRequest();
@@ -114,10 +109,6 @@
return response_type_ == ResponseType::FALLBACK_TO_NETWORK;
}
-void ServiceWorkerNavigationLoader::FailDueToLostController() {
- NOTIMPLEMENTED();
-}
-
void ServiceWorkerNavigationLoader::Cancel() {
status_ = Status::kCancelled;
weak_factory_.InvalidateWeakPtrs();
@@ -243,7 +234,6 @@
if (fetch_result ==
ServiceWorkerFetchDispatcher::FetchEventResult::kShouldFallback) {
- // TODO(kinuko): Check if this needs to fallback to the renderer.
FallbackToNetwork();
return;
}
@@ -258,15 +248,6 @@
return;
}
- // Get SSLInfo from the ServiceWorker script's HttpResponseInfo to show HTTPS
- // padlock.
- // TODO(horo): When we support mixed-content (HTTP) no-cors requests from a
- // ServiceWorker, we have to check the security level of the responses.
- const net::HttpResponseInfo* main_script_http_info =
- version->GetMainScriptHttpResponseInfo();
- DCHECK(main_script_http_info);
- ssl_info_ = main_script_http_info->ssl_info;
-
std::move(loader_callback_)
.Run(base::BindOnce(&ServiceWorkerNavigationLoader::StartResponse,
weak_factory_.GetWeakPtr(), response, version,
@@ -295,14 +276,20 @@
response_head_.did_service_worker_navigation_preload =
did_navigation_preload_;
response_head_.load_timing.receive_headers_end = base::TimeTicks::Now();
- response_head_.ssl_info = ssl_info_;
+
+ // Make the navigated page inherit the SSLInfo from its controller service
+ // worker's script. This affects the HTTPS padlock, etc, shown by the
+ // browser. See https://crbug.com/392409 for details about this design.
+ // TODO(horo): When we support mixed-content (HTTP) no-cors requests from a
+ // ServiceWorker, we have to check the security level of the responses.
+ response_head_.ssl_info = version->GetMainScriptHttpResponseInfo()->ssl_info;
// Handle a redirect response. ComputeRedirectInfo returns non-null redirect
// info if the given response is a redirect.
base::Optional<net::RedirectInfo> redirect_info =
ServiceWorkerLoaderHelpers::ComputeRedirectInfo(
resource_request_, response_head_,
- ssl_info_ && ssl_info_->token_binding_negotiated);
+ response_head_.ssl_info->token_binding_negotiated);
if (redirect_info) {
response_head_.encoded_data_length = 0;
url_loader_client_->OnReceiveRedirect(*redirect_info, response_head_);
diff --git a/content/browser/service_worker/service_worker_navigation_loader.h b/content/browser/service_worker/service_worker_navigation_loader.h
index 3aef0461..87cc979 100644
--- a/content/browser/service_worker/service_worker_navigation_loader.h
+++ b/content/browser/service_worker/service_worker_navigation_loader.h
@@ -84,10 +84,8 @@
// Called via URLJobWrapper.
void FallbackToNetwork();
- void FallbackToNetworkOrRenderer();
void ForwardToServiceWorker();
bool ShouldFallbackToNetwork();
- void FailDueToLostController();
void Cancel();
bool WasCanceled() const;
@@ -164,7 +162,6 @@
bool did_navigation_preload_ = false;
network::ResourceResponseHead response_head_;
- base::Optional<net::SSLInfo> ssl_info_;
// Pointer to the URLLoaderClient (i.e. NavigationURLLoader).
network::mojom::URLLoaderClientPtr url_loader_client_;
diff --git a/content/browser/service_worker/service_worker_url_job_wrapper.cc b/content/browser/service_worker/service_worker_url_job_wrapper.cc
index 67c69af..52fc1fc8 100644
--- a/content/browser/service_worker/service_worker_url_job_wrapper.cc
+++ b/content/browser/service_worker/service_worker_url_job_wrapper.cc
@@ -39,7 +39,10 @@
void ServiceWorkerURLJobWrapper::FallbackToNetworkOrRenderer() {
if (url_loader_job_) {
- url_loader_job_->FallbackToNetworkOrRenderer();
+ // Fallback to renderer is used when CORS checks need to be performed on the
+ // request. CORS doesn't apply to navigations, and |url_loader_job_| is for
+ // navigations, so just use FallbackToNetwork().
+ url_loader_job_->FallbackToNetwork();
} else {
url_request_job_->FallbackToNetworkOrRenderer();
}
@@ -62,11 +65,10 @@
}
void ServiceWorkerURLJobWrapper::FailDueToLostController() {
- if (url_loader_job_) {
- url_loader_job_->FailDueToLostController();
- } else {
- url_request_job_->FailDueToLostController();
- }
+ // This function is only called for subresource requests, so it can't
+ // be called for |url_loader_job_|, which is for navigations.
+ DCHECK(!url_loader_job_);
+ url_request_job_->FailDueToLostController();
}
bool ServiceWorkerURLJobWrapper::WasCanceled() const {