Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / modules / serviceworkers / ServiceWorkerRegistration.h
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 "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"
18
19 namespace blink {
20
21 class ScriptPromise;
22 class ScriptPromiseResolver;
23 class ScriptState;
24 class WebServiceWorkerProvider;
25
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);
35 public:
36     // EventTarget overrides.
37     virtual const AtomicString& interfaceName() const override;
38     virtual ExecutionContext* executionContext() const override { return ActiveDOMObject::executionContext(); }
39
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;
45
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);
51
52     PassRefPtrWillBeRawPtr<ServiceWorker> installing() { return m_installing.get(); }
53     PassRefPtrWillBeRawPtr<ServiceWorker> waiting() { return m_waiting.get(); }
54     PassRefPtrWillBeRawPtr<ServiceWorker> active() { return m_active.get(); }
55
56     String scope() const;
57
58     WebServiceWorkerRegistration* webRegistration() { return m_outerRegistration.get(); }
59
60     ScriptPromise unregister(ScriptState*);
61
62     DEFINE_ATTRIBUTE_EVENT_LISTENER(updatefound);
63
64     virtual void trace(Visitor*) override;
65
66 private:
67     static ServiceWorkerRegistration* getOrCreate(ExecutionContext*, WebServiceWorkerRegistration*);
68     ServiceWorkerRegistration(ExecutionContext*, PassOwnPtr<WebServiceWorkerRegistration>);
69
70     // ActiveDOMObject overrides.
71     virtual bool hasPendingActivity() const override;
72     virtual void stop() override;
73
74     OwnPtr<WebServiceWorkerRegistration> m_outerRegistration;
75     WebServiceWorkerProvider* m_provider;
76     RefPtrWillBeMember<ServiceWorker> m_installing;
77     RefPtrWillBeMember<ServiceWorker> m_waiting;
78     RefPtrWillBeMember<ServiceWorker> m_active;
79
80     bool m_stopped;
81 };
82
83 } // namespace blink
84
85 #endif // ServiceWorkerRegistration_h