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

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

Issue 2950153002: Improve process launch handle sharing API. (Closed)
Patch Set: Fix Mojo launcher, review comments 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/path_service.h" 5 #include "base/path_service.h"
6 #include "base/posix/global_descriptors.h" 6 #include "base/posix/global_descriptors.h"
7 #include "content/browser/child_process_launcher.h" 7 #include "content/browser/child_process_launcher.h"
8 #include "content/browser/child_process_launcher_helper.h" 8 #include "content/browser/child_process_launcher_helper.h"
9 #include "content/browser/child_process_launcher_helper_posix.h" 9 #include "content/browser/child_process_launcher_helper_posix.h"
10 #include "content/browser/renderer_host/render_sandbox_host_linux.h" 10 #include "content/browser/renderer_host/render_sandbox_host_linux.h"
(...skipping 22 matching lines...) Expand all
33 33
34 std::unique_ptr<FileMappedForLaunch> 34 std::unique_ptr<FileMappedForLaunch>
35 ChildProcessLauncherHelper::GetFilesToMap() { 35 ChildProcessLauncherHelper::GetFilesToMap() {
36 DCHECK_CURRENTLY_ON(BrowserThread::PROCESS_LAUNCHER); 36 DCHECK_CURRENTLY_ON(BrowserThread::PROCESS_LAUNCHER);
37 return CreateDefaultPosixFilesToMap(child_process_id(), mojo_client_handle(), 37 return CreateDefaultPosixFilesToMap(child_process_id(), mojo_client_handle(),
38 true /* include_service_required_files */, 38 true /* include_service_required_files */,
39 GetProcessType(), command_line()); 39 GetProcessType(), command_line());
40 } 40 }
41 41
42 void ChildProcessLauncherHelper::BeforeLaunchOnLauncherThread( 42 void ChildProcessLauncherHelper::BeforeLaunchOnLauncherThread(
43 const FileDescriptorInfo& files_to_register, 43 const PosixFileDescriptorInfo& files_to_register,
44 base::LaunchOptions* options) { 44 base::LaunchOptions* options) {
45 // Convert FD mapping to FileHandleMappingVector 45 // Convert FD mapping to FileHandleMappingVector
46 std::unique_ptr<base::FileHandleMappingVector> fds_to_map = 46 options->fds_to_remap = files_to_register.GetMappingWithIDAdjustment(
47 files_to_register.GetMappingWithIDAdjustment( 47 base::GlobalDescriptors::kBaseDescriptor);
48 base::GlobalDescriptors::kBaseDescriptor);
49 48
50 if (GetProcessType() == switches::kRendererProcess) { 49 if (GetProcessType() == switches::kRendererProcess) {
51 const int sandbox_fd = 50 const int sandbox_fd =
52 RenderSandboxHostLinux::GetInstance()->GetRendererSocket(); 51 RenderSandboxHostLinux::GetInstance()->GetRendererSocket();
53 fds_to_map->push_back(std::make_pair(sandbox_fd, GetSandboxFD())); 52 options->fds_to_remap.push_back(std::make_pair(sandbox_fd, GetSandboxFD()));
54 } 53 }
55 54
56 options->environ = delegate_->GetEnvironment(); 55 options->environ = delegate_->GetEnvironment();
57 // fds_to_remap will de deleted in AfterLaunchOnLauncherThread() below.
58 options->fds_to_remap = fds_to_map.release();
59 } 56 }
60 57
61 ChildProcessLauncherHelper::Process 58 ChildProcessLauncherHelper::Process
62 ChildProcessLauncherHelper::LaunchProcessOnLauncherThread( 59 ChildProcessLauncherHelper::LaunchProcessOnLauncherThread(
63 const base::LaunchOptions& options, 60 const base::LaunchOptions& options,
64 std::unique_ptr<FileMappedForLaunch> files_to_register, 61 std::unique_ptr<FileMappedForLaunch> files_to_register,
65 bool* is_synchronous_launch, 62 bool* is_synchronous_launch,
66 int* launch_result) { 63 int* launch_result) {
67 *is_synchronous_launch = true; 64 *is_synchronous_launch = true;
68 65
(...skipping 17 matching lines...) Expand all
86 Process process; 83 Process process;
87 process.process = base::LaunchProcess(*command_line(), options); 84 process.process = base::LaunchProcess(*command_line(), options);
88 *launch_result = process.process.IsValid() ? LAUNCH_RESULT_SUCCESS 85 *launch_result = process.process.IsValid() ? LAUNCH_RESULT_SUCCESS
89 : LAUNCH_RESULT_FAILURE; 86 : LAUNCH_RESULT_FAILURE;
90 return process; 87 return process;
91 } 88 }
92 89
93 void ChildProcessLauncherHelper::AfterLaunchOnLauncherThread( 90 void ChildProcessLauncherHelper::AfterLaunchOnLauncherThread(
94 const ChildProcessLauncherHelper::Process& process, 91 const ChildProcessLauncherHelper::Process& process,
95 const base::LaunchOptions& options) { 92 const base::LaunchOptions& options) {
96 delete options.fds_to_remap;
97 } 93 }
98 94
99 base::TerminationStatus ChildProcessLauncherHelper::GetTerminationStatus( 95 base::TerminationStatus ChildProcessLauncherHelper::GetTerminationStatus(
100 const ChildProcessLauncherHelper::Process& process, 96 const ChildProcessLauncherHelper::Process& process,
101 bool known_dead, 97 bool known_dead,
102 int* exit_code) { 98 int* exit_code) {
103 if (process.zygote) { 99 if (process.zygote) {
104 return process.zygote->GetTerminationStatus( 100 return process.zygote->GetTerminationStatus(
105 process.process.Handle(), known_dead, exit_code); 101 process.process.Handle(), known_dead, exit_code);
106 } 102 }
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
159 bool result = base::PathService::Get(base::BasePathKey::DIR_EXE, &exe_dir); 155 bool result = base::PathService::Get(base::BasePathKey::DIR_EXE, &exe_dir);
160 DCHECK(result); 156 DCHECK(result);
161 base::File file(exe_dir.Append(path), 157 base::File file(exe_dir.Append(path),
162 base::File::FLAG_OPEN | base::File::FLAG_READ); 158 base::File::FLAG_OPEN | base::File::FLAG_READ);
163 *region = base::MemoryMappedFile::Region::kWholeFile; 159 *region = base::MemoryMappedFile::Region::kWholeFile;
164 return file; 160 return file;
165 } 161 }
166 162
167 } // namespace internal 163 } // namespace internal
168 } // namespace content 164 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698