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

Side by Side Diff: chrome/plugin/npobject_proxy.cc

Issue 16554: WaitableEvent (Closed)
Patch Set: Addresssing darin's comments (round 2) Created 11 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
« no previous file with comments | « chrome/plugin/npobject_proxy.h ('k') | chrome/plugin/npobject_util.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 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 "chrome/plugin/npobject_proxy.h" 5 #include "chrome/plugin/npobject_proxy.h"
6 6
7 #include "base/waitable_event.h"
7 #include "chrome/common/plugin_messages.h" 8 #include "chrome/common/plugin_messages.h"
8 #include "chrome/common/win_util.h" 9 #include "chrome/common/win_util.h"
9 #include "chrome/plugin/npobject_util.h" 10 #include "chrome/plugin/npobject_util.h"
10 #include "chrome/plugin/plugin_channel_base.h" 11 #include "chrome/plugin/plugin_channel_base.h"
11 #include "webkit/glue/webkit_glue.h" 12 #include "webkit/glue/webkit_glue.h"
12 #include "webkit/glue/plugins/plugin_instance.h" 13 #include "webkit/glue/plugins/plugin_instance.h"
13 14
14 15
15 struct NPObjectWrapper { 16 struct NPObjectWrapper {
16 NPObject object; 17 NPObject object;
(...skipping 24 matching lines...) Expand all
41 proxy = wrapper->proxy; 42 proxy = wrapper->proxy;
42 } 43 }
43 44
44 return proxy; 45 return proxy;
45 } 46 }
46 47
47 NPObjectProxy::NPObjectProxy( 48 NPObjectProxy::NPObjectProxy(
48 PluginChannelBase* channel, 49 PluginChannelBase* channel,
49 int route_id, 50 int route_id,
50 void* npobject_ptr, 51 void* npobject_ptr,
51 HANDLE modal_dialog_event) 52 base::WaitableEvent* modal_dialog_event)
52 : channel_(channel), 53 : channel_(channel),
53 route_id_(route_id), 54 route_id_(route_id),
54 npobject_ptr_(npobject_ptr), 55 npobject_ptr_(npobject_ptr),
55 modal_dialog_event_(modal_dialog_event) { 56 modal_dialog_event_(modal_dialog_event) {
56 channel_->AddRoute(route_id, this, true); 57 channel_->AddRoute(route_id, this, true);
57 } 58 }
58 59
59 NPObjectProxy::~NPObjectProxy() { 60 NPObjectProxy::~NPObjectProxy() {
60 if (channel_.get()) { 61 if (channel_.get()) {
61 Send(new NPObjectMsg_Release(route_id_)); 62 Send(new NPObjectMsg_Release(route_id_));
62 if (channel_.get()) 63 if (channel_.get())
63 channel_->RemoveRoute(route_id_); 64 channel_->RemoveRoute(route_id_);
64 } 65 }
65 } 66 }
66 67
67 NPObject* NPObjectProxy::Create(PluginChannelBase* channel, 68 NPObject* NPObjectProxy::Create(PluginChannelBase* channel,
68 int route_id, 69 int route_id,
69 void* npobject_ptr, 70 void* npobject_ptr,
70 HANDLE modal_dialog_event) { 71 base::WaitableEvent* modal_dialog_event) {
71 NPObjectWrapper* obj = reinterpret_cast<NPObjectWrapper*>( 72 NPObjectWrapper* obj = reinterpret_cast<NPObjectWrapper*>(
72 NPN_CreateObject(0, &npclass_proxy_)); 73 NPN_CreateObject(0, &npclass_proxy_));
73 obj->proxy = new NPObjectProxy( 74 obj->proxy = new NPObjectProxy(
74 channel, route_id, npobject_ptr, modal_dialog_event); 75 channel, route_id, npobject_ptr, modal_dialog_event);
75 76
76 return reinterpret_cast<NPObject*>(obj); 77 return reinterpret_cast<NPObject*>(obj);
77 } 78 }
78 79
79 bool NPObjectProxy::Send(IPC::Message* msg) { 80 bool NPObjectProxy::Send(IPC::Message* msg) {
80 if (channel_.get()) 81 if (channel_.get())
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
171 proxy->route_id_, is_default, name_param, args_param, &param_result, 172 proxy->route_id_, is_default, name_param, args_param, &param_result,
172 &result); 173 &result);
173 174
174 // If we're in the plugin process and this invoke leads to a dialog box, the 175 // If we're in the plugin process and this invoke leads to a dialog box, the
175 // plugin will hang the window hierarchy unless we pump the window message 176 // plugin will hang the window hierarchy unless we pump the window message
176 // queue while waiting for a reply. We need to do this to simulate what 177 // queue while waiting for a reply. We need to do this to simulate what
177 // happens when everything runs in-process (while calling MessageBox window 178 // happens when everything runs in-process (while calling MessageBox window
178 // messages are pumped). 179 // messages are pumped).
179 msg->set_pump_messages_event(proxy->modal_dialog_event_); 180 msg->set_pump_messages_event(proxy->modal_dialog_event_);
180 181
181 HANDLE modal_dialog_event_handle = proxy->modal_dialog_event_; 182 base::WaitableEvent* modal_dialog_event_handle = proxy->modal_dialog_event_;
182 183
183 proxy->Send(msg); 184 proxy->Send(msg);
184 185
185 // Send may delete proxy. 186 // Send may delete proxy.
186 proxy = NULL; 187 proxy = NULL;
187 188
188 if (!result) 189 if (!result)
189 return false; 190 return false;
190 191
191 CreateNPVariant( 192 CreateNPVariant(
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
230 bool result = false; 231 bool result = false;
231 NPObjectProxy* proxy = GetProxy(obj); 232 NPObjectProxy* proxy = GetProxy(obj);
232 if (!proxy) { 233 if (!proxy) {
233 return obj->_class->getProperty(obj, name, np_result); 234 return obj->_class->getProperty(obj, name, np_result);
234 } 235 }
235 236
236 NPIdentifier_Param name_param; 237 NPIdentifier_Param name_param;
237 CreateNPIdentifierParam(name, &name_param); 238 CreateNPIdentifierParam(name, &name_param);
238 239
239 NPVariant_Param param; 240 NPVariant_Param param;
240 HANDLE modal_dialog_event_handle = proxy->modal_dialog_event_; 241 base::WaitableEvent* modal_dialog_event_handle = proxy->modal_dialog_event_;
241 scoped_refptr<PluginChannelBase> channel(proxy->channel_); 242 scoped_refptr<PluginChannelBase> channel(proxy->channel_);
242 proxy->Send(new NPObjectMsg_GetProperty( 243 proxy->Send(new NPObjectMsg_GetProperty(
243 proxy->route_id(), name_param, &param, &result)); 244 proxy->route_id(), name_param, &param, &result));
244 // Send may delete proxy. 245 // Send may delete proxy.
245 proxy = NULL; 246 proxy = NULL;
246 if (!result) 247 if (!result)
247 return false; 248 return false;
248 249
249 CreateNPVariant( 250 CreateNPVariant(
250 param, channel.get(), np_result, modal_dialog_event_handle); 251 param, channel.get(), np_result, modal_dialog_event_handle);
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
360 NPObjectMsg_Evaluate* msg = new NPObjectMsg_Evaluate(proxy->route_id(), 361 NPObjectMsg_Evaluate* msg = new NPObjectMsg_Evaluate(proxy->route_id(),
361 script_str, 362 script_str,
362 popups_allowed, 363 popups_allowed,
363 &result_param, 364 &result_param,
364 &result); 365 &result);
365 366
366 // Please refer to the comments in NPObjectProxy::NPInvokePrivate for 367 // Please refer to the comments in NPObjectProxy::NPInvokePrivate for
367 // the reasoning behind setting the pump messages event in the sync message. 368 // the reasoning behind setting the pump messages event in the sync message.
368 msg->set_pump_messages_event(proxy->modal_dialog_event_); 369 msg->set_pump_messages_event(proxy->modal_dialog_event_);
369 scoped_refptr<PluginChannelBase> channel(proxy->channel_); 370 scoped_refptr<PluginChannelBase> channel(proxy->channel_);
370 HANDLE modal_dialog_event_handle = proxy->modal_dialog_event_; 371 base::WaitableEvent* modal_dialog_event_handle = proxy->modal_dialog_event_;
371 proxy->Send(msg); 372 proxy->Send(msg);
372 // Send may delete proxy. 373 // Send may delete proxy.
373 proxy = NULL; 374 proxy = NULL;
374 if (!result) 375 if (!result)
375 return false; 376 return false;
376 377
377 CreateNPVariant( 378 CreateNPVariant(
378 result_param, channel.get(), result_var, modal_dialog_event_handle); 379 result_param, channel.get(), result_var, modal_dialog_event_handle);
379 return true; 380 return true;
380 } 381 }
381 382
382 void NPObjectProxy::NPNSetException(NPObject *obj, 383 void NPObjectProxy::NPNSetException(NPObject *obj,
383 const NPUTF8 *message) { 384 const NPUTF8 *message) {
384 NPObjectProxy* proxy = GetProxy(obj); 385 NPObjectProxy* proxy = GetProxy(obj);
385 if (!proxy) { 386 if (!proxy) {
386 return; 387 return;
387 } 388 }
388 389
389 NPVariant_Param result_param; 390 NPVariant_Param result_param;
390 std::string message_str(message); 391 std::string message_str(message);
391 392
392 proxy->Send(new NPObjectMsg_SetException(proxy->route_id(), message_str)); 393 proxy->Send(new NPObjectMsg_SetException(proxy->route_id(), message_str));
393 // Send may delete proxy. 394 // Send may delete proxy.
394 proxy = NULL; 395 proxy = NULL;
395 } 396 }
396 397
OLDNEW
« no previous file with comments | « chrome/plugin/npobject_proxy.h ('k') | chrome/plugin/npobject_util.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698