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