diff options
author | abarth@chromium.org <abarth@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-12-17 19:57:49 +0000 |
---|---|---|
committer | abarth@chromium.org <abarth@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-12-17 19:57:49 +0000 |
commit | 498e05a48dfade51ef44a1b5ed648bd2dfc3c6f0 (patch) | |
tree | b4f0772170e3fec3b4ae536c78d7315a18c06b58 /webkit | |
parent | 4c2f8195b9a5dc59d86434ab498ad609aa4034e4 (diff) | |
download | chromium_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.gypi | 2 | ||||
-rw-r--r-- | webkit/plugins/ppapi/plugin_module.cc | 4 | ||||
-rw-r--r-- | webkit/plugins/ppapi/ppb_nacl_util_private_impl.cc | 30 | ||||
-rw-r--r-- | webkit/plugins/ppapi/ppb_nacl_util_private_impl.h | 21 |
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_ |