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