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/trace_event/trace_event.h" | 7 #include "base/trace_event/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 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
79 | 79 |
80 // This may get called multiple times for original and redirect requests: | 80 // This may get called multiple times for original and redirect requests: |
81 // A. original request case: job_ is null, no previous location info. | 81 // A. original request case: job_ is null, no previous location info. |
82 // B. redirect or restarted request case: | 82 // B. redirect or restarted request case: |
83 // a) job_ is non-null if the previous location was forwarded to SW. | 83 // a) job_ is non-null if the previous location was forwarded to SW. |
84 // b) job_ is null if the previous location was fallback. | 84 // b) job_ is null if the previous location was fallback. |
85 // c) job_ is non-null if additional restart was required to fall back. | 85 // c) job_ is non-null if additional restart was required to fall back. |
86 | 86 |
87 // We've come here by restart, we already have original request and it | 87 // We've come here by restart, we already have original request and it |
88 // tells we should fallback to network. (Case B-c) | 88 // tells we should fallback to network. (Case B-c) |
89 // Once the request was fallbacked to the network, skip-service-worker flag | |
90 // must be set and the request shoud not go to the service worker. | |
91 if ((job_.get() && job_->ShouldFallbackToNetwork()) || skip_service_worker_) { | 89 if ((job_.get() && job_->ShouldFallbackToNetwork()) || skip_service_worker_) { |
92 skip_service_worker_ = true; | 90 FallbackToNetwork(); |
93 job_ = NULL; | |
94 return NULL; | 91 return NULL; |
95 } | 92 } |
96 | 93 |
97 // It's for original request (A) or redirect case (B-a or B-b). | 94 // It's for original request (A) or redirect case (B-a or B-b). |
98 DCHECK(!job_.get() || job_->ShouldForwardToServiceWorker()); | 95 DCHECK(!job_.get() || job_->ShouldForwardToServiceWorker()); |
99 | 96 |
100 job_ = new ServiceWorkerURLRequestJob( | 97 job_ = new ServiceWorkerURLRequestJob( |
101 request, network_delegate, provider_host_, blob_storage_context_, | 98 request, network_delegate, provider_host_, blob_storage_context_, |
102 resource_context, request_mode_, credentials_mode_, | 99 resource_context, request_mode_, credentials_mode_, |
103 is_main_resource_load_, request_context_type_, frame_type_, body_); | 100 is_main_resource_load_, request_context_type_, frame_type_, body_); |
104 resource_context_ = resource_context; | 101 resource_context_ = resource_context; |
105 | 102 |
106 if (is_main_resource_load_) | 103 if (is_main_resource_load_) |
107 PrepareForMainResource(request); | 104 PrepareForMainResource(request); |
108 else | 105 else |
109 PrepareForSubResource(); | 106 PrepareForSubResource(); |
110 | 107 |
111 if (job_->ShouldFallbackToNetwork()) { | 108 if (job_->ShouldFallbackToNetwork()) { |
112 // If we know we can fallback to network at this point (in case | 109 // If we know we can fallback to network at this point (in case |
113 // the storage lookup returned immediately), just return NULL here to | 110 // the storage lookup returned immediately), just return NULL here to |
114 // fallback to network. | 111 // fallback to network. |
115 job_ = NULL; | 112 FallbackToNetwork(); |
116 return NULL; | 113 return NULL; |
117 } | 114 } |
118 | 115 |
119 return job_.get(); | 116 return job_.get(); |
120 } | 117 } |
121 | 118 |
122 void ServiceWorkerControlleeRequestHandler::GetExtraResponseInfo( | 119 void ServiceWorkerControlleeRequestHandler::GetExtraResponseInfo( |
123 ResourceResponseInfo* response_info) const { | 120 ResourceResponseInfo* response_info) const { |
124 if (!job_.get()) { | 121 if (!job_.get()) { |
125 response_info->was_fetched_via_service_worker = false; | 122 response_info->was_fetched_via_service_worker = false; |
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
269 job_->ForwardToServiceWorker(); | 266 job_->ForwardToServiceWorker(); |
270 } | 267 } |
271 | 268 |
272 void ServiceWorkerControlleeRequestHandler::PrepareForSubResource() { | 269 void ServiceWorkerControlleeRequestHandler::PrepareForSubResource() { |
273 DCHECK(job_.get()); | 270 DCHECK(job_.get()); |
274 DCHECK(context_); | 271 DCHECK(context_); |
275 DCHECK(provider_host_->active_version()); | 272 DCHECK(provider_host_->active_version()); |
276 job_->ForwardToServiceWorker(); | 273 job_->ForwardToServiceWorker(); |
277 } | 274 } |
278 | 275 |
| 276 void ServiceWorkerControlleeRequestHandler::FallbackToNetwork() { |
| 277 // Once a subresource request was fallbacked to the network, we set |
| 278 // |skip_service_worker_| because the request should not go to the service |
| 279 // worker. |
| 280 if (!is_main_resource_load_) |
| 281 skip_service_worker_ = true; |
| 282 job_ = NULL; |
| 283 } |
| 284 |
279 } // namespace content | 285 } // namespace content |
OLD | NEW |