OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/browser/service_worker/service_worker_controllee_request_handl
er.h" | 5 #include "content/browser/service_worker/service_worker_controllee_request_handl
er.h" |
6 | 6 |
7 #include "base/debug/trace_event.h" | 7 #include "base/debug/trace_event.h" |
8 #include "content/browser/service_worker/service_worker_context_core.h" | 8 #include "content/browser/service_worker/service_worker_context_core.h" |
9 #include "content/browser/service_worker/service_worker_metrics.h" | 9 #include "content/browser/service_worker/service_worker_metrics.h" |
10 #include "content/browser/service_worker/service_worker_provider_host.h" | 10 #include "content/browser/service_worker/service_worker_provider_host.h" |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
103 return; | 103 return; |
104 } | 104 } |
105 job_->GetExtraResponseInfo(was_fetched_via_service_worker, | 105 job_->GetExtraResponseInfo(was_fetched_via_service_worker, |
106 original_url_via_service_worker); | 106 original_url_via_service_worker); |
107 } | 107 } |
108 | 108 |
109 void ServiceWorkerControlleeRequestHandler::PrepareForMainResource( | 109 void ServiceWorkerControlleeRequestHandler::PrepareForMainResource( |
110 const GURL& url) { | 110 const GURL& url) { |
111 DCHECK(job_.get()); | 111 DCHECK(job_.get()); |
112 DCHECK(context_); | 112 DCHECK(context_); |
| 113 DCHECK(provider_host_); |
113 TRACE_EVENT_ASYNC_BEGIN1( | 114 TRACE_EVENT_ASYNC_BEGIN1( |
114 "ServiceWorker", | 115 "ServiceWorker", |
115 "ServiceWorkerControlleeRequestHandler::PrepareForMainResource", | 116 "ServiceWorkerControlleeRequestHandler::PrepareForMainResource", |
116 job_.get(), | 117 job_.get(), |
117 "URL", url.spec()); | 118 "URL", url.spec()); |
118 // The corresponding provider_host may already have associated a registration | 119 // The corresponding provider_host may already have associated a registration |
119 // in redirect case, unassociate it now. | 120 // in redirect case, unassociate it now. |
120 provider_host_->DisassociateRegistration(); | 121 provider_host_->DisassociateRegistration(); |
121 | 122 |
122 // Also prevent a registrater job for establishing an association to a new | 123 // Also prevent a registrater job for establishing an association to a new |
123 // registration while we're finding an existing registration. | 124 // registration while we're finding an existing registration. |
124 provider_host_->SetAllowAssociation(false); | 125 provider_host_->SetAllowAssociation(false); |
125 | 126 |
126 GURL stripped_url = net::SimplifyUrlForRequest(url); | 127 GURL stripped_url = net::SimplifyUrlForRequest(url); |
127 provider_host_->SetDocumentUrl(stripped_url); | 128 provider_host_->SetDocumentUrl(stripped_url); |
128 context_->storage()->FindRegistrationForDocument( | 129 context_->storage()->FindRegistrationForDocument( |
129 stripped_url, | 130 stripped_url, |
130 base::Bind(&self::DidLookupRegistrationForMainResource, | 131 base::Bind(&self::DidLookupRegistrationForMainResource, |
131 weak_factory_.GetWeakPtr())); | 132 weak_factory_.GetWeakPtr())); |
132 } | 133 } |
133 | 134 |
134 void | 135 void |
135 ServiceWorkerControlleeRequestHandler::DidLookupRegistrationForMainResource( | 136 ServiceWorkerControlleeRequestHandler::DidLookupRegistrationForMainResource( |
136 ServiceWorkerStatusCode status, | 137 ServiceWorkerStatusCode status, |
137 const scoped_refptr<ServiceWorkerRegistration>& registration) { | 138 const scoped_refptr<ServiceWorkerRegistration>& registration) { |
138 DCHECK(job_.get()); | 139 DCHECK(job_.get()); |
139 provider_host_->SetAllowAssociation(true); | 140 if (provider_host_) |
140 if (status != SERVICE_WORKER_OK) { | 141 provider_host_->SetAllowAssociation(true); |
| 142 if (status != SERVICE_WORKER_OK || !provider_host_) { |
141 job_->FallbackToNetwork(); | 143 job_->FallbackToNetwork(); |
142 TRACE_EVENT_ASYNC_END1( | 144 TRACE_EVENT_ASYNC_END1( |
143 "ServiceWorker", | 145 "ServiceWorker", |
144 "ServiceWorkerControlleeRequestHandler::PrepareForMainResource", | 146 "ServiceWorkerControlleeRequestHandler::PrepareForMainResource", |
145 job_.get(), | 147 job_.get(), |
146 "Status", status); | 148 "Status", status); |
147 return; | 149 return; |
148 } | 150 } |
149 DCHECK(registration.get()); | 151 DCHECK(registration.get()); |
150 | 152 |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
198 "ServiceWorkerControlleeRequestHandler::PrepareForMainResource", | 200 "ServiceWorkerControlleeRequestHandler::PrepareForMainResource", |
199 job_.get(), | 201 job_.get(), |
200 "Status", status, | 202 "Status", status, |
201 "Info", | 203 "Info", |
202 "Forwarded to the ServiceWorker"); | 204 "Forwarded to the ServiceWorker"); |
203 } | 205 } |
204 | 206 |
205 void ServiceWorkerControlleeRequestHandler::OnVersionStatusChanged( | 207 void ServiceWorkerControlleeRequestHandler::OnVersionStatusChanged( |
206 ServiceWorkerRegistration* registration, | 208 ServiceWorkerRegistration* registration, |
207 ServiceWorkerVersion* version) { | 209 ServiceWorkerVersion* version) { |
208 provider_host_->SetAllowAssociation(true); | 210 if (provider_host_) |
| 211 provider_host_->SetAllowAssociation(true); |
209 if (version != registration->active_version() || | 212 if (version != registration->active_version() || |
210 version->status() != ServiceWorkerVersion::ACTIVATED) { | 213 version->status() != ServiceWorkerVersion::ACTIVATED || |
| 214 !provider_host_) { |
211 job_->FallbackToNetwork(); | 215 job_->FallbackToNetwork(); |
212 return; | 216 return; |
213 } | 217 } |
214 | 218 |
215 ServiceWorkerMetrics::CountControlledPageLoad(); | 219 ServiceWorkerMetrics::CountControlledPageLoad(); |
216 | 220 |
217 provider_host_->AssociateRegistration(registration); | 221 provider_host_->AssociateRegistration(registration); |
218 job_->ForwardToServiceWorker(); | 222 job_->ForwardToServiceWorker(); |
219 } | 223 } |
220 | 224 |
221 void ServiceWorkerControlleeRequestHandler::PrepareForSubResource() { | 225 void ServiceWorkerControlleeRequestHandler::PrepareForSubResource() { |
222 DCHECK(job_.get()); | 226 DCHECK(job_.get()); |
223 DCHECK(context_); | 227 DCHECK(context_); |
224 DCHECK(provider_host_->active_version()); | 228 DCHECK(provider_host_->active_version()); |
225 job_->ForwardToServiceWorker(); | 229 job_->ForwardToServiceWorker(); |
226 } | 230 } |
227 | 231 |
228 } // namespace content | 232 } // namespace content |
OLD | NEW |