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

Side by Side Diff: content/browser/service_worker/service_worker_context_request_handler.cc

Issue 2771823002: Implement updateViaCache flag and no-cache by default for main service worker scripts
Patch Set: fix IPC Created 3 years, 4 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 unified diff | Download patch
OLDNEW
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698