| OLD | NEW |
| 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_stub.h" | 5 #include "chrome/plugin/npobject_stub.h" |
| 6 | 6 |
| 7 #include "chrome/common/plugin_messages.h" | 7 #include "chrome/common/plugin_messages.h" |
| 8 #include "chrome/plugin/npobject_util.h" | 8 #include "chrome/plugin/npobject_util.h" |
| 9 #include "chrome/plugin/plugin_channel_base.h" | 9 #include "chrome/plugin/plugin_channel_base.h" |
| 10 #include "chrome/renderer/webplugin_delegate_proxy.h" | 10 #include "chrome/renderer/webplugin_delegate_proxy.h" |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 57 IPC_BEGIN_MESSAGE_MAP(NPObjectStub, msg) | 57 IPC_BEGIN_MESSAGE_MAP(NPObjectStub, msg) |
| 58 IPC_MESSAGE_HANDLER_DELAY_REPLY(NPObjectMsg_Release, OnRelease); | 58 IPC_MESSAGE_HANDLER_DELAY_REPLY(NPObjectMsg_Release, OnRelease); |
| 59 IPC_MESSAGE_HANDLER(NPObjectMsg_HasMethod, OnHasMethod); | 59 IPC_MESSAGE_HANDLER(NPObjectMsg_HasMethod, OnHasMethod); |
| 60 IPC_MESSAGE_HANDLER_DELAY_REPLY(NPObjectMsg_Invoke, OnInvoke); | 60 IPC_MESSAGE_HANDLER_DELAY_REPLY(NPObjectMsg_Invoke, OnInvoke); |
| 61 IPC_MESSAGE_HANDLER(NPObjectMsg_HasProperty, OnHasProperty); | 61 IPC_MESSAGE_HANDLER(NPObjectMsg_HasProperty, OnHasProperty); |
| 62 IPC_MESSAGE_HANDLER(NPObjectMsg_GetProperty, OnGetProperty); | 62 IPC_MESSAGE_HANDLER(NPObjectMsg_GetProperty, OnGetProperty); |
| 63 IPC_MESSAGE_HANDLER(NPObjectMsg_SetProperty, OnSetProperty); | 63 IPC_MESSAGE_HANDLER(NPObjectMsg_SetProperty, OnSetProperty); |
| 64 IPC_MESSAGE_HANDLER(NPObjectMsg_RemoveProperty, OnRemoveProperty); | 64 IPC_MESSAGE_HANDLER(NPObjectMsg_RemoveProperty, OnRemoveProperty); |
| 65 IPC_MESSAGE_HANDLER(NPObjectMsg_Invalidate, OnInvalidate); | 65 IPC_MESSAGE_HANDLER(NPObjectMsg_Invalidate, OnInvalidate); |
| 66 IPC_MESSAGE_HANDLER(NPObjectMsg_Enumeration, OnEnumeration); | 66 IPC_MESSAGE_HANDLER(NPObjectMsg_Enumeration, OnEnumeration); |
| 67 IPC_MESSAGE_HANDLER_DELAY_REPLY(NPObjectMsg_Construct, OnConstruct); |
| 67 IPC_MESSAGE_HANDLER_DELAY_REPLY(NPObjectMsg_Evaluate, OnEvaluate); | 68 IPC_MESSAGE_HANDLER_DELAY_REPLY(NPObjectMsg_Evaluate, OnEvaluate); |
| 68 IPC_MESSAGE_HANDLER(NPObjectMsg_SetException, OnSetException); | 69 IPC_MESSAGE_HANDLER(NPObjectMsg_SetException, OnSetException); |
| 69 IPC_MESSAGE_UNHANDLED_ERROR() | 70 IPC_MESSAGE_UNHANDLED_ERROR() |
| 70 IPC_END_MESSAGE_MAP() | 71 IPC_END_MESSAGE_MAP() |
| 71 } | 72 } |
| 72 | 73 |
| 73 void NPObjectStub::OnChannelError() { | 74 void NPObjectStub::OnChannelError() { |
| 74 // When the plugin process is shutting down, all the NPObjectStubs | 75 // When the plugin process is shutting down, all the NPObjectStubs |
| 75 // destructors are called. However the plugin dll might have already | 76 // destructors are called. However the plugin dll might have already |
| 76 // been released, in which case the NPN_ReleaseObject will cause a crash. | 77 // been released, in which case the NPN_ReleaseObject will cause a crash. |
| (...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 260 | 261 |
| 261 for (unsigned int i = 0; i < count; ++i) { | 262 for (unsigned int i = 0; i < count; ++i) { |
| 262 NPIdentifier_Param param; | 263 NPIdentifier_Param param; |
| 263 CreateNPIdentifierParam(value_np[i], ¶m); | 264 CreateNPIdentifierParam(value_np[i], ¶m); |
| 264 value->push_back(param); | 265 value->push_back(param); |
| 265 } | 266 } |
| 266 | 267 |
| 267 NPN_MemFree(value_np); | 268 NPN_MemFree(value_np); |
| 268 } | 269 } |
| 269 | 270 |
| 271 void NPObjectStub::OnConstruct(const std::vector<NPVariant_Param>& args, |
| 272 IPC::Message* reply_msg) { |
| 273 scoped_refptr<PluginChannelBase> local_channel = channel_; |
| 274 bool return_value = false; |
| 275 NPVariant_Param result_param; |
| 276 NPVariant result_var; |
| 277 |
| 278 VOID_TO_NPVARIANT(result_var); |
| 279 |
| 280 int arg_count = static_cast<int>(args.size()); |
| 281 NPVariant* args_var = new NPVariant[arg_count]; |
| 282 for (int i = 0; i < arg_count; ++i) { |
| 283 CreateNPVariant( |
| 284 args[i], local_channel, &(args_var[i]), modal_dialog_event_); |
| 285 } |
| 286 |
| 287 if (IsPluginProcess()) { |
| 288 if (npobject_->_class->construct) { |
| 289 return_value = npobject_->_class->construct( |
| 290 npobject_, args_var, arg_count, &result_var); |
| 291 } else { |
| 292 return_value = false; |
| 293 } |
| 294 } else { |
| 295 return_value = NPN_Construct( |
| 296 0, npobject_, args_var, arg_count, &result_var); |
| 297 } |
| 298 |
| 299 for (int i = 0; i < arg_count; ++i) |
| 300 NPN_ReleaseVariantValue(&(args_var[i])); |
| 301 |
| 302 delete[] args_var; |
| 303 |
| 304 CreateNPVariantParam( |
| 305 result_var, local_channel, &result_param, true, modal_dialog_event_); |
| 306 NPObjectMsg_Invoke::WriteReplyParams(reply_msg, result_param, return_value); |
| 307 local_channel->Send(reply_msg); |
| 308 } |
| 309 |
| 270 void NPObjectStub::OnEvaluate(const std::string& script, | 310 void NPObjectStub::OnEvaluate(const std::string& script, |
| 271 bool popups_allowed, | 311 bool popups_allowed, |
| 272 IPC::Message* reply_msg) { | 312 IPC::Message* reply_msg) { |
| 273 if (IsPluginProcess()) { | 313 if (IsPluginProcess()) { |
| 274 NOTREACHED() << "Should only be called on NPObjects in the renderer"; | 314 NOTREACHED() << "Should only be called on NPObjects in the renderer"; |
| 275 return; | 315 return; |
| 276 } | 316 } |
| 277 | 317 |
| 278 // Grab a reference to the underlying channel, as the NPObjectStub | 318 // Grab a reference to the underlying channel, as the NPObjectStub |
| 279 // instance can be destroyed in the context of NPN_Evaluate. This | 319 // instance can be destroyed in the context of NPN_Evaluate. This |
| (...skipping 17 matching lines...) Expand all Loading... |
| 297 } | 337 } |
| 298 | 338 |
| 299 void NPObjectStub::OnSetException(const std::string& message) { | 339 void NPObjectStub::OnSetException(const std::string& message) { |
| 300 if (IsPluginProcess()) { | 340 if (IsPluginProcess()) { |
| 301 NOTREACHED() << "Should only be called on NPObjects in the renderer"; | 341 NOTREACHED() << "Should only be called on NPObjects in the renderer"; |
| 302 return; | 342 return; |
| 303 } | 343 } |
| 304 | 344 |
| 305 NPN_SetException(npobject_, message.c_str()); | 345 NPN_SetException(npobject_, message.c_str()); |
| 306 } | 346 } |
| OLD | NEW |