Upstream version 9.38.198.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 "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 RefCountedWillBeRefCountedGarbageCollected<ServiceWorkerRegistration>
27     , public ActiveDOMObject
28     , public EventTargetWithInlineData
29     , public WebServiceWorkerRegistrationProxy {
30     REFCOUNTED_EVENT_TARGET(ServiceWorkerRegistration);
31     WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(ServiceWorkerRegistration);
32 public:
33     virtual ~ServiceWorkerRegistration() { }
34
35     // EventTarget overrides.
36     virtual const AtomicString& interfaceName() const OVERRIDE;
37     virtual ExecutionContext* executionContext() const OVERRIDE { return ActiveDOMObject::executionContext(); }
38
39     // WebServiceWorkerRegistrationProxy overrides.
40     virtual void dispatchUpdateFoundEvent() OVERRIDE;
41     virtual void setInstalling(WebServiceWorker*) OVERRIDE;
42     virtual void setWaiting(WebServiceWorker*) OVERRIDE;
43     virtual void setActive(WebServiceWorker*) OVERRIDE;
44
45     // For CallbackPromiseAdapter.
46     typedef WebServiceWorkerRegistration WebType;
47     static PassRefPtrWillBeRawPtr<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
62 private:
63     static PassRefPtrWillBeRawPtr<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