Chromium Code Reviews| Index: third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerWindowClient.cpp |
| diff --git a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerWindowClient.cpp b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerWindowClient.cpp |
| index fd3db7a01baae5722ec077b8b21ee299a499dc72..dbbe617f3464b26cafeb99d038a0a4047f07966f 100644 |
| --- a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerWindowClient.cpp |
| +++ b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerWindowClient.cpp |
| @@ -15,6 +15,7 @@ |
| #include "modules/serviceworkers/ServiceWorkerError.h" |
| #include "modules/serviceworkers/ServiceWorkerGlobalScopeClient.h" |
| #include "public/platform/WebString.h" |
| +#include "public/platform/modules/serviceworker/WebServiceWorkerClientsInfo.h" |
| #include "wtf/RefPtr.h" |
| namespace blink { |
| @@ -60,6 +61,36 @@ ScriptPromise ServiceWorkerWindowClient::focus(ScriptState* scriptState) |
| return promise; |
| } |
| +class NavigateClientCallback : public WebServiceWorkerClientCallbacks { |
| +public: |
| + explicit NavigateClientCallback(ScriptPromiseResolver* resolver) |
| + : m_resolver(resolver) { } |
| + |
| + void onSuccess(WebPassOwnPtr<WebServiceWorkerClientInfo> clientInfo) override |
| + { |
| + if (!m_resolver->executionContext() || m_resolver->executionContext()->activeDOMObjectsAreStopped()) |
| + return; |
| + m_resolver->resolve(ServiceWorkerWindowClient::take(m_resolver.get(), clientInfo.release())); |
| + } |
| + |
| + void onError(const WebServiceWorkerError& error) override |
| + { |
| + if (!m_resolver->executionContext() || m_resolver->executionContext()->activeDOMObjectsAreStopped()) |
| + return; |
| + |
| + if (error.errorType == WebServiceWorkerError::ErrorTypeUnknown) { |
|
nhiroki
2015/11/27 03:25:13
I'd prefer not to give specific meaning to the unk
zino
2015/11/27 03:41:29
Done.
|
| + ScriptState::Scope scope(m_resolver->scriptState()); |
| + m_resolver->reject(V8ThrowException::createTypeError(m_resolver->scriptState()->isolate(), error.message)); |
| + return; |
| + } |
| + |
| + m_resolver->reject(ServiceWorkerError::take(m_resolver.get(), error)); |
| + } |
| +private: |
| + Persistent<ScriptPromiseResolver> m_resolver; |
| + WTF_MAKE_NONCOPYABLE(NavigateClientCallback); |
| +}; |
| + |
| ScriptPromise ServiceWorkerWindowClient::navigate(ScriptState* scriptState, const String& url) |
| { |
| ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState); |
| @@ -72,11 +103,11 @@ ScriptPromise ServiceWorkerWindowClient::navigate(ScriptState* scriptState, cons |
| return promise; |
| } |
| if (!context->securityOrigin()->canDisplay(parsedUrl)) { |
| - resolver->reject(DOMException::create(SecurityError, "'" + parsedUrl.elidedString() + "' cannot navigate.")); |
| + resolver->reject(V8ThrowException::createTypeError(scriptState->isolate(), "'" + parsedUrl.elidedString() + "' cannot navigate.")); |
| return promise; |
| } |
| - ServiceWorkerGlobalScopeClient::from(context)->navigate(uuid(), parsedUrl, new CallbackPromiseAdapter<ServiceWorkerWindowClient, ServiceWorkerError>(resolver)); |
| + ServiceWorkerGlobalScopeClient::from(context)->navigate(uuid(), parsedUrl, new NavigateClientCallback(resolver)); |
| return promise; |
| } |