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 {