// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef PPAPI_PROXY_CONNECTION_H_ #define PPAPI_PROXY_CONNECTION_H_ #include "ipc/ipc_message.h" #include "ppapi/proxy/plugin_dispatcher.h" namespace IPC { class Sender; } namespace ppapi { namespace proxy { // This struct holds the channels that a resource uses to send message to the // browser and renderer. class Connection { public: Connection() : browser_sender_(nullptr), in_process_renderer_sender_(nullptr), in_process_(false), browser_sender_routing_id_(MSG_ROUTING_NONE) {} Connection( IPC::Sender* browser, scoped_refptr out_of_process_renderer_sender) : browser_sender_(browser), in_process_renderer_sender_(nullptr), out_of_process_renderer_sender_(out_of_process_renderer_sender), in_process_(false), browser_sender_routing_id_(MSG_ROUTING_NONE) {} Connection(IPC::Sender* browser, IPC::Sender* in_process_renderer_sender, int routing_id) : browser_sender_(browser), in_process_renderer_sender_(in_process_renderer_sender), in_process_(true), browser_sender_routing_id_(routing_id) {} IPC::Sender* GetRendererSender() { return in_process_ ? in_process_renderer_sender_ : out_of_process_renderer_sender_.get(); } IPC::Sender* browser_sender() { return browser_sender_; } bool in_process() { return in_process_; } int browser_sender_routing_id() { return browser_sender_routing_id_; } private: IPC::Sender* browser_sender_; IPC::Sender* in_process_renderer_sender_; scoped_refptr out_of_process_renderer_sender_; bool in_process_; // We need to use a routing ID when a plugin is in-process, and messages are // sent back from the browser to the renderer. This is so that messages are // routed to the proper RenderFrameImpl. int browser_sender_routing_id_; }; } // namespace proxy } // namespace ppapi #endif // PPAPI_PROXY_CONNECTION_H_