// Copyright 2014 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CONTENT_PUBLIC_BROWSER_SERVICE_WORKER_CONTEXT_H_ #define CONTENT_PUBLIC_BROWSER_SERVICE_WORKER_CONTEXT_H_ #include "base/basictypes.h" #include "base/callback_forward.h" #include "url/gurl.h" namespace content { // Represents the per-StoragePartition ServiceWorker data. Must be used from // the UI thread. class ServiceWorkerContext { public: // https://rawgithub.com/slightlyoff/ServiceWorker/master/spec/service_worker/index.html#url-scope: // roughly, must be of the form "<origin>/<path>/*". typedef GURL Scope; typedef base::Callback<void(bool success)> ResultCallback; // Equivalent to calling navigator.serviceWorker.register(script_url, {scope: // pattern}) from a renderer in |source_process_id|, except that |pattern| is // an absolute URL instead of relative to some current origin. |callback| is // passed true when the JS promise is fulfilled or false when the JS // promise is rejected. // // The registration can fail if: // * |script_url| is on a different origin from |pattern| // * Fetching |script_url| fails. // * |script_url| fails to parse or its top-level execution fails. // TODO: The error message for this needs to be available to developers. // * Something unexpected goes wrong, like a renderer crash or a full disk. virtual void RegisterServiceWorker(const Scope& pattern, const GURL& script_url, int source_process_id, const ResultCallback& callback) = 0; // Equivalent to calling navigator.serviceWorker.unregister(pattern) from a // renderer in |source_process_id|, except that |pattern| is an absolute URL // instead of relative to some current origin. |callback| is passed true // when the JS promise is fulfilled or false when the JS promise is rejected. // // Unregistration can fail if: // * No Service Worker was registered for |pattern|. // * Something unexpected goes wrong, like a renderer crash. virtual void UnregisterServiceWorker(const Scope& pattern, int source_process_id, const ResultCallback& callback) = 0; // TODO(jyasskin): Provide a way to SendMessage to a Scope. protected: ServiceWorkerContext() {} virtual ~ServiceWorkerContext() {} }; } // namespace content #endif // CONTENT_PUBLIC_BROWSER_SERVICE_WORKER_CONTEXT_H_