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

Unified Diff: remoting/host/win/worker_process_launcher_unittest.cc

Issue 11118005: Pass the client end handle of the network-to-daemon IPC channel via handle inheritance. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: CR feedback. Created 8 years, 2 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
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())
« no previous file with comments | « remoting/host/win/worker_process_launcher.cc ('k') | remoting/host/win/wts_console_session_process_driver.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698