diff options
author | teravest@chromium.org <teravest@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-08-19 15:02:44 +0000 |
---|---|---|
committer | teravest@chromium.org <teravest@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-08-19 15:02:44 +0000 |
commit | b6ae9c9f8605a1602d0d73a2e9e3902d8a15fe6f (patch) | |
tree | 00e453e4a18ddb7794268fe19d41e63299cf9a98 | |
parent | 763825398752041e54152605f0cfc3d2527a80dd (diff) | |
download | chromium_src-b6ae9c9f8605a1602d0d73a2e9e3902d8a15fe6f.zip chromium_src-b6ae9c9f8605a1602d0d73a2e9e3902d8a15fe6f.tar.gz chromium_src-b6ae9c9f8605a1602d0d73a2e9e3902d8a15fe6f.tar.bz2 |
Revert 217948 "Modify Pepper CreateResourceHostFromHost to creat..."
I started hitting some crashes in the nacl_integration test with a change that
uses this interface. I figure it will be easier to debug this introducing this
change on its own. Right now, I have to have my (large) FileRef change patched
over to see the crashes.
> Modify Pepper CreateResourceHostFromHost to create multiple hosts.
>
> This alters CreateResourceHostFromHost so that multiple resource hosts can be
> created with a single IPC. The general case is for many resources to be
> created at the same time. For example, you may pass an array of file refs
> across IPC.
>
> BUG=177017
> TBR=jam@chromium.org
>
> Review URL: https://chromiumcodereview.appspot.com/23011018
TBR=raymes@chromium.org
Review URL: https://codereview.chromium.org/22802011
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@218281 0039d316-1c4b-4281-b951-d872f2087c98
10 files changed, 79 insertions, 88 deletions
diff --git a/content/browser/renderer_host/pepper/pepper_renderer_connection.cc b/content/browser/renderer_host/pepper/pepper_renderer_connection.cc index 2be8f937..a5b95ce 100644 --- a/content/browser/renderer_host/pepper/pepper_renderer_connection.cc +++ b/content/browser/renderer_host/pepper/pepper_renderer_connection.cc @@ -72,8 +72,8 @@ bool PepperRendererConnection::OnMessageReceived(const IPC::Message& msg, bool handled = true; IPC_BEGIN_MESSAGE_MAP_EX(PepperRendererConnection, msg, *message_was_ok) - IPC_MESSAGE_HANDLER(PpapiHostMsg_CreateResourceHostsFromHost, - OnMsgCreateResourceHostsFromHost) + IPC_MESSAGE_HANDLER(PpapiHostMsg_CreateResourceHostFromHost, + OnMsgCreateResourceHostFromHost) IPC_MESSAGE_HANDLER(PpapiHostMsg_FileRef_GetInfoForRenderer, OnMsgFileRefGetInfoForRenderer) IPC_MESSAGE_HANDLER(ViewHostMsg_DidCreateInProcessInstance, @@ -86,45 +86,45 @@ bool PepperRendererConnection::OnMessageReceived(const IPC::Message& msg, return handled; } -void PepperRendererConnection::OnMsgCreateResourceHostsFromHost( +void PepperRendererConnection::OnMsgCreateResourceHostFromHost( int routing_id, int child_process_id, const ppapi::proxy::ResourceMessageCallParams& params, PP_Instance instance, - const std::vector<IPC::Message>& nested_msgs) { + const IPC::Message& nested_msg) { BrowserPpapiHostImpl* host = GetHostForChildProcess(child_process_id); - std::vector<int> pending_resource_host_ids(nested_msgs.size(), 0); + int pending_resource_host_id; if (!host) { DLOG(ERROR) << "Invalid plugin process ID."; + pending_resource_host_id = 0; } else { - for (size_t i = 0; i < nested_msgs[i].size(); ++i) { - // FileRef_CreateExternal is only permitted from the renderer. Because of - // this, we handle this message here and not in - // content_browser_pepper_host_factory.cc. - scoped_ptr<ppapi::host::ResourceHost> resource_host; - if (host->IsValidInstance(instance)) { - if (nested_msgs[i].type() == PpapiHostMsg_FileRef_CreateExternal::ID) { - base::FilePath external_path; - if (ppapi::UnpackMessage<PpapiHostMsg_FileRef_CreateExternal>( - nested_msgs[i], &external_path)) { - resource_host.reset(new PepperFileRefHost( - host, instance, params.pp_resource(), external_path)); - } + // FileRef_CreateExternal is only permitted from the renderer. Because of + // this, we handle this message here and not in + // content_browser_pepper_host_factory.cc. + scoped_ptr<ppapi::host::ResourceHost> resource_host; + if (host->IsValidInstance(instance)) { + if (nested_msg.type() == PpapiHostMsg_FileRef_CreateExternal::ID) { + base::FilePath external_path; + if (ppapi::UnpackMessage<PpapiHostMsg_FileRef_CreateExternal>( + nested_msg, &external_path)) { + resource_host.reset(new PepperFileRefHost( + host, instance, params.pp_resource(), external_path)); } } + } - if (!resource_host.get()) { - resource_host = host->GetPpapiHost()->CreateResourceHost( - params, instance, nested_msgs[i]); - } - pending_resource_host_ids[i] = - host->GetPpapiHost()->AddPendingResourceHost(resource_host.Pass()); + if (!resource_host.get()) { + resource_host = host->GetPpapiHost()->CreateResourceHost(params, + instance, + nested_msg); } + pending_resource_host_id = + host->GetPpapiHost()->AddPendingResourceHost(resource_host.Pass()); } - Send(new PpapiHostMsg_CreateResourceHostsFromHostReply( - routing_id, params.sequence(), pending_resource_host_ids)); + Send(new PpapiHostMsg_CreateResourceHostFromHostReply( + routing_id, params.sequence(), pending_resource_host_id)); } void PepperRendererConnection::OnMsgFileRefGetInfoForRenderer( diff --git a/content/browser/renderer_host/pepper/pepper_renderer_connection.h b/content/browser/renderer_host/pepper/pepper_renderer_connection.h index 24cbc2c..4392346 100644 --- a/content/browser/renderer_host/pepper/pepper_renderer_connection.h +++ b/content/browser/renderer_host/pepper/pepper_renderer_connection.h @@ -5,8 +5,6 @@ #ifndef CONTENT_BROWSER_RENDERER_HOST_PEPPER_PEPPER_RENDERER_CONNECTION_H_ #define CONTENT_BROWSER_RENDERER_HOST_PEPPER_PEPPER_RENDERER_CONNECTION_H_ -#include <vector> - #include "base/basictypes.h" #include "base/compiler_specific.h" #include "base/memory/scoped_ptr.h" @@ -47,12 +45,12 @@ class PepperRendererConnection : public BrowserMessageFilter { // PepperRendererConnection, which serves as the host for in-process plugins. BrowserPpapiHostImpl* GetHostForChildProcess(int child_process_id) const; - void OnMsgCreateResourceHostsFromHost( + void OnMsgCreateResourceHostFromHost( int routing_id, int child_process_id, const ppapi::proxy::ResourceMessageCallParams& params, PP_Instance instance, - const std::vector<IPC::Message>& nested_msgs); + const IPC::Message& nested_msg); void OnMsgFileRefGetInfoForRenderer( int routing_id, diff --git a/content/public/renderer/renderer_ppapi_host.h b/content/public/renderer/renderer_ppapi_host.h index 2922ff36..329961e 100644 --- a/content/public/renderer/renderer_ppapi_host.h +++ b/content/public/renderer/renderer_ppapi_host.h @@ -5,8 +5,6 @@ #ifndef CONTENT_PUBLIC_RENDERER_RENDERER_PPAPI_HOST_H_ #define CONTENT_PUBLIC_RENDERER_RENDERER_PPAPI_HOST_H_ -#include <vector> - #include "base/callback_forward.h" #include "base/memory/ref_counted.h" #include "base/platform_file.h" @@ -112,16 +110,16 @@ class RendererPpapiHost { virtual bool IsRunningInProcess() const = 0; // There are times when the renderer needs to create a ResourceHost in the - // browser. This function does so asynchronously. |nested_msgs| is a list of - // resource host creation messages and |instance| is the PP_Instance which + // browser. This function does so asynchronously. |nested_msg| is the + // resource host creation message and |instance| is the PP_Instance which // the resource will belong to. |callback| will be called with the pending - // host IDs when the ResourceHosts have been created. This can be passed back - // to the plugin to attach to the ResourceHosts. Pending IDs of 0 will be - // passed to the callback if a ResourceHost fails to be created. - virtual void CreateBrowserResourceHosts( + // host ID when the ResourceHost has been created. This can be passed back + // to the plugin to attach to the ResourceHost. A pending ID of 0 will be + // passed to the callback upon error. + virtual void CreateBrowserResourceHost( PP_Instance instance, - const std::vector<IPC::Message>& nested_msgs, - const base::Callback<void(const std::vector<int>&)>& callback) const = 0; + const IPC::Message& nested_msg, + const base::Callback<void(int)>& callback) const = 0; protected: virtual ~RendererPpapiHost() {} diff --git a/content/renderer/pepper/mock_renderer_ppapi_host.cc b/content/renderer/pepper/mock_renderer_ppapi_host.cc index 8000d40..e1de551 100644 --- a/content/renderer/pepper/mock_renderer_ppapi_host.cc +++ b/content/renderer/pepper/mock_renderer_ppapi_host.cc @@ -78,12 +78,12 @@ bool MockRendererPpapiHost::IsRunningInProcess() const { return false; } -void MockRendererPpapiHost::CreateBrowserResourceHosts( +void MockRendererPpapiHost::CreateBrowserResourceHost( PP_Instance instance, - const std::vector<IPC::Message>& nested_msg, - const base::Callback<void(const std::vector<int>&)>& callback) const { + const IPC::Message& nested_msg, + const base::Callback<void(int)>& callback) const { NOTIMPLEMENTED(); - callback.Run(std::vector<int>()); + callback.Run(0); return; } diff --git a/content/renderer/pepper/mock_renderer_ppapi_host.h b/content/renderer/pepper/mock_renderer_ppapi_host.h index 8f22d23..7a18ad2 100644 --- a/content/renderer/pepper/mock_renderer_ppapi_host.h +++ b/content/renderer/pepper/mock_renderer_ppapi_host.h @@ -49,11 +49,10 @@ class MockRendererPpapiHost : public RendererPpapiHost { base::PlatformFile handle, bool should_close_source) OVERRIDE; virtual bool IsRunningInProcess() const OVERRIDE; - virtual void CreateBrowserResourceHosts( + virtual void CreateBrowserResourceHost( PP_Instance instance, - const std::vector<IPC::Message>& nested_msgs, - const base::Callback<void( - const std::vector<int>&)>& callback) const OVERRIDE; + const IPC::Message& nested_msg, + const base::Callback<void(int)>& callback) const OVERRIDE; private: ppapi::proxy::ResourceMessageTestSink sink_; diff --git a/content/renderer/pepper/pepper_browser_connection.cc b/content/renderer/pepper/pepper_browser_connection.cc index 6bbec3d..3032576 100644 --- a/content/renderer/pepper/pepper_browser_connection.cc +++ b/content/renderer/pepper/pepper_browser_connection.cc @@ -32,8 +32,8 @@ bool PepperBrowserConnection::OnMessageReceived(const IPC::Message& msg) { bool handled = true; IPC_BEGIN_MESSAGE_MAP(PepperBrowserConnection, msg) - IPC_MESSAGE_HANDLER(PpapiHostMsg_CreateResourceHostsFromHostReply, - OnMsgCreateResourceHostsFromHostReply) + IPC_MESSAGE_HANDLER(PpapiHostMsg_CreateResourceHostFromHostReply, + OnMsgCreateResourceHostFromHostReply) IPC_MESSAGE_UNHANDLED(handled = false) IPC_END_MESSAGE_MAP() @@ -49,9 +49,9 @@ void PepperBrowserConnection::DidCreateInProcessInstance( instance, // Browser provides the render process id. PepperRendererInstanceData(0, - render_view_id, - document_url, - plugin_url))); + render_view_id, + document_url, + plugin_url))); } void PepperBrowserConnection::DidDeleteInProcessInstance(PP_Instance instance) { @@ -61,17 +61,17 @@ void PepperBrowserConnection::DidDeleteInProcessInstance(PP_Instance instance) { void PepperBrowserConnection::SendBrowserCreate( int child_process_id, PP_Instance instance, - const std::vector<IPC::Message>& nested_msgs, + const IPC::Message& nested_msg, const PendingResourceIDCallback& callback) { int32_t sequence_number = GetNextSequence(); pending_create_map_[sequence_number] = callback; ppapi::proxy::ResourceMessageCallParams params(0, sequence_number); - Send(new PpapiHostMsg_CreateResourceHostsFromHost( + Send(new PpapiHostMsg_CreateResourceHostFromHost( routing_id(), child_process_id, params, instance, - nested_msgs)); + nested_msg)); } void PepperBrowserConnection::SendBrowserFileRefGetInfo( @@ -84,15 +84,15 @@ void PepperBrowserConnection::SendBrowserFileRefGetInfo( routing_id(), child_process_id, sequence_number, resources)); } -void PepperBrowserConnection::OnMsgCreateResourceHostsFromHostReply( +void PepperBrowserConnection::OnMsgCreateResourceHostFromHostReply( int32_t sequence_number, - const std::vector<int>& pending_resource_host_ids) { + int pending_resource_host_id) { // Check that the message is destined for the plugin this object is associated // with. std::map<int32_t, PendingResourceIDCallback>::iterator it = pending_create_map_.find(sequence_number); if (it != pending_create_map_.end()) { - it->second.Run(pending_resource_host_ids); + it->second.Run(pending_resource_host_id); pending_create_map_.erase(it); } else { NOTREACHED(); diff --git a/content/renderer/pepper/pepper_browser_connection.h b/content/renderer/pepper/pepper_browser_connection.h index ab43409..9fde7d2 100644 --- a/content/renderer/pepper/pepper_browser_connection.h +++ b/content/renderer/pepper/pepper_browser_connection.h @@ -7,7 +7,6 @@ #include <map> #include <string> -#include <vector> #include "base/callback.h" #include "base/files/file_path.h" @@ -27,8 +26,7 @@ class PepperBrowserConnection : public RenderViewObserver, public RenderViewObserverTracker<PepperBrowserConnection> { public: - typedef base::Callback<void(const std::vector<int>&)> - PendingResourceIDCallback; + typedef base::Callback<void(int)> PendingResourceIDCallback; typedef base::Callback<void( const std::vector<PP_Resource>&, const std::vector<PP_FileSystemType>&, @@ -43,12 +41,12 @@ class PepperBrowserConnection // TODO(teravest): Instead of having separate methods per message, we should // add generic functionality similar to PluginResource::Call(). - // Sends a request to the browser to create ResourceHosts for the given + // Sends a request to the browser to create a ResourceHost for the given // |instance| of a plugin identified by |child_process_id|. |callback| will be - // run when a reply is received with the pending resource IDs. + // run when a reply is received with the pending resource ID. void SendBrowserCreate(PP_Instance instance, int child_process_id, - const std::vector<IPC::Message>& create_messages, + const IPC::Message& create_message, const PendingResourceIDCallback& callback); // Sends a request to the browser to get information about the given FileRef @@ -69,9 +67,8 @@ class PepperBrowserConnection private: // Message handlers. - void OnMsgCreateResourceHostsFromHostReply( - int32_t sequence_number, - const std::vector<int>& pending_resource_host_ids); + void OnMsgCreateResourceHostFromHostReply(int32_t sequence_number, + int pending_resource_host_id); void OnMsgFileRefGetInfoReply( int32_t sequence_number, const std::vector<PP_Resource>& resources, diff --git a/content/renderer/pepper/renderer_ppapi_host_impl.cc b/content/renderer/pepper/renderer_ppapi_host_impl.cc index b94eac7..dd78352 100644 --- a/content/renderer/pepper/renderer_ppapi_host_impl.cc +++ b/content/renderer/pepper/renderer_ppapi_host_impl.cc @@ -225,19 +225,19 @@ bool RendererPpapiHostImpl::IsRunningInProcess() const { return is_running_in_process_; } -void RendererPpapiHostImpl::CreateBrowserResourceHosts( +void RendererPpapiHostImpl::CreateBrowserResourceHost( PP_Instance instance, - const std::vector<IPC::Message>& nested_msgs, - const base::Callback<void(const std::vector<int>&)>& callback) const { + const IPC::Message& nested_msg, + const base::Callback<void(int)>& callback) const { RenderView* render_view = GetRenderViewForInstance(instance); PepperBrowserConnection* browser_connection = PepperBrowserConnection::Get(render_view); if (!browser_connection) { - callback.Run(std::vector<int>(nested_msgs.size(), 0)); + callback.Run(0); } else { browser_connection->SendBrowserCreate(module_->GetPluginChildId(), instance, - nested_msgs, + nested_msg, callback); } } diff --git a/content/renderer/pepper/renderer_ppapi_host_impl.h b/content/renderer/pepper/renderer_ppapi_host_impl.h index b7a0a53..935f38d 100644 --- a/content/renderer/pepper/renderer_ppapi_host_impl.h +++ b/content/renderer/pepper/renderer_ppapi_host_impl.h @@ -92,11 +92,10 @@ class RendererPpapiHostImpl : public RendererPpapiHost { base::PlatformFile handle, bool should_close_source) OVERRIDE; virtual bool IsRunningInProcess() const OVERRIDE; - virtual void CreateBrowserResourceHosts( + virtual void CreateBrowserResourceHost( PP_Instance instance, - const std::vector<IPC::Message>& nested_msgs, - const base::Callback<void( - const std::vector<int>&)>& callback) const OVERRIDE; + const IPC::Message& nested_msg, + const base::Callback<void(int)>& callback) const OVERRIDE; private: RendererPpapiHostImpl(PluginModule* module, diff --git a/ppapi/proxy/ppapi_messages.h b/ppapi/proxy/ppapi_messages.h index 59b592b..3767f8f 100644 --- a/ppapi/proxy/ppapi_messages.h +++ b/ppapi/proxy/ppapi_messages.h @@ -1275,27 +1275,27 @@ IPC_SYNC_MESSAGE_CONTROL2_2(PpapiHostMsg_ResourceSyncCall, IPC::Message /* reply_msg */) // This message is sent from the renderer to the browser when it wants to create -// ResourceHosts in the browser. It contains the process ID of the plugin and +// a ResourceHost in the browser. It contains the process ID of the plugin and // the instance of the plugin for which to create the resource for. params // contains the sequence number for the message to track the response. -// The nested messages are ResourceHost creation messages. +// The nested message is a ResourceHost creation message. IPC_MESSAGE_CONTROL5( - PpapiHostMsg_CreateResourceHostsFromHost, + PpapiHostMsg_CreateResourceHostFromHost, int /* routing_id */, int /* child_process_id */, ppapi::proxy::ResourceMessageCallParams /* params */, PP_Instance /* instance */, - std::vector<IPC::Message> /* nested_msgs */) + IPC::Message /* nested_msg */) -// This message is sent from the browser to the renderer when it has created -// ResourceHosts for the renderer. It contains the sequence number that was sent -// in the request and the IDs of the pending ResourceHosts which was created in -// the browser. These IDs are only useful for the plugin which can attach to the -// ResourceHosts in the browser. +// This message is sent from the browser to the renderer when it has created a +// ResourceHost for the renderer. It contains the sequence number that was sent +// in the request and the ID of the pending ResourceHost which was created in +// the browser. This ID is only useful for the plugin which can attach to the +// ResourceHost in the browser. IPC_MESSAGE_ROUTED2( - PpapiHostMsg_CreateResourceHostsFromHostReply, + PpapiHostMsg_CreateResourceHostFromHostReply, int32_t /* sequence */, - std::vector<int> /* pending_host_ids */) + int /* pending_host_id */) //----------------------------------------------------------------------------- // Messages for resources using call/reply above. |