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

Side by Side Diff: chrome/utility/importer/firefox_importer_unittest_utils_mac.cc

Issue 2680973006: Mojo EDK: Add safe process connection API (Closed)
Patch Set: . Created 3 years, 10 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 unified diff | Download patch
« no previous file with comments | « chrome/test/base/mojo_test_connector.cc ('k') | components/arc/arc_session.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/utility/importer/firefox_importer_unittest_utils.h" 5 #include "chrome/utility/importer/firefox_importer_unittest_utils.h"
6 6
7 #include "base/base_switches.h" 7 #include "base/base_switches.h"
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/files/file_path.h" 10 #include "base/files/file_path.h"
(...skipping 10 matching lines...) Expand all
21 #include "base/test/test_timeouts.h" 21 #include "base/test/test_timeouts.h"
22 #include "base/threading/thread_task_runner_handle.h" 22 #include "base/threading/thread_task_runner_handle.h"
23 #include "chrome/common/importer/firefox_importer_utils.h" 23 #include "chrome/common/importer/firefox_importer_utils.h"
24 #include "content/public/common/content_descriptors.h" 24 #include "content/public/common/content_descriptors.h"
25 #include "content/public/common/mojo_channel_switches.h" 25 #include "content/public/common/mojo_channel_switches.h"
26 #include "ipc/ipc_channel.h" 26 #include "ipc/ipc_channel.h"
27 #include "ipc/ipc_descriptors.h" 27 #include "ipc/ipc_descriptors.h"
28 #include "ipc/ipc_listener.h" 28 #include "ipc/ipc_listener.h"
29 #include "ipc/ipc_message.h" 29 #include "ipc/ipc_message.h"
30 #include "mojo/edk/embedder/embedder.h" 30 #include "mojo/edk/embedder/embedder.h"
31 #include "mojo/edk/embedder/pending_process_connection.h"
31 #include "mojo/edk/embedder/platform_channel_pair.h" 32 #include "mojo/edk/embedder/platform_channel_pair.h"
32 #include "mojo/edk/embedder/scoped_platform_handle.h" 33 #include "mojo/edk/embedder/scoped_platform_handle.h"
33 #include "testing/multiprocess_func_list.h" 34 #include "testing/multiprocess_func_list.h"
34 35
35 #define IPC_MESSAGE_IMPL 36 #define IPC_MESSAGE_IMPL
36 #include "chrome/utility/importer/firefox_importer_unittest_messages_internal.h" 37 #include "chrome/utility/importer/firefox_importer_unittest_messages_internal.h"
37 38
38 namespace { 39 namespace {
39 40
40 // Launch the child process: 41 // Launch the child process:
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
139 FFUnitTestDecryptorProxy::FFUnitTestDecryptorProxy() { 140 FFUnitTestDecryptorProxy::FFUnitTestDecryptorProxy() {
140 } 141 }
141 142
142 bool FFUnitTestDecryptorProxy::Setup(const base::FilePath& nss_path) { 143 bool FFUnitTestDecryptorProxy::Setup(const base::FilePath& nss_path) {
143 // Create a new message loop and spawn the child process. 144 // Create a new message loop and spawn the child process.
144 message_loop_.reset(new base::MessageLoopForIO()); 145 message_loop_.reset(new base::MessageLoopForIO());
145 146
146 listener_.reset(new FFDecryptorServerChannelListener()); 147 listener_.reset(new FFDecryptorServerChannelListener());
147 148
148 // Set up IPC channel using ChannelMojo. 149 // Set up IPC channel using ChannelMojo.
149 const std::string mojo_child_token = mojo::edk::GenerateRandomToken(); 150 mojo::edk::PendingProcessConnection process;
150 const std::string mojo_channel_token = mojo::edk::GenerateRandomToken(); 151 std::string token;
151 mojo::ScopedMessagePipeHandle parent_handle = 152 mojo::ScopedMessagePipeHandle parent_pipe = process.CreateMessagePipe(&token);
152 mojo::edk::CreateParentMessagePipe(mojo_channel_token, mojo_child_token); 153 channel_ = IPC::Channel::CreateServer(parent_pipe.release(), listener_.get());
153 channel_ = IPC::Channel::CreateServer(parent_handle.release(),
154 listener_.get());
155 CHECK(channel_->Connect()); 154 CHECK(channel_->Connect());
156 listener_->SetSender(channel_.get()); 155 listener_->SetSender(channel_.get());
157 156
158 // Spawn child and set up sync IPC connection. 157 // Spawn child and set up sync IPC connection.
159 mojo::edk::PlatformChannelPair channel_pair; 158 mojo::edk::PlatformChannelPair channel_pair;
160 child_process_ = LaunchNSSDecrypterChildProcess( 159 child_process_ = LaunchNSSDecrypterChildProcess(
161 nss_path, channel_pair.PassClientHandle(), mojo_channel_token); 160 nss_path, channel_pair.PassClientHandle(), token);
162 if (child_process_.IsValid()) { 161 if (child_process_.IsValid())
163 mojo::edk::ChildProcessLaunched(child_process_.Handle(), 162 process.Connect(child_process_.Handle(), channel_pair.PassServerHandle());
164 channel_pair.PassServerHandle(),
165 mojo_child_token);
166 } else {
167 mojo::edk::ChildProcessLaunchFailed(mojo_child_token);
168 }
169
170 return child_process_.IsValid(); 163 return child_process_.IsValid();
171 } 164 }
172 165
173 FFUnitTestDecryptorProxy::~FFUnitTestDecryptorProxy() { 166 FFUnitTestDecryptorProxy::~FFUnitTestDecryptorProxy() {
174 listener_->QuitClient(); 167 listener_->QuitClient();
175 channel_->Close(); 168 channel_->Close();
176 169
177 if (child_process_.IsValid()) { 170 if (child_process_.IsValid()) {
178 int exit_code; 171 int exit_code;
179 child_process_.WaitForExitWithTimeout(base::TimeDelta::FromSeconds(5), 172 child_process_.WaitForExitWithTimeout(base::TimeDelta::FromSeconds(5),
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
295 std::unique_ptr<IPC::Channel> channel = 288 std::unique_ptr<IPC::Channel> channel =
296 IPC::Channel::CreateClient(mojo_handle.release(), &listener); 289 IPC::Channel::CreateClient(mojo_handle.release(), &listener);
297 CHECK(channel->Connect()); 290 CHECK(channel->Connect());
298 listener.SetSender(channel.get()); 291 listener.SetSender(channel.get());
299 292
300 // run message loop 293 // run message loop
301 base::RunLoop().Run(); 294 base::RunLoop().Run();
302 295
303 return 0; 296 return 0;
304 } 297 }
OLDNEW
« no previous file with comments | « chrome/test/base/mojo_test_connector.cc ('k') | components/arc/arc_session.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698