: m_resolver(resolver)
, m_adapter(m_resolver) { }
virtual ~GetRegistrationCallback() { }
- virtual void onSuccess(WebServiceWorkerRegistration* registration) OVERRIDE
+ virtual void onSuccess(WebServiceWorkerRegistration* registration) override
{
if (registration)
m_adapter.onSuccess(registration);
else if (m_resolver->executionContext() && !m_resolver->executionContext()->activeDOMObjectsAreStopped())
m_resolver->resolve();
}
- virtual void onError(WebServiceWorkerError* error) OVERRIDE { m_adapter.onError(error); }
+ virtual void onError(WebServiceWorkerError* error) override { m_adapter.onError(error); }
private:
RefPtr<ScriptPromiseResolver> m_resolver;
CallbackPromiseAdapter<ServiceWorkerRegistration, ServiceWorkerError> m_adapter;
visitor->trace(m_ready);
}
-ScriptPromise ServiceWorkerContainer::registerServiceWorker(ScriptState* scriptState, const String& url, const RegistrationOptionList& options)
+ScriptPromise ServiceWorkerContainer::registerServiceWorker(ScriptState* scriptState, const String& url, const RegistrationOptions& options)
{
ASSERT(RuntimeEnabledFeatures::serviceWorkerEnabled());
RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scriptState);
return promise;
}
+ KURL pageURL = KURL(KURL(), documentOrigin->toString());
+ if (!pageURL.protocolIsInHTTPFamily()) {
+ resolver->reject(DOMException::create(SecurityError, "The URL protocol of the current origin is not supported: " + pageURL.protocol()));
+ return promise;
+ }
+
KURL patternURL = executionContext->completeURL(options.scope());
patternURL.removeFragmentIdentifier();
if (!documentOrigin->canRequest(patternURL)) {
return promise;
}
+ if (!patternURL.string().startsWith(scriptURL.baseAsString())) {
+ resolver->reject(DOMException::create(SecurityError, "The scope must be under the directory of the script URL."));
+ return promise;
+ }
+
m_provider->registerServiceWorker(patternURL, scriptURL, new CallbackPromiseAdapter<ServiceWorkerRegistration, ServiceWorkerError>(resolver));
return promise;
return promise;
}
+ KURL pageURL = KURL(KURL(), documentOrigin->toString());
+ if (!pageURL.protocolIsInHTTPFamily()) {
+ resolver->reject(DOMException::create(SecurityError, "The URL protocol of the current origin is not supported: " + pageURL.protocol()));
+ return promise;
+ }
+
KURL completedURL = executionContext->completeURL(documentURL);
+ completedURL.removeFragmentIdentifier();
if (!documentOrigin->canRequest(completedURL)) {
resolver->reject(DOMException::create(SecurityError, "The documentURL must match the current origin."));
return promise;
delete serviceWorker;
}
-static void deleteIfNoExistingOwner(WebServiceWorkerRegistration* registration)
-{
- if (registration && !registration->proxy())
- delete registration;
-}
-
void ServiceWorkerContainer::setController(WebServiceWorker* serviceWorker)
{
if (!executionContext()) {
void ServiceWorkerContainer::setReadyRegistration(WebServiceWorkerRegistration* registration)
{
if (!executionContext()) {
- deleteIfNoExistingOwner(registration);
+ ServiceWorkerRegistration::dispose(registration);
return;
}