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.
5 #ifndef ServiceWorkerRegistration_h
6 #define ServiceWorkerRegistration_h
8 #include "core/dom/ActiveDOMObject.h"
9 #include "core/events/EventTarget.h"
10 #include "modules/serviceworkers/ServiceWorker.h"
11 #include "platform/Supplementable.h"
12 #include "public/platform/WebServiceWorkerRegistration.h"
13 #include "public/platform/WebServiceWorkerRegistrationProxy.h"
14 #include "wtf/OwnPtr.h"
15 #include "wtf/PassOwnPtr.h"
16 #include "wtf/PassRefPtr.h"
17 #include "wtf/RefCounted.h"
22 class ScriptPromiseResolver;
24 class WebServiceWorkerProvider;
26 class ServiceWorkerRegistration final
27 : public RefCountedGarbageCollectedWillBeGarbageCollectedFinalized<ServiceWorkerRegistration>
28 , public ActiveDOMObject
29 , public EventTargetWithInlineData
30 , public WebServiceWorkerRegistrationProxy
31 , public HeapSupplementable<ServiceWorkerRegistration> {
32 DEFINE_WRAPPERTYPEINFO();
33 DEFINE_EVENT_TARGET_REFCOUNTING_WILL_BE_REMOVED(RefCountedGarbageCollected<ServiceWorkerRegistration>);
34 USING_GARBAGE_COLLECTED_MIXIN(ServiceWorkerRegistration);
36 // EventTarget overrides.
37 virtual const AtomicString& interfaceName() const override;
38 virtual ExecutionContext* executionContext() const override { return ActiveDOMObject::executionContext(); }
40 // WebServiceWorkerRegistrationProxy overrides.
41 virtual void dispatchUpdateFoundEvent() override;
42 virtual void setInstalling(WebServiceWorker*) override;
43 virtual void setWaiting(WebServiceWorker*) override;
44 virtual void setActive(WebServiceWorker*) override;
46 // For CallbackPromiseAdapter.
47 typedef WebServiceWorkerRegistration WebType;
48 static ServiceWorkerRegistration* from(ExecutionContext*, WebType* registration);
49 static ServiceWorkerRegistration* take(ScriptPromiseResolver*, WebType* registration);
50 static void dispose(WebType* registration);
52 PassRefPtrWillBeRawPtr<ServiceWorker> installing() { return m_installing.get(); }
53 PassRefPtrWillBeRawPtr<ServiceWorker> waiting() { return m_waiting.get(); }
54 PassRefPtrWillBeRawPtr<ServiceWorker> active() { return m_active.get(); }
58 WebServiceWorkerRegistration* webRegistration() { return m_outerRegistration.get(); }
60 ScriptPromise unregister(ScriptState*);
62 DEFINE_ATTRIBUTE_EVENT_LISTENER(updatefound);
64 virtual void trace(Visitor*) override;
67 static ServiceWorkerRegistration* getOrCreate(ExecutionContext*, WebServiceWorkerRegistration*);
68 ServiceWorkerRegistration(ExecutionContext*, PassOwnPtr<WebServiceWorkerRegistration>);
70 // ActiveDOMObject overrides.
71 virtual bool hasPendingActivity() const override;
72 virtual void stop() override;
74 OwnPtr<WebServiceWorkerRegistration> m_outerRegistration;
75 WebServiceWorkerProvider* m_provider;
76 RefPtrWillBeMember<ServiceWorker> m_installing;
77 RefPtrWillBeMember<ServiceWorker> m_waiting;
78 RefPtrWillBeMember<ServiceWorker> m_active;
85 #endif // ServiceWorkerRegistration_h