service_worker_script_context.h revision cedac228d2dd51db4b79ea1e72c7f249408ee061
15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
25d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// found in the LICENSE file.
45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#ifndef CONTENT_RENDERER_SERVICE_WORKER_SERVICE_WORKER_SCRIPT_CONTEXT_H_
65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define CONTENT_RENDERER_SERVICE_WORKER_SERVICE_WORKER_SCRIPT_CONTEXT_H_
75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
8effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include <vector>
9effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/basictypes.h"
110529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "base/id_map.h"
12effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "base/strings/string16.h"
13010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "content/child/webmessageportchannel_impl.h"
14a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "content/common/service_worker/service_worker_types.h"
15cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "third_party/WebKit/public/platform/WebMessagePortChannel.h"
160529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "third_party/WebKit/public/platform/WebServiceWorkerClientsInfo.h"
17effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "third_party/WebKit/public/platform/WebServiceWorkerEventResult.h"
18a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace blink {
205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class WebServiceWorkerContextProxy;
215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace IPC {
245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class Message;
255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace content {
285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class EmbeddedWorkerContextClient;
305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// TODO(kinuko): This should implement WebServiceWorkerContextClient
325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// rather than having EmbeddedWorkerContextClient implement it.
335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// See the header comment in embedded_worker_context_client.h for the
345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// potential EW/SW layering concerns.
355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class ServiceWorkerScriptContext {
365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public:
375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ServiceWorkerScriptContext(
385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      EmbeddedWorkerContextClient* embedded_context,
395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      blink::WebServiceWorkerContextProxy* proxy);
405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ~ServiceWorkerScriptContext();
415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  void OnMessageReceived(const IPC::Message& message);
435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
44e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  void DidHandleActivateEvent(int request_id,
45e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch                              blink::WebServiceWorkerEventResult);
46effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  void DidHandleInstallEvent(int request_id,
47effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                             blink::WebServiceWorkerEventResult result);
48a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  void DidHandleFetchEvent(int request_id,
49a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                           ServiceWorkerFetchEventResult result,
50a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                           const ServiceWorkerResponse& response);
51e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  void DidHandleSyncEvent(int request_id);
520529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  void GetClientDocuments(
530529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch      blink::WebServiceWorkerClientsCallbacks* callbacks);
54cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  void PostMessageToDocument(
55cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      int client_id,
56cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      const base::string16& message,
57cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      scoped_ptr<blink::WebMessagePortChannelArray> channels);
585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) private:
600529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  typedef IDMap<blink::WebServiceWorkerClientsCallbacks, IDMapOwnPointer>
610529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch      ClientsCallbacksMap;
620529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
630529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  // Send a message to the browser.
640529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  void Send(IPC::Message* message);
650529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
665c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  void OnActivateEvent(int request_id);
675c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  void OnInstallEvent(int request_id, int active_version_id);
685c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  void OnFetchEvent(int request_id, const ServiceWorkerFetchRequest& request);
695c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  void OnSyncEvent(int request_id);
70effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  void OnPostMessage(const base::string16& message,
71effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                     const std::vector<int>& sent_message_port_ids,
72effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                     const std::vector<int>& new_routing_ids);
730529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  void OnDidGetClientDocuments(
740529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch      int request_id, const std::vector<int>& client_ids);
750529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
760529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  // Get routing_id for sending message to the ServiceWorkerVersion
770529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  // in the browser process.
780529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  int GetRoutingID() const;
795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Not owned; embedded_context_ owns this.
815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EmbeddedWorkerContextClient* embedded_context_;
825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Not owned; this object is destroyed when proxy_ becomes invalid.
845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  blink::WebServiceWorkerContextProxy* proxy_;
855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
86effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // Used for incoming messages from the browser for which an outgoing response
87effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // back to the browser is expected, the id must be sent back with the
88effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // response.
895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  int current_request_id_;
905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
910529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  // Pending callbacks for GetClientDocuments().
920529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  ClientsCallbacksMap pending_clients_callbacks_;
930529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(ServiceWorkerScriptContext);
955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)};
965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}  // namespace content
985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif  // CONTENT_RENDERER_SERVICE_WORKER_SERVICE_WORKER_SCRIPT_CONTEXT_H_
100