summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorteravest@chromium.org <teravest@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-08-19 15:02:44 +0000
committerteravest@chromium.org <teravest@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-08-19 15:02:44 +0000
commitb6ae9c9f8605a1602d0d73a2e9e3902d8a15fe6f (patch)
tree00e453e4a18ddb7794268fe19d41e63299cf9a98
parent763825398752041e54152605f0cfc3d2527a80dd (diff)
downloadchromium_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
-rw-r--r--content/browser/renderer_host/pepper/pepper_renderer_connection.cc52
-rw-r--r--content/browser/renderer_host/pepper/pepper_renderer_connection.h6
-rw-r--r--content/public/renderer/renderer_ppapi_host.h18
-rw-r--r--content/renderer/pepper/mock_renderer_ppapi_host.cc8
-rw-r--r--content/renderer/pepper/mock_renderer_ppapi_host.h7
-rw-r--r--content/renderer/pepper/pepper_browser_connection.cc22
-rw-r--r--content/renderer/pepper/pepper_browser_connection.h15
-rw-r--r--content/renderer/pepper/renderer_ppapi_host_impl.cc10
-rw-r--r--content/renderer/pepper/renderer_ppapi_host_impl.h7
-rw-r--r--ppapi/proxy/ppapi_messages.h22
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.