| Index: Source/modules/serviceworkers/ServiceWorkerRegistration.cpp
|
| diff --git a/Source/modules/serviceworkers/ServiceWorkerRegistration.cpp b/Source/modules/serviceworkers/ServiceWorkerRegistration.cpp
|
| index ed64100f932e181505add1178506e4b8efb8f8f9..a697c7f5d524d9873b1c9938373ed09ccaa08a3a 100644
|
| --- a/Source/modules/serviceworkers/ServiceWorkerRegistration.cpp
|
| +++ b/Source/modules/serviceworkers/ServiceWorkerRegistration.cpp
|
| @@ -88,7 +88,7 @@ PassRefPtrWillBeRawPtr<ServiceWorkerRegistration> ServiceWorkerRegistration::tak
|
| {
|
| if (!registration)
|
| return nullptr;
|
| - return create(resolver->scriptState()->executionContext(), adoptPtr(registration));
|
| + return getOrCreate(resolver->scriptState()->executionContext(), adoptPtr(registration));
|
| }
|
|
|
| void ServiceWorkerRegistration::dispose(WebType* registration)
|
| @@ -123,8 +123,18 @@ ScriptPromise ServiceWorkerRegistration::unregister(ScriptState* scriptState)
|
| return promise;
|
| }
|
|
|
| -PassRefPtrWillBeRawPtr<ServiceWorkerRegistration> ServiceWorkerRegistration::create(ExecutionContext* executionContext, PassOwnPtr<WebServiceWorkerRegistration> outerRegistration)
|
| +PassRefPtrWillBeRawPtr<ServiceWorkerRegistration> ServiceWorkerRegistration::getOrCreate(ExecutionContext* executionContext, PassOwnPtr<WebServiceWorkerRegistration> outerRegistration)
|
| {
|
| + if (!outerRegistration)
|
| + return nullptr;
|
| +
|
| + WebServiceWorkerRegistrationProxy* proxy = outerRegistration->proxy();
|
| + ServiceWorkerRegistration* existingRegistration = proxy ? proxy->unwrap() : 0;
|
| + if (existingRegistration) {
|
| + ASSERT(existingRegistration->executionContext() == executionContext);
|
| + return existingRegistration;
|
| + }
|
| +
|
| RefPtrWillBeRawPtr<ServiceWorkerRegistration> registration = adoptRefWillBeRefCountedGarbageCollected(new ServiceWorkerRegistration(executionContext, outerRegistration));
|
| registration->suspendIfNeeded();
|
| return registration.release();
|
| @@ -132,6 +142,7 @@ PassRefPtrWillBeRawPtr<ServiceWorkerRegistration> ServiceWorkerRegistration::cre
|
|
|
| ServiceWorkerRegistration::ServiceWorkerRegistration(ExecutionContext* executionContext, PassOwnPtr<WebServiceWorkerRegistration> outerRegistration)
|
| : ActiveDOMObject(executionContext)
|
| + , WebServiceWorkerRegistrationProxy(this)
|
| , m_outerRegistration(outerRegistration)
|
| , m_provider(0)
|
| {
|
|
|