Index: remoting/host/win/worker_process_launcher_unittest.cc |
diff --git a/remoting/host/win/worker_process_launcher_unittest.cc b/remoting/host/win/worker_process_launcher_unittest.cc |
index 7c60eeef4234f0088c0cb4db405a44a104887cc7..5c7c69744d2cbcd4e8e01ebac728c656593cb037 100644 |
--- a/remoting/host/win/worker_process_launcher_unittest.cc |
+++ b/remoting/host/win/worker_process_launcher_unittest.cc |
@@ -12,6 +12,7 @@ |
#include "ipc/ipc_message.h" |
#include "remoting/base/auto_thread_task_runner.h" |
#include "remoting/host/host_exit_codes.h" |
+#include "remoting/host/win/launch_process_with_token.h" |
#include "remoting/host/win/worker_process_launcher.h" |
#include "remoting/host/worker_process_ipc_delegate.h" |
#include "testing/gmock_mutant.h" |
@@ -40,10 +41,13 @@ class MockProcessLauncherDelegate |
MockProcessLauncherDelegate() {} |
virtual ~MockProcessLauncherDelegate() {} |
+ // IPC::Sender implementation. |
+ MOCK_METHOD1(Send, bool(IPC::Message*)); |
+ |
// WorkerProcessLauncher::Delegate implementation |
MOCK_METHOD0(GetExitCode, DWORD()); |
MOCK_METHOD1(KillProcess, void(DWORD)); |
- MOCK_METHOD2(LaunchProcess, bool(const std::string&, ScopedHandle*)); |
+ MOCK_METHOD2(LaunchProcess, bool(IPC::Listener*, ScopedHandle*)); |
private: |
DISALLOW_COPY_AND_ASSIGN(MockProcessLauncherDelegate); |
@@ -81,13 +85,13 @@ class WorkerProcessLauncherTest |
// WorkerProcessLauncher::Delegate mocks |
void KillProcess(DWORD exit_code); |
- bool LaunchProcess(const std::string& channel_name, |
+ bool LaunchProcess(IPC::Listener* delegate, |
ScopedHandle* process_exit_event_out); |
- bool LaunchProcessAndConnect(const std::string& channel_name, |
+ bool LaunchProcessAndConnect(IPC::Listener* delegate, |
ScopedHandle* process_exit_event_out); |
- void ConnectTo(const std::string& channel_name); |
- void Disconnect(); |
+ void ConnectChannel(); |
+ void DisconnectChannel(); |
// Starts the worker. |
void StartWorker(); |
@@ -108,8 +112,12 @@ class WorkerProcessLauncherTest |
MockIpcDelegate ipc_delegate_; |
scoped_ptr<MockProcessLauncherDelegate> launcher_delegate_; |
- // Client end of the IPC channel. |
- scoped_ptr<IPC::ChannelProxy> ipc_channel_; |
+ // The name of the IPC channel. |
+ std::string channel_name_; |
+ |
+ // Client and server ends of the IPC channel. |
+ scoped_ptr<IPC::ChannelProxy> channel_client_; |
+ scoped_ptr<IPC::ChannelProxy> channel_server_; |
// The worker process launcher. |
scoped_ptr<WorkerProcessLauncher> launcher_; |
@@ -136,6 +144,9 @@ void WorkerProcessLauncherTest::SetUp() { |
// Set up process launcher delegate |
launcher_delegate_.reset(new MockProcessLauncherDelegate()); |
+ EXPECT_CALL(*launcher_delegate_, Send(_)) |
+ .Times(AnyNumber()) |
+ .WillRepeatedly(Return(false)); |
EXPECT_CALL(*launcher_delegate_, GetExitCode()) |
.Times(AnyNumber()) |
.WillRepeatedly(ReturnPointee(&exit_code_)); |
@@ -163,24 +174,16 @@ void WorkerProcessLauncherTest::KillProcess(DWORD exit_code) { |
} |
bool WorkerProcessLauncherTest::LaunchProcess( |
- const std::string& channel_name, |
- ScopedHandle* process_exit_event_out) { |
- return LaunchProcessAndConnect("", process_exit_event_out); |
-} |
- |
-bool WorkerProcessLauncherTest::LaunchProcessAndConnect( |
- const std::string& channel_name, |
+ IPC::Listener* delegate, |
ScopedHandle* process_exit_event_out) { |
process_exit_event_.Set(CreateEvent(NULL, TRUE, FALSE, NULL)); |
if (!process_exit_event_.IsValid()) |
return false; |
- if (!channel_name.empty()) { |
- task_runner_->PostTask( |
- FROM_HERE, |
- base::Bind(&WorkerProcessLauncherTest::ConnectTo, |
- base::Unretained(this), |
- channel_name)); |
+ channel_name_ = GenerateIpcChannelName(this); |
+ if (!CreateIpcChannel(channel_name_, kIpcSecurityDescriptor, task_runner_, |
+ delegate, &channel_server_)) { |
+ return false; |
} |
exit_code_ = STILL_ACTIVE; |
@@ -193,29 +196,41 @@ bool WorkerProcessLauncherTest::LaunchProcessAndConnect( |
DUPLICATE_SAME_ACCESS) != FALSE; |
} |
-void WorkerProcessLauncherTest::ConnectTo(const std::string& channel_name) { |
- ipc_channel_.reset(new IPC::ChannelProxy( |
- IPC::ChannelHandle(channel_name), |
+bool WorkerProcessLauncherTest::LaunchProcessAndConnect( |
+ IPC::Listener* delegate, |
+ ScopedHandle* process_exit_event_out) { |
+ if (!LaunchProcess(delegate, process_exit_event_out)) |
+ return false; |
+ |
+ task_runner_->PostTask( |
+ FROM_HERE, |
+ base::Bind(&WorkerProcessLauncherTest::ConnectChannel, |
+ base::Unretained(this))); |
+ return true; |
+} |
+ |
+void WorkerProcessLauncherTest::ConnectChannel() { |
+ channel_client_.reset(new IPC::ChannelProxy( |
+ IPC::ChannelHandle(channel_name_), |
IPC::Channel::MODE_CLIENT, |
this, |
task_runner_)); |
} |
-void WorkerProcessLauncherTest::Disconnect() { |
- ipc_channel_.reset(); |
+void WorkerProcessLauncherTest::DisconnectChannel() { |
+ channel_client_.reset(); |
} |
void WorkerProcessLauncherTest::StartWorker() { |
- launcher_.reset(new WorkerProcessLauncher(task_runner_, |
- task_runner_, |
- launcher_delegate_.Pass(), |
- &ipc_delegate_, |
- kIpcSecurityDescriptor)); |
+ launcher_.reset(new WorkerProcessLauncher( |
+ task_runner_, launcher_delegate_.Pass(), &ipc_delegate_)); |
} |
void WorkerProcessLauncherTest::StopWorker() { |
launcher_.reset(); |
- Disconnect(); |
+ DisconnectChannel(); |
+ channel_name_.clear(); |
+ channel_server_.reset(); |
task_runner_ = NULL; |
} |
@@ -294,7 +309,7 @@ TEST_F(WorkerProcessLauncherTest, DropIpcChannel) { |
Expectation first_connect = |
EXPECT_CALL(ipc_delegate_, OnChannelConnected()) |
.Times(2) |
- .WillOnce(Invoke(this, &WorkerProcessLauncherTest::Disconnect)) |
+ .WillOnce(Invoke(this, &WorkerProcessLauncherTest::DisconnectChannel)) |
.WillOnce(Invoke(this, &WorkerProcessLauncherTest::StopWorker)); |
EXPECT_CALL(ipc_delegate_, OnPermanentError()) |