summaryrefslogtreecommitdiffstats
path: root/chrome/browser/chrome_plugin_host.cc
diff options
context:
space:
mode:
authorzork@google.com <zork@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2008-09-15 23:43:42 +0000
committerzork@google.com <zork@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2008-09-15 23:43:42 +0000
commita9f4d90f8a1643ccc27aba95cf60c4531b3db7b9 (patch)
tree0f6069b618b1847b12cdba7d18e2ba8326073eed /chrome/browser/chrome_plugin_host.cc
parentb2d85c6d595cd7b0b3807d2bb7849fee343d7394 (diff)
downloadchromium_src-a9f4d90f8a1643ccc27aba95cf60c4531b3db7b9.zip
chromium_src-a9f4d90f8a1643ccc27aba95cf60c4531b3db7b9.tar.gz
chromium_src-a9f4d90f8a1643ccc27aba95cf60c4531b3db7b9.tar.bz2
Adding sync plugin messages, and plugin broadcasts to the renderer processes
Review URL: http://codereview.chromium.org/2411 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@2246 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/chrome_plugin_host.cc')
-rw-r--r--chrome/browser/chrome_plugin_host.cc49
1 files changed, 33 insertions, 16 deletions
diff --git a/chrome/browser/chrome_plugin_host.cc b/chrome/browser/chrome_plugin_host.cc
index 80180a6..37d8b80 100644
--- a/chrome/browser/chrome_plugin_host.cc
+++ b/chrome/browser/chrome_plugin_host.cc
@@ -639,28 +639,44 @@ CPProcessType STDCALL CPB_GetProcessType(CPID id) {
CPError STDCALL CPB_SendMessage(CPID id, const void *data, uint32 data_len) {
CommandLine cmd;
if (cmd.HasSwitch(switches::kGearsInRenderer)) {
- // TODO(mpcomplete): figure out what to do here.
- return CPERR_FAILURE;
- }
+ ChromePluginLib* plugin = ChromePluginLib::FromCPID(id);
+ CHECK(plugin);
+
+ const unsigned char* data_ptr = static_cast<const unsigned char*>(data);
+ std::vector<uint8> v(data_ptr, data_ptr + data_len);
+ for (RenderProcessHost::iterator it = RenderProcessHost::begin();
+ it != RenderProcessHost::end(); ++it) {
+ it->second->Send(new ViewMsg_PluginMessage(plugin->filename(), v));
+ }
- CHECK(ChromePluginLib::IsPluginThread());
- ChromePluginLib* plugin = ChromePluginLib::FromCPID(id);
- CHECK(plugin);
+ return CPERR_SUCCESS;
+ } else {
+ CHECK(ChromePluginLib::IsPluginThread());
+ ChromePluginLib* plugin = ChromePluginLib::FromCPID(id);
+ CHECK(plugin);
- PluginService* service = PluginService::GetInstance();
- if (!service)
+ PluginService* service = PluginService::GetInstance();
+ if (!service)
return CPERR_FAILURE;
- PluginProcessHost *host =
- service->FindOrStartPluginProcess(plugin->filename(), std::string());
- if (!host)
+ PluginProcessHost *host =
+ service->FindOrStartPluginProcess(plugin->filename(), std::string());
+ if (!host)
return CPERR_FAILURE;
- const unsigned char* data_ptr = static_cast<const unsigned char*>(data);
- std::vector<uint8> v(data_ptr, data_ptr + data_len);
- if (!host->Send(new PluginProcessMsg_PluginMessage(v)))
- return CPERR_FAILURE;
+ const unsigned char* data_ptr = static_cast<const unsigned char*>(data);
+ std::vector<uint8> v(data_ptr, data_ptr + data_len);
+ if (!host->Send(new PluginProcessMsg_PluginMessage(v)))
+ return CPERR_FAILURE;
- return CPERR_SUCCESS;
+ return CPERR_SUCCESS;
+ }
+}
+
+CPError STDCALL CPB_SendSyncMessage(CPID id, const void *data, uint32 data_len,
+ void **retval, uint32 *retval_len) {
+ NOTREACHED() << "Sync messages should not be sent from the browser process.";
+
+ return CPERR_FAILURE;
}
}
@@ -694,6 +710,7 @@ CPBrowserFuncs* GetCPBrowserFuncsForBrowser() {
browser_funcs.request_funcs = &request_funcs;
browser_funcs.response_funcs = &response_funcs;
+ browser_funcs.send_sync_message = CPB_SendSyncMessage;
request_funcs.size = sizeof(request_funcs);
request_funcs.start_request = CPR_StartRequest;