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) { |