0

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
This commit is contained in:
abarth@chromium.org
2010-12-17 19:57:49 +00:00
parent 4c2f8195b9
commit 498e05a48d
6 changed files with 77 additions and 0 deletions

@ -0,0 +1,17 @@
// 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 PPAPI_C_PRIVATE_PPB_NACL_UTIL_PRIVATE_H_
#define PPAPI_C_PRIVATE_PPB_NACL_UTIL_PRIVATE_H_
#include "ppapi/c/pp_resource.h"
#include "ppapi/c/pp_stdint.h"
#define PPB_NACLUTIL_PRIVATE_INTERFACE "PPB_NaClUtil(Private);0.1"
struct PPB_NaClUtil_Private {
int32_t (*LaunchSelLdr)(PP_Resource file_io);
};
#endif // PPAPI_C_PRIVATE_PPB_NACL_UTIL_PRIVATE_H_

@ -100,6 +100,9 @@
'c/dev/ppp_widget_dev.h',
'c/dev/ppp_zoom_dev.h',
# Private interfaces.
'c/private/ppb_nacl_util_private.h',
# Deprecated interfaces.
'c/dev/deprecated_bool.h',
'c/dev/ppb_var_deprecated.h',

@ -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',

@ -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)

@ -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

@ -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_