Chromium Code Reviews| 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; |
| } |