Adding grunell@ as owner of chrome/browser/resources/hangout_services.
[chromium-blink-merge.git] / ppapi / nacl_irt / ppapi_dispatcher.h
blob88e91bedc45de6419ea82435077e9c2b5c022598
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef PPAPI_NACL_IRT_PPAPI_DISPATCHER_H_
6 #define PPAPI_NACL_IRT_PPAPI_DISPATCHER_H_
8 #include <map>
9 #include <set>
10 #include <string>
12 #include "base/files/file.h"
13 #include "base/memory/ref_counted.h"
14 #include "base/process/process_handle.h"
15 #include "ipc/ipc_listener.h"
16 #include "ipc/ipc_platform_file.h"
17 #include "ipc/ipc_sender.h"
18 #include "ppapi/c/pp_instance.h"
19 #include "ppapi/c/trusted/ppb_browser_font_trusted.h"
20 #include "ppapi/proxy/connection.h"
21 #include "ppapi/proxy/plugin_dispatcher.h"
22 #include "ppapi/proxy/plugin_proxy_delegate.h"
24 struct PP_BrowserFont_Trusted_Description;
26 namespace base {
27 class SingleThreadTaskRunner;
28 class WaitableEvent;
29 } // namespace base
31 namespace IPC {
32 class Message;
33 class SyncChannel;
34 } // namespace IPC
36 namespace ppapi {
38 struct PpapiNaClPluginArgs;
39 struct Preferences;
41 // This class manages communication between the plugin and the browser, and
42 // manages the PluginDispatcher instances for communication between the plugin
43 // and the renderer.
44 class PpapiDispatcher : public proxy::PluginDispatcher::PluginDelegate,
45 public proxy::PluginProxyDelegate,
46 public IPC::Listener,
47 public IPC::Sender {
48 public:
49 PpapiDispatcher(scoped_refptr<base::SingleThreadTaskRunner> io_task_runner,
50 base::WaitableEvent* shutdown_event,
51 int browser_ipc_fd,
52 int renderer_ipc_fd);
54 // PluginDispatcher::PluginDelegate implementation.
55 base::SingleThreadTaskRunner* GetIPCTaskRunner() override;
56 base::WaitableEvent* GetShutdownEvent() override;
57 IPC::PlatformFileForTransit ShareHandleWithRemote(
58 base::PlatformFile handle,
59 base::ProcessId peer_pid,
60 bool should_close_source) override;
61 base::SharedMemoryHandle ShareSharedMemoryHandleWithRemote(
62 const base::SharedMemoryHandle& handle,
63 base::ProcessId remote_pid) override;
64 std::set<PP_Instance>* GetGloballySeenInstanceIDSet() override;
65 uint32 Register(proxy::PluginDispatcher* plugin_dispatcher) override;
66 void Unregister(uint32 plugin_dispatcher_id) override;
68 // PluginProxyDelegate implementation.
69 IPC::Sender* GetBrowserSender() override;
70 std::string GetUILanguage() override;
71 void PreCacheFont(const void* logfontw) override;
72 void SetActiveURL(const std::string& url) override;
73 PP_Resource CreateBrowserFont(proxy::Connection connection,
74 PP_Instance instance,
75 const PP_BrowserFont_Trusted_Description& desc,
76 const Preferences& prefs) override;
78 // IPC::Listener implementation.
79 bool OnMessageReceived(const IPC::Message& message) override;
80 void OnChannelError() override;
82 // IPC::Sender implementation
83 bool Send(IPC::Message* message) override;
85 private:
86 void OnMsgInitializeNaClDispatcher(const PpapiNaClPluginArgs& args);
87 void OnPluginDispatcherMessageReceived(const IPC::Message& msg);
89 std::set<PP_Instance> instances_;
90 std::map<uint32, proxy::PluginDispatcher*> plugin_dispatchers_;
91 uint32 next_plugin_dispatcher_id_;
93 scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
94 base::WaitableEvent* shutdown_event_;
95 int renderer_ipc_fd_;
96 scoped_ptr<IPC::SyncChannel> channel_;
99 } // namespace ppapi
101 #endif // PPAPI_NACL_IRT_PPAPI_DISPATCHER_H_