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

Side by Side Diff: Source/modules/serviceworkers/ServiceWorkerContainer.cpp

Issue 1233173002: Have ScriptPromiseResolver on the Oilpan heap always. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: fix webusb ScriptPromiseResolver usage Created 5 years, 4 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 /* 1 /*
2 * Copyright (C) 2013 Google Inc. All rights reserved. 2 * Copyright (C) 2013 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
52 #include "public/platform/WebServiceWorker.h" 52 #include "public/platform/WebServiceWorker.h"
53 #include "public/platform/WebServiceWorkerProvider.h" 53 #include "public/platform/WebServiceWorkerProvider.h"
54 #include "public/platform/WebServiceWorkerRegistration.h" 54 #include "public/platform/WebServiceWorkerRegistration.h"
55 #include "public/platform/WebString.h" 55 #include "public/platform/WebString.h"
56 #include "public/platform/WebURL.h" 56 #include "public/platform/WebURL.h"
57 57
58 namespace blink { 58 namespace blink {
59 59
60 class RegistrationCallback : public WebServiceWorkerProvider::WebServiceWorkerRe gistrationCallbacks { 60 class RegistrationCallback : public WebServiceWorkerProvider::WebServiceWorkerRe gistrationCallbacks {
61 public: 61 public:
62 explicit RegistrationCallback(PassRefPtrWillBeRawPtr<ScriptPromiseResolver> resolver) 62 explicit RegistrationCallback(ScriptPromiseResolver* resolver)
63 : m_resolver(resolver) { } 63 : m_resolver(resolver) { }
64 ~RegistrationCallback() override { } 64 ~RegistrationCallback() override { }
65 65
66 void onSuccess(WebServiceWorkerRegistration* registration) override 66 void onSuccess(WebServiceWorkerRegistration* registration) override
67 { 67 {
68 if (!m_resolver->executionContext() || m_resolver->executionContext()->a ctiveDOMObjectsAreStopped()) 68 if (!m_resolver->executionContext() || m_resolver->executionContext()->a ctiveDOMObjectsAreStopped())
69 return; 69 return;
70 m_resolver->resolve(ServiceWorkerRegistration::take(m_resolver.get(), re gistration)); 70 m_resolver->resolve(ServiceWorkerRegistration::take(m_resolver.get(), re gistration));
71 } 71 }
72 72
73 // Takes ownership of |errorRaw|. 73 // Takes ownership of |errorRaw|.
74 void onError(WebServiceWorkerError* errorRaw) override 74 void onError(WebServiceWorkerError* errorRaw) override
75 { 75 {
76 OwnPtr<WebServiceWorkerError> error = adoptPtr(errorRaw); 76 OwnPtr<WebServiceWorkerError> error = adoptPtr(errorRaw);
77 if (!m_resolver->executionContext() || m_resolver->executionContext()->a ctiveDOMObjectsAreStopped()) 77 if (!m_resolver->executionContext() || m_resolver->executionContext()->a ctiveDOMObjectsAreStopped())
78 return; 78 return;
79 m_resolver->reject(ServiceWorkerError::take(m_resolver.get(), error.rele ase())); 79 m_resolver->reject(ServiceWorkerError::take(m_resolver.get(), error.rele ase()));
80 } 80 }
81 81
82 private: 82 private:
83 RefPtrWillBePersistent<ScriptPromiseResolver> m_resolver; 83 Persistent<ScriptPromiseResolver> m_resolver;
84 WTF_MAKE_NONCOPYABLE(RegistrationCallback); 84 WTF_MAKE_NONCOPYABLE(RegistrationCallback);
85 }; 85 };
86 86
87 class GetRegistrationCallback : public WebServiceWorkerProvider::WebServiceWorke rGetRegistrationCallbacks { 87 class GetRegistrationCallback : public WebServiceWorkerProvider::WebServiceWorke rGetRegistrationCallbacks {
88 public: 88 public:
89 explicit GetRegistrationCallback(PassRefPtrWillBeRawPtr<ScriptPromiseResolve r> resolver) 89 explicit GetRegistrationCallback(ScriptPromiseResolver* resolver)
90 : m_resolver(resolver) { } 90 : m_resolver(resolver) { }
91 ~GetRegistrationCallback() override { } 91 ~GetRegistrationCallback() override { }
92 92
93 void onSuccess(WebServiceWorkerRegistration* registration) override 93 void onSuccess(WebServiceWorkerRegistration* registration) override
94 { 94 {
95 if (!m_resolver->executionContext() || m_resolver->executionContext()->a ctiveDOMObjectsAreStopped()) 95 if (!m_resolver->executionContext() || m_resolver->executionContext()->a ctiveDOMObjectsAreStopped())
96 return; 96 return;
97 if (!registration) { 97 if (!registration) {
98 // Resolve the promise with undefined. 98 // Resolve the promise with undefined.
99 m_resolver->resolve(); 99 m_resolver->resolve();
100 return; 100 return;
101 } 101 }
102 m_resolver->resolve(ServiceWorkerRegistration::take(m_resolver.get(), re gistration)); 102 m_resolver->resolve(ServiceWorkerRegistration::take(m_resolver.get(), re gistration));
103 } 103 }
104 104
105 // Takes ownership of |errorRaw|. 105 // Takes ownership of |errorRaw|.
106 void onError(WebServiceWorkerError* errorRaw) override 106 void onError(WebServiceWorkerError* errorRaw) override
107 { 107 {
108 OwnPtr<WebServiceWorkerError> error = adoptPtr(errorRaw); 108 OwnPtr<WebServiceWorkerError> error = adoptPtr(errorRaw);
109 if (!m_resolver->executionContext() || m_resolver->executionContext()->a ctiveDOMObjectsAreStopped()) 109 if (!m_resolver->executionContext() || m_resolver->executionContext()->a ctiveDOMObjectsAreStopped())
110 return; 110 return;
111 m_resolver->reject(ServiceWorkerError::take(m_resolver.get(), error.rele ase())); 111 m_resolver->reject(ServiceWorkerError::take(m_resolver.get(), error.rele ase()));
112 } 112 }
113 113
114 private: 114 private:
115 RefPtrWillBePersistent<ScriptPromiseResolver> m_resolver; 115 Persistent<ScriptPromiseResolver> m_resolver;
116 WTF_MAKE_NONCOPYABLE(GetRegistrationCallback); 116 WTF_MAKE_NONCOPYABLE(GetRegistrationCallback);
117 }; 117 };
118 118
119 class GetRegistrationsCallback : public WebServiceWorkerProvider::WebServiceWork erGetRegistrationsCallbacks { 119 class GetRegistrationsCallback : public WebServiceWorkerProvider::WebServiceWork erGetRegistrationsCallbacks {
120 public: 120 public:
121 explicit GetRegistrationsCallback(PassRefPtrWillBeRawPtr<ScriptPromiseResolv er> resolver) 121 explicit GetRegistrationsCallback(ScriptPromiseResolver* resolver)
122 : m_resolver(resolver) { } 122 : m_resolver(resolver) { }
123 ~GetRegistrationsCallback() override { } 123 ~GetRegistrationsCallback() override { }
124 124
125 // Takes ownership of |registrationsRaw|. 125 // Takes ownership of |registrationsRaw|.
126 void onSuccess(WebVector<WebServiceWorkerRegistration*>* registrationsRaw) o verride 126 void onSuccess(WebVector<WebServiceWorkerRegistration*>* registrationsRaw) o verride
127 { 127 {
128 OwnPtr<WebVector<WebServiceWorkerRegistration*>> registrations = adoptPt r(registrationsRaw); 128 OwnPtr<WebVector<WebServiceWorkerRegistration*>> registrations = adoptPt r(registrationsRaw);
129 if (!m_resolver->executionContext() || m_resolver->executionContext()->a ctiveDOMObjectsAreStopped()) 129 if (!m_resolver->executionContext() || m_resolver->executionContext()->a ctiveDOMObjectsAreStopped())
130 return; 130 return;
131 m_resolver->resolve(ServiceWorkerRegistrationArray::take(m_resolver.get( ), registrations.release())); 131 m_resolver->resolve(ServiceWorkerRegistrationArray::take(m_resolver.get( ), registrations.release()));
132 } 132 }
133 133
134 // Takes ownership of |errorRaw|. 134 // Takes ownership of |errorRaw|.
135 void onError(WebServiceWorkerError* errorRaw) override 135 void onError(WebServiceWorkerError* errorRaw) override
136 { 136 {
137 OwnPtr<WebServiceWorkerError> error = adoptPtr(errorRaw); 137 OwnPtr<WebServiceWorkerError> error = adoptPtr(errorRaw);
138 if (!m_resolver->executionContext() || m_resolver->executionContext()->a ctiveDOMObjectsAreStopped()) 138 if (!m_resolver->executionContext() || m_resolver->executionContext()->a ctiveDOMObjectsAreStopped())
139 return; 139 return;
140 m_resolver->reject(ServiceWorkerError::take(m_resolver.get(), error.rele ase())); 140 m_resolver->reject(ServiceWorkerError::take(m_resolver.get(), error.rele ase()));
141 } 141 }
142 142
143 private: 143 private:
144 RefPtrWillBePersistent<ScriptPromiseResolver> m_resolver; 144 Persistent<ScriptPromiseResolver> m_resolver;
145 WTF_MAKE_NONCOPYABLE(GetRegistrationsCallback); 145 WTF_MAKE_NONCOPYABLE(GetRegistrationsCallback);
146 }; 146 };
147 147
148 class ServiceWorkerContainer::GetRegistrationForReadyCallback : public WebServic eWorkerProvider::WebServiceWorkerGetRegistrationForReadyCallbacks { 148 class ServiceWorkerContainer::GetRegistrationForReadyCallback : public WebServic eWorkerProvider::WebServiceWorkerGetRegistrationForReadyCallbacks {
149 public: 149 public:
150 explicit GetRegistrationForReadyCallback(ReadyProperty* ready) 150 explicit GetRegistrationForReadyCallback(ReadyProperty* ready)
151 : m_ready(ready) { } 151 : m_ready(ready) { }
152 ~GetRegistrationForReadyCallback() { } 152 ~GetRegistrationForReadyCallback() { }
153 void onSuccess(WebServiceWorkerRegistration* registration) override 153 void onSuccess(WebServiceWorkerRegistration* registration) override
154 { 154 {
(...skipping 28 matching lines...) Expand all
183 DEFINE_TRACE(ServiceWorkerContainer) 183 DEFINE_TRACE(ServiceWorkerContainer)
184 { 184 {
185 visitor->trace(m_controller); 185 visitor->trace(m_controller);
186 visitor->trace(m_ready); 186 visitor->trace(m_ready);
187 RefCountedGarbageCollectedEventTargetWithInlineData<ServiceWorkerContainer>: :trace(visitor); 187 RefCountedGarbageCollectedEventTargetWithInlineData<ServiceWorkerContainer>: :trace(visitor);
188 ContextLifecycleObserver::trace(visitor); 188 ContextLifecycleObserver::trace(visitor);
189 } 189 }
190 190
191 ScriptPromise ServiceWorkerContainer::registerServiceWorker(ScriptState* scriptS tate, const String& url, const RegistrationOptions& options) 191 ScriptPromise ServiceWorkerContainer::registerServiceWorker(ScriptState* scriptS tate, const String& url, const RegistrationOptions& options)
192 { 192 {
193 RefPtrWillBeRawPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver:: create(scriptState); 193 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ;
194 ScriptPromise promise = resolver->promise(); 194 ScriptPromise promise = resolver->promise();
195 195
196 if (!m_provider) { 196 if (!m_provider) {
197 resolver->reject(DOMException::create(InvalidStateError, "Failed to regi ster a ServiceWorker: The document is in an invalid state.")); 197 resolver->reject(DOMException::create(InvalidStateError, "Failed to regi ster a ServiceWorker: The document is in an invalid state."));
198 return promise; 198 return promise;
199 } 199 }
200 200
201 ExecutionContext* executionContext = scriptState->executionContext(); 201 ExecutionContext* executionContext = scriptState->executionContext();
202 // FIXME: May be null due to worker termination: http://crbug.com/413518. 202 // FIXME: May be null due to worker termination: http://crbug.com/413518.
203 if (!executionContext) 203 if (!executionContext)
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
246 return promise; 246 return promise;
247 } 247 }
248 248
249 m_provider->registerServiceWorker(patternURL, scriptURL, new RegistrationCal lback(resolver)); 249 m_provider->registerServiceWorker(patternURL, scriptURL, new RegistrationCal lback(resolver));
250 250
251 return promise; 251 return promise;
252 } 252 }
253 253
254 ScriptPromise ServiceWorkerContainer::getRegistration(ScriptState* scriptState, const String& documentURL) 254 ScriptPromise ServiceWorkerContainer::getRegistration(ScriptState* scriptState, const String& documentURL)
255 { 255 {
256 RefPtrWillBeRawPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver:: create(scriptState); 256 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ;
257 ScriptPromise promise = resolver->promise(); 257 ScriptPromise promise = resolver->promise();
258 258
259 if (!m_provider) { 259 if (!m_provider) {
260 resolver->reject(DOMException::create(InvalidStateError, "Failed to get a ServiceWorkerRegistration: The document is in an invalid state.")); 260 resolver->reject(DOMException::create(InvalidStateError, "Failed to get a ServiceWorkerRegistration: The document is in an invalid state."));
261 return promise; 261 return promise;
262 } 262 }
263 263
264 ExecutionContext* executionContext = scriptState->executionContext(); 264 ExecutionContext* executionContext = scriptState->executionContext();
265 // FIXME: May be null due to worker termination: http://crbug.com/413518. 265 // FIXME: May be null due to worker termination: http://crbug.com/413518.
266 if (!executionContext) 266 if (!executionContext)
(...skipping 19 matching lines...) Expand all
286 resolver->reject(DOMException::create(SecurityError, "Failed to get a Se rviceWorkerRegistration: The origin of the provided documentURL ('" + documentUR LOrigin->toString() + "') does not match the current origin ('" + documentOrigin ->toString() + "').")); 286 resolver->reject(DOMException::create(SecurityError, "Failed to get a Se rviceWorkerRegistration: The origin of the provided documentURL ('" + documentUR LOrigin->toString() + "') does not match the current origin ('" + documentOrigin ->toString() + "')."));
287 return promise; 287 return promise;
288 } 288 }
289 m_provider->getRegistration(completedURL, new GetRegistrationCallback(resolv er)); 289 m_provider->getRegistration(completedURL, new GetRegistrationCallback(resolv er));
290 290
291 return promise; 291 return promise;
292 } 292 }
293 293
294 ScriptPromise ServiceWorkerContainer::getRegistrations(ScriptState* scriptState) 294 ScriptPromise ServiceWorkerContainer::getRegistrations(ScriptState* scriptState)
295 { 295 {
296 RefPtrWillBeRawPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver:: create(scriptState); 296 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ;
297 ScriptPromise promise = resolver->promise(); 297 ScriptPromise promise = resolver->promise();
298 298
299 if (!m_provider) { 299 if (!m_provider) {
300 resolver->reject(DOMException::create(InvalidStateError, "Failed to get ServiceWorkerRegistration objects: The document is in an invalid state.")); 300 resolver->reject(DOMException::create(InvalidStateError, "Failed to get ServiceWorkerRegistration objects: The document is in an invalid state."));
301 return promise; 301 return promise;
302 } 302 }
303 303
304 ExecutionContext* executionContext = scriptState->executionContext(); 304 ExecutionContext* executionContext = scriptState->executionContext();
305 RefPtr<SecurityOrigin> documentOrigin = executionContext->securityOrigin(); 305 RefPtr<SecurityOrigin> documentOrigin = executionContext->securityOrigin();
306 String errorMessage; 306 String errorMessage;
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
390 return; 390 return;
391 391
392 if (ServiceWorkerContainerClient* client = ServiceWorkerContainerClient::fro m(executionContext)) { 392 if (ServiceWorkerContainerClient* client = ServiceWorkerContainerClient::fro m(executionContext)) {
393 m_provider = client->provider(); 393 m_provider = client->provider();
394 if (m_provider) 394 if (m_provider)
395 m_provider->setClient(this); 395 m_provider->setClient(this);
396 } 396 }
397 } 397 }
398 398
399 } // namespace blink 399 } // namespace blink
OLDNEW
« no previous file with comments | « Source/modules/serviceworkers/ServiceWorkerClients.cpp ('k') | Source/modules/serviceworkers/ServiceWorkerGlobalScope.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698