Index: content/child/service_worker/service_worker_dispatcher.cc |
diff --git a/content/child/service_worker/service_worker_dispatcher.cc b/content/child/service_worker/service_worker_dispatcher.cc |
index ebd66c5cb63994c8a0432d8fab9421d59d488e7d..7c0f8b417ab6a0121e31d5632899be563f24e60d 100644 |
--- a/content/child/service_worker/service_worker_dispatcher.cc |
+++ b/content/child/service_worker/service_worker_dispatcher.cc |
@@ -120,6 +120,7 @@ void ServiceWorkerDispatcher::RegisterServiceWorker( |
int provider_id, |
const GURL& pattern, |
const GURL& script_url, |
+ blink::WebServiceWorkerUpdateViaCache update_via_cache, |
std::unique_ptr<WebServiceWorkerRegistrationCallbacks> callbacks) { |
DCHECK(callbacks); |
@@ -134,7 +135,7 @@ void ServiceWorkerDispatcher::RegisterServiceWorker( |
} |
int request_id = pending_registration_callbacks_.Add(std::move(callbacks)); |
- ServiceWorkerRegistrationOptions options(pattern); |
+ ServiceWorkerRegistrationOptions options(pattern, update_via_cache); |
TRACE_EVENT_ASYNC_BEGIN2("ServiceWorker", |
"ServiceWorkerDispatcher::RegisterServiceWorker", |
@@ -185,6 +186,7 @@ void ServiceWorkerDispatcher::GetRegistration( |
int request_id = |
pending_get_registration_callbacks_.Add(std::move(callbacks)); |
+ |
TRACE_EVENT_ASYNC_BEGIN1("ServiceWorker", |
"ServiceWorkerDispatcher::GetRegistration", |
request_id, |
@@ -372,8 +374,12 @@ ServiceWorkerDispatcher::GetOrAdoptRegistration( |
Adopt(attrs.active); |
RegistrationObjectMap::iterator found = registrations_.find(info.handle_id); |
- if (found != registrations_.end()) |
+ if (found != registrations_.end()) { |
+ if (found->second->UpdateViaCache() != registration_ref->update_via_cache()) |
+ found->second->SetRegistrationHandleReference( |
+ std::move(registration_ref)); |
return found->second; |
+ } |
// WebServiceWorkerRegistrationImpl constructor calls |
// AddServiceWorkerRegistration. |