Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(228)

Side by Side Diff: ppapi/proxy/dispatcher.cc

Issue 6334016: Refactor PPAPI proxy resource handling to maintain which host they came from,... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ppapi/proxy/dispatcher.h" 5 #include "ppapi/proxy/dispatcher.h"
6 6
7 #include <string.h> // For memset. 7 #include <string.h> // For memset.
8 8
9 #include <map> 9 #include <map>
10 10
11 #include "base/compiler_specific.h" 11 #include "base/compiler_specific.h"
12 #include "base/logging.h" 12 #include "base/logging.h"
13 #include "ipc/ipc_message.h" 13 #include "ipc/ipc_message.h"
14 #include "ipc/ipc_sync_channel.h" 14 #include "ipc/ipc_sync_channel.h"
15 #include "ipc/ipc_test_sink.h"
15 #include "ppapi/c/dev/ppb_buffer_dev.h" 16 #include "ppapi/c/dev/ppb_buffer_dev.h"
16 #include "ppapi/c/dev/ppb_char_set_dev.h" 17 #include "ppapi/c/dev/ppb_char_set_dev.h"
17 #include "ppapi/c/dev/ppb_cursor_control_dev.h" 18 #include "ppapi/c/dev/ppb_cursor_control_dev.h"
18 #include "ppapi/c/dev/ppb_cursor_control_dev.h" 19 #include "ppapi/c/dev/ppb_cursor_control_dev.h"
19 #include "ppapi/c/dev/ppb_font_dev.h" 20 #include "ppapi/c/dev/ppb_font_dev.h"
20 #include "ppapi/c/dev/ppb_fullscreen_dev.h" 21 #include "ppapi/c/dev/ppb_fullscreen_dev.h"
21 #include "ppapi/c/dev/ppb_fullscreen_dev.h" 22 #include "ppapi/c/dev/ppb_fullscreen_dev.h"
22 #include "ppapi/c/dev/ppb_testing_dev.h" 23 #include "ppapi/c/dev/ppb_testing_dev.h"
23 #include "ppapi/c/dev/ppb_var_deprecated.h" 24 #include "ppapi/c/dev/ppb_var_deprecated.h"
24 #include "ppapi/c/pp_errors.h" 25 #include "ppapi/c/pp_errors.h"
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
58 #include "ppapi/proxy/ppp_instance_proxy.h" 59 #include "ppapi/proxy/ppp_instance_proxy.h"
59 #include "ppapi/proxy/var_serialization_rules.h" 60 #include "ppapi/proxy/var_serialization_rules.h"
60 61
61 namespace pp { 62 namespace pp {
62 namespace proxy { 63 namespace proxy {
63 64
64 Dispatcher::Dispatcher(base::ProcessHandle remote_process_handle, 65 Dispatcher::Dispatcher(base::ProcessHandle remote_process_handle,
65 GetInterfaceFunc local_get_interface) 66 GetInterfaceFunc local_get_interface)
66 : pp_module_(0), 67 : pp_module_(0),
67 remote_process_handle_(remote_process_handle), 68 remote_process_handle_(remote_process_handle),
69 test_sink_(NULL),
68 disallow_trusted_interfaces_(false), // TODO(brettw) make this settable. 70 disallow_trusted_interfaces_(false), // TODO(brettw) make this settable.
69 local_get_interface_(local_get_interface), 71 local_get_interface_(local_get_interface),
70 declared_supported_remote_interfaces_(false), 72 declared_supported_remote_interfaces_(false),
71 callback_tracker_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) { 73 callback_tracker_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) {
72 memset(id_to_proxy_, 0, 74 memset(id_to_proxy_, 0,
73 static_cast<int>(INTERFACE_ID_COUNT) * sizeof(InterfaceProxy*)); 75 static_cast<int>(INTERFACE_ID_COUNT) * sizeof(InterfaceProxy*));
74 } 76 }
75 77
76 Dispatcher::~Dispatcher() { 78 Dispatcher::~Dispatcher() {
77 } 79 }
78 80
79 bool Dispatcher::InitWithChannel(MessageLoop* ipc_message_loop, 81 bool Dispatcher::InitWithChannel(MessageLoop* ipc_message_loop,
80 const IPC::ChannelHandle& channel_handle, 82 const IPC::ChannelHandle& channel_handle,
81 bool is_client, 83 bool is_client,
82 base::WaitableEvent* shutdown_event) { 84 base::WaitableEvent* shutdown_event) {
83 IPC::Channel::Mode mode = is_client ? IPC::Channel::MODE_CLIENT 85 IPC::Channel::Mode mode = is_client ? IPC::Channel::MODE_CLIENT
84 : IPC::Channel::MODE_SERVER; 86 : IPC::Channel::MODE_SERVER;
85 channel_.reset(new IPC::SyncChannel(channel_handle, mode, this, 87 channel_.reset(new IPC::SyncChannel(channel_handle, mode, this,
86 ipc_message_loop, false, shutdown_event)); 88 ipc_message_loop, false, shutdown_event));
87 return true; 89 return true;
88 } 90 }
89 91
92 void Dispatcher::InitWithTestSink(IPC::TestSink* test_sink) {
93 DCHECK(!test_sink_);
94 test_sink_ = test_sink;
95 }
96
90 bool Dispatcher::OnMessageReceived(const IPC::Message& msg) { 97 bool Dispatcher::OnMessageReceived(const IPC::Message& msg) {
91 // Control messages. 98 // Control messages.
92 if (msg.routing_id() == MSG_ROUTING_CONTROL) { 99 if (msg.routing_id() == MSG_ROUTING_CONTROL) {
93 bool handled = true; 100 bool handled = true;
94 IPC_BEGIN_MESSAGE_MAP(Dispatcher, msg) 101 IPC_BEGIN_MESSAGE_MAP(Dispatcher, msg)
95 IPC_MESSAGE_HANDLER(PpapiMsg_DeclareInterfaces, 102 IPC_MESSAGE_HANDLER(PpapiMsg_DeclareInterfaces,
96 OnMsgDeclareInterfaces) 103 OnMsgDeclareInterfaces)
97 IPC_MESSAGE_HANDLER(PpapiMsg_SupportsInterface, OnMsgSupportsInterface) 104 IPC_MESSAGE_HANDLER(PpapiMsg_SupportsInterface, OnMsgSupportsInterface)
98 IPC_MESSAGE_FORWARD(PpapiMsg_ExecuteCallback, &callback_tracker_, 105 IPC_MESSAGE_FORWARD(PpapiMsg_ExecuteCallback, &callback_tracker_,
99 CallbackTracker::ReceiveExecuteSerializedCallback) 106 CallbackTracker::ReceiveExecuteSerializedCallback)
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
150 if (!proxy.get()) 157 if (!proxy.get())
151 return NULL; // Don't know how to proxy this interface. 158 return NULL; // Don't know how to proxy this interface.
152 159
153 // Save our proxy. 160 // Save our proxy.
154 proxies_[interface] = proxy; 161 proxies_[interface] = proxy;
155 id_to_proxy_[proxy->GetInterfaceId()] = proxy.get(); 162 id_to_proxy_[proxy->GetInterfaceId()] = proxy.get();
156 return proxy->GetSourceInterface(); 163 return proxy->GetSourceInterface();
157 } 164 }
158 165
159 bool Dispatcher::Send(IPC::Message* msg) { 166 bool Dispatcher::Send(IPC::Message* msg) {
167 if (test_sink_)
168 return test_sink_->Send(msg);
160 return channel_->Send(msg); 169 return channel_->Send(msg);
161 } 170 }
162 171
163 bool Dispatcher::RemoteSupportsTargetInterface(const std::string& interface) { 172 bool Dispatcher::RemoteSupportsTargetInterface(const std::string& interface) {
164 bool result = false; 173 bool result = false;
165 Send(new PpapiMsg_SupportsInterface(interface, &result)); 174 Send(new PpapiMsg_SupportsInterface(interface, &result));
166 return result; 175 return result;
167 } 176 }
168 177
169 bool Dispatcher::IsInterfaceTrusted(const std::string& interface) { 178 bool Dispatcher::IsInterfaceTrusted(const std::string& interface) {
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
273 if (interface_name == PPB_URLLOADERTRUSTED_INTERFACE) 282 if (interface_name == PPB_URLLOADERTRUSTED_INTERFACE)
274 return new PPB_URLLoaderTrusted_Proxy(this, interface_functions); 283 return new PPB_URLLoaderTrusted_Proxy(this, interface_functions);
275 } 284 }
276 285
277 return NULL; 286 return NULL;
278 } 287 }
279 288
280 } // namespace proxy 289 } // namespace proxy
281 } // namespace pp 290 } // namespace pp
282 291
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698