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

Side by Side Diff: content/browser/child_process_launcher_helper_mac.cc

Issue 2950153002: Improve process launch handle sharing API. (Closed)
Patch Set: Fix Created 3 years, 5 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
OLDNEW
1 // Copyright 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 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 "base/memory/ptr_util.h" 5 #include "base/memory/ptr_util.h"
6 #include "base/path_service.h" 6 #include "base/path_service.h"
7 #include "base/posix/global_descriptors.h" 7 #include "base/posix/global_descriptors.h"
8 #include "content/browser/bootstrap_sandbox_manager_mac.h" 8 #include "content/browser/bootstrap_sandbox_manager_mac.h"
9 #include "content/browser/child_process_launcher.h" 9 #include "content/browser/child_process_launcher.h"
10 #include "content/browser/child_process_launcher_helper.h" 10 #include "content/browser/child_process_launcher_helper.h"
(...skipping 11 matching lines...) Expand all
22 mojo::edk::ScopedPlatformHandle 22 mojo::edk::ScopedPlatformHandle
23 ChildProcessLauncherHelper::PrepareMojoPipeHandlesOnClientThread() { 23 ChildProcessLauncherHelper::PrepareMojoPipeHandlesOnClientThread() {
24 DCHECK_CURRENTLY_ON(client_thread_id_); 24 DCHECK_CURRENTLY_ON(client_thread_id_);
25 return mojo::edk::ScopedPlatformHandle(); 25 return mojo::edk::ScopedPlatformHandle();
26 } 26 }
27 27
28 void ChildProcessLauncherHelper::BeforeLaunchOnClientThread() { 28 void ChildProcessLauncherHelper::BeforeLaunchOnClientThread() {
29 DCHECK_CURRENTLY_ON(client_thread_id_); 29 DCHECK_CURRENTLY_ON(client_thread_id_);
30 } 30 }
31 31
32 std::unique_ptr<FileDescriptorInfo> 32 std::unique_ptr<PosixFileDescriptorInfo>
33 ChildProcessLauncherHelper::GetFilesToMap() { 33 ChildProcessLauncherHelper::GetFilesToMap() {
34 DCHECK_CURRENTLY_ON(BrowserThread::PROCESS_LAUNCHER); 34 DCHECK_CURRENTLY_ON(BrowserThread::PROCESS_LAUNCHER);
35 return CreateDefaultPosixFilesToMap( 35 return CreateDefaultPosixFilesToMap(
36 child_process_id(), mojo_client_handle(), 36 child_process_id(), mojo_client_handle(),
37 false /* include_service_required_files */, GetProcessType(), 37 false /* include_service_required_files */, GetProcessType(),
38 command_line()); 38 command_line());
39 } 39 }
40 40
41 void ChildProcessLauncherHelper::BeforeLaunchOnLauncherThread( 41 void ChildProcessLauncherHelper::BeforeLaunchOnLauncherThread(
42 const FileMappedForLaunch& files_to_register, 42 const FileMappedForLaunch& files_to_register,
43 base::LaunchOptions* options) { 43 base::LaunchOptions* options) {
44 // Convert FD mapping to FileHandleMappingVector. 44 // Convert FD mapping to FileHandleMappingVector.
45 std::unique_ptr<base::FileHandleMappingVector> fds_to_map = 45 options->fds_to_remap = files_to_register.GetMappingWithIDAdjustment(
46 files_to_register.GetMappingWithIDAdjustment( 46 base::GlobalDescriptors::kBaseDescriptor);
47 base::GlobalDescriptors::kBaseDescriptor);
48 47
49 options->environ = delegate_->GetEnvironment(); 48 options->environ = delegate_->GetEnvironment();
50 // fds_to_remap will de deleted in AfterLaunchOnLauncherThread() below.
51 options->fds_to_remap = fds_to_map.release();
52 49
53 // Hold the MachBroker lock for the duration of LaunchProcess. The child will 50 // Hold the MachBroker lock for the duration of LaunchProcess. The child will
54 // send its task port to the parent almost immediately after startup. The Mach 51 // send its task port to the parent almost immediately after startup. The Mach
55 // message will be delivered to the parent, but updating the record of the 52 // message will be delivered to the parent, but updating the record of the
56 // launch will wait until after the placeholder PID is inserted below. This 53 // launch will wait until after the placeholder PID is inserted below. This
57 // ensures that while the child process may send its port to the parent prior 54 // ensures that while the child process may send its port to the parent prior
58 // to the parent leaving LaunchProcess, the order in which the record in 55 // to the parent leaving LaunchProcess, the order in which the record in
59 // MachBroker is updated is correct. 56 // MachBroker is updated is correct.
60 MachBroker* broker = MachBroker::GetInstance(); 57 MachBroker* broker = MachBroker::GetInstance();
61 broker->GetLock().Acquire(); 58 broker->GetLock().Acquire();
(...skipping 12 matching lines...) Expand all
74 } 71 }
75 } 72 }
76 // options now owns the pre_exec_delegate which will be delete on 73 // options now owns the pre_exec_delegate which will be delete on
77 // AfterLaunchOnLauncherThread below. 74 // AfterLaunchOnLauncherThread below.
78 options->pre_exec_delegate = pre_exec_delegate.release(); 75 options->pre_exec_delegate = pre_exec_delegate.release();
79 } 76 }
80 77
81 ChildProcessLauncherHelper::Process 78 ChildProcessLauncherHelper::Process
82 ChildProcessLauncherHelper::LaunchProcessOnLauncherThread( 79 ChildProcessLauncherHelper::LaunchProcessOnLauncherThread(
83 const base::LaunchOptions& options, 80 const base::LaunchOptions& options,
84 std::unique_ptr<FileDescriptorInfo> files_to_register, 81 std::unique_ptr<PosixFileDescriptorInfo> files_to_register,
85 bool* is_synchronous_launch, 82 bool* is_synchronous_launch,
86 int* launch_result) { 83 int* launch_result) {
87 *is_synchronous_launch = true; 84 *is_synchronous_launch = true;
88 ChildProcessLauncherHelper::Process process; 85 ChildProcessLauncherHelper::Process process;
89 process.process = base::LaunchProcess(*command_line(), options); 86 process.process = base::LaunchProcess(*command_line(), options);
90 *launch_result = process.process.IsValid() ? LAUNCH_RESULT_SUCCESS 87 *launch_result = process.process.IsValid() ? LAUNCH_RESULT_SUCCESS
91 : LAUNCH_RESULT_FAILURE; 88 : LAUNCH_RESULT_FAILURE;
92 return process; 89 return process;
93 } 90 }
94 91
95 void ChildProcessLauncherHelper::AfterLaunchOnLauncherThread( 92 void ChildProcessLauncherHelper::AfterLaunchOnLauncherThread(
96 const ChildProcessLauncherHelper::Process& process, 93 const ChildProcessLauncherHelper::Process& process,
97 const base::LaunchOptions& options) { 94 const base::LaunchOptions& options) {
98 delete options.fds_to_remap;
99
100 std::unique_ptr<sandbox::PreExecDelegate> pre_exec_delegate = 95 std::unique_ptr<sandbox::PreExecDelegate> pre_exec_delegate =
101 base::WrapUnique(static_cast<sandbox::PreExecDelegate*>( 96 base::WrapUnique(static_cast<sandbox::PreExecDelegate*>(
102 options.pre_exec_delegate)); 97 options.pre_exec_delegate));
103 98
104 MachBroker* broker = MachBroker::GetInstance(); 99 MachBroker* broker = MachBroker::GetInstance();
105 if (process.process.IsValid()) { 100 if (process.process.IsValid()) {
106 broker->AddPlaceholderForPid(process.process.Pid(), child_process_id()); 101 broker->AddPlaceholderForPid(process.process.Pid(), child_process_id());
107 } else { 102 } else {
108 if (pre_exec_delegate) { 103 if (pre_exec_delegate) {
109 BootstrapSandboxManager::GetInstance()->sandbox()->RevokeToken( 104 BootstrapSandboxManager::GetInstance()->sandbox()->RevokeToken(
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
164 base::File OpenFileToShare(const base::FilePath& path, 159 base::File OpenFileToShare(const base::FilePath& path,
165 base::MemoryMappedFile::Region* region) { 160 base::MemoryMappedFile::Region* region) {
166 // Not used yet (until required files are described in the service manifest on 161 // Not used yet (until required files are described in the service manifest on
167 // Mac). 162 // Mac).
168 NOTREACHED(); 163 NOTREACHED();
169 return base::File(); 164 return base::File();
170 } 165 }
171 166
172 } // namespace internal 167 } // namespace internal
173 } // namespace content 168 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698