summaryrefslogtreecommitdiffstats
path: root/webkit
diff options
context:
space:
mode:
authorabarth@chromium.org <abarth@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-12-17 19:57:49 +0000
committerabarth@chromium.org <abarth@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-12-17 19:57:49 +0000
commit498e05a48dfade51ef44a1b5ed648bd2dfc3c6f0 (patch)
treeb4f0772170e3fec3b4ae536c78d7315a18c06b58 /webkit
parent4c2f8195b9a5dc59d86434ab498ad609aa4034e4 (diff)
downloadchromium_src-498e05a48dfade51ef44a1b5ed648bd2dfc3c6f0.zip
chromium_src-498e05a48dfade51ef44a1b5ed648bd2dfc3c6f0.tar.gz
chromium_src-498e05a48dfade51ef44a1b5ed648bd2dfc3c6f0.tar.bz2
Add stub PPAPI for launching NaCl's sel_ldr process.
In ArcticSea, we're going to load the NaCl plugin in the render process. The NaCl plugin needs to create a sel_ldr process to host the NEXE, but when the plugin lives inside the render process, the plugin is sandboxed, so it can't create a process. This API instructs the browser to launch a sel_ldr process and wire up a bunch of IMC channels between the plugin and the new process. In reality, the sel_ldr process is just chrome.exe run with a command line flag that causes it to call NaClMain instead of BrowserMain or RendererMain. Previously, NaCl accomplished this task by smuggling a function pointer (cast as an int) from render_process_impl to the NPAPI NaCl plugin. Rather than use the same approach again, we're creating a legit way for the PPAPI plugin to ask the browser to spawn the sel_ldr process. In BalticSea, we'll likely run the NaCl plugin out-of-process (e.g., in a PPAPI process). In that case, the plugin can just host the NEXE internally, and we'll be able to remove this interface. Review URL: http://codereview.chromium.org/5897004 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@69568 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit')
-rw-r--r--webkit/glue/webkit_glue.gypi2
-rw-r--r--webkit/plugins/ppapi/plugin_module.cc4
-rw-r--r--webkit/plugins/ppapi/ppb_nacl_util_private_impl.cc30
-rw-r--r--webkit/plugins/ppapi/ppb_nacl_util_private_impl.h21
4 files changed, 57 insertions, 0 deletions
diff --git a/webkit/glue/webkit_glue.gypi b/webkit/glue/webkit_glue.gypi
index 3e3ddce..8cafce2 100644
--- a/webkit/glue/webkit_glue.gypi
+++ b/webkit/glue/webkit_glue.gypi
@@ -220,6 +220,8 @@
'../plugins/ppapi/ppb_graphics_3d_impl.h',
'../plugins/ppapi/ppb_image_data_impl.cc',
'../plugins/ppapi/ppb_image_data_impl.h',
+ '../plugins/ppapi/ppb_nacl_util_private_impl.cc',
+ '../plugins/ppapi/ppb_nacl_util_private_impl.h',
'../plugins/ppapi/ppb_open_gl_es_impl.cc',
'../plugins/ppapi/ppb_pdf.h',
'../plugins/ppapi/ppb_pdf_impl.cc',
diff --git a/webkit/plugins/ppapi/plugin_module.cc b/webkit/plugins/ppapi/plugin_module.cc
index 96eadfb..5129e71 100644
--- a/webkit/plugins/ppapi/plugin_module.cc
+++ b/webkit/plugins/ppapi/plugin_module.cc
@@ -46,6 +46,7 @@
#include "ppapi/c/ppb_var.h"
#include "ppapi/c/ppp.h"
#include "ppapi/c/ppp_instance.h"
+#include "ppapi/c/private/ppb_nacl_util_private.h"
#include "ppapi/c/trusted/ppb_image_data_trusted.h"
#include "ppapi/c/trusted/ppb_url_loader_trusted.h"
#include "webkit/plugins/ppapi/common.h"
@@ -65,6 +66,7 @@
#include "webkit/plugins/ppapi/ppb_font_impl.h"
#include "webkit/plugins/ppapi/ppb_graphics_2d_impl.h"
#include "webkit/plugins/ppapi/ppb_image_data_impl.h"
+#include "webkit/plugins/ppapi/ppb_nacl_util_private_impl.h"
#include "webkit/plugins/ppapi/ppb_pdf.h"
#include "webkit/plugins/ppapi/ppb_pdf_impl.h"
#include "webkit/plugins/ppapi/ppb_scrollbar_impl.h"
@@ -224,6 +226,8 @@ const void* GetInterface(const char* name) {
return PPB_FileChooser_Impl::GetInterface();
if (strcmp(name, PPB_FILEIO_DEV_INTERFACE) == 0)
return PPB_FileIO_Impl::GetInterface();
+ if (strcmp(name, PPB_NACLUTIL_PRIVATE_INTERFACE) == 0)
+ return PPB_NaClUtil_Private_Impl::GetInterface();
if (strcmp(name, PPB_FILEIOTRUSTED_DEV_INTERFACE) == 0)
return PPB_FileIO_Impl::GetTrustedInterface();
if (strcmp(name, PPB_FILEREF_DEV_INTERFACE) == 0)
diff --git a/webkit/plugins/ppapi/ppb_nacl_util_private_impl.cc b/webkit/plugins/ppapi/ppb_nacl_util_private_impl.cc
new file mode 100644
index 0000000..72dc76a
--- /dev/null
+++ b/webkit/plugins/ppapi/ppb_nacl_util_private_impl.cc
@@ -0,0 +1,30 @@
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "webkit/plugins/ppapi/ppb_nacl_util_private_impl.h"
+
+#include "ppapi/c/private/ppb_nacl_util_private.h"
+
+namespace webkit {
+namespace ppapi {
+
+namespace {
+
+int32_t LaunchSelLdr(PP_Resource file_io) {
+ return 0;
+}
+
+} // namespace
+
+const PPB_NaClUtil_Private ppb_nacl_util = {
+ &LaunchSelLdr,
+};
+
+// static
+const PPB_NaClUtil_Private* PPB_NaClUtil_Private_Impl::GetInterface() {
+ return &ppb_nacl_util;
+}
+
+} // namespace ppapi
+} // namespace webkit
diff --git a/webkit/plugins/ppapi/ppb_nacl_util_private_impl.h b/webkit/plugins/ppapi/ppb_nacl_util_private_impl.h
new file mode 100644
index 0000000..179b78d
--- /dev/null
+++ b/webkit/plugins/ppapi/ppb_nacl_util_private_impl.h
@@ -0,0 +1,21 @@
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef WEBKIT_PLUGINS_PPAPI_PPB_NACL_UTIL_PRIVATE_IMPL_H_
+#define WEBKIT_PLUGINS_PPAPI_PPB_NACL_UTIL_PRIVATE_IMPL_H_
+
+struct PPB_NaClUtil_Private;
+
+namespace webkit {
+namespace ppapi {
+
+class PPB_NaClUtil_Private_Impl {
+ public:
+ static const PPB_NaClUtil_Private* GetInterface();
+};
+
+} // namespace ppapi
+} // namespace webkit
+
+#endif // WEBKIT_PLUGINS_PPAPI_PPB_NACL_UTIL_PRIVATE_IMPL_H_