Chromium Code Reviews| 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 "content/browser/service_worker/service_worker_context_core.h" | 8 #include "content/browser/service_worker/service_worker_context_core.h" |
| 8 #include "content/browser/service_worker/service_worker_metrics.h" | 9 #include "content/browser/service_worker/service_worker_metrics.h" |
| 9 #include "content/browser/service_worker/service_worker_provider_host.h" | 10 #include "content/browser/service_worker/service_worker_provider_host.h" |
| 10 #include "content/browser/service_worker/service_worker_registration.h" | 11 #include "content/browser/service_worker/service_worker_registration.h" |
| 11 #include "content/browser/service_worker/service_worker_url_request_job.h" | 12 #include "content/browser/service_worker/service_worker_url_request_job.h" |
| 12 #include "content/browser/service_worker/service_worker_utils.h" | 13 #include "content/browser/service_worker/service_worker_utils.h" |
| 13 #include "content/common/resource_request_body.h" | 14 #include "content/common/resource_request_body.h" |
| 14 #include "content/common/service_worker/service_worker_types.h" | 15 #include "content/common/service_worker/service_worker_types.h" |
| 15 #include "net/base/load_flags.h" | 16 #include "net/base/load_flags.h" |
| 16 #include "net/base/net_util.h" | 17 #include "net/base/net_util.h" |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 108 return; | 109 return; |
| 109 } | 110 } |
| 110 job_->GetExtraResponseInfo(was_fetched_via_service_worker, | 111 job_->GetExtraResponseInfo(was_fetched_via_service_worker, |
| 111 original_url_via_service_worker); | 112 original_url_via_service_worker); |
| 112 } | 113 } |
| 113 | 114 |
| 114 void ServiceWorkerControlleeRequestHandler::PrepareForMainResource( | 115 void ServiceWorkerControlleeRequestHandler::PrepareForMainResource( |
| 115 const GURL& url) { | 116 const GURL& url) { |
| 116 DCHECK(job_.get()); | 117 DCHECK(job_.get()); |
| 117 DCHECK(context_); | 118 DCHECK(context_); |
| 119 TRACE_EVENT_ASYNC_BEGIN1( | |
| 120 "ServiceWorker", | |
| 121 "ServiceWorkerControlleeRequestHandler::PrepareForMainResource -> " | |
|
horo
2014/09/05 11:02:32
ServiceWorkerControlleeRequestHandler::PrepareForM
shimazu
2014/09/08 07:04:46
Done.
| |
| 122 "ServiceWOrkerControlleeRequestHandler::" | |
| 123 "DidLookupRegistrationForMainResource", | |
| 124 job_.get(), | |
| 125 "URL", url.spec()); | |
| 118 // The corresponding provider_host may already have associated a registration | 126 // The corresponding provider_host may already have associated a registration |
| 119 // in redirect case, unassociate it now. | 127 // in redirect case, unassociate it now. |
| 120 provider_host_->UnassociateRegistration(); | 128 provider_host_->UnassociateRegistration(); |
| 121 | 129 |
| 122 GURL stripped_url = net::SimplifyUrlForRequest(url); | 130 GURL stripped_url = net::SimplifyUrlForRequest(url); |
| 123 provider_host_->SetDocumentUrl(stripped_url); | 131 provider_host_->SetDocumentUrl(stripped_url); |
| 124 context_->storage()->FindRegistrationForDocument( | 132 context_->storage()->FindRegistrationForDocument( |
| 125 stripped_url, | 133 stripped_url, |
| 126 base::Bind(&self::DidLookupRegistrationForMainResource, | 134 base::Bind(&self::DidLookupRegistrationForMainResource, |
| 127 weak_factory_.GetWeakPtr())); | 135 weak_factory_.GetWeakPtr())); |
| 128 } | 136 } |
| 129 | 137 |
| 130 void | 138 void |
| 131 ServiceWorkerControlleeRequestHandler::DidLookupRegistrationForMainResource( | 139 ServiceWorkerControlleeRequestHandler::DidLookupRegistrationForMainResource( |
| 132 ServiceWorkerStatusCode status, | 140 ServiceWorkerStatusCode status, |
| 133 const scoped_refptr<ServiceWorkerRegistration>& registration) { | 141 const scoped_refptr<ServiceWorkerRegistration>& registration) { |
| 134 DCHECK(job_.get()); | 142 DCHECK(job_.get()); |
| 135 if (status != SERVICE_WORKER_OK) { | 143 if (status != SERVICE_WORKER_OK) { |
| 136 job_->FallbackToNetwork(); | 144 job_->FallbackToNetwork(); |
| 145 TRACE_EVENT_ASYNC_END1( | |
| 146 "ServiceWorker", | |
| 147 "ServiceWorkerControlleeRequestHandler::PrepareForMainResource -> " | |
|
horo
2014/09/05 11:02:32
ditto
shimazu
2014/09/08 07:04:45
Done.
| |
| 148 "ServiceWOrkerControlleeRequestHandler::" | |
| 149 "DidLookupRegistrationForMainResource", | |
| 150 job_.get(), | |
| 151 "Status", status); | |
| 137 return; | 152 return; |
| 138 } | 153 } |
| 139 DCHECK(registration.get()); | 154 DCHECK(registration.get()); |
| 140 | 155 |
| 141 ServiceWorkerMetrics::CountControlledPageLoad(); | 156 ServiceWorkerMetrics::CountControlledPageLoad(); |
| 142 | 157 |
| 143 // Initiate activation of a waiting version. | 158 // Initiate activation of a waiting version. |
| 144 // Usually a register job initiates activation but that | 159 // Usually a register job initiates activation but that |
| 145 // doesn't happen if the browser exits prior to activation | 160 // doesn't happen if the browser exits prior to activation |
| 146 // having occurred. This check handles that case. | 161 // having occurred. This check handles that case. |
| 147 if (registration->waiting_version()) | 162 if (registration->waiting_version()) |
| 148 registration->ActivateWaitingVersionWhenReady(); | 163 registration->ActivateWaitingVersionWhenReady(); |
| 149 | 164 |
| 150 scoped_refptr<ServiceWorkerVersion> active_version = | 165 scoped_refptr<ServiceWorkerVersion> active_version = |
| 151 registration->active_version(); | 166 registration->active_version(); |
| 152 | 167 |
| 153 // Wait until it's activated before firing fetch events. | 168 // Wait until it's activated before firing fetch events. |
| 154 if (active_version.get() && | 169 if (active_version.get() && |
| 155 active_version->status() == ServiceWorkerVersion::ACTIVATING) { | 170 active_version->status() == ServiceWorkerVersion::ACTIVATING) { |
| 156 registration->active_version()->RegisterStatusChangeCallback( | 171 registration->active_version()->RegisterStatusChangeCallback( |
| 157 base::Bind(&self::OnVersionStatusChanged, | 172 base::Bind(&self::OnVersionStatusChanged, |
| 158 weak_factory_.GetWeakPtr(), | 173 weak_factory_.GetWeakPtr(), |
| 159 registration, | 174 registration, |
| 160 active_version)); | 175 active_version)); |
| 176 TRACE_EVENT_ASYNC_END2( | |
| 177 "ServiceWorker", | |
| 178 "ServiceWorkerControlleeRequestHandler::" | |
|
horo
2014/09/05 11:02:32
ditto
shimazu
2014/09/08 07:04:45
Done.
| |
| 179 "PrepareForMainResource->DidLookupRegistrationForMainResource", | |
| 180 job_.get(), | |
| 181 "Status", status, | |
| 182 "Info", "Wait until finished SW activation"); | |
| 161 return; | 183 return; |
| 162 } | 184 } |
| 163 | 185 |
| 164 if (!active_version.get() || | 186 if (!active_version.get() || |
| 165 active_version->status() != ServiceWorkerVersion::ACTIVATED) { | 187 active_version->status() != ServiceWorkerVersion::ACTIVATED) { |
| 166 job_->FallbackToNetwork(); | 188 job_->FallbackToNetwork(); |
| 189 TRACE_EVENT_ASYNC_END2( | |
| 190 "ServiceWorker", | |
| 191 "ServiceWorkerControlleeRequestHandler::" | |
| 192 "PrepareForMainResource->DidLookupRegistrationForMainResource", | |
|
horo
2014/09/05 11:02:32
ditto
shimazu
2014/09/08 07:04:46
Done.
| |
| 193 job_.get(), | |
| 194 "Status", status, | |
| 195 "Info", | |
| 196 "ServiceWorkerVersion is not available, so falling back to network"); | |
| 167 return; | 197 return; |
| 168 } | 198 } |
| 169 | 199 |
| 170 provider_host_->AssociateRegistration(registration.get()); | 200 provider_host_->AssociateRegistration(registration.get()); |
| 171 job_->ForwardToServiceWorker(); | 201 job_->ForwardToServiceWorker(); |
| 202 TRACE_EVENT_ASYNC_END2( | |
| 203 "ServiceWorker", | |
| 204 "ServiceWorkerControlleeRequestHandler::" | |
| 205 "PrepareForMainResource->DidLookupRegistrationForMainResource", | |
|
horo
2014/09/05 11:02:32
ditto
shimazu
2014/09/08 07:04:46
Done.
| |
| 206 job_.get(), | |
| 207 "Status", status, | |
| 208 "Info", | |
| 209 "Forwarded to the ServiceWorker"); | |
| 172 } | 210 } |
| 173 | 211 |
| 174 void ServiceWorkerControlleeRequestHandler::OnVersionStatusChanged( | 212 void ServiceWorkerControlleeRequestHandler::OnVersionStatusChanged( |
| 175 ServiceWorkerRegistration* registration, | 213 ServiceWorkerRegistration* registration, |
| 176 ServiceWorkerVersion* version) { | 214 ServiceWorkerVersion* version) { |
| 177 if (version != registration->active_version() || | 215 if (version != registration->active_version() || |
| 178 version->status() != ServiceWorkerVersion::ACTIVATED) { | 216 version->status() != ServiceWorkerVersion::ACTIVATED) { |
| 179 job_->FallbackToNetwork(); | 217 job_->FallbackToNetwork(); |
| 180 return; | 218 return; |
| 181 } | 219 } |
| 182 | 220 |
| 183 provider_host_->AssociateRegistration(registration); | 221 provider_host_->AssociateRegistration(registration); |
| 184 job_->ForwardToServiceWorker(); | 222 job_->ForwardToServiceWorker(); |
| 185 } | 223 } |
| 186 | 224 |
| 187 void ServiceWorkerControlleeRequestHandler::PrepareForSubResource() { | 225 void ServiceWorkerControlleeRequestHandler::PrepareForSubResource() { |
| 188 DCHECK(job_.get()); | 226 DCHECK(job_.get()); |
| 189 DCHECK(context_); | 227 DCHECK(context_); |
| 190 DCHECK(provider_host_->active_version()); | 228 DCHECK(provider_host_->active_version()); |
| 191 job_->ForwardToServiceWorker(); | 229 job_->ForwardToServiceWorker(); |
| 192 } | 230 } |
| 193 | 231 |
| 194 } // namespace content | 232 } // namespace content |
| OLD | NEW |