summaryrefslogtreecommitdiffstats
path: root/chrome/plugin
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/plugin')
-rw-r--r--chrome/plugin/npobject_proxy.cc31
-rw-r--r--chrome/plugin/npobject_proxy.h10
-rw-r--r--chrome/plugin/npobject_stub.cc28
-rw-r--r--chrome/plugin/npobject_stub.h7
-rw-r--r--chrome/plugin/npobject_util.cc12
-rw-r--r--chrome/plugin/npobject_util.h13
-rw-r--r--chrome/plugin/webplugin_delegate_stub.cc14
-rw-r--r--chrome/plugin/webplugin_delegate_stub.h5
-rw-r--r--chrome/plugin/webplugin_proxy.cc21
-rw-r--r--chrome/plugin/webplugin_proxy.h6
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, &param, false, proxy->modal_dialog_event_);
+ args[i], channel_copy, &param, 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, &param, false, proxy->modal_dialog_event_);
+ args[i], channel_copy, &param, 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