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)
8f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include <string>
9effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include <vector>
10effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/basictypes.h"
120529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "base/id_map.h"
13effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "base/strings/string16.h"
14010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "content/child/webmessageportchannel_impl.h"
15a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "content/common/service_worker/service_worker_types.h"
16cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "third_party/WebKit/public/platform/WebMessagePortChannel.h"
170529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "third_party/WebKit/public/platform/WebServiceWorkerClientsInfo.h"
18effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "third_party/WebKit/public/platform/WebServiceWorkerEventResult.h"
19a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace blink {
215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class WebServiceWorkerContextProxy;
225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace IPC {
255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class Message;
265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace content {
295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class EmbeddedWorkerContextClient;
315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// TODO(kinuko): This should implement WebServiceWorkerContextClient
335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// rather than having EmbeddedWorkerContextClient implement it.
345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// See the header comment in embedded_worker_context_client.h for the
355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// potential EW/SW layering concerns.
365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class ServiceWorkerScriptContext {
375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public:
385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ServiceWorkerScriptContext(
395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      EmbeddedWorkerContextClient* embedded_context,
405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      blink::WebServiceWorkerContextProxy* proxy);
415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ~ServiceWorkerScriptContext();
425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  void OnMessageReceived(const IPC::Message& message);
445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
45e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  void DidHandleActivateEvent(int request_id,
46e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch                              blink::WebServiceWorkerEventResult);
47effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  void DidHandleInstallEvent(int request_id,
48effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                             blink::WebServiceWorkerEventResult result);
49a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  void DidHandleFetchEvent(int request_id,
50a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                           ServiceWorkerFetchEventResult result,
51a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                           const ServiceWorkerResponse& response);
52e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  void DidHandleSyncEvent(int request_id);
530529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  void GetClientDocuments(
540529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch      blink::WebServiceWorkerClientsCallbacks* callbacks);
55cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  void PostMessageToDocument(
56cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      int client_id,
57cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      const base::string16& message,
58cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      scoped_ptr<blink::WebMessagePortChannelArray> channels);
595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) private:
610529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  typedef IDMap<blink::WebServiceWorkerClientsCallbacks, IDMapOwnPointer>
620529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch      ClientsCallbacksMap;
630529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
640529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  // Send a message to the browser.
650529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  void Send(IPC::Message* message);
660529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
675c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  void OnActivateEvent(int request_id);
685c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  void OnInstallEvent(int request_id, int active_version_id);
695c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  void OnFetchEvent(int request_id, const ServiceWorkerFetchRequest& request);
705c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  void OnSyncEvent(int request_id);
71f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  void OnPushEvent(int request_id, const std::string& data);
72effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  void OnPostMessage(const base::string16& message,
73effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                     const std::vector<int>& sent_message_port_ids,
74effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                     const std::vector<int>& new_routing_ids);
750529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  void OnDidGetClientDocuments(
760529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch      int request_id, const std::vector<int>& client_ids);
770529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
780529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  // Get routing_id for sending message to the ServiceWorkerVersion
790529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  // in the browser process.
800529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  int GetRoutingID() const;
815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Not owned; embedded_context_ owns this.
835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EmbeddedWorkerContextClient* embedded_context_;
845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Not owned; this object is destroyed when proxy_ becomes invalid.
865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  blink::WebServiceWorkerContextProxy* proxy_;
875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
88effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // Used for incoming messages from the browser for which an outgoing response
89effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // back to the browser is expected, the id must be sent back with the
90effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // response.
915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  int current_request_id_;
925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
930529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  // Pending callbacks for GetClientDocuments().
940529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  ClientsCallbacksMap pending_clients_callbacks_;
950529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(ServiceWorkerScriptContext);
975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)};
985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}  // namespace content
1005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif  // CONTENT_RENDERER_SERVICE_WORKER_SERVICE_WORKER_SCRIPT_CONTEXT_H_
102