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_
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
;
27 class MessageLoopProxy
;
38 struct PpapiNaClPluginArgs
;
41 // This class manages communication between the plugin and the browser, and
42 // manages the PluginDispatcher instances for communication between the plugin
44 class PpapiDispatcher
: public proxy::PluginDispatcher::PluginDelegate
,
45 public proxy::PluginProxyDelegate
,
49 PpapiDispatcher(scoped_refptr
<base::MessageLoopProxy
> io_loop
,
50 base::WaitableEvent
* shutdown_event
,
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
,
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
;
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::MessageLoopProxy
> message_loop_
;
94 base::WaitableEvent
* shutdown_event_
;
96 scoped_ptr
<IPC::SyncChannel
> channel_
;
101 #endif // PPAPI_NACL_IRT_PPAPI_DISPATCHER_H_