Index: chrome/nacl/nacl_broker_listener.cc |
=================================================================== |
--- chrome/nacl/nacl_broker_listener.cc (revision 100565) |
+++ chrome/nacl/nacl_broker_listener.cc (working copy) |
@@ -2,35 +2,45 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
-#include "chrome/nacl/broker_thread.h" |
+#include "chrome/nacl/nacl_broker_listener.h" |
#include "base/base_switches.h" |
#include "base/command_line.h" |
+#include "base/message_loop.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_messages.h" |
-#include "content/common/child_process.h" |
+#include "content/common/content_switches.h" |
#include "content/common/sandbox_policy.h" |
#include "ipc/ipc_switches.h" |
-NaClBrokerThread::NaClBrokerThread() |
- : browser_handle_(0), |
- broker_services_(NULL) { |
+NaClBrokerListener::NaClBrokerListener() |
+ : browser_handle_(base::kNullProcessHandle) { |
} |
-NaClBrokerThread::~NaClBrokerThread() { |
+NaClBrokerListener::~NaClBrokerListener() { |
base::CloseProcessHandle(browser_handle_); |
} |
-NaClBrokerThread* NaClBrokerThread::current() { |
- return static_cast<NaClBrokerThread*>(ChildThread::current()); |
+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()); |
+ MessageLoop::current()->Run(); |
} |
-bool NaClBrokerThread::OnControlMessageReceived(const IPC::Message& msg) { |
+void NaClBrokerListener::OnChannelConnected(int32 peer_pid) { |
+ bool res = base::OpenProcessHandle(peer_pid, &browser_handle_); |
+ CHECK(res); |
+} |
+ |
+bool NaClBrokerListener::OnMessageReceived(const IPC::Message& msg) { |
bool handled = true; |
- IPC_BEGIN_MESSAGE_MAP(NaClBrokerThread, msg) |
+ IPC_BEGIN_MESSAGE_MAP(NaClBrokerListener, msg) |
IPC_MESSAGE_HANDLER(NaClProcessMsg_LaunchLoaderThroughBroker, |
OnLaunchLoaderThroughBroker) |
IPC_MESSAGE_HANDLER(NaClProcessMsg_StopBroker, OnStopBroker) |
@@ -39,7 +49,7 @@ |
return handled; |
} |
-void NaClBrokerThread::OnLaunchLoaderThroughBroker( |
+void NaClBrokerListener::OnLaunchLoaderThroughBroker( |
const std::wstring& loader_channel_id) { |
base::ProcessHandle loader_process = 0; |
base::ProcessHandle loader_handle_in_browser = 0; |
@@ -62,21 +72,14 @@ |
loader_process = sandbox::StartProcessWithAccess(cmd_line, FilePath()); |
if (loader_process) { |
DuplicateHandle(::GetCurrentProcess(), loader_process, |
- browser_handle_, &loader_handle_in_browser, |
- PROCESS_DUP_HANDLE | PROCESS_QUERY_INFORMATION , FALSE, 0); |
+ browser_handle_, &loader_handle_in_browser, |
+ PROCESS_DUP_HANDLE | PROCESS_QUERY_INFORMATION , FALSE, 0); |
} |
} |
- Send(new NaClProcessMsg_LoaderLaunched(loader_channel_id, |
- loader_handle_in_browser)); |
+ channel_->Send(new NaClProcessMsg_LoaderLaunched(loader_channel_id, |
+ loader_handle_in_browser)); |
} |
-void NaClBrokerThread::OnStopBroker() { |
- ChildProcess::current()->ReleaseProcess(); |
+void NaClBrokerListener::OnStopBroker() { |
+ MessageLoop::current()->Quit(); |
} |
- |
-void NaClBrokerThread::OnChannelConnected(int32 peer_pid) { |
- bool res = base::OpenProcessHandle(peer_pid, &browser_handle_); |
- DCHECK(res); |
- ChildProcess::current()->AddRefProcess(); |
-} |
- |