summaryrefslogtreecommitdiffstats
path: root/chrome/renderer
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/renderer')
-rw-r--r--chrome/renderer/render_process.cc18
-rw-r--r--chrome/renderer/render_process.h5
-rw-r--r--chrome/renderer/render_view.cc8
3 files changed, 30 insertions, 1 deletions
diff --git a/chrome/renderer/render_process.cc b/chrome/renderer/render_process.cc
index 610e5d3..0c579ea 100644
--- a/chrome/renderer/render_process.cc
+++ b/chrome/renderer/render_process.cc
@@ -25,11 +25,13 @@
#include "chrome/common/chrome_switches.h"
#include "chrome/common/chrome_paths.h"
#include "chrome/common/render_messages.h"
+#include "chrome/common/nacl_types.h"
#include "chrome/common/transport_dib.h"
#include "chrome/renderer/render_view.h"
#include "ipc/ipc_channel.h"
#include "ipc/ipc_message_utils.h"
#include "media/base/media.h"
+#include "native_client/src/trusted/plugin/nacl_entry_points.h"
#include "webkit/glue/webkit_glue.h"
//-----------------------------------------------------------------------------
@@ -80,6 +82,9 @@ RenderProcess::RenderProcess()
StatisticsRecorder::set_dump_on_exit(true);
}
+ if (command_line.HasSwitch(switches::kInternalNaCl))
+ RegisterInternalNaClPlugin(RenderProcess::LaunchNaClProcess);
+
FilePath module_path;
initialized_media_library_ =
PathService::Get(base::DIR_MODULE, &module_path) &&
@@ -112,6 +117,19 @@ bool RenderProcess::InProcessPlugins() {
#endif
}
+bool RenderProcess::LaunchNaClProcess(int imc_fd,
+ nacl::Handle* handle) {
+ // TODO(gregoryd): nacl::FileDescriptor will be soon merged with
+ // base::FileDescriptor
+ nacl::FileDescriptor descriptor;
+ if (!RenderThread::current()->Send(
+ new ViewHostMsg_LaunchNaCl(imc_fd, &descriptor))) {
+ return false;
+ }
+ *handle = NATIVE_HANDLE(descriptor);
+ return true;
+}
+
// -----------------------------------------------------------------------------
// Platform specific code for dealing with bitmap transport...
diff --git a/chrome/renderer/render_process.h b/chrome/renderer/render_process.h
index d445fbe..0ab9996 100644
--- a/chrome/renderer/render_process.h
+++ b/chrome/renderer/render_process.h
@@ -8,6 +8,7 @@
#include "base/timer.h"
#include "chrome/common/child_process.h"
#include "chrome/renderer/render_thread.h"
+#include "native_client/src/shared/imc/nacl_imc.h"
#include "skia/ext/platform_canvas.h"
namespace gfx {
@@ -51,6 +52,10 @@ class RenderProcess : public ChildProcess {
// Just like in_process_plugins(), but called before RenderProcess is created.
static bool InProcessPlugins();
+ // Sends a message to the browser process asking to launch a new NaCl process.
+ // Called from NaCl plugin code.
+ static bool LaunchNaClProcess(int imc_fd, nacl::Handle *handle);
+
private:
// Look in the shared memory cache for a suitable object to reuse.
// result: (output) the memory found
diff --git a/chrome/renderer/render_view.cc b/chrome/renderer/render_view.cc
index e86c27d..231cfa7 100644
--- a/chrome/renderer/render_view.cc
+++ b/chrome/renderer/render_view.cc
@@ -2338,7 +2338,13 @@ webkit_glue::WebPluginDelegate* RenderView::CreatePluginDelegate(
else
mime_type_to_use = &mime_type;
- if (RenderProcess::current()->in_process_plugins()) {
+ bool in_process_plugin = RenderProcess::current()->in_process_plugins();
+ if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kInternalNaCl)) {
+ if (mime_type == "application/x-nacl-srpc") {
+ in_process_plugin = true;
+ }
+ }
+ if (in_process_plugin) {
#if defined(OS_WIN) // In-proc plugins aren't supported on Linux or Mac.
return WebPluginDelegateImpl::Create(
path, *mime_type_to_use, gfx::NativeViewFromId(host_window_));