• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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