| Index: third_party/WebKit/Source/modules/serviceworkers/ServiceWorker.cpp
|
| diff --git a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorker.cpp b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorker.cpp
|
| index 34c926f1e8219f03faba6e375cf43e123c3a645e..635bac12616b949c4ac93cddd97d96369b34bc0e 100644
|
| --- a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorker.cpp
|
| +++ b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorker.cpp
|
| @@ -31,12 +31,16 @@
|
| #include "modules/serviceworkers/ServiceWorker.h"
|
|
|
| #include "bindings/core/v8/ExceptionState.h"
|
| +#include "bindings/core/v8/ScriptPromiseResolver.h"
|
| +#include "core/dom/DOMException.h"
|
| #include "core/dom/ExceptionCode.h"
|
| #include "core/dom/MessagePort.h"
|
| #include "core/events/Event.h"
|
| #include "core/inspector/ConsoleMessage.h"
|
| #include "modules/EventTargetModules.h"
|
| +#include "modules/serviceworkers/NavigationPreloadOptions.h"
|
| #include "modules/serviceworkers/ServiceWorkerContainerClient.h"
|
| +#include "modules/serviceworkers/ServiceWorkerError.h"
|
| #include "public/platform/WebMessagePortChannel.h"
|
| #include "public/platform/WebSecurityOrigin.h"
|
| #include "public/platform/WebString.h"
|
| @@ -45,6 +49,56 @@
|
|
|
| namespace blink {
|
|
|
| +namespace {
|
| +
|
| +class SetNavigationPreloadCallbacks
|
| + : public WebServiceWorker::WebSetNavigationPreloadCallbacks {
|
| + public:
|
| + explicit SetNavigationPreloadCallbacks(ScriptPromiseResolver* resolver)
|
| + : m_resolver(resolver) {}
|
| + ~SetNavigationPreloadCallbacks() override {}
|
| +
|
| + void onSuccess() override { m_resolver->resolve(); }
|
| +
|
| + void onError(const WebServiceWorkerError& error) override {
|
| + if (!m_resolver->getExecutionContext() ||
|
| + m_resolver->getExecutionContext()->activeDOMObjectsAreStopped())
|
| + return;
|
| + m_resolver->reject(ServiceWorkerError::take(m_resolver.get(), error));
|
| + }
|
| +
|
| + private:
|
| + Persistent<ScriptPromiseResolver> m_resolver;
|
| + WTF_MAKE_NONCOPYABLE(SetNavigationPreloadCallbacks);
|
| +};
|
| +
|
| +class GetNavigationPreloadCallbacks
|
| + : public WebServiceWorker::WebGetNavigationPreloadCallbacks {
|
| + public:
|
| + explicit GetNavigationPreloadCallbacks(ScriptPromiseResolver* resolver)
|
| + : m_resolver(resolver) {}
|
| + ~GetNavigationPreloadCallbacks() override {}
|
| +
|
| + void onSuccess(const WebString& value) override {
|
| + NavigationPreloadOptions options;
|
| + options.setValue(value);
|
| + m_resolver->resolve(options);
|
| + }
|
| +
|
| + void onError(const WebServiceWorkerError& error) override {
|
| + if (!m_resolver->getExecutionContext() ||
|
| + m_resolver->getExecutionContext()->activeDOMObjectsAreStopped())
|
| + return;
|
| + m_resolver->reject(ServiceWorkerError::take(m_resolver.get(), error));
|
| + }
|
| +
|
| + private:
|
| + Persistent<ScriptPromiseResolver> m_resolver;
|
| + WTF_MAKE_NONCOPYABLE(GetNavigationPreloadCallbacks);
|
| +};
|
| +
|
| +} // namespace
|
| +
|
| const AtomicString& ServiceWorker::interfaceName() const {
|
| return EventTargetNames::ServiceWorker;
|
| }
|
| @@ -138,6 +192,26 @@ void ServiceWorker::stop() {
|
| m_wasStopped = true;
|
| }
|
|
|
| +ScriptPromise ServiceWorker::setNavigationPreload(
|
| + ScriptState* scriptState,
|
| + const NavigationPreloadOptions& options) {
|
| + LOG(ERROR) << "setNavP";
|
| + ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState);
|
| + ScriptPromise promise = resolver->promise();
|
| + m_handle->serviceWorker()->setNavigationPreload(
|
| + options.value(), new SetNavigationPreloadCallbacks(resolver));
|
| + return promise;
|
| +}
|
| +
|
| +ScriptPromise ServiceWorker::getNavigationPreload(ScriptState* scriptState) {
|
| + LOG(ERROR) << "getNavP";
|
| + ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState);
|
| + ScriptPromise promise = resolver->promise();
|
| + m_handle->serviceWorker()->getNavigationPreload(
|
| + new GetNavigationPreloadCallbacks(resolver));
|
| + return promise;
|
| +}
|
| +
|
| ServiceWorker* ServiceWorker::getOrCreate(
|
| ExecutionContext* executionContext,
|
| std::unique_ptr<WebServiceWorker::Handle> handle) {
|
|
|