Index: Source/modules/serviceworkers/NavigatorServiceWorker.cpp |
diff --git a/Source/modules/serviceworkers/NavigatorServiceWorker.cpp b/Source/modules/serviceworkers/NavigatorServiceWorker.cpp |
index 738d83f14d8ecc959ff03f2d7667515e0280e891..0372350c99e15676c046f4b98725451902529c33 100644 |
--- a/Source/modules/serviceworkers/NavigatorServiceWorker.cpp |
+++ b/Source/modules/serviceworkers/NavigatorServiceWorker.cpp |
@@ -32,6 +32,7 @@ |
#include "RuntimeEnabledFeatures.h" |
#include "V8ServiceWorker.h" |
+#include "bindings/V8DOMError.h" |
#include "bindings/v8/CallbackPromiseAdapter.h" |
#include "bindings/v8/ScriptPromiseResolver.h" |
#include "core/dom/Document.h" |
@@ -43,6 +44,7 @@ |
#include "core/loader/FrameLoaderClient.h" |
#include "core/workers/SharedWorker.h" |
#include "modules/serviceworkers/ServiceWorker.h" |
+#include "modules/serviceworkers/ServiceWorkerError.h" |
#include "public/platform/WebServiceWorkerProvider.h" |
#include "public/platform/WebServiceWorkerProviderClient.h" |
#include "public/platform/WebString.h" |
@@ -99,30 +101,30 @@ ScriptPromise NavigatorServiceWorker::registerServiceWorker(ExecutionContext* co |
ScriptPromise NavigatorServiceWorker::registerServiceWorker(ExecutionContext* executionContext, const String& pattern, const String& scriptSrc, ExceptionState& es) |
{ |
ASSERT(RuntimeEnabledFeatures::serviceWorkerEnabled()); |
- Frame* frame = m_navigator->frame(); |
+ ScriptPromise promise = ScriptPromise::createPending(executionContext); |
+ RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(promise, executionContext); |
+ Frame* frame = m_navigator->frame(); |
if (!frame) { |
- es.throwDOMException(InvalidStateError, "No document available."); |
- return ScriptPromise(); |
+ resolver->reject(DOMError::create(InvalidStateError, "No document available.")); |
+ return promise; |
} |
RefPtr<SecurityOrigin> documentOrigin = frame->document()->securityOrigin(); |
KURL patternURL = executionContext->completeURL(pattern); |
- if (documentOrigin->canRequest(patternURL)) { |
- es.throwSecurityError("Can only register for patterns in the document's origin."); |
- return ScriptPromise(); |
+ if (!documentOrigin->canRequest(patternURL)) { |
+ resolver->reject(DOMError::create(SecurityError, "Can only register for patterns in the document's origin.")); |
+ return promise; |
} |
KURL scriptURL = executionContext->completeURL(scriptSrc); |
- if (documentOrigin->canRequest(scriptURL)) { |
- es.throwSecurityError("Script must be in document's origin."); |
- return ScriptPromise(); |
+ if (!documentOrigin->canRequest(scriptURL)) { |
+ resolver->reject(DOMError::create(SecurityError, "Script must be in document's origin.")); |
+ return promise; |
} |
- ScriptPromise promise = ScriptPromise::createPending(executionContext); |
- RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(promise, executionContext); |
- ensureProvider()->registerServiceWorker(patternURL, scriptURL, new CallbackPromiseAdapter<ServiceWorker, ServiceWorker>(resolver, executionContext)); |
+ ensureProvider()->registerServiceWorker(patternURL, scriptURL, new CallbackPromiseAdapter<ServiceWorker, ServiceWorkerError>(resolver, executionContext)); |
return promise; |
} |
@@ -134,23 +136,25 @@ ScriptPromise NavigatorServiceWorker::unregisterServiceWorker(ExecutionContext* |
ScriptPromise NavigatorServiceWorker::unregisterServiceWorker(ExecutionContext* executionContext, const String& pattern, ExceptionState& es) |
{ |
ASSERT(RuntimeEnabledFeatures::serviceWorkerEnabled()); |
+ ScriptPromise promise = ScriptPromise::createPending(executionContext); |
+ RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(promise, executionContext); |
+ |
Frame* frame = m_navigator->frame(); |
if (!frame) { |
- es.throwDOMException(InvalidStateError, "No document available."); |
- return ScriptPromise(); |
+ resolver->reject(DOMError::create(InvalidStateError, "No document available.")); |
+ return promise; |
} |
RefPtr<SecurityOrigin> documentOrigin = frame->document()->securityOrigin(); |
KURL patternURL = executionContext->completeURL(pattern); |
- if (documentOrigin->canRequest(patternURL)) { |
- es.throwSecurityError("Can only unregister for patterns in the document's origin."); |
- return ScriptPromise(); |
+ if (!documentOrigin->canRequest(patternURL)) { |
+ resolver->reject(DOMError::create(SecurityError, "Can only unregister for patterns in the document's origin.")); |
+ |
+ return promise; |
} |
- ScriptPromise promise = ScriptPromise::createPending(executionContext); |
- RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(promise, executionContext); |
- ensureProvider()->unregisterServiceWorker(patternURL, new CallbackPromiseAdapter<ServiceWorker, ServiceWorker>(resolver, executionContext)); |
+ ensureProvider()->unregisterServiceWorker(patternURL, new CallbackPromiseAdapter<ServiceWorker, ServiceWorkerError>(resolver, executionContext)); |
return promise; |
} |