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

Side by Side Diff: services/ui/service.cc

Issue 2182643003: Remove shell::Connection* parameter to InterfaceFactory<T>::Create() (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: . Created 4 years, 4 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 | « services/ui/service.h ('k') | services/ui/ws/window_tree_client_unittest.cc » ('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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "services/ui/service.h" 5 #include "services/ui/service.h"
6 6
7 #include <set> 7 #include <set>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
62 namespace { 62 namespace {
63 63
64 const char kResourceFileStrings[] = "mus_app_resources_strings.pak"; 64 const char kResourceFileStrings[] = "mus_app_resources_strings.pak";
65 const char kResourceFile100[] = "mus_app_resources_100.pak"; 65 const char kResourceFile100[] = "mus_app_resources_100.pak";
66 const char kResourceFile200[] = "mus_app_resources_200.pak"; 66 const char kResourceFile200[] = "mus_app_resources_200.pak";
67 67
68 } // namespace 68 } // namespace
69 69
70 // TODO(sky): this is a pretty typical pattern, make it easier to do. 70 // TODO(sky): this is a pretty typical pattern, make it easier to do.
71 struct Service::PendingRequest { 71 struct Service::PendingRequest {
72 shell::Connection* connection; 72 shell::Identity remote_identity;
73 std::unique_ptr<mojom::WindowTreeFactoryRequest> wtf_request; 73 std::unique_ptr<mojom::WindowTreeFactoryRequest> wtf_request;
74 std::unique_ptr<mojom::DisplayManagerRequest> dm_request; 74 std::unique_ptr<mojom::DisplayManagerRequest> dm_request;
75 }; 75 };
76 76
77 struct Service::UserState { 77 struct Service::UserState {
78 std::unique_ptr<ws::AccessibilityManager> accessibility; 78 std::unique_ptr<ws::AccessibilityManager> accessibility;
79 std::unique_ptr<ws::WindowTreeHostFactory> window_tree_host_factory; 79 std::unique_ptr<ws::WindowTreeHostFactory> window_tree_host_factory;
80 }; 80 };
81 81
82 Service::Service() 82 Service::Service()
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
122 ui::ResourceBundle::InitSharedInstanceWithPakFileRegion( 122 ui::ResourceBundle::InitSharedInstanceWithPakFileRegion(
123 loader.TakeFile(kResourceFileStrings), 123 loader.TakeFile(kResourceFileStrings),
124 base::MemoryMappedFile::Region::kWholeFile); 124 base::MemoryMappedFile::Region::kWholeFile);
125 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); 125 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
126 rb.AddDataPackFromFile(loader.TakeFile(kResourceFile100), 126 rb.AddDataPackFromFile(loader.TakeFile(kResourceFile100),
127 ui::SCALE_FACTOR_100P); 127 ui::SCALE_FACTOR_100P);
128 rb.AddDataPackFromFile(loader.TakeFile(kResourceFile200), 128 rb.AddDataPackFromFile(loader.TakeFile(kResourceFile200),
129 ui::SCALE_FACTOR_200P); 129 ui::SCALE_FACTOR_200P);
130 } 130 }
131 131
132 Service::UserState* Service::GetUserState(shell::Connection* connection) { 132 Service::UserState* Service::GetUserState(
133 const ws::UserId& user_id = connection->GetRemoteIdentity().user_id(); 133 const shell::Identity& remote_identity) {
134 const ws::UserId& user_id = remote_identity.user_id();
134 auto it = user_id_to_user_state_.find(user_id); 135 auto it = user_id_to_user_state_.find(user_id);
135 if (it != user_id_to_user_state_.end()) 136 if (it != user_id_to_user_state_.end())
136 return it->second.get(); 137 return it->second.get();
137 user_id_to_user_state_[user_id] = base::WrapUnique(new UserState); 138 user_id_to_user_state_[user_id] = base::WrapUnique(new UserState);
138 return user_id_to_user_state_[user_id].get(); 139 return user_id_to_user_state_[user_id].get();
139 } 140 }
140 141
141 void Service::AddUserIfNecessary(shell::Connection* connection) { 142 void Service::AddUserIfNecessary(const shell::Identity& remote_identity) {
142 window_server_->user_id_tracker()->AddUserId( 143 window_server_->user_id_tracker()->AddUserId(remote_identity.user_id());
143 connection->GetRemoteIdentity().user_id());
144 } 144 }
145 145
146 void Service::OnStart(shell::Connector* connector, 146 void Service::OnStart(shell::Connector* connector,
147 const shell::Identity& identity, 147 const shell::Identity& identity,
148 uint32_t id) { 148 uint32_t id) {
149 platform_display_init_params_.surfaces_state = new SurfacesState; 149 platform_display_init_params_.surfaces_state = new SurfacesState;
150 150
151 base::PlatformThread::SetName("mus"); 151 base::PlatformThread::SetName("mus");
152 tracing_.Initialize(connector, identity.name()); 152 tracing_.Initialize(connector, identity.name());
153 TRACE_EVENT0("mus", "Service::Initialize started"); 153 TRACE_EVENT0("mus", "Service::Initialize started");
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
252 #endif 252 #endif
253 253
254 return true; 254 return true;
255 } 255 }
256 256
257 void Service::OnFirstDisplayReady() { 257 void Service::OnFirstDisplayReady() {
258 PendingRequests requests; 258 PendingRequests requests;
259 requests.swap(pending_requests_); 259 requests.swap(pending_requests_);
260 for (auto& request : requests) { 260 for (auto& request : requests) {
261 if (request->wtf_request) 261 if (request->wtf_request)
262 Create(request->connection, std::move(*request->wtf_request)); 262 Create(request->remote_identity, std::move(*request->wtf_request));
263 else 263 else
264 Create(request->connection, std::move(*request->dm_request)); 264 Create(request->remote_identity, std::move(*request->dm_request));
265 } 265 }
266 } 266 }
267 267
268 void Service::OnNoMoreDisplays() { 268 void Service::OnNoMoreDisplays() {
269 // We may get here from the destructor, in which case there is no messageloop. 269 // We may get here from the destructor, in which case there is no messageloop.
270 if (base::MessageLoop::current()) 270 if (base::MessageLoop::current())
271 base::MessageLoop::current()->QuitWhenIdle(); 271 base::MessageLoop::current()->QuitWhenIdle();
272 } 272 }
273 273
274 bool Service::IsTestConfig() const { 274 bool Service::IsTestConfig() const {
275 return test_config_; 275 return test_config_;
276 } 276 }
277 277
278 void Service::CreateDefaultDisplays() { 278 void Service::CreateDefaultDisplays() {
279 // An asynchronous callback will create the Displays once the physical 279 // An asynchronous callback will create the Displays once the physical
280 // displays are ready. 280 // displays are ready.
281 platform_screen_->ConfigurePhysicalDisplay(base::Bind( 281 platform_screen_->ConfigurePhysicalDisplay(base::Bind(
282 &Service::OnCreatedPhysicalDisplay, weak_ptr_factory_.GetWeakPtr())); 282 &Service::OnCreatedPhysicalDisplay, weak_ptr_factory_.GetWeakPtr()));
283 } 283 }
284 284
285 void Service::Create(shell::Connection* connection, 285 void Service::Create(const shell::Identity& remote_identity,
286 mojom::AccessibilityManagerRequest request) { 286 mojom::AccessibilityManagerRequest request) {
287 UserState* user_state = GetUserState(connection); 287 UserState* user_state = GetUserState(remote_identity);
288 if (!user_state->accessibility) { 288 if (!user_state->accessibility) {
289 const ws::UserId& user_id = connection->GetRemoteIdentity().user_id(); 289 const ws::UserId& user_id = remote_identity.user_id();
290 user_state->accessibility.reset( 290 user_state->accessibility.reset(
291 new ws::AccessibilityManager(window_server_.get(), user_id)); 291 new ws::AccessibilityManager(window_server_.get(), user_id));
292 } 292 }
293 user_state->accessibility->Bind(std::move(request)); 293 user_state->accessibility->Bind(std::move(request));
294 } 294 }
295 295
296 void Service::Create(shell::Connection* connection, 296 void Service::Create(const shell::Identity& remote_identity,
297 mojom::ClipboardRequest request) { 297 mojom::ClipboardRequest request) {
298 const ws::UserId& user_id = connection->GetRemoteIdentity().user_id(); 298 const ws::UserId& user_id = remote_identity.user_id();
299 window_server_->GetClipboardForUser(user_id)->AddBinding(std::move(request)); 299 window_server_->GetClipboardForUser(user_id)->AddBinding(std::move(request));
300 } 300 }
301 301
302 void Service::Create(shell::Connection* connection, 302 void Service::Create(const shell::Identity& remote_identity,
303 mojom::DisplayManagerRequest request) { 303 mojom::DisplayManagerRequest request) {
304 // DisplayManagerObservers generally expect there to be at least one display. 304 // DisplayManagerObservers generally expect there to be at least one display.
305 if (!window_server_->display_manager()->has_displays()) { 305 if (!window_server_->display_manager()->has_displays()) {
306 std::unique_ptr<PendingRequest> pending_request(new PendingRequest); 306 std::unique_ptr<PendingRequest> pending_request(new PendingRequest);
307 pending_request->connection = connection; 307 pending_request->remote_identity = remote_identity;
308 pending_request->dm_request.reset( 308 pending_request->dm_request.reset(
309 new mojom::DisplayManagerRequest(std::move(request))); 309 new mojom::DisplayManagerRequest(std::move(request)));
310 pending_requests_.push_back(std::move(pending_request)); 310 pending_requests_.push_back(std::move(pending_request));
311 return; 311 return;
312 } 312 }
313 window_server_->display_manager() 313 window_server_->display_manager()
314 ->GetUserDisplayManager(connection->GetRemoteIdentity().user_id()) 314 ->GetUserDisplayManager(remote_identity.user_id())
315 ->AddDisplayManagerBinding(std::move(request)); 315 ->AddDisplayManagerBinding(std::move(request));
316 } 316 }
317 317
318 void Service::Create(shell::Connection* connection, mojom::GpuRequest request) { 318 void Service::Create(const shell::Identity& remote_identity,
319 mojom::GpuRequest request) {
319 if (use_chrome_gpu_command_buffer_) 320 if (use_chrome_gpu_command_buffer_)
320 return; 321 return;
321 DCHECK(platform_display_init_params_.gpu_state); 322 DCHECK(platform_display_init_params_.gpu_state);
322 new GpuImpl(std::move(request), platform_display_init_params_.gpu_state); 323 new GpuImpl(std::move(request), platform_display_init_params_.gpu_state);
323 } 324 }
324 325
325 void Service::Create(shell::Connection* connection, 326 void Service::Create(const shell::Identity& remote_identity,
326 mojom::GpuServiceRequest request) { 327 mojom::GpuServiceRequest request) {
327 if (!use_chrome_gpu_command_buffer_) 328 if (!use_chrome_gpu_command_buffer_)
328 return; 329 return;
329 new GpuServiceImpl(std::move(request), connection); 330 new GpuServiceImpl(std::move(request));
330 } 331 }
331 332
332 void Service::Create(shell::Connection* connection, 333 void Service::Create(const shell::Identity& remote_identity,
333 mojom::UserAccessManagerRequest request) { 334 mojom::UserAccessManagerRequest request) {
334 window_server_->user_id_tracker()->Bind(std::move(request)); 335 window_server_->user_id_tracker()->Bind(std::move(request));
335 } 336 }
336 337
337 void Service::Create(shell::Connection* connection, 338 void Service::Create(const shell::Identity& remote_identity,
338 mojom::UserActivityMonitorRequest request) { 339 mojom::UserActivityMonitorRequest request) {
339 AddUserIfNecessary(connection); 340 AddUserIfNecessary(remote_identity);
340 const ws::UserId& user_id = connection->GetRemoteIdentity().user_id(); 341 const ws::UserId& user_id = remote_identity.user_id();
341 window_server_->GetUserActivityMonitorForUser(user_id)->Add( 342 window_server_->GetUserActivityMonitorForUser(user_id)->Add(
342 std::move(request)); 343 std::move(request));
343 } 344 }
344 345
345 void Service::Create(shell::Connection* connection, 346 void Service::Create(const shell::Identity& remote_identity,
346 mojom::WindowManagerWindowTreeFactoryRequest request) { 347 mojom::WindowManagerWindowTreeFactoryRequest request) {
347 AddUserIfNecessary(connection); 348 AddUserIfNecessary(remote_identity);
348 window_server_->window_manager_window_tree_factory_set()->Add( 349 window_server_->window_manager_window_tree_factory_set()->Add(
349 connection->GetRemoteIdentity().user_id(), std::move(request)); 350 remote_identity.user_id(), std::move(request));
350 } 351 }
351 352
352 void Service::Create(Connection* connection, 353 void Service::Create(const shell::Identity& remote_identity,
353 mojom::WindowTreeFactoryRequest request) { 354 mojom::WindowTreeFactoryRequest request) {
354 AddUserIfNecessary(connection); 355 AddUserIfNecessary(remote_identity);
355 if (!window_server_->display_manager()->has_displays()) { 356 if (!window_server_->display_manager()->has_displays()) {
356 std::unique_ptr<PendingRequest> pending_request(new PendingRequest); 357 std::unique_ptr<PendingRequest> pending_request(new PendingRequest);
357 pending_request->connection = connection; 358 pending_request->remote_identity = remote_identity;
358 pending_request->wtf_request.reset( 359 pending_request->wtf_request.reset(
359 new mojom::WindowTreeFactoryRequest(std::move(request))); 360 new mojom::WindowTreeFactoryRequest(std::move(request)));
360 pending_requests_.push_back(std::move(pending_request)); 361 pending_requests_.push_back(std::move(pending_request));
361 return; 362 return;
362 } 363 }
363 AddUserIfNecessary(connection); 364 AddUserIfNecessary(remote_identity);
364 new ws::WindowTreeFactory( 365 new ws::WindowTreeFactory(window_server_.get(), remote_identity.user_id(),
365 window_server_.get(), connection->GetRemoteIdentity().user_id(), 366 remote_identity.name(), std::move(request));
366 connection->GetRemoteIdentity().name(), std::move(request));
367 } 367 }
368 368
369 void Service::Create(Connection* connection, 369 void Service::Create(const shell::Identity& remote_identity,
370 mojom::WindowTreeHostFactoryRequest request) { 370 mojom::WindowTreeHostFactoryRequest request) {
371 UserState* user_state = GetUserState(connection); 371 UserState* user_state = GetUserState(remote_identity);
372 if (!user_state->window_tree_host_factory) { 372 if (!user_state->window_tree_host_factory) {
373 user_state->window_tree_host_factory.reset(new ws::WindowTreeHostFactory( 373 user_state->window_tree_host_factory.reset(new ws::WindowTreeHostFactory(
374 window_server_.get(), connection->GetRemoteIdentity().user_id(), 374 window_server_.get(), remote_identity.user_id(),
375 platform_display_init_params_)); 375 platform_display_init_params_));
376 } 376 }
377 user_state->window_tree_host_factory->AddBinding(std::move(request)); 377 user_state->window_tree_host_factory->AddBinding(std::move(request));
378 } 378 }
379 379
380 void Service::Create(Connection* connection, 380 void Service::Create(const shell::Identity& remote_identity,
381 mojom::WindowServerTestRequest request) { 381 mojom::WindowServerTestRequest request) {
382 if (!test_config_) 382 if (!test_config_)
383 return; 383 return;
384 new ws::WindowServerTestImpl(window_server_.get(), std::move(request)); 384 new ws::WindowServerTestImpl(window_server_.get(), std::move(request));
385 } 385 }
386 386
387 void Service::OnCreatedPhysicalDisplay(int64_t id, const gfx::Rect& bounds) { 387 void Service::OnCreatedPhysicalDisplay(int64_t id, const gfx::Rect& bounds) {
388 platform_display_init_params_.display_bounds = bounds; 388 platform_display_init_params_.display_bounds = bounds;
389 platform_display_init_params_.display_id = id; 389 platform_display_init_params_.display_id = id;
390 390
391 // Display manages its own lifetime. 391 // Display manages its own lifetime.
392 ws::Display* host_impl = 392 ws::Display* host_impl =
393 new ws::Display(window_server_.get(), platform_display_init_params_); 393 new ws::Display(window_server_.get(), platform_display_init_params_);
394 host_impl->Init(nullptr); 394 host_impl->Init(nullptr);
395 395
396 if (touch_controller_) 396 if (touch_controller_)
397 touch_controller_->UpdateTouchTransforms(); 397 touch_controller_->UpdateTouchTransforms();
398 } 398 }
399 399
400 } // namespace ui 400 } // namespace ui
OLDNEW
« no previous file with comments | « services/ui/service.h ('k') | services/ui/ws/window_tree_client_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698