Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(89)

Unified Diff: ppapi/proxy/plugin_main_irt.cc

Issue 140573003: Connect PPAPI IPC channels for non-SFI mode. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix build error Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ppapi/proxy/plugin_main_irt.h ('k') | ppapi/proxy/plugin_main_nacl.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ppapi/proxy/plugin_main_irt.cc
diff --git a/ppapi/proxy/plugin_main_nacl.cc b/ppapi/proxy/plugin_main_irt.cc
similarity index 87%
rename from ppapi/proxy/plugin_main_nacl.cc
rename to ppapi/proxy/plugin_main_irt.cc
index c84828daed874da918009cc04c538023486ba931..1372cc9c3d0dff29a260461f9c79a5c723015748 100644
--- a/ppapi/proxy/plugin_main_nacl.cc
+++ b/ppapi/proxy/plugin_main_irt.cc
@@ -2,8 +2,9 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include <unistd.h>
+#include "ppapi/proxy/plugin_main_irt.h"
+#include <unistd.h>
#include <map>
#include <set>
@@ -13,6 +14,7 @@
// IPC_MESSAGE_MACROS_LOG_ENABLED so ppapi_messages.h will generate the
// ViewMsgLog et al. functions.
+#include "base/at_exit.h"
#include "base/command_line.h"
#include "base/memory/scoped_ptr.h"
#include "base/message_loop/message_loop.h"
@@ -23,11 +25,8 @@
#include "ipc/ipc_channel_handle.h"
#include "ipc/ipc_logging.h"
#include "ipc/ipc_message.h"
-#include "native_client/src/public/chrome_main.h"
-#include "native_client/src/shared/srpc/nacl_srpc.h"
#include "ppapi/c/ppp.h"
#include "ppapi/c/ppp_instance.h"
-#include "ppapi/native_client/src/shared/ppapi_proxy/ppruntime.h"
#include "ppapi/proxy/plugin_dispatcher.h"
#include "ppapi/proxy/plugin_globals.h"
#include "ppapi/proxy/plugin_message_filter.h"
@@ -36,6 +35,11 @@
#include "ppapi/shared_impl/ppapi_switches.h"
#include "ppapi/shared_impl/ppb_audio_shared.h"
+#if defined(__native_client__)
+#include "native_client/src/public/chrome_main.h"
+#include "native_client/src/shared/srpc/nacl_srpc.h"
+#endif
+
#if defined(IPC_MESSAGE_LOG_ENABLED)
#include "base/containers/hash_tables.h"
@@ -56,6 +60,19 @@ using ppapi::proxy::SerializedHandle;
namespace {
+#if defined(__native_client__)
+// In SFI mode, the FDs of IPC channels are NACL_CHROME_DESC_BASE and its
+// successor, which is set in nacl_listener.cc.
+int g_nacl_ipc_browser_fd = NACL_CHROME_DESC_BASE;
+int g_nacl_ipc_renderer_fd = NACL_CHROME_DESC_BASE + 1;
+#else
+// In non-SFI mode, the FDs of IPC channels are different from the hard coded
+// ones. These values will be set by SetIPCFileDescriptors() below.
+// At first, both are initialized to invalid FD number (-1).
+int g_nacl_ipc_browser_fd = -1;
+int g_nacl_ipc_renderer_fd = -1;
+#endif
+
// This class manages communication between the plugin and the browser, and
// manages the PluginDispatcher instances for communication between the plugin
// and the renderer.
@@ -113,10 +130,10 @@ PpapiDispatcher::PpapiDispatcher(scoped_refptr<base::MessageLoopProxy> io_loop)
: next_plugin_dispatcher_id_(0),
message_loop_(io_loop),
shutdown_event_(true, false) {
- // The first FD (based on NACL_CHROME_DESC_BASE) is the IPC channel to the
- // browser.
+ DCHECK_NE(g_nacl_ipc_browser_fd, -1)
+ << "g_nacl_ipc_browser_fd must be initialized before the plugin starts";
IPC::ChannelHandle channel_handle(
- "NaCl IPC", base::FileDescriptor(NACL_CHROME_DESC_BASE, false));
+ "NaCl IPC", base::FileDescriptor(g_nacl_ipc_browser_fd, false));
// Delay initializing the SyncChannel until after we add filters. This
// ensures that the filters won't miss any messages received by
@@ -249,10 +266,10 @@ void PpapiDispatcher::OnMsgInitializeNaClDispatcher(
new PluginDispatcher(::PPP_GetInterface, args.permissions,
args.off_the_record);
// The channel handle's true name is not revealed here.
- // The second FD (based on NACL_CHROME_DESC_BASE) is the IPC channel to the
- // renderer.
+ DCHECK_NE(g_nacl_ipc_renderer_fd, -1)
+ << "g_nacl_ipc_renderer_fd must be initialized before the plugin starts";
IPC::ChannelHandle channel_handle(
- "nacl", base::FileDescriptor(NACL_CHROME_DESC_BASE + 1, false));
+ "nacl", base::FileDescriptor(g_nacl_ipc_renderer_fd, false));
if (!dispatcher->InitPluginWithChannel(this, base::kNullProcessId,
channel_handle, false)) {
delete dispatcher;
@@ -291,24 +308,41 @@ void PpapiDispatcher::SetPpapiKeepAliveThrottleFromCommandLine() {
} // namespace
+void SetIPCFileDescriptors(int ipc_browser_fd, int ipc_renderer_fd) {
+ g_nacl_ipc_browser_fd = ipc_browser_fd;
+ g_nacl_ipc_renderer_fd = ipc_renderer_fd;
+}
+
void PpapiPluginRegisterThreadCreator(
const struct PP_ThreadFunctions* thread_functions) {
+#if defined(__native_client__)
+ // TODO(hidehiko): The thread creation for the PPB_Audio is not yet
+ // implemented on non-SFI mode. Support this. Now, this function invocation
+ // is just ignored.
+
// Initialize all classes that need to create threads that call back into
// user code.
ppapi::PPB_Audio_Shared::SetThreadFunctions(thread_functions);
+#endif
}
int PpapiPluginMain() {
// Though it isn't referenced here, we must instantiate an AtExitManager.
base::AtExitManager exit_manager;
base::MessageLoop loop;
+#if defined(IPC_MESSAGE_LOG_ENABLED)
IPC::Logging::set_log_function_map(&g_log_function_mapping);
+#endif
ppapi::proxy::PluginGlobals plugin_globals;
base::Thread io_thread("Chrome_NaClIOThread");
base::Thread::Options options;
options.message_loop_type = base::MessageLoop::TYPE_IO;
io_thread.StartWithOptions(options);
+#if defined(__native_client__)
+ // Currently on non-SFI mode, we don't use SRPC server on plugin.
+ // TODO(hidehiko): Make sure this SRPC is actually used on SFI-mode.
+
// Start up the SRPC server on another thread. Otherwise, when it blocks
// on an RPC, the PPAPI proxy will hang. Do this before we initialize the
// module and start the PPAPI proxy so that the NaCl plugin can continue
@@ -317,6 +351,7 @@ int PpapiPluginMain() {
if (!NaClSrpcAcceptClientOnThread(srpc_methods)) {
return 1;
}
+#endif
PpapiDispatcher ppapi_dispatcher(io_thread.message_loop_proxy());
plugin_globals.set_plugin_proxy_delegate(&ppapi_dispatcher);
« no previous file with comments | « ppapi/proxy/plugin_main_irt.h ('k') | ppapi/proxy/plugin_main_nacl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698