| OLD | NEW | 
|---|
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 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 "content/browser/child_process_launcher.h" | 5 #include "content/browser/child_process_launcher.h" | 
| 6 | 6 | 
| 7 #include <memory> | 7 #include <memory> | 
| 8 #include <utility> | 8 #include <utility> | 
| 9 | 9 | 
| 10 #include "base/bind.h" | 10 #include "base/bind.h" | 
| (...skipping 377 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 388 #endif | 388 #endif | 
| 389 } | 389 } | 
| 390 | 390 | 
| 391 }  // namespace | 391 }  // namespace | 
| 392 | 392 | 
| 393 ChildProcessLauncher::ChildProcessLauncher( | 393 ChildProcessLauncher::ChildProcessLauncher( | 
| 394     SandboxedProcessLauncherDelegate* delegate, | 394     SandboxedProcessLauncherDelegate* delegate, | 
| 395     base::CommandLine* cmd_line, | 395     base::CommandLine* cmd_line, | 
| 396     int child_process_id, | 396     int child_process_id, | 
| 397     Client* client, | 397     Client* client, | 
|  | 398     const std::string& mojo_child_token, | 
| 398     bool terminate_on_shutdown) | 399     bool terminate_on_shutdown) | 
| 399     : client_(client), | 400     : client_(client), | 
| 400       termination_status_(base::TERMINATION_STATUS_NORMAL_TERMINATION), | 401       termination_status_(base::TERMINATION_STATUS_NORMAL_TERMINATION), | 
| 401       exit_code_(RESULT_CODE_NORMAL_EXIT), | 402       exit_code_(RESULT_CODE_NORMAL_EXIT), | 
| 402       zygote_(nullptr), | 403       zygote_(nullptr), | 
| 403       starting_(true), | 404       starting_(true), | 
| 404 #if defined(ADDRESS_SANITIZER) || defined(LEAK_SANITIZER) ||  \ | 405 #if defined(ADDRESS_SANITIZER) || defined(LEAK_SANITIZER) ||  \ | 
| 405     defined(MEMORY_SANITIZER) || defined(THREAD_SANITIZER) || \ | 406     defined(MEMORY_SANITIZER) || defined(THREAD_SANITIZER) || \ | 
| 406     defined(UNDEFINED_SANITIZER) | 407     defined(UNDEFINED_SANITIZER) | 
| 407       terminate_child_on_shutdown_(false), | 408       terminate_child_on_shutdown_(false), | 
| 408 #else | 409 #else | 
| 409       terminate_child_on_shutdown_(terminate_on_shutdown), | 410       terminate_child_on_shutdown_(terminate_on_shutdown), | 
| 410 #endif | 411 #endif | 
|  | 412       mojo_child_token_(mojo_child_token), | 
| 411       weak_factory_(this) { | 413       weak_factory_(this) { | 
| 412   DCHECK(CalledOnValidThread()); | 414   DCHECK(CalledOnValidThread()); | 
| 413   CHECK(BrowserThread::GetCurrentThreadIdentifier(&client_thread_id_)); | 415   CHECK(BrowserThread::GetCurrentThreadIdentifier(&client_thread_id_)); | 
| 414   Launch(delegate, cmd_line, child_process_id); | 416   Launch(delegate, cmd_line, child_process_id); | 
| 415 } | 417 } | 
| 416 | 418 | 
| 417 ChildProcessLauncher::~ChildProcessLauncher() { | 419 ChildProcessLauncher::~ChildProcessLauncher() { | 
| 418   DCHECK(CalledOnValidThread()); | 420   DCHECK(CalledOnValidThread()); | 
| 419   if (process_.IsValid() && terminate_child_on_shutdown_) { | 421   if (process_.IsValid() && terminate_child_on_shutdown_) { | 
| 420     // On Posix, EnsureProcessTerminated can lead to 2 seconds of sleep!  So | 422     // On Posix, EnsureProcessTerminated can lead to 2 seconds of sleep!  So | 
| (...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 550 #endif | 552 #endif | 
| 551                                   base::Process process, | 553                                   base::Process process, | 
| 552                                   int error_code) { | 554                                   int error_code) { | 
| 553   DCHECK(CalledOnValidThread()); | 555   DCHECK(CalledOnValidThread()); | 
| 554   starting_ = false; | 556   starting_ = false; | 
| 555   process_ = std::move(process); | 557   process_ = std::move(process); | 
| 556 | 558 | 
| 557   if (process_.IsValid()) { | 559   if (process_.IsValid()) { | 
| 558     // Set up Mojo IPC to the new process. | 560     // Set up Mojo IPC to the new process. | 
| 559     mojo::edk::ChildProcessLaunched(process_.Handle(), | 561     mojo::edk::ChildProcessLaunched(process_.Handle(), | 
| 560                                     std::move(mojo_host_platform_handle_)); | 562                                     std::move(mojo_host_platform_handle_), | 
|  | 563                                     mojo_child_token_); | 
| 561   } | 564   } | 
| 562 | 565 | 
| 563 #if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID) | 566 #if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID) | 
| 564   zygote_ = zygote; | 567   zygote_ = zygote; | 
| 565 #endif | 568 #endif | 
| 566   if (process_.IsValid()) { | 569   if (process_.IsValid()) { | 
| 567     client_->OnProcessLaunched(); | 570     client_->OnProcessLaunched(); | 
| 568   } else { | 571   } else { | 
|  | 572     mojo::edk::ChildProcessLaunchFailed(mojo_child_token_); | 
| 569     termination_status_ = base::TERMINATION_STATUS_LAUNCH_FAILED; | 573     termination_status_ = base::TERMINATION_STATUS_LAUNCH_FAILED; | 
| 570     client_->OnProcessLaunchFailed(error_code); | 574     client_->OnProcessLaunchFailed(error_code); | 
| 571   } | 575   } | 
| 572 } | 576 } | 
| 573 | 577 | 
| 574 bool ChildProcessLauncher::IsStarting() { | 578 bool ChildProcessLauncher::IsStarting() { | 
| 575   // TODO(crbug.com/469248): This fails in some tests. | 579   // TODO(crbug.com/469248): This fails in some tests. | 
| 576   // DCHECK(CalledOnValidThread()); | 580   // DCHECK(CalledOnValidThread()); | 
| 577   return starting_; | 581   return starting_; | 
| 578 } | 582 } | 
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 611 } | 615 } | 
| 612 | 616 | 
| 613 ChildProcessLauncher::Client* ChildProcessLauncher::ReplaceClientForTest( | 617 ChildProcessLauncher::Client* ChildProcessLauncher::ReplaceClientForTest( | 
| 614     Client* client) { | 618     Client* client) { | 
| 615   Client* ret = client_; | 619   Client* ret = client_; | 
| 616   client_ = client; | 620   client_ = client; | 
| 617   return ret; | 621   return ret; | 
| 618 } | 622 } | 
| 619 | 623 | 
| 620 }  // namespace content | 624 }  // namespace content | 
| OLD | NEW | 
|---|