diff options
Diffstat (limited to 'chrome/plugin')
-rw-r--r-- | chrome/plugin/npobject_proxy.cc | 31 | ||||
-rw-r--r-- | chrome/plugin/npobject_proxy.h | 10 | ||||
-rw-r--r-- | chrome/plugin/npobject_stub.cc | 28 | ||||
-rw-r--r-- | chrome/plugin/npobject_stub.h | 7 | ||||
-rw-r--r-- | chrome/plugin/npobject_util.cc | 12 | ||||
-rw-r--r-- | chrome/plugin/npobject_util.h | 13 | ||||
-rw-r--r-- | chrome/plugin/webplugin_delegate_stub.cc | 14 | ||||
-rw-r--r-- | chrome/plugin/webplugin_delegate_stub.h | 5 | ||||
-rw-r--r-- | chrome/plugin/webplugin_proxy.cc | 21 | ||||
-rw-r--r-- | chrome/plugin/webplugin_proxy.h | 6 |
10 files changed, 103 insertions, 44 deletions
diff --git a/chrome/plugin/npobject_proxy.cc b/chrome/plugin/npobject_proxy.cc index f56832a..acb3cc5 100644 --- a/chrome/plugin/npobject_proxy.cc +++ b/chrome/plugin/npobject_proxy.cc @@ -49,11 +49,13 @@ NPObjectProxy::NPObjectProxy( PluginChannelBase* channel, int route_id, intptr_t npobject_ptr, - base::WaitableEvent* modal_dialog_event) + base::WaitableEvent* modal_dialog_event, + const GURL& page_url) : channel_(channel), route_id_(route_id), npobject_ptr_(npobject_ptr), - modal_dialog_event_(modal_dialog_event) { + modal_dialog_event_(modal_dialog_event), + page_url_(page_url) { channel_->AddRoute(route_id, this, true); } @@ -68,11 +70,12 @@ NPObjectProxy::~NPObjectProxy() { NPObject* NPObjectProxy::Create(PluginChannelBase* channel, int route_id, intptr_t npobject_ptr, - base::WaitableEvent* modal_dialog_event) { + base::WaitableEvent* modal_dialog_event, + const GURL& page_url) { NPObjectWrapper* obj = reinterpret_cast<NPObjectWrapper*>( NPN_CreateObject(0, &npclass_proxy_)); obj->proxy = new NPObjectProxy( - channel, route_id, npobject_ptr, modal_dialog_event); + channel, route_id, npobject_ptr, modal_dialog_event, page_url); return reinterpret_cast<NPObject*>(obj); } @@ -166,7 +169,8 @@ bool NPObjectProxy::NPInvokePrivate(NPP npp, for (unsigned int i = 0; i < arg_count; ++i) { NPVariant_Param param; CreateNPVariantParam( - args[i], channel_copy, ¶m, false, proxy->modal_dialog_event_); + args[i], channel_copy, ¶m, false, proxy->modal_dialog_event_, + proxy->page_url_); args_param.push_back(param); } @@ -193,7 +197,8 @@ bool NPObjectProxy::NPInvokePrivate(NPP npp, return false; CreateNPVariant( - param_result, channel_copy, np_result, modal_dialog_event_handle); + param_result, channel_copy, np_result, modal_dialog_event_handle, + proxy->page_url_); return true; } @@ -251,7 +256,8 @@ bool NPObjectProxy::NPGetProperty(NPObject *obj, return false; CreateNPVariant( - param, channel.get(), np_result, modal_dialog_event_handle); + param, channel.get(), np_result, modal_dialog_event_handle, + proxy->page_url_); return true; } @@ -271,7 +277,7 @@ bool NPObjectProxy::NPSetProperty(NPObject *obj, NPVariant_Param value_param; CreateNPVariantParam( *value, proxy->channel(), &value_param, false, - proxy->modal_dialog_event_); + proxy->modal_dialog_event_, proxy->page_url_); proxy->Send(new NPObjectMsg_SetProperty( proxy->route_id(), name_param, value_param, &result)); @@ -358,7 +364,8 @@ bool NPObjectProxy::NPNConstruct(NPObject *obj, for (unsigned int i = 0; i < arg_count; ++i) { NPVariant_Param param; CreateNPVariantParam( - args[i], channel_copy, ¶m, false, proxy->modal_dialog_event_); + args[i], channel_copy, ¶m, false, proxy->modal_dialog_event_, + proxy->page_url_); args_param.push_back(param); } @@ -380,7 +387,8 @@ bool NPObjectProxy::NPNConstruct(NPObject *obj, return false; CreateNPVariant( - param_result, channel_copy, np_result, modal_dialog_event_handle); + param_result, channel_copy, np_result, modal_dialog_event_handle, + proxy->page_url_); return true; } @@ -425,7 +433,8 @@ bool NPObjectProxy::NPNEvaluate(NPP npp, return false; CreateNPVariant( - result_param, channel.get(), result_var, modal_dialog_event_handle); + result_param, channel.get(), result_var, modal_dialog_event_handle, + proxy->page_url_); return true; } diff --git a/chrome/plugin/npobject_proxy.h b/chrome/plugin/npobject_proxy.h index 3cdae9e..afeb207 100644 --- a/chrome/plugin/npobject_proxy.h +++ b/chrome/plugin/npobject_proxy.h @@ -10,6 +10,7 @@ #include "base/ref_counted.h" #include "chrome/common/ipc_channel.h" +#include "googleurl/src/gurl.h" #include "third_party/npapi/bindings/npruntime.h" class PluginChannelBase; @@ -36,7 +37,8 @@ class NPObjectProxy : public IPC::Channel::Listener, static NPObject* Create(PluginChannelBase* channel, int route_id, intptr_t npobject_ptr, - base::WaitableEvent* modal_dialog_event); + base::WaitableEvent* modal_dialog_event, + const GURL& page_url); // IPC::Message::Sender implementation: bool Send(IPC::Message* msg); @@ -101,7 +103,8 @@ class NPObjectProxy : public IPC::Channel::Listener, NPObjectProxy(PluginChannelBase* channel, int route_id, intptr_t npobject_ptr, - base::WaitableEvent* modal_dialog_event); + base::WaitableEvent* modal_dialog_event, + const GURL& page_url); // IPC::Channel::Listener implementation: void OnMessageReceived(const IPC::Message& msg); @@ -118,6 +121,9 @@ class NPObjectProxy : public IPC::Channel::Listener, int route_id_; intptr_t npobject_ptr_; base::WaitableEvent* modal_dialog_event_; + + // The url of the main frame hosting the plugin. + GURL page_url_; }; #endif // CHROME_PLUGIN_NPOBJECT_PROXY_H_ diff --git a/chrome/plugin/npobject_stub.cc b/chrome/plugin/npobject_stub.cc index c5f14f5..4345d37 100644 --- a/chrome/plugin/npobject_stub.cc +++ b/chrome/plugin/npobject_stub.cc @@ -4,6 +4,7 @@ #include "chrome/plugin/npobject_stub.h" +#include "chrome/common/child_process_logging.h" #include "chrome/common/plugin_messages.h" #include "chrome/plugin/npobject_util.h" #include "chrome/plugin/plugin_channel_base.h" @@ -15,13 +16,15 @@ NPObjectStub::NPObjectStub( NPObject* npobject, PluginChannelBase* channel, int route_id, - base::WaitableEvent* modal_dialog_event) + base::WaitableEvent* modal_dialog_event, + const GURL& page_url) : npobject_(npobject), channel_(channel), route_id_(route_id), valid_(true), web_plugin_delegate_proxy_(NULL), - modal_dialog_event_(modal_dialog_event) { + modal_dialog_event_(modal_dialog_event), + page_url_(page_url) { channel_->AddRoute(route_id, this, true); // We retain the object just as PluginHost does if everything was in-process. @@ -42,6 +45,8 @@ bool NPObjectStub::Send(IPC::Message* msg) { } void NPObjectStub::OnMessageReceived(const IPC::Message& msg) { + child_process_logging::ScopedActiveURLSetter url_setter(page_url_); + if (!valid_) { if (msg.is_sync()) { // The object could be garbage because the frame has gone away, so @@ -117,7 +122,8 @@ void NPObjectStub::OnInvoke(bool is_default, NPVariant* args_var = new NPVariant[arg_count]; for (int i = 0; i < arg_count; ++i) { CreateNPVariant( - args[i], local_channel, &(args_var[i]), modal_dialog_event_); + args[i], local_channel, &(args_var[i]), modal_dialog_event_, + page_url_); } if (is_default) { @@ -153,7 +159,8 @@ void NPObjectStub::OnInvoke(bool is_default, delete[] args_var; CreateNPVariantParam( - result_var, local_channel, &result_param, true, modal_dialog_event_); + result_var, local_channel, &result_param, true, modal_dialog_event_, + page_url_); NPObjectMsg_Invoke::WriteReplyParams(reply_msg, result_param, return_value); local_channel->Send(reply_msg); } @@ -190,7 +197,7 @@ void NPObjectStub::OnGetProperty(const NPIdentifier_Param& name, } CreateNPVariantParam( - result_var, channel_, property, true, modal_dialog_event_); + result_var, channel_, property, true, modal_dialog_event_, page_url_); } void NPObjectStub::OnSetProperty(const NPIdentifier_Param& name, @@ -200,7 +207,8 @@ void NPObjectStub::OnSetProperty(const NPIdentifier_Param& name, VOID_TO_NPVARIANT(result_var); NPIdentifier id = CreateNPIdentifier(name); NPVariant property_var; - CreateNPVariant(property, channel_, &property_var, modal_dialog_event_); + CreateNPVariant( + property, channel_, &property_var, modal_dialog_event_, page_url_); if (IsPluginProcess()) { if (npobject_->_class->setProperty) { @@ -281,7 +289,7 @@ void NPObjectStub::OnConstruct(const std::vector<NPVariant_Param>& args, NPVariant* args_var = new NPVariant[arg_count]; for (int i = 0; i < arg_count; ++i) { CreateNPVariant( - args[i], local_channel, &(args_var[i]), modal_dialog_event_); + args[i], local_channel, &(args_var[i]), modal_dialog_event_, page_url_); } if (IsPluginProcess()) { @@ -302,7 +310,8 @@ void NPObjectStub::OnConstruct(const std::vector<NPVariant_Param>& args, delete[] args_var; CreateNPVariantParam( - result_var, local_channel, &result_param, true, modal_dialog_event_); + result_var, local_channel, &result_param, true, modal_dialog_event_, + page_url_); NPObjectMsg_Invoke::WriteReplyParams(reply_msg, result_param, return_value); local_channel->Send(reply_msg); } @@ -331,7 +340,8 @@ void NPObjectStub::OnEvaluate(const std::string& script, NPVariant_Param result_param; CreateNPVariantParam( - result_var, local_channel, &result_param, true, modal_dialog_event_); + result_var, local_channel, &result_param, true, modal_dialog_event_, + page_url_); NPObjectMsg_Evaluate::WriteReplyParams(reply_msg, result_param, return_value); local_channel->Send(reply_msg); } diff --git a/chrome/plugin/npobject_stub.h b/chrome/plugin/npobject_stub.h index 94bf2b1..acfd7727 100644 --- a/chrome/plugin/npobject_stub.h +++ b/chrome/plugin/npobject_stub.h @@ -12,6 +12,7 @@ #include "base/ref_counted.h" #include "chrome/common/ipc_channel.h" +#include "googleurl/src/gurl.h" namespace base { class WaitableEvent; @@ -32,7 +33,8 @@ class NPObjectStub : public IPC::Channel::Listener, NPObjectStub(NPObject* npobject, PluginChannelBase* channel, int route_id, - base::WaitableEvent* modal_dialog_event); + base::WaitableEvent* modal_dialog_event, + const GURL& page_url); ~NPObjectStub(); // IPC::Message::Sender implementation: @@ -90,6 +92,9 @@ class NPObjectStub : public IPC::Channel::Listener, WebPluginDelegateProxy* web_plugin_delegate_proxy_; base::WaitableEvent* modal_dialog_event_; + + // The url of the main frame hosting the plugin. + GURL page_url_; }; #endif // CHROME_PLUGIN_NPOBJECT_STUB_H_ diff --git a/chrome/plugin/npobject_util.cc b/chrome/plugin/npobject_util.cc index ececfa2..ecf5606 100644 --- a/chrome/plugin/npobject_util.cc +++ b/chrome/plugin/npobject_util.cc @@ -138,7 +138,8 @@ void CreateNPVariantParam(const NPVariant& variant, PluginChannelBase* channel, NPVariant_Param* param, bool release, - base::WaitableEvent* modal_dialog_event) { + base::WaitableEvent* modal_dialog_event, + const GURL& page_url) { switch (variant.type) { case NPVariantType_Void: param->type = NPVARIANT_PARAM_VOID; @@ -183,7 +184,8 @@ void CreateNPVariantParam(const NPVariant& variant, param->type = NPVARIANT_PARAM_OBJECT_ROUTING_ID; int route_id = channel->GenerateRouteID(); new NPObjectStub( - variant.value.objectValue, channel, route_id, modal_dialog_event); + variant.value.objectValue, channel, route_id, modal_dialog_event, + page_url); param->npobject_routing_id = route_id; param->npobject_pointer = reinterpret_cast<intptr_t>(variant.value.objectValue); @@ -204,7 +206,8 @@ void CreateNPVariantParam(const NPVariant& variant, void CreateNPVariant(const NPVariant_Param& param, PluginChannelBase* channel, NPVariant* result, - base::WaitableEvent* modal_dialog_event) { + base::WaitableEvent* modal_dialog_event, + const GURL& page_url) { switch (param.type) { case NPVARIANT_PARAM_VOID: result->type = NPVariantType_Void; @@ -237,7 +240,8 @@ void CreateNPVariant(const NPVariant_Param& param, NPObjectProxy::Create(channel, param.npobject_routing_id, param.npobject_pointer, - modal_dialog_event); + modal_dialog_event, + page_url); break; case NPVARIANT_PARAM_OBJECT_POINTER: result->type = NPVariantType_Object; diff --git a/chrome/plugin/npobject_util.h b/chrome/plugin/npobject_util.h index 9a2907b..861d591 100644 --- a/chrome/plugin/npobject_util.h +++ b/chrome/plugin/npobject_util.h @@ -15,12 +15,15 @@ #include "chrome/plugin/npobject_stub.h" -struct _NPVariant; -typedef _NPVariant NPVariant; +class GURL; class NPObjectProxy; class PluginChannelBase; + +struct _NPVariant; struct NPIdentifier_Param; struct NPVariant_Param; + +typedef _NPVariant NPVariant; typedef void *NPIdentifier; namespace base { @@ -50,13 +53,15 @@ void CreateNPVariantParam(const NPVariant& variant, PluginChannelBase* channel, NPVariant_Param* param, bool release, - base::WaitableEvent* modal_dialog_event); + base::WaitableEvent* modal_dialog_event, + const GURL& page_url); // Creates an NPVariant from the marshalled object. void CreateNPVariant(const NPVariant_Param& param, PluginChannelBase* channel, NPVariant* result, - base::WaitableEvent* modal_dialog_event); + base::WaitableEvent* modal_dialog_event, + const GURL& page_url); #if defined(OS_WIN) // Given a plugin's HWND, returns an event associated with the TabContents diff --git a/chrome/plugin/webplugin_delegate_stub.cc b/chrome/plugin/webplugin_delegate_stub.cc index 3bfd002..4d18012 100644 --- a/chrome/plugin/webplugin_delegate_stub.cc +++ b/chrome/plugin/webplugin_delegate_stub.cc @@ -7,6 +7,7 @@ #include "build/build_config.h" #include "base/command_line.h" +#include "chrome/common/child_process_logging.h" #include "chrome/common/chrome_switches.h" #include "chrome/common/plugin_messages.h" #include "chrome/plugin/npobject_stub.h" @@ -49,6 +50,8 @@ WebPluginDelegateStub::WebPluginDelegateStub( } WebPluginDelegateStub::~WebPluginDelegateStub() { + child_process_logging::ScopedActiveURLSetter url_setter(page_url_); + if (channel_->in_send()) { // The delegate or an npobject is in the callstack, so don't delete it // right away. @@ -64,6 +67,8 @@ WebPluginDelegateStub::~WebPluginDelegateStub() { } void WebPluginDelegateStub::OnMessageReceived(const IPC::Message& msg) { + child_process_logging::ScopedActiveURLSetter url_setter(page_url_); + // A plugin can execute a script to delete itself in any of its NPP methods. // Hold an extra reference to ourself so that if this does occur and we're // handling a sync message, we don't crash when attempting to send a reply. @@ -110,6 +115,9 @@ bool WebPluginDelegateStub::Send(IPC::Message* msg) { void WebPluginDelegateStub::OnInit(const PluginMsg_Init_Params& params, bool* result) { + page_url_ = params.page_url; + child_process_logging::ScopedActiveURLSetter url_setter(page_url_); + *result = false; int argc = static_cast<int>(params.arg_names.size()); if (argc != static_cast<int>(params.arg_values.size())) { @@ -139,7 +147,8 @@ void WebPluginDelegateStub::OnInit(const PluginMsg_Init_Params& params, delegate_ = WebPluginDelegate::Create(path, mime_type_, parent); if (delegate_) { - webplugin_ = new WebPluginProxy(channel_, instance_id_, delegate_); + webplugin_ = new WebPluginProxy( + channel_, instance_id_, delegate_, page_url_); #if defined(OS_WIN) if (!webplugin_->SetModalDialogEvent(params.modal_dialog_event)) return; @@ -278,7 +287,8 @@ void WebPluginDelegateStub::OnGetPluginScriptableObject(int* route_id, // The stub will delete itself when the proxy tells it that it's released, or // otherwise when the channel is closed. new NPObjectStub( - object, channel_.get(), *route_id, webplugin_->modal_dialog_event()); + object, channel_.get(), *route_id, webplugin_->modal_dialog_event(), + page_url_); // Release ref added by GetPluginScriptableObject (our stub holds its own). NPN_ReleaseObject(object); diff --git a/chrome/plugin/webplugin_delegate_stub.h b/chrome/plugin/webplugin_delegate_stub.h index b09038c..10ac7a4 100644 --- a/chrome/plugin/webplugin_delegate_stub.h +++ b/chrome/plugin/webplugin_delegate_stub.h @@ -13,9 +13,9 @@ #include "base/task.h" #include "chrome/common/ipc_channel.h" #include "chrome/common/transport_dib.h" +#include "googleurl/src/gurl.h" #include "third_party/npapi/bindings/npapi.h" -class GURL; class PluginChannel; class WebPluginProxy; class WebPluginDelegate; @@ -105,6 +105,9 @@ class WebPluginDelegateStub : public IPC::Channel::Listener, WebPluginDelegate* delegate_; WebPluginProxy* webplugin_; + // The url of the main frame hosting the plugin. + GURL page_url_; + DISALLOW_IMPLICIT_CONSTRUCTORS(WebPluginDelegateStub); }; diff --git a/chrome/plugin/webplugin_proxy.cc b/chrome/plugin/webplugin_proxy.cc index 3d6a6ac..b2fe778 100644 --- a/chrome/plugin/webplugin_proxy.cc +++ b/chrome/plugin/webplugin_proxy.cc @@ -13,6 +13,7 @@ #include "base/singleton.h" #include "base/waitable_event.h" #include "build/build_config.h" +#include "chrome/common/child_process_logging.h" #include "chrome/common/plugin_messages.h" #include "chrome/common/url_constants.h" #include "chrome/plugin/npobject_proxy.h" @@ -35,7 +36,8 @@ static ContextMap& GetContextMap() { WebPluginProxy::WebPluginProxy( PluginChannel* channel, int route_id, - WebPluginDelegate* delegate) + WebPluginDelegate* delegate, + const GURL& page_url) : channel_(channel), route_id_(route_id), cp_browsing_context_(0), @@ -43,6 +45,7 @@ WebPluginProxy::WebPluginProxy( plugin_element_(NULL), delegate_(delegate), waiting_for_paint_(false), + page_url_(page_url), ALLOW_THIS_IN_INITIALIZER_LIST(runnable_method_factory_(this)) { } @@ -159,10 +162,9 @@ NPObject* WebPluginProxy::GetWindowScriptNPObject() { if (!success) return NULL; - window_npobject_ = NPObjectProxy::Create(channel_, - npobject_route_id, - npobject_ptr, - modal_dialog_event_.get()); + window_npobject_ = NPObjectProxy::Create( + channel_, npobject_route_id, npobject_ptr, modal_dialog_event_.get(), + page_url_); return window_npobject_; } @@ -179,10 +181,9 @@ NPObject* WebPluginProxy::GetPluginElement() { if (!success) return NULL; - plugin_element_ = NPObjectProxy::Create(channel_, - npobject_route_id, - npobject_ptr, - modal_dialog_event_.get()); + plugin_element_ = NPObjectProxy::Create( + channel_, npobject_route_id, npobject_ptr, modal_dialog_event_.get(), + page_url_); return plugin_element_; } @@ -518,6 +519,8 @@ void WebPluginProxy::InitiateHTTPRangeRequest(const char* url, } void WebPluginProxy::OnPaint(const gfx::Rect& damaged_rect) { + child_process_logging::ScopedActiveURLSetter url_setter(page_url_); + Paint(damaged_rect); Send(new PluginHostMsg_InvalidateRect(route_id_, damaged_rect)); } diff --git a/chrome/plugin/webplugin_proxy.h b/chrome/plugin/webplugin_proxy.h index 0388514..103be5c 100644 --- a/chrome/plugin/webplugin_proxy.h +++ b/chrome/plugin/webplugin_proxy.h @@ -16,6 +16,7 @@ #include "chrome/common/ipc_message.h" #include "chrome/common/chrome_plugin_api.h" #include "chrome/common/transport_dib.h" +#include "googleurl/src/gurl.h" #include "webkit/glue/webplugin.h" namespace base { @@ -33,7 +34,8 @@ class WebPluginProxy : public WebPlugin { // marshalled WebPlugin calls. WebPluginProxy(PluginChannel* channel, int route_id, - WebPluginDelegate* delegate); + WebPluginDelegate* delegate, + const GURL& page_url); ~WebPluginProxy(); // WebPlugin overrides @@ -156,6 +158,8 @@ class WebPluginProxy : public WebPlugin { gfx::Rect damaged_rect_; bool waiting_for_paint_; scoped_ptr<base::WaitableEvent> modal_dialog_event_; + // The url of the main frame hosting the plugin. + GURL page_url_; #if defined(OS_WIN) // Variables used for desynchronized windowless plugin painting. See note in |