Index: chrome/nacl/nacl_broker_listener.cc |
diff --git a/chrome/nacl/nacl_broker_listener.cc b/chrome/nacl/nacl_broker_listener.cc |
deleted file mode 100644 |
index e310dfeb406c581d8ee142cfc480e3d4e1724d7d..0000000000000000000000000000000000000000 |
--- a/chrome/nacl/nacl_broker_listener.cc |
+++ /dev/null |
@@ -1,129 +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 "chrome/nacl/nacl_broker_listener.h" |
- |
-#include "base/base_switches.h" |
-#include "base/bind.h" |
-#include "base/command_line.h" |
-#include "base/message_loop.h" |
-#include "base/message_loop/message_loop_proxy.h" |
-#include "base/path_service.h" |
-#include "base/process_util.h" |
-#include "chrome/common/chrome_switches.h" |
-#include "chrome/common/nacl_cmd_line.h" |
-#include "chrome/common/nacl_debug_exception_handler_win.h" |
-#include "chrome/common/nacl_messages.h" |
-#include "content/public/common/sandbox_init.h" |
-#include "ipc/ipc_channel.h" |
-#include "ipc/ipc_switches.h" |
-#include "sandbox/win/src/sandbox_policy.h" |
- |
-namespace { |
- |
-void SendReply(IPC::Channel* channel, int32 pid, bool result) { |
- channel->Send(new NaClProcessMsg_DebugExceptionHandlerLaunched(pid, result)); |
-} |
- |
-} // namespace |
- |
-NaClBrokerListener::NaClBrokerListener() |
- : browser_handle_(base::kNullProcessHandle) { |
-} |
- |
-NaClBrokerListener::~NaClBrokerListener() { |
- base::CloseProcessHandle(browser_handle_); |
-} |
- |
-void NaClBrokerListener::Listen() { |
- std::string channel_name = |
- CommandLine::ForCurrentProcess()->GetSwitchValueASCII( |
- switches::kProcessChannelID); |
- channel_.reset(new IPC::Channel( |
- channel_name, IPC::Channel::MODE_CLIENT, this)); |
- CHECK(channel_->Connect()); |
- base::MessageLoop::current()->Run(); |
-} |
- |
-// NOTE: changes to this method need to be reviewed by the security team. |
-void NaClBrokerListener::PreSpawnTarget(sandbox::TargetPolicy* policy, |
- bool* success) { |
- // This code is duplicated in chrome_content_browser_client.cc. |
- |
- // Allow the server side of a pipe restricted to the "chrome.nacl." |
- // namespace so that it cannot impersonate other system or other chrome |
- // service pipes. |
- sandbox::ResultCode result = policy->AddRule( |
- sandbox::TargetPolicy::SUBSYS_NAMED_PIPES, |
- sandbox::TargetPolicy::NAMEDPIPES_ALLOW_ANY, |
- L"\\\\.\\pipe\\chrome.nacl.*"); |
- *success = (result == sandbox::SBOX_ALL_OK); |
-} |
- |
-void NaClBrokerListener::OnChannelConnected(int32 peer_pid) { |
- bool res = base::OpenPrivilegedProcessHandle(peer_pid, &browser_handle_); |
- CHECK(res); |
-} |
- |
-bool NaClBrokerListener::OnMessageReceived(const IPC::Message& msg) { |
- bool handled = true; |
- IPC_BEGIN_MESSAGE_MAP(NaClBrokerListener, msg) |
- IPC_MESSAGE_HANDLER(NaClProcessMsg_LaunchLoaderThroughBroker, |
- OnLaunchLoaderThroughBroker) |
- IPC_MESSAGE_HANDLER(NaClProcessMsg_LaunchDebugExceptionHandler, |
- OnLaunchDebugExceptionHandler) |
- IPC_MESSAGE_HANDLER(NaClProcessMsg_StopBroker, OnStopBroker) |
- IPC_MESSAGE_UNHANDLED(handled = false) |
- IPC_END_MESSAGE_MAP() |
- return handled; |
-} |
- |
-void NaClBrokerListener::OnChannelError() { |
- // The browser died unexpectedly, quit to avoid a zombie process. |
- base::MessageLoop::current()->Quit(); |
-} |
- |
-void NaClBrokerListener::OnLaunchLoaderThroughBroker( |
- const std::string& loader_channel_id) { |
- base::ProcessHandle loader_process = 0; |
- base::ProcessHandle loader_handle_in_browser = 0; |
- |
- // Create the path to the nacl broker/loader executable - it's the executable |
- // this code is running in. |
- base::FilePath exe_path; |
- PathService::Get(base::FILE_EXE, &exe_path); |
- if (!exe_path.empty()) { |
- CommandLine* cmd_line = new CommandLine(exe_path); |
- nacl::CopyNaClCommandLineArguments(cmd_line); |
- |
- cmd_line->AppendSwitchASCII(switches::kProcessType, |
- switches::kNaClLoaderProcess); |
- |
- cmd_line->AppendSwitchASCII(switches::kProcessChannelID, |
- loader_channel_id); |
- |
- loader_process = content::StartSandboxedProcess(this, cmd_line); |
- if (loader_process) { |
- DuplicateHandle(::GetCurrentProcess(), loader_process, |
- browser_handle_, &loader_handle_in_browser, |
- PROCESS_DUP_HANDLE | PROCESS_QUERY_INFORMATION , FALSE, 0); |
- base::CloseProcessHandle(loader_process); |
- } |
- } |
- channel_->Send(new NaClProcessMsg_LoaderLaunched(loader_channel_id, |
- loader_handle_in_browser)); |
-} |
- |
-void NaClBrokerListener::OnLaunchDebugExceptionHandler( |
- int32 pid, base::ProcessHandle process_handle, |
- const std::string& startup_info) { |
- NaClStartDebugExceptionHandlerThread( |
- process_handle, startup_info, |
- base::MessageLoopProxy::current(), |
- base::Bind(SendReply, channel_.get(), pid)); |
-} |
- |
-void NaClBrokerListener::OnStopBroker() { |
- base::MessageLoop::current()->Quit(); |
-} |