Index: content/renderer/pepper/pepper_plugin_delegate_impl.cc |
diff --git a/content/renderer/pepper/pepper_plugin_delegate_impl.cc b/content/renderer/pepper/pepper_plugin_delegate_impl.cc |
index 23fdd7b70adf859096ffa7d082e382415e8c215a..0c7aa1b369371ece76b9b776b1fc4ac37fd629ba 100644 |
--- a/content/renderer/pepper/pepper_plugin_delegate_impl.cc |
+++ b/content/renderer/pepper/pepper_plugin_delegate_impl.cc |
@@ -106,10 +106,12 @@ class HostDispatcherWrapper |
: public webkit::ppapi::PluginDelegate::OutOfProcessProxy { |
public: |
HostDispatcherWrapper(webkit::ppapi::PluginModule* module, |
+ base::ProcessId peer_pid, |
int plugin_child_id, |
const ppapi::PpapiPermissions& perms, |
bool is_external) |
: module_(module), |
+ peer_pid_(peer_pid), |
plugin_child_id_(plugin_child_id), |
permissions_(perms), |
is_external_(is_external) { |
@@ -134,6 +136,7 @@ class HostDispatcherWrapper |
module_->pp_module(), local_get_interface, filter, permissions_)); |
if (!dispatcher_->InitHostWithChannel(dispatcher_delegate_.get(), |
+ peer_pid_, |
channel_handle, |
true, // Client. |
preferences)) { |
@@ -194,6 +197,8 @@ class HostDispatcherWrapper |
private: |
webkit::ppapi::PluginModule* module_; |
+ base::ProcessId peer_pid_; |
+ |
// ID that the browser process uses to idetify the child process for the |
// plugin. This isn't directly useful from our process (the renderer) except |
// in messages to the browser to disambiguate plugins. |
@@ -397,9 +402,10 @@ PepperPluginDelegateImpl::CreatePepperPluginModule( |
// Out of process: have the browser start the plugin process for us. |
IPC::ChannelHandle channel_handle; |
+ base::ProcessId peer_pid; |
int plugin_child_id = 0; |
render_view_->Send(new ViewHostMsg_OpenChannelToPepperPlugin( |
- path, &channel_handle, &plugin_child_id)); |
+ path, &channel_handle, &peer_pid, &plugin_child_id)); |
if (channel_handle.name.empty()) { |
// Couldn't be initialized. |
return scoped_refptr<webkit::ppapi::PluginModule>(); |
@@ -417,6 +423,7 @@ PepperPluginDelegateImpl::CreatePepperPluginModule( |
path, |
permissions, |
channel_handle, |
+ peer_pid, |
plugin_child_id, |
false)) // is_external = false |
return scoped_refptr<webkit::ppapi::PluginModule>(); |
@@ -429,6 +436,7 @@ RendererPpapiHost* PepperPluginDelegateImpl::CreateExternalPluginModule( |
const FilePath& path, |
ppapi::PpapiPermissions permissions, |
const IPC::ChannelHandle& channel_handle, |
+ base::ProcessId peer_pid, |
int plugin_child_id) { |
// We don't call PepperPluginRegistry::AddLiveModule, as this module is |
// managed externally. |
@@ -436,6 +444,7 @@ RendererPpapiHost* PepperPluginDelegateImpl::CreateExternalPluginModule( |
path, |
permissions, |
channel_handle, |
+ peer_pid, |
plugin_child_id, |
true); // is_external = true |
} |
@@ -472,6 +481,7 @@ RendererPpapiHost* PepperPluginDelegateImpl::CreateOutOfProcessModule( |
const FilePath& path, |
ppapi::PpapiPermissions permissions, |
const IPC::ChannelHandle& channel_handle, |
+ base::ProcessId peer_pid, |
int plugin_child_id, |
bool is_external) { |
scoped_refptr<PepperHungPluginFilter> hung_filter( |
@@ -480,6 +490,7 @@ RendererPpapiHost* PepperPluginDelegateImpl::CreateOutOfProcessModule( |
plugin_child_id)); |
scoped_ptr<HostDispatcherWrapper> dispatcher( |
new HostDispatcherWrapper(module, |
+ peer_pid, |
plugin_child_id, |
permissions, |
is_external)); |
@@ -501,20 +512,21 @@ RendererPpapiHost* PepperPluginDelegateImpl::CreateOutOfProcessModule( |
void PepperPluginDelegateImpl::OnPpapiBrokerChannelCreated( |
int request_id, |
+ base::ProcessId broker_pid, |
const IPC::ChannelHandle& handle) { |
scoped_refptr<PepperBrokerImpl>* broker_ptr = |
pending_connect_broker_.Lookup(request_id); |
if (broker_ptr) { |
scoped_refptr<PepperBrokerImpl> broker = *broker_ptr; |
pending_connect_broker_.Remove(request_id); |
- broker->OnBrokerChannelConnected(handle); |
+ broker->OnBrokerChannelConnected(broker_pid, handle); |
} else { |
// There is no broker waiting for this channel. Close it so the broker can |
// clean up and possibly exit. |
// The easiest way to clean it up is to just put it in an object |
// and then close them. This failure case is not performance critical. |
PepperBrokerDispatcherWrapper temp_dispatcher; |
- temp_dispatcher.Init(handle); |
+ temp_dispatcher.Init(broker_pid, handle); |
} |
} |