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

Side by Side Diff: chrome/service/service_utility_process_host.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/service/service_utility_process_host.h ('k') | chrome/test/base/mojo_test_connector.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/service/service_utility_process_host.h" 5 #include "chrome/service/service_utility_process_host.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include <queue> 9 #include <queue>
10 #include <utility> 10 #include <utility>
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
162 int current_page_; 162 int current_page_;
163 int pages_in_progress_; 163 int pages_in_progress_;
164 }; 164 };
165 165
166 ServiceUtilityProcessHost::ServiceUtilityProcessHost( 166 ServiceUtilityProcessHost::ServiceUtilityProcessHost(
167 Client* client, 167 Client* client,
168 base::SingleThreadTaskRunner* client_task_runner) 168 base::SingleThreadTaskRunner* client_task_runner)
169 : client_(client), 169 : client_(client),
170 client_task_runner_(client_task_runner), 170 client_task_runner_(client_task_runner),
171 waiting_for_reply_(false), 171 waiting_for_reply_(false),
172 mojo_child_token_(mojo::edk::GenerateRandomToken()),
173 weak_ptr_factory_(this) { 172 weak_ptr_factory_(this) {
174 child_process_host_.reset(ChildProcessHost::Create(this)); 173 child_process_host_.reset(ChildProcessHost::Create(this));
175 } 174 }
176 175
177 ServiceUtilityProcessHost::~ServiceUtilityProcessHost() { 176 ServiceUtilityProcessHost::~ServiceUtilityProcessHost() {
178 // We need to kill the child process when the host dies. 177 // We need to kill the child process when the host dies.
179 process_.Terminate(content::RESULT_CODE_NORMAL_EXIT, false); 178 process_.Terminate(content::RESULT_CODE_NORMAL_EXIT, false);
180 } 179 }
181 180
182 bool ServiceUtilityProcessHost::StartRenderPDFPagesToMetafile( 181 bool ServiceUtilityProcessHost::StartRenderPDFPagesToMetafile(
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
214 if (!StartProcess(true)) 213 if (!StartProcess(true))
215 return false; 214 return false;
216 DCHECK(!waiting_for_reply_); 215 DCHECK(!waiting_for_reply_);
217 waiting_for_reply_ = true; 216 waiting_for_reply_ = true;
218 return Send( 217 return Send(
219 new ChromeUtilityMsg_GetPrinterSemanticCapsAndDefaults(printer_name)); 218 new ChromeUtilityMsg_GetPrinterSemanticCapsAndDefaults(printer_name));
220 } 219 }
221 220
222 bool ServiceUtilityProcessHost::StartProcess(bool no_sandbox) { 221 bool ServiceUtilityProcessHost::StartProcess(bool no_sandbox) {
223 std::string mojo_channel_token = 222 std::string mojo_channel_token =
224 child_process_host_->CreateChannelMojo(mojo_child_token_); 223 child_process_host_->CreateChannelMojo(&process_connection_);
225 if (mojo_channel_token.empty()) 224 if (mojo_channel_token.empty())
226 return false; 225 return false;
227 226
228 base::FilePath exe_path = GetUtilityProcessCmd(); 227 base::FilePath exe_path = GetUtilityProcessCmd();
229 if (exe_path.empty()) { 228 if (exe_path.empty()) {
230 NOTREACHED() << "Unable to get utility process binary name."; 229 NOTREACHED() << "Unable to get utility process binary name.";
231 return false; 230 return false;
232 } 231 }
233 232
234 base::CommandLine cmd_line(exe_path); 233 base::CommandLine cmd_line(exe_path);
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
271 ServiceSandboxedProcessLauncherDelegate delegate; 270 ServiceSandboxedProcessLauncherDelegate delegate;
272 base::Process process; 271 base::Process process;
273 sandbox::ResultCode result = content::StartSandboxedProcess( 272 sandbox::ResultCode result = content::StartSandboxedProcess(
274 &delegate, cmd_line, handles, &process); 273 &delegate, cmd_line, handles, &process);
275 if (result == sandbox::SBOX_ALL_OK) { 274 if (result == sandbox::SBOX_ALL_OK) {
276 process_ = std::move(process); 275 process_ = std::move(process);
277 success = true; 276 success = true;
278 } 277 }
279 } 278 }
280 279
281 if (success) { 280 if (success)
282 mojo::edk::ChildProcessLaunched(process_.Handle(), 281 process_connection_.Connect(process_.Handle(), std::move(parent_handle));
283 std::move(parent_handle), 282
284 mojo_child_token_);
285 } else {
286 mojo::edk::ChildProcessLaunchFailed(mojo_child_token_);
287 }
288 return success; 283 return success;
289 } 284 }
290 285
291 bool ServiceUtilityProcessHost::Send(IPC::Message* msg) { 286 bool ServiceUtilityProcessHost::Send(IPC::Message* msg) {
292 if (child_process_host_) 287 if (child_process_host_)
293 return child_process_host_->Send(msg); 288 return child_process_host_->Send(msg);
294 delete msg; 289 delete msg;
295 return false; 290 return false;
296 } 291 }
297 292
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
457 return false; 452 return false;
458 } 453 }
459 printing::Emf emf; 454 printing::Emf emf;
460 if (!emf.InitFromData(data.data(), data.size())) { 455 if (!emf.InitFromData(data.data(), data.size())) {
461 OnRenderPDFPagesToMetafileDone(false); 456 OnRenderPDFPagesToMetafileDone(false);
462 return false; 457 return false;
463 } 458 }
464 OnRenderPDFPagesToMetafilePageDone(scale_factor, emf); 459 OnRenderPDFPagesToMetafilePageDone(scale_factor, emf);
465 return true; 460 return true;
466 } 461 }
OLDNEW
« no previous file with comments | « chrome/service/service_utility_process_host.h ('k') | chrome/test/base/mojo_test_connector.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698