| Index: ppapi/proxy/plugin_main_nacl.cc
|
| ===================================================================
|
| --- ppapi/proxy/plugin_main_nacl.cc (revision 142493)
|
| +++ ppapi/proxy/plugin_main_nacl.cc (working copy)
|
| @@ -1,140 +0,0 @@
|
| -// Copyright (c) 2012 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 <map>
|
| -#include <set>
|
| -
|
| -#include "build/build_config.h"
|
| -// Need to include this before most other files because it defines
|
| -// IPC_MESSAGE_LOG_ENABLED. We need to use it to define
|
| -// IPC_MESSAGE_MACROS_LOG_ENABLED so ppapi_messages.h will generate the
|
| -// ViewMsgLog et al. functions.
|
| -
|
| -#include "base/message_loop.h"
|
| -#include "base/synchronization/waitable_event.h"
|
| -#include "base/threading/thread.h"
|
| -#include "ipc/ipc_channel_handle.h"
|
| -#include "ipc/ipc_logging.h"
|
| -#include "ipc/ipc_message.h"
|
| -#include "native_client/src/shared/ppapi_proxy/ppruntime.h"
|
| -#include "native_client/src/untrusted/irt/irt_ppapi.h"
|
| -#include "ppapi/c/ppp.h"
|
| -#include "ppapi/c/ppp_instance.h"
|
| -#include "ppapi/proxy/plugin_dispatcher.h"
|
| -#include "ppapi/proxy/plugin_globals.h"
|
| -
|
| -#if defined(IPC_MESSAGE_LOG_ENABLED)
|
| -#define IPC_MESSAGE_MACROS_LOG_ENABLED
|
| -#include "ppapi/proxy/ppapi_messages.h"
|
| -#endif
|
| -
|
| -// This must match up with NACL_CHROME_INITIAL_IPC_DESC,
|
| -// defined in sel_main_chrome.h
|
| -#define NACL_IPC_FD 6
|
| -
|
| -using ppapi::proxy::PluginDispatcher;
|
| -using ppapi::proxy::PluginGlobals;
|
| -
|
| -namespace {
|
| -
|
| -struct PP_ThreadFunctions thread_funcs;
|
| -
|
| -// Copied from src/content/ppapi_plugin/ppapi_thread. This is a minimal
|
| -// implementation to get us started.
|
| -class PluginDispatcherDelegate : public PluginDispatcher::PluginDelegate {
|
| - public:
|
| - explicit PluginDispatcherDelegate(
|
| - scoped_refptr<base::MessageLoopProxy> io_loop)
|
| - : message_loop_(io_loop),
|
| - shutdown_event_(true, false) {
|
| - }
|
| -
|
| - virtual base::MessageLoopProxy* GetIPCMessageLoop() OVERRIDE {
|
| - return message_loop_.get();
|
| - }
|
| -
|
| - virtual base::WaitableEvent* GetShutdownEvent() OVERRIDE {
|
| - return &shutdown_event_;
|
| - }
|
| -
|
| - virtual IPC::PlatformFileForTransit ShareHandleWithRemote(
|
| - base::PlatformFile handle,
|
| - const IPC::SyncChannel& channel,
|
| - bool should_close_source) OVERRIDE {
|
| - return IPC::InvalidPlatformFileForTransit();
|
| - }
|
| -
|
| - virtual std::set<PP_Instance>* GetGloballySeenInstanceIDSet() OVERRIDE {
|
| - return &instances_;
|
| - }
|
| -
|
| - virtual uint32 Register(PluginDispatcher* plugin_dispatcher) OVERRIDE {
|
| - if (!plugin_dispatcher ||
|
| - plugin_dispatchers_.size() >= std::numeric_limits<uint32>::max()) {
|
| - return 0;
|
| - }
|
| -
|
| - uint32 id = 0;
|
| - do {
|
| - // Although it is unlikely, make sure that we won't cause any trouble when
|
| - // the counter overflows.
|
| - id = next_plugin_dispatcher_id_++;
|
| - } while (id == 0 ||
|
| - plugin_dispatchers_.find(id) != plugin_dispatchers_.end());
|
| - plugin_dispatchers_[id] = plugin_dispatcher;
|
| - return id;
|
| - }
|
| -
|
| - virtual void Unregister(uint32 plugin_dispatcher_id) OVERRIDE {
|
| - plugin_dispatchers_.erase(plugin_dispatcher_id);
|
| - }
|
| -
|
| - private:
|
| - std::set<PP_Instance> instances_;
|
| - std::map<uint32, PluginDispatcher*> plugin_dispatchers_;
|
| - uint32 next_plugin_dispatcher_id_;
|
| - scoped_refptr<base::MessageLoopProxy> message_loop_;
|
| - base::WaitableEvent shutdown_event_;
|
| -};
|
| -
|
| -} // namespace
|
| -
|
| -void PpapiPluginRegisterThreadCreator(
|
| - const struct PP_ThreadFunctions* new_funcs) {
|
| - thread_funcs = *new_funcs;
|
| -}
|
| -
|
| -int IrtInit() {
|
| - return 0;
|
| -}
|
| -
|
| -int PpapiPluginMain() {
|
| - base::AtExitManager exit_manager;
|
| - MessageLoop loop;
|
| - IPC::Logging::set_log_function_map(&g_log_function_mapping);
|
| - ppapi::proxy::PluginGlobals plugin_globals;
|
| - base::Thread io_thread("Chrome_NaClIOThread");
|
| - base::Thread::Options options;
|
| - options.message_loop_type = MessageLoop::TYPE_IO;
|
| - io_thread.StartWithOptions(options);
|
| -
|
| - int32_t error = ::PPP_InitializeModule(
|
| - 0 /* module */,
|
| - &ppapi::proxy::PluginDispatcher::GetBrowserInterface);
|
| - // TODO(dmichael): Handle other error conditions, like failure to connect?
|
| - if (error)
|
| - return error;
|
| -
|
| - PluginDispatcherDelegate delegate(io_thread.message_loop_proxy());
|
| -
|
| - // TODO(dmichael) Figure out how to determine if we're in incognito
|
| - PluginDispatcher dispatcher(::PPP_GetInterface, false /* incognito */);
|
| - IPC::ChannelHandle channel_handle("NaCl IPC",
|
| - base::FileDescriptor(NACL_IPC_FD, false));
|
| - dispatcher.InitPluginWithChannel(&delegate, channel_handle, false);
|
| -
|
| - loop.Run();
|
| - return 0;
|
| -}
|
| -
|
|
|