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 18 namespace blink { 19 20 class ScriptPromise; 21 class ScriptPromiseResolver; 22 class ScriptState; 23 class WebServiceWorkerProvider; 24 25 class 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); 33 public: 34 // EventTarget overrides. 35 virtual const AtomicString& interfaceName() const OVERRIDE; executionContext()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 installing()50 PassRefPtrWillBeRawPtr<ServiceWorker> installing() { return m_installing.get(); } waiting()51 PassRefPtrWillBeRawPtr<ServiceWorker> waiting() { return m_waiting.get(); } active()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 62 private: 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