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

Unified Diff: third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerRegistration.cpp

Issue 2054203002: service worker: Fix the type of an update promise reject value (Closed) Base URL: https://chromium.googlesource.com/chromium/src@master
Patch Set: Created 4 years, 6 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 side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerRegistration.cpp
diff --git a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerRegistration.cpp b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerRegistration.cpp
index 6572f6da70cf6fe65b34628bb887eeeba2989cec..19f5416330ea994fc89dd639cc8accf24ef9c077 100644
--- a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerRegistration.cpp
+++ b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerRegistration.cpp
@@ -18,6 +18,47 @@
namespace blink {
+namespace {
+
+class UpdateCallbacks : public WebServiceWorkerRegistration::WebServiceWorkerUpdateCallbacks {
+public:
+ explicit UpdateCallbacks(ScriptPromiseResolver* resolver)
+ : m_resolver(resolver) {}
+
+ ~UpdateCallbacks() override {}
+
+ void onSuccess() override
+ {
+ if (!m_resolver->getExecutionContext() || m_resolver->getExecutionContext()->activeDOMObjectsAreStopped())
+ return;
+ m_resolver->resolve();
+ }
+
+ void onError(const WebServiceWorkerError& error) override
+ {
+ if (!m_resolver->getExecutionContext() || m_resolver->getExecutionContext()->activeDOMObjectsAreStopped())
+ return;
+ switch (error.errorType) {
+ case WebServiceWorkerError::ErrorTypeNetwork:
+ case WebServiceWorkerError::ErrorTypeScriptEvaluateFailed:
+ case WebServiceWorkerError::ErrorTypeType: {
falken 2016/06/14 02:27:53 Can you explain why are network, script evaluate,
e_hakkinen 2016/06/16 20:55:14 ServiceWorkerError::take returns a DOMException wh
falken 2016/06/17 02:12:14 I see. Looks like that changed here: https://githu
e_hakkinen 2016/06/17 12:29:18 Yes, but that tests the register code path and not
+ ScriptState* scriptState = m_resolver->getScriptState();
+ ScriptState::Scope scope(scriptState);
+ m_resolver->reject(V8ThrowException::createTypeError(scriptState->isolate(), error.message));
+ break;
+ }
+ default:
+ m_resolver->reject(ServiceWorkerError::take(m_resolver.get(), error));
+ }
+ }
+
+private:
+ Persistent<ScriptPromiseResolver> m_resolver;
+ WTF_MAKE_NONCOPYABLE(UpdateCallbacks);
+};
+
+} // namespace
+
const AtomicString& ServiceWorkerRegistration::interfaceName() const
{
return EventTargetNames::ServiceWorkerRegistration;
@@ -77,7 +118,7 @@ ScriptPromise ServiceWorkerRegistration::update(ScriptState* scriptState)
ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState);
ScriptPromise promise = resolver->promise();
- m_handle->registration()->update(client->provider(), new CallbackPromiseAdapter<void, ServiceWorkerError>(resolver));
+ m_handle->registration()->update(client->provider(), new UpdateCallbacks(resolver));
return promise;
}

Powered by Google App Engine
This is Rietveld 408576698