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

Side by Side Diff: chrome/test/base/mojo_test_connector.cc

Issue 2427443002: Replace remaining shell references with service manager (Closed)
Patch Set: Created 4 years, 2 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/test/base/mojo_test_connector.h ('k') | components/filesystem/BUILD.gn » ('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 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 20 matching lines...) Expand all
31 31
32 using service_manager::mojom::Service; 32 using service_manager::mojom::Service;
33 using service_manager::mojom::ServicePtr; 33 using service_manager::mojom::ServicePtr;
34 34
35 namespace { 35 namespace {
36 36
37 const char kTestRunnerName[] = "exe:mash_browser_tests"; 37 const char kTestRunnerName[] = "exe:mash_browser_tests";
38 const char kTestName[] = "service:content_browser"; 38 const char kTestName[] = "service:content_browser";
39 39
40 // BackgroundTestState maintains all the state necessary to bind the test to 40 // BackgroundTestState maintains all the state necessary to bind the test to
41 // mojo. This class is only used on the thread created by BackgroundShell. 41 // mojo. This class is only used on the thread created by
42 // BackgroundServiceManager.
42 class BackgroundTestState { 43 class BackgroundTestState {
43 public: 44 public:
44 BackgroundTestState() : child_token_(mojo::edk::GenerateRandomToken()) {} 45 BackgroundTestState() : child_token_(mojo::edk::GenerateRandomToken()) {}
45 ~BackgroundTestState() {} 46 ~BackgroundTestState() {}
46 47
47 // Prepares the command line and other setup for connecting the test to mojo. 48 // Prepares the command line and other setup for connecting the test to mojo.
48 // Must be paired with a call to ChildProcessLaunched(). 49 // Must be paired with a call to ChildProcessLaunched().
49 void Connect(base::CommandLine* command_line, 50 void Connect(base::CommandLine* command_line,
50 service_manager::ServiceManager* service_manager, 51 service_manager::ServiceManager* service_manager,
51 base::TestLauncher::LaunchOptions* test_launch_options) { 52 base::TestLauncher::LaunchOptions* test_launch_options) {
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
114 115
115 // Called used destroy BackgroundTestState on the background thread. 116 // Called used destroy BackgroundTestState on the background thread.
116 void DestroyBackgroundStateOnBackgroundThread( 117 void DestroyBackgroundStateOnBackgroundThread(
117 std::unique_ptr<BackgroundTestState> state, 118 std::unique_ptr<BackgroundTestState> state,
118 service_manager::ServiceManager* service_manager) {} 119 service_manager::ServiceManager* service_manager) {}
119 120
120 // State created per test. Manages creation of the corresponding 121 // State created per test. Manages creation of the corresponding
121 // BackgroundTestState and making sure processing runs on the right threads. 122 // BackgroundTestState and making sure processing runs on the right threads.
122 class MojoTestState : public content::TestState { 123 class MojoTestState : public content::TestState {
123 public: 124 public:
124 explicit MojoTestState(service_manager::BackgroundShell* background_shell) 125 explicit MojoTestState(
125 : background_shell_(background_shell) {} 126 service_manager::BackgroundServiceManager* background_service_manager)
127 : background_service_manager_(background_service_manager) {}
126 128
127 ~MojoTestState() override { 129 ~MojoTestState() override {
128 DCHECK(background_state_); 130 DCHECK(background_state_);
129 // BackgroundState needs to be destroyed on the background thread. We're 131 // BackgroundState needs to be destroyed on the background thread. We're
130 // guaranteed |background_shell_| has been created by the time we 132 // guaranteed |background_service_manager_| has been created by the time we
131 // reach 133 // reach
132 // here as Init() blocks until |background_shell_| has been 134 // here as Init() blocks until |background_service_manager_| has been
133 // created. 135 // created.
134 background_shell_->ExecuteOnServiceManagerThread( 136 background_service_manager_->ExecuteOnServiceManagerThread(
135 base::Bind(&DestroyBackgroundStateOnBackgroundThread, 137 base::Bind(&DestroyBackgroundStateOnBackgroundThread,
136 base::Passed(&background_state_))); 138 base::Passed(&background_state_)));
137 } 139 }
138 140
139 void Init(base::CommandLine* command_line, 141 void Init(base::CommandLine* command_line,
140 base::TestLauncher::LaunchOptions* test_launch_options) { 142 base::TestLauncher::LaunchOptions* test_launch_options) {
141 base::WaitableEvent signal(base::WaitableEvent::ResetPolicy::MANUAL, 143 base::WaitableEvent signal(base::WaitableEvent::ResetPolicy::MANUAL,
142 base::WaitableEvent::InitialState::NOT_SIGNALED); 144 base::WaitableEvent::InitialState::NOT_SIGNALED);
143 background_shell_->ExecuteOnServiceManagerThread(base::Bind( 145 background_service_manager_->ExecuteOnServiceManagerThread(base::Bind(
144 &MojoTestState::BindOnBackgroundThread, base::Unretained(this), &signal, 146 &MojoTestState::BindOnBackgroundThread, base::Unretained(this), &signal,
145 command_line, test_launch_options)); 147 command_line, test_launch_options));
146 signal.Wait(); 148 signal.Wait();
147 } 149 }
148 150
149 private: 151 private:
150 // content::TestState: 152 // content::TestState:
151 void ChildProcessLaunched(base::ProcessHandle handle, 153 void ChildProcessLaunched(base::ProcessHandle handle,
152 base::ProcessId pid) override { 154 base::ProcessId pid) override {
153 // This is called on a random thread. We need to ensure BackgroundTestState 155 // This is called on a random thread. We need to ensure BackgroundTestState
154 // is only called on the background thread, and we wait for 156 // is only called on the background thread, and we wait for
155 // ChildProcessLaunchedOnBackgroundThread() to be run before continuing so 157 // ChildProcessLaunchedOnBackgroundThread() to be run before continuing so
156 // that |handle| is still valid. 158 // that |handle| is still valid.
157 base::WaitableEvent signal(base::WaitableEvent::ResetPolicy::MANUAL, 159 base::WaitableEvent signal(base::WaitableEvent::ResetPolicy::MANUAL,
158 base::WaitableEvent::InitialState::NOT_SIGNALED); 160 base::WaitableEvent::InitialState::NOT_SIGNALED);
159 background_shell_->ExecuteOnServiceManagerThread( 161 background_service_manager_->ExecuteOnServiceManagerThread(
160 base::Bind(&MojoTestState::ChildProcessLaunchedOnBackgroundThread, 162 base::Bind(&MojoTestState::ChildProcessLaunchedOnBackgroundThread,
161 base::Unretained(this), handle, pid, &signal)); 163 base::Unretained(this), handle, pid, &signal));
162 signal.Wait(); 164 signal.Wait();
163 } 165 }
164 166
165 void ChildProcessLaunchedOnBackgroundThread( 167 void ChildProcessLaunchedOnBackgroundThread(
166 base::ProcessHandle handle, 168 base::ProcessHandle handle,
167 base::ProcessId pid, 169 base::ProcessId pid,
168 base::WaitableEvent* signal, 170 base::WaitableEvent* signal,
169 service_manager::ServiceManager* service_manager) { 171 service_manager::ServiceManager* service_manager) {
170 background_state_->ChildProcessLaunched(handle, pid); 172 background_state_->ChildProcessLaunched(handle, pid);
171 signal->Signal(); 173 signal->Signal();
172 } 174 }
173 175
174 void BindOnBackgroundThread( 176 void BindOnBackgroundThread(
175 base::WaitableEvent* signal, 177 base::WaitableEvent* signal,
176 base::CommandLine* command_line, 178 base::CommandLine* command_line,
177 base::TestLauncher::LaunchOptions* test_launch_options, 179 base::TestLauncher::LaunchOptions* test_launch_options,
178 service_manager::ServiceManager* service_manager) { 180 service_manager::ServiceManager* service_manager) {
179 background_state_.reset(new BackgroundTestState); 181 background_state_.reset(new BackgroundTestState);
180 background_state_->Connect(command_line, service_manager, 182 background_state_->Connect(command_line, service_manager,
181 test_launch_options); 183 test_launch_options);
182 signal->Signal(); 184 signal->Signal();
183 } 185 }
184 186
185 service_manager::BackgroundShell* background_shell_; 187 service_manager::BackgroundServiceManager* background_service_manager_;
186 std::unique_ptr<BackgroundTestState> background_state_; 188 std::unique_ptr<BackgroundTestState> background_state_;
187 189
188 DISALLOW_COPY_AND_ASSIGN(MojoTestState); 190 DISALLOW_COPY_AND_ASSIGN(MojoTestState);
189 }; 191 };
190 192
191 // The name in the manifest results in getting exe:mash_browser_tests used, 193 // The name in the manifest results in getting exe:mash_browser_tests used,
192 // remap that to browser_tests. 194 // remap that to browser_tests.
193 void RemoveMashFromBrowserTests(base::CommandLine* command_line) { 195 void RemoveMashFromBrowserTests(base::CommandLine* command_line) {
194 base::FilePath exe_path(command_line->GetProgram()); 196 base::FilePath exe_path(command_line->GetProgram());
195 #if defined(OS_WIN) 197 #if defined(OS_WIN)
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
236 // static 238 // static
237 const char MojoTestConnector::kTestSwitch[] = "is_test"; 239 const char MojoTestConnector::kTestSwitch[] = "is_test";
238 // static 240 // static
239 const char MojoTestConnector::kMashApp[] = "mash-app"; 241 const char MojoTestConnector::kMashApp[] = "mash-app";
240 242
241 MojoTestConnector::MojoTestConnector() {} 243 MojoTestConnector::MojoTestConnector() {}
242 244
243 service_manager::mojom::ServiceRequest MojoTestConnector::Init() { 245 service_manager::mojom::ServiceRequest MojoTestConnector::Init() {
244 native_runner_delegate_ = base::MakeUnique<NativeRunnerDelegateImpl>(); 246 native_runner_delegate_ = base::MakeUnique<NativeRunnerDelegateImpl>();
245 247
246 std::unique_ptr<service_manager::BackgroundShell::InitParams> init_params( 248 std::unique_ptr<service_manager::BackgroundServiceManager::InitParams>
247 new service_manager::BackgroundShell::InitParams); 249 init_params(new service_manager::BackgroundServiceManager::InitParams);
248 // When running in single_process mode chrome initializes the edk. 250 // When running in single_process mode chrome initializes the edk.
249 init_params->init_edk = !base::CommandLine::ForCurrentProcess()->HasSwitch( 251 init_params->init_edk = !base::CommandLine::ForCurrentProcess()->HasSwitch(
250 content::kSingleProcessTestsFlag); 252 content::kSingleProcessTestsFlag);
251 init_params->native_runner_delegate = native_runner_delegate_.get(); 253 init_params->native_runner_delegate = native_runner_delegate_.get();
252 background_shell_.Init(std::move(init_params)); 254 background_service_manager_.Init(std::move(init_params));
253 return background_shell_.CreateServiceRequest(kTestRunnerName); 255 return background_service_manager_.CreateServiceRequest(kTestRunnerName);
254 } 256 }
255 257
256 MojoTestConnector::~MojoTestConnector() {} 258 MojoTestConnector::~MojoTestConnector() {}
257 259
258 std::unique_ptr<content::TestState> MojoTestConnector::PrepareForTest( 260 std::unique_ptr<content::TestState> MojoTestConnector::PrepareForTest(
259 base::CommandLine* command_line, 261 base::CommandLine* command_line,
260 base::TestLauncher::LaunchOptions* test_launch_options) { 262 base::TestLauncher::LaunchOptions* test_launch_options) {
261 std::unique_ptr<MojoTestState> test_state( 263 std::unique_ptr<MojoTestState> test_state(
262 new MojoTestState(&background_shell_)); 264 new MojoTestState(&background_service_manager_));
263 test_state->Init(command_line, test_launch_options); 265 test_state->Init(command_line, test_launch_options);
264 return std::move(test_state); 266 return std::move(test_state);
265 } 267 }
OLDNEW
« no previous file with comments | « chrome/test/base/mojo_test_connector.h ('k') | components/filesystem/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698