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