1 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CONTENT_PUBLIC_BROWSER_SERVICE_WORKER_CONTEXT_H_ 6 #define CONTENT_PUBLIC_BROWSER_SERVICE_WORKER_CONTEXT_H_ 7 8 #include "base/basictypes.h" 9 #include "base/callback_forward.h" 10 #include "content/public/browser/service_worker_usage_info.h" 11 #include "url/gurl.h" 12 13 namespace content { 14 15 // Represents the per-StoragePartition ServiceWorker data. Must be used from 16 // the IO thread. 17 class ServiceWorkerContext { 18 public: 19 // https://rawgithub.com/slightlyoff/ServiceWorker/master/spec/service_worker/index.html#url-scope: 20 // roughly, must be of the form "<origin>/<path>/*". 21 typedef GURL Scope; 22 23 typedef base::Callback<void(bool success)> ResultCallback; 24 25 typedef base::Callback<void(const std::vector<ServiceWorkerUsageInfo>& 26 usage_info)> GetUsageInfoCallback; 27 28 // Equivalent to calling navigator.serviceWorker.register(script_url, {scope: 29 // pattern}) from a renderer, except that |pattern| is an absolute URL instead 30 // of relative to some current origin. |callback| is passed true when the JS 31 // promise is fulfilled or false when the JS promise is rejected. 32 // 33 // The registration can fail if: 34 // * |script_url| is on a different origin from |pattern| 35 // * Fetching |script_url| fails. 36 // * |script_url| fails to parse or its top-level execution fails. 37 // TODO: The error message for this needs to be available to developers. 38 // * Something unexpected goes wrong, like a renderer crash or a full disk. 39 virtual void RegisterServiceWorker(const Scope& pattern, 40 const GURL& script_url, 41 const ResultCallback& callback) = 0; 42 43 // Equivalent to calling navigator.serviceWorker.unregister(pattern) from a 44 // renderer, except that |pattern| is an absolute URL instead of relative to 45 // some current origin. |callback| is passed true when the JS promise is 46 // fulfilled or false when the JS promise is rejected. 47 // 48 // Unregistration can fail if: 49 // * No Service Worker was registered for |pattern|. 50 // * Something unexpected goes wrong, like a renderer crash. 51 virtual void UnregisterServiceWorker(const Scope& pattern, 52 const ResultCallback& callback) = 0; 53 54 // TODO(jyasskin): Provide a way to SendMessage to a Scope. 55 56 // Synchronously releases all of the RenderProcessHosts that have Service 57 // Workers running inside them, and prevents any new Service Worker instances 58 // from starting up. 59 virtual void Terminate() = 0; 60 61 // Methods used in response to browsing data and quota manager requests. 62 virtual void GetAllOriginsInfo(const GetUsageInfoCallback& callback) = 0; 63 virtual void DeleteForOrigin(const GURL& origin_url) = 0; 64 65 protected: ServiceWorkerContext()66 ServiceWorkerContext() {} ~ServiceWorkerContext()67 virtual ~ServiceWorkerContext() {} 68 }; 69 70 } // namespace content 71 72 #endif // CONTENT_PUBLIC_BROWSER_SERVICE_WORKER_CONTEXT_H_ 73