Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1076)

Unified Diff: content/browser/service_worker/service_worker_controllee_request_handler.cc

Issue 2897063002: Network service: Implement URLLoader chaining for interceptors (Closed)
Patch Set: . Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/service_worker/service_worker_controllee_request_handler.cc
diff --git a/content/browser/service_worker/service_worker_controllee_request_handler.cc b/content/browser/service_worker/service_worker_controllee_request_handler.cc
index 69492d564e47f5e081362adaf8dd6de418c8eccd..e46bf2c3731892538b868013b860489cb8399108 100644
--- a/content/browser/service_worker/service_worker_controllee_request_handler.cc
+++ b/content/browser/service_worker/service_worker_controllee_request_handler.cc
@@ -159,6 +159,49 @@ net::URLRequestJob* ServiceWorkerControlleeRequestHandler::MaybeCreateJob(
return job.release();
}
+void ServiceWorkerControlleeRequestHandler::Start(
+ const ResourceRequest& resource_request,
+ URLLoaderRequestHandler::Controller* controller,
+ ResourceContext* resource_context,
+ mojom::URLLoaderAssociatedRequest loader_request,
+ mojom::URLLoaderClientPtr loader_client_ptr) {
+ DCHECK(is_main_resource_load_);
+ ClearJob();
+
+ // TODO(kinuko): Keep ServiceWorkerResponseInfo somewhere around
+ // and reset the data every time we restart.
+
+ if (!context_ || !provider_host_) {
+ // We can't do anything other than to fall back to network.
+ controller->Forward(std::move(loader_request),
+ std::move(loader_client_ptr));
+ return;
+ }
+
+ // In fallback cases we basically 'forward' the request, so we should
+ // never see use_network_ gets true.
+ DCHECK(!use_network_);
+
+ // It's for original request (A) or redirect case (B-a or B-b).
+ url_job_ = base::MakeUnique<ServiceWorkerURLJobWrapper>(
+ controller, std::move(loader_request), std::move(loader_client_ptr));
+
+ resource_context_ = resource_context;
+
+ PrepareForMainResource(resource_request.url,
+ resource_request.first_party_for_cookies);
+
+ if (url_job_->ShouldFallbackToNetwork()) {
+ // We're falling back to the next URLLoaderRequestHandler, forward
+ // the request and clear job now.
+ url_job_->FallbackToNetwork();
+ ClearJob();
+ return;
+ }
+
+ // We will asynchronously continue on DidLookupRegistrationForMainResource.
+}
+
void ServiceWorkerControlleeRequestHandler::PrepareForMainResource(
const GURL& url,
const GURL& first_party_for_cookies) {

Powered by Google App Engine
This is Rietveld 408576698