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_context_request_handler.
h" | 5 #include "content/browser/service_worker/service_worker_context_request_handler.
h" |
6 | 6 |
7 #include "base/time/time.h" | 7 #include "base/time/time.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_provider_host.h" | 9 #include "content/browser/service_worker/service_worker_provider_host.h" |
10 #include "content/browser/service_worker/service_worker_read_from_cache_job.h" | 10 #include "content/browser/service_worker/service_worker_read_from_cache_job.h" |
11 #include "content/browser/service_worker/service_worker_storage.h" | 11 #include "content/browser/service_worker/service_worker_storage.h" |
12 #include "content/browser/service_worker/service_worker_version.h" | 12 #include "content/browser/service_worker/service_worker_version.h" |
13 #include "content/browser/service_worker/service_worker_write_to_cache_job.h" | 13 #include "content/browser/service_worker/service_worker_write_to_cache_job.h" |
14 #include "content/public/common/resource_response_info.h" | 14 #include "content/public/common/resource_response_info.h" |
15 #include "net/base/load_flags.h" | 15 #include "net/base/load_flags.h" |
16 #include "net/log/net_log.h" | 16 #include "net/log/net_log.h" |
17 #include "net/log/net_log_event_type.h" | 17 #include "net/log/net_log_event_type.h" |
18 #include "net/log/net_log_with_source.h" | 18 #include "net/log/net_log_with_source.h" |
19 #include "net/url_request/url_request.h" | 19 #include "net/url_request/url_request.h" |
20 #include "net/url_request/url_request_error_job.h" | 20 #include "net/url_request/url_request_error_job.h" |
21 | 21 |
22 namespace content { | 22 namespace content { |
23 | 23 |
| 24 namespace { |
| 25 bool ShouldBypassCache(bool is_main_script, |
| 26 blink::WebServiceWorkerUpdateViaCache cache_mode) { |
| 27 if (is_main_script && |
| 28 cache_mode != blink::WebServiceWorkerUpdateViaCache::kAll) |
| 29 return true; |
| 30 if (cache_mode == blink::WebServiceWorkerUpdateViaCache::kNone) |
| 31 return true; |
| 32 return false; |
| 33 } |
| 34 } // namespace |
| 35 |
24 ServiceWorkerContextRequestHandler::ServiceWorkerContextRequestHandler( | 36 ServiceWorkerContextRequestHandler::ServiceWorkerContextRequestHandler( |
25 base::WeakPtr<ServiceWorkerContextCore> context, | 37 base::WeakPtr<ServiceWorkerContextCore> context, |
26 base::WeakPtr<ServiceWorkerProviderHost> provider_host, | 38 base::WeakPtr<ServiceWorkerProviderHost> provider_host, |
27 base::WeakPtr<storage::BlobStorageContext> blob_storage_context, | 39 base::WeakPtr<storage::BlobStorageContext> blob_storage_context, |
28 ResourceType resource_type) | 40 ResourceType resource_type) |
29 : ServiceWorkerRequestHandler(context, | 41 : ServiceWorkerRequestHandler(context, |
30 provider_host, | 42 provider_host, |
31 blob_storage_context, | 43 blob_storage_context, |
32 resource_type), | 44 resource_type), |
33 version_(provider_host_->running_hosted_version()) { | 45 version_(provider_host_->running_hosted_version()) { |
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
184 if (resource_id == kInvalidServiceWorkerResourceId) { | 196 if (resource_id == kInvalidServiceWorkerResourceId) { |
185 *out_status = CreateJobStatus::ERROR_OUT_OF_RESOURCE_IDS; | 197 *out_status = CreateJobStatus::ERROR_OUT_OF_RESOURCE_IDS; |
186 return nullptr; | 198 return nullptr; |
187 } | 199 } |
188 | 200 |
189 // Bypass the browser cache for initial installs and update checks after 24 | 201 // Bypass the browser cache for initial installs and update checks after 24 |
190 // hours have passed. | 202 // hours have passed. |
191 int extra_load_flags = 0; | 203 int extra_load_flags = 0; |
192 base::TimeDelta time_since_last_check = | 204 base::TimeDelta time_since_last_check = |
193 base::Time::Now() - registration->last_update_check(); | 205 base::Time::Now() - registration->last_update_check(); |
194 if (time_since_last_check > kServiceWorkerScriptMaxCacheAge || | 206 |
| 207 if (ShouldBypassCache(is_main_script, registration->update_via_cache()) || |
| 208 time_since_last_check > kServiceWorkerScriptMaxCacheAge || |
195 version_->force_bypass_cache_for_scripts()) { | 209 version_->force_bypass_cache_for_scripts()) { |
196 extra_load_flags = net::LOAD_BYPASS_CACHE; | 210 extra_load_flags = net::LOAD_BYPASS_CACHE; |
197 } | 211 } |
198 | 212 |
199 ServiceWorkerVersion* stored_version = registration->waiting_version() | 213 ServiceWorkerVersion* stored_version = registration->waiting_version() |
200 ? registration->waiting_version() | 214 ? registration->waiting_version() |
201 : registration->active_version(); | 215 : registration->active_version(); |
202 int64_t incumbent_resource_id = kInvalidServiceWorkerResourceId; | 216 int64_t incumbent_resource_id = kInvalidServiceWorkerResourceId; |
203 if (is_main_script) { | 217 if (is_main_script) { |
204 if (stored_version && stored_version->script_url() == request->url()) { | 218 if (stored_version && stored_version->script_url() == request->url()) { |
205 incumbent_resource_id = | 219 incumbent_resource_id = |
206 stored_version->script_cache_map()->LookupResourceId(request->url()); | 220 stored_version->script_cache_map()->LookupResourceId(request->url()); |
207 } | 221 } |
208 version_->embedded_worker()->OnURLJobCreatedForMainScript(); | 222 version_->embedded_worker()->OnURLJobCreatedForMainScript(); |
209 } | 223 } |
210 *out_status = incumbent_resource_id == kInvalidServiceWorkerResourceId | 224 *out_status = incumbent_resource_id == kInvalidServiceWorkerResourceId |
211 ? CreateJobStatus::WRITE_JOB | 225 ? CreateJobStatus::WRITE_JOB |
212 : CreateJobStatus::WRITE_JOB_WITH_INCUMBENT; | 226 : CreateJobStatus::WRITE_JOB_WITH_INCUMBENT; |
213 return new ServiceWorkerWriteToCacheJob( | 227 return new ServiceWorkerWriteToCacheJob( |
214 request, network_delegate, resource_type_, context_, version_.get(), | 228 request, network_delegate, resource_type_, context_, version_.get(), |
215 extra_load_flags, resource_id, incumbent_resource_id); | 229 extra_load_flags, resource_id, incumbent_resource_id); |
216 } | 230 } |
217 | 231 |
218 } // namespace content | 232 } // namespace content |
OLD | NEW |