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