Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(65)

Side by Side Diff: Source/modules/serviceworkers/ServiceWorkerRegistration.h

Issue 1317473002: ServiceWorker: Clean up ownership management of WebServiceWorkerRegistration (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: incorporate review comment Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef ServiceWorkerRegistration_h 5 #ifndef ServiceWorkerRegistration_h
6 #define ServiceWorkerRegistration_h 6 #define ServiceWorkerRegistration_h
7 7
8 #include "bindings/core/v8/ScriptPromiseResolver.h"
8 #include "core/dom/ActiveDOMObject.h" 9 #include "core/dom/ActiveDOMObject.h"
9 #include "core/events/EventTarget.h" 10 #include "core/events/EventTarget.h"
10 #include "modules/serviceworkers/ServiceWorker.h" 11 #include "modules/serviceworkers/ServiceWorker.h"
11 #include "modules/serviceworkers/ServiceWorkerRegistration.h" 12 #include "modules/serviceworkers/ServiceWorkerRegistration.h"
12 #include "platform/Supplementable.h" 13 #include "platform/Supplementable.h"
13 #include "public/platform/modules/serviceworker/WebServiceWorkerRegistration.h" 14 #include "public/platform/modules/serviceworker/WebServiceWorkerRegistration.h"
14 #include "public/platform/modules/serviceworker/WebServiceWorkerRegistrationProx y.h" 15 #include "public/platform/modules/serviceworker/WebServiceWorkerRegistrationProx y.h"
15 #include "wtf/OwnPtr.h" 16 #include "wtf/OwnPtr.h"
16 #include "wtf/PassOwnPtr.h" 17 #include "wtf/PassOwnPtr.h"
17 #include "wtf/PassRefPtr.h" 18 #include "wtf/PassRefPtr.h"
18 #include "wtf/RefCounted.h" 19 #include "wtf/RefCounted.h"
19 20
20 namespace blink { 21 namespace blink {
21 22
22 class ScriptPromise; 23 class ScriptPromise;
23 class ScriptPromiseResolver;
24 class ScriptState; 24 class ScriptState;
25 class WebServiceWorkerProvider; 25 class WebServiceWorkerProvider;
26 26
27 class ServiceWorkerRegistration final 27 class ServiceWorkerRegistration final
28 : public RefCountedGarbageCollectedEventTargetWithInlineData<ServiceWorkerRe gistration> 28 : public RefCountedGarbageCollectedEventTargetWithInlineData<ServiceWorkerRe gistration>
29 , public ActiveDOMObject 29 , public ActiveDOMObject
30 , public WebServiceWorkerRegistrationProxy 30 , public WebServiceWorkerRegistrationProxy
31 , public HeapSupplementable<ServiceWorkerRegistration> { 31 , public HeapSupplementable<ServiceWorkerRegistration> {
32 DEFINE_WRAPPERTYPEINFO(); 32 DEFINE_WRAPPERTYPEINFO();
33 REFCOUNTED_GARBAGE_COLLECTED_EVENT_TARGET(ServiceWorkerRegistration); 33 REFCOUNTED_GARBAGE_COLLECTED_EVENT_TARGET(ServiceWorkerRegistration);
34 USING_GARBAGE_COLLECTED_MIXIN(ServiceWorkerRegistration); 34 USING_GARBAGE_COLLECTED_MIXIN(ServiceWorkerRegistration);
35 public: 35 public:
36 // EventTarget overrides. 36 // EventTarget overrides.
37 const AtomicString& interfaceName() const override; 37 const AtomicString& interfaceName() const override;
38 ExecutionContext* executionContext() const override { return ActiveDOMObject ::executionContext(); } 38 ExecutionContext* executionContext() const override { return ActiveDOMObject ::executionContext(); }
39 39
40 // WebServiceWorkerRegistrationProxy overrides. 40 // WebServiceWorkerRegistrationProxy overrides.
41 void dispatchUpdateFoundEvent() override; 41 void dispatchUpdateFoundEvent() override;
42 void setInstalling(WebServiceWorker*) override; 42 void setInstalling(WebServiceWorker*) override;
43 void setWaiting(WebServiceWorker*) override; 43 void setWaiting(WebServiceWorker*) override;
44 void setActive(WebServiceWorker*) override; 44 void setActive(WebServiceWorker*) override;
45 45
46 static ServiceWorkerRegistration* from(ExecutionContext*, WebServiceWorkerRe gistration*); 46 static ServiceWorkerRegistration* create(ExecutionContext*, PassOwnPtr<WebSe rviceWorkerRegistration>);
47 static ServiceWorkerRegistration* take(ScriptPromiseResolver*, WebServiceWor kerRegistration*);
48 static void dispose(WebServiceWorkerRegistration*);
49 47
50 ServiceWorker* installing() { return m_installing; } 48 ServiceWorker* installing() { return m_installing; }
51 ServiceWorker* waiting() { return m_waiting; } 49 ServiceWorker* waiting() { return m_waiting; }
52 ServiceWorker* active() { return m_active; } 50 ServiceWorker* active() { return m_active; }
53 51
54 String scope() const; 52 String scope() const;
55 53
56 WebServiceWorkerRegistration* webRegistration() { return m_outerRegistration .get(); } 54 WebServiceWorkerRegistration* webRegistration() { return m_outerRegistration .get(); }
57 55
58 ScriptPromise update(ScriptState*); 56 ScriptPromise update(ScriptState*);
59 ScriptPromise unregister(ScriptState*); 57 ScriptPromise unregister(ScriptState*);
60 58
61 DEFINE_ATTRIBUTE_EVENT_LISTENER(updatefound); 59 DEFINE_ATTRIBUTE_EVENT_LISTENER(updatefound);
62 60
63 ~ServiceWorkerRegistration() override; 61 ~ServiceWorkerRegistration() override;
64 62
65 // Eager finalization needed to promptly release owned WebServiceWorkerRegis tration. 63 // Eager finalization needed to promptly release owned WebServiceWorkerRegis tration.
66 EAGERLY_FINALIZE(); 64 EAGERLY_FINALIZE();
67 DECLARE_VIRTUAL_TRACE(); 65 DECLARE_VIRTUAL_TRACE();
68 66
69 private: 67 private:
70 static ServiceWorkerRegistration* getOrCreate(ExecutionContext*, WebServiceW orkerRegistration*);
71 ServiceWorkerRegistration(ExecutionContext*, PassOwnPtr<WebServiceWorkerRegi stration>); 68 ServiceWorkerRegistration(ExecutionContext*, PassOwnPtr<WebServiceWorkerRegi stration>);
72 69
73 // ActiveDOMObject overrides. 70 // ActiveDOMObject overrides.
74 bool hasPendingActivity() const override; 71 bool hasPendingActivity() const override;
75 void stop() override; 72 void stop() override;
76 73
77 OwnPtr<WebServiceWorkerRegistration> m_outerRegistration; 74 OwnPtr<WebServiceWorkerRegistration> m_outerRegistration;
78 WebServiceWorkerProvider* m_provider; 75 WebServiceWorkerProvider* m_provider;
79 Member<ServiceWorker> m_installing; 76 Member<ServiceWorker> m_installing;
80 Member<ServiceWorker> m_waiting; 77 Member<ServiceWorker> m_waiting;
81 Member<ServiceWorker> m_active; 78 Member<ServiceWorker> m_active;
82 79
83 bool m_stopped; 80 bool m_stopped;
84 }; 81 };
85 82
86 class ServiceWorkerRegistrationArray { 83 class ServiceWorkerRegistrationArray {
87 STATIC_ONLY(ServiceWorkerRegistrationArray); 84 STATIC_ONLY(ServiceWorkerRegistrationArray);
88 public: 85 public:
89 static HeapVector<Member<ServiceWorkerRegistration>> take(ScriptPromiseResol ver* resolver, PassOwnPtr<WebVector<WebServiceWorkerRegistration*>> webServiceWo rkerRegistrations) 86 static HeapVector<Member<ServiceWorkerRegistration>> take(ScriptPromiseResol ver* resolver, PassOwnPtr<WebVector<WebServiceWorkerRegistration*>> webServiceWo rkerRegistrations)
90 { 87 {
91 HeapVector<Member<ServiceWorkerRegistration>> registrations; 88 HeapVector<Member<ServiceWorkerRegistration>> registrations;
92 for (WebServiceWorkerRegistration* registration : *webServiceWorkerRegis trations) 89 for (WebServiceWorkerRegistration* registration : *webServiceWorkerRegis trations)
93 registrations.append(ServiceWorkerRegistration::take(resolver, regis tration)); 90 registrations.append(ServiceWorkerRegistration::create(resolver->exe cutionContext(), adoptPtr(registration)));
94 return registrations; 91 return registrations;
95 } 92 }
96
97 static void dispose(PassOwnPtr<WebVector<WebServiceWorkerRegistration*>> web ServiceWorkerRegistrations)
98 {
99 for (WebServiceWorkerRegistration* registration : *webServiceWorkerRegis trations)
100 ServiceWorkerRegistration::dispose(registration);
101 }
102 }; 93 };
103 94
104 } // namespace blink 95 } // namespace blink
105 96
106 #endif // ServiceWorkerRegistration_h 97 #endif // ServiceWorkerRegistration_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698