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

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

Issue 1481523006: ServiceWorker: Should throw TypeError instead of Unknown/SecurityError. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 1 month 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/ServiceWorkerWindowClient.cpp
diff --git a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerWindowClient.cpp b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerWindowClient.cpp
index fd3db7a01baae5722ec077b8b21ee299a499dc72..14ad4eacb9a0ea5d7becb8cadf68b2ee50d2b42d 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 {
nhiroki 2015/11/27 07:52:01 nit: can you move this class definition to line 22
zino 2015/11/30 05:57:30 Done.
+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::ErrorTypeNavigation) {
+ 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:
nhiroki 2015/11/27 07:52:01 nit: can you add a blank line before "private:"?
zino 2015/11/30 05:57:30 Done.
+ 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;
}

Powered by Google App Engine
This is Rietveld 408576698