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 3// found in the LICENSE file. 4 5#ifndef ServiceWorkerRegistration_h 6#define ServiceWorkerRegistration_h 7 8#include "core/dom/ActiveDOMObject.h" 9#include "core/events/EventTarget.h" 10#include "modules/serviceworkers/ServiceWorker.h" 11#include "public/platform/WebServiceWorkerRegistration.h" 12#include "public/platform/WebServiceWorkerRegistrationProxy.h" 13#include "wtf/OwnPtr.h" 14#include "wtf/PassOwnPtr.h" 15#include "wtf/PassRefPtr.h" 16#include "wtf/RefCounted.h" 17 18namespace blink { 19 20class ScriptPromise; 21class ScriptPromiseResolver; 22class ScriptState; 23class WebServiceWorkerProvider; 24 25class ServiceWorkerRegistration FINAL 26 : public RefCountedGarbageCollectedWillBeGarbageCollectedFinalized<ServiceWorkerRegistration> 27 , public ActiveDOMObject 28 , public EventTargetWithInlineData 29 , public WebServiceWorkerRegistrationProxy { 30 DEFINE_WRAPPERTYPEINFO(); 31 DEFINE_EVENT_TARGET_REFCOUNTING_WILL_BE_REMOVED(RefCountedGarbageCollected<ServiceWorkerRegistration>); 32 WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(ServiceWorkerRegistration); 33public: 34 // EventTarget overrides. 35 virtual const AtomicString& interfaceName() const OVERRIDE; 36 virtual ExecutionContext* executionContext() const OVERRIDE { return ActiveDOMObject::executionContext(); } 37 38 // WebServiceWorkerRegistrationProxy overrides. 39 virtual void dispatchUpdateFoundEvent() OVERRIDE; 40 virtual void setInstalling(WebServiceWorker*) OVERRIDE; 41 virtual void setWaiting(WebServiceWorker*) OVERRIDE; 42 virtual void setActive(WebServiceWorker*) OVERRIDE; 43 44 // For CallbackPromiseAdapter. 45 typedef WebServiceWorkerRegistration WebType; 46 static ServiceWorkerRegistration* from(ExecutionContext*, WebType* registration); 47 static ServiceWorkerRegistration* take(ScriptPromiseResolver*, WebType* registration); 48 static void dispose(WebType* registration); 49 50 PassRefPtrWillBeRawPtr<ServiceWorker> installing() { return m_installing.get(); } 51 PassRefPtrWillBeRawPtr<ServiceWorker> waiting() { return m_waiting.get(); } 52 PassRefPtrWillBeRawPtr<ServiceWorker> active() { return m_active.get(); } 53 54 String scope() const; 55 56 ScriptPromise unregister(ScriptState*); 57 58 DEFINE_ATTRIBUTE_EVENT_LISTENER(updatefound); 59 60 virtual void trace(Visitor*) OVERRIDE; 61 62private: 63 static ServiceWorkerRegistration* getOrCreate(ExecutionContext*, WebServiceWorkerRegistration*); 64 ServiceWorkerRegistration(ExecutionContext*, PassOwnPtr<WebServiceWorkerRegistration>); 65 66 // ActiveDOMObject overrides. 67 virtual bool hasPendingActivity() const OVERRIDE; 68 virtual void stop() OVERRIDE; 69 70 OwnPtr<WebServiceWorkerRegistration> m_outerRegistration; 71 WebServiceWorkerProvider* m_provider; 72 RefPtrWillBeMember<ServiceWorker> m_installing; 73 RefPtrWillBeMember<ServiceWorker> m_waiting; 74 RefPtrWillBeMember<ServiceWorker> m_active; 75 76 bool m_stopped; 77}; 78 79} // namespace blink 80 81#endif // ServiceWorkerRegistration_h 82