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

Side by Side Diff: chrome/test/base/mojo_test_connector.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 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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/test/base/mojo_test_connector.h" 5 #include "chrome/test/base/mojo_test_connector.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/callback.h" 8 #include "base/callback.h"
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/memory/ptr_util.h" 10 #include "base/memory/ptr_util.h"
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
49 base::TestLauncher::LaunchOptions* test_launch_options, 49 base::TestLauncher::LaunchOptions* test_launch_options,
50 const std::string& mus_config_switch) 50 const std::string& mus_config_switch)
51 : connector_(connector), 51 : connector_(connector),
52 background_service_manager_(nullptr), 52 background_service_manager_(nullptr),
53 platform_channel_(base::MakeUnique<mojo::edk::PlatformChannelPair>()), 53 platform_channel_(base::MakeUnique<mojo::edk::PlatformChannelPair>()),
54 main_task_runner_(base::ThreadTaskRunnerHandle::Get()), 54 main_task_runner_(base::ThreadTaskRunnerHandle::Get()),
55 weak_factory_(this) { 55 weak_factory_(this) {
56 command_line->AppendSwitch(MojoTestConnector::kTestSwitch); 56 command_line->AppendSwitch(MojoTestConnector::kTestSwitch);
57 command_line->AppendSwitchASCII(switches::kMusConfig, mus_config_switch); 57 command_line->AppendSwitchASCII(switches::kMusConfig, mus_config_switch);
58 58
59 #if defined(OS_WIN)
59 platform_channel_->PrepareToPassClientHandleToChildProcess( 60 platform_channel_->PrepareToPassClientHandleToChildProcess(
60 command_line, &handle_passing_info_); 61 command_line, &test_launch_options->handles_to_inherit);
61 #if defined(OS_WIN)
62 test_launch_options->inherit_handles = true;
63 test_launch_options->handles_to_inherit = &handle_passing_info_;
64 #if defined(OFFICIAL_BUILD)
65 CHECK(false) << "Launching mojo process with inherit_handles is insecure!";
66 #endif
67 #elif defined(OS_POSIX) 62 #elif defined(OS_POSIX)
68 test_launch_options->fds_to_remap = &handle_passing_info_; 63 platform_channel_->PrepareToPassClientHandleToChildProcess(
64 command_line, &test_launch_options->fds_to_remap);
69 #else 65 #else
70 #error "Unsupported" 66 #error "Unsupported"
71 #endif 67 #endif
72 68
73 // Create the pipe token, as it must be passed to children processes via the 69 // Create the pipe token, as it must be passed to children processes via the
74 // command line. 70 // command line.
75 service_ = service_manager::PassServiceRequestOnCommandLine( 71 service_ = service_manager::PassServiceRequestOnCommandLine(
76 &broker_client_invitation_, command_line); 72 &broker_client_invitation_, command_line);
77 } 73 }
78 74
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
123 mojo::edk::OutgoingBrokerClientInvitation broker_client_invitation_; 119 mojo::edk::OutgoingBrokerClientInvitation broker_client_invitation_;
124 MojoTestConnector* connector_; 120 MojoTestConnector* connector_;
125 std::unique_ptr<service_manager::BackgroundServiceManager> 121 std::unique_ptr<service_manager::BackgroundServiceManager>
126 background_service_manager_; 122 background_service_manager_;
127 123
128 // The ServicePtr must be created before child process launch so that the pipe 124 // The ServicePtr must be created before child process launch so that the pipe
129 // can be set on the command line. It is held until SetupService is called at 125 // can be set on the command line. It is held until SetupService is called at
130 // which point |background_service_manager_| takes over ownership. 126 // which point |background_service_manager_| takes over ownership.
131 service_manager::mojom::ServicePtr service_; 127 service_manager::mojom::ServicePtr service_;
132 128
133 // NOTE: HandlePassingInformation must remain valid through process launch,
134 // hence it lives here instead of within Init()'s stack.
135 mojo::edk::HandlePassingInformation handle_passing_info_;
136
137 std::unique_ptr<mojo::edk::PlatformChannelPair> platform_channel_; 129 std::unique_ptr<mojo::edk::PlatformChannelPair> platform_channel_;
138 service_manager::mojom::PIDReceiverPtr pid_receiver_; 130 service_manager::mojom::PIDReceiverPtr pid_receiver_;
139 const scoped_refptr<base::TaskRunner> main_task_runner_; 131 const scoped_refptr<base::TaskRunner> main_task_runner_;
140 132
141 base::WeakPtrFactory<MojoTestState> weak_factory_; 133 base::WeakPtrFactory<MojoTestState> weak_factory_;
142 134
143 DISALLOW_COPY_AND_ASSIGN(MojoTestState); 135 DISALLOW_COPY_AND_ASSIGN(MojoTestState);
144 }; 136 };
145 137
146 // The name in the manifest results in getting exe:mash_browser_tests used, 138 // The name in the manifest results in getting exe:mash_browser_tests used,
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
263 return base::MakeUnique<MojoTestState>( 255 return base::MakeUnique<MojoTestState>(
264 this, command_line, test_launch_options, 256 this, command_line, test_launch_options,
265 config_ == MojoTestConnector::Config::MASH ? switches::kMash 257 config_ == MojoTestConnector::Config::MASH ? switches::kMash
266 : switches::kMus); 258 : switches::kMus);
267 } 259 }
268 260
269 void MojoTestConnector::StartService(const std::string& service_name) { 261 void MojoTestConnector::StartService(const std::string& service_name) {
270 background_service_manager_->StartService(service_manager::Identity( 262 background_service_manager_->StartService(service_manager::Identity(
271 service_name, service_manager::mojom::kRootUserID)); 263 service_name, service_manager::mojom::kRootUserID));
272 } 264 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698