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

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

Issue 2388023002: service worker: navigation preload basic setters/getters and flag
Patch Set: idl Created 4 years, 2 months 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/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) {

Powered by Google App Engine
This is Rietveld 408576698