| OLD | NEW |
| 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 "components/mus/mus_app.h" | 5 #include "components/mus/mus_app.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 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 61 | 61 |
| 62 const char kResourceFileStrings[] = "mus_app_resources_strings.pak"; | 62 const char kResourceFileStrings[] = "mus_app_resources_strings.pak"; |
| 63 const char kResourceFile100[] = "mus_app_resources_100.pak"; | 63 const char kResourceFile100[] = "mus_app_resources_100.pak"; |
| 64 const char kResourceFile200[] = "mus_app_resources_200.pak"; | 64 const char kResourceFile200[] = "mus_app_resources_200.pak"; |
| 65 | 65 |
| 66 } // namespace | 66 } // namespace |
| 67 | 67 |
| 68 // TODO(sky): this is a pretty typical pattern, make it easier to do. | 68 // TODO(sky): this is a pretty typical pattern, make it easier to do. |
| 69 struct MusApp::PendingRequest { | 69 struct MusApp::PendingRequest { |
| 70 shell::Connection* connection; | 70 shell::Connection* connection; |
| 71 std::unique_ptr<mojo::InterfaceRequest<mojom::WindowTreeFactory>> wtf_request; | 71 std::unique_ptr<mojom::WindowTreeFactoryRequest> wtf_request; |
| 72 std::unique_ptr<mojom::DisplayManagerRequest> dm_request; |
| 72 }; | 73 }; |
| 73 | 74 |
| 74 struct MusApp::UserState { | 75 struct MusApp::UserState { |
| 75 std::unique_ptr<clipboard::ClipboardImpl> clipboard; | 76 std::unique_ptr<clipboard::ClipboardImpl> clipboard; |
| 76 std::unique_ptr<ws::WindowTreeHostFactory> window_tree_host_factory; | 77 std::unique_ptr<ws::WindowTreeHostFactory> window_tree_host_factory; |
| 77 }; | 78 }; |
| 78 | 79 |
| 79 MusApp::MusApp() | 80 MusApp::MusApp() |
| 80 : test_config_(false), | 81 : test_config_(false), |
| 81 use_chrome_gpu_command_buffer_(false), | 82 use_chrome_gpu_command_buffer_(false), |
| (...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 232 #if defined(USE_OZONE) | 233 #if defined(USE_OZONE) |
| 233 ui::OzonePlatform::GetInstance()->AddInterfaces(connection); | 234 ui::OzonePlatform::GetInstance()->AddInterfaces(connection); |
| 234 #endif | 235 #endif |
| 235 | 236 |
| 236 return true; | 237 return true; |
| 237 } | 238 } |
| 238 | 239 |
| 239 void MusApp::OnFirstDisplayReady() { | 240 void MusApp::OnFirstDisplayReady() { |
| 240 PendingRequests requests; | 241 PendingRequests requests; |
| 241 requests.swap(pending_requests_); | 242 requests.swap(pending_requests_); |
| 242 for (auto& request : requests) | 243 for (auto& request : requests) { |
| 243 Create(request->connection, std::move(*request->wtf_request)); | 244 if (request->wtf_request) |
| 245 Create(request->connection, std::move(*request->wtf_request)); |
| 246 else |
| 247 Create(request->connection, std::move(*request->dm_request)); |
| 248 } |
| 244 } | 249 } |
| 245 | 250 |
| 246 void MusApp::OnNoMoreDisplays() { | 251 void MusApp::OnNoMoreDisplays() { |
| 247 // We may get here from the destructor, in which case there is no messageloop. | 252 // We may get here from the destructor, in which case there is no messageloop. |
| 248 if (base::MessageLoop::current()) | 253 if (base::MessageLoop::current()) |
| 249 base::MessageLoop::current()->QuitWhenIdle(); | 254 base::MessageLoop::current()->QuitWhenIdle(); |
| 250 } | 255 } |
| 251 | 256 |
| 252 bool MusApp::IsTestConfig() const { | 257 bool MusApp::IsTestConfig() const { |
| 253 return test_config_; | 258 return test_config_; |
| 254 } | 259 } |
| 255 | 260 |
| 256 void MusApp::CreateDefaultDisplays() { | 261 void MusApp::CreateDefaultDisplays() { |
| 257 // An asynchronous callback will create the Displays once the physical | 262 // An asynchronous callback will create the Displays once the physical |
| 258 // displays are ready. | 263 // displays are ready. |
| 259 platform_screen_->ConfigurePhysicalDisplay(base::Bind( | 264 platform_screen_->ConfigurePhysicalDisplay(base::Bind( |
| 260 &MusApp::OnCreatedPhysicalDisplay, weak_ptr_factory_.GetWeakPtr())); | 265 &MusApp::OnCreatedPhysicalDisplay, weak_ptr_factory_.GetWeakPtr())); |
| 261 } | 266 } |
| 262 | 267 |
| 263 void MusApp::Create(shell::Connection* connection, | 268 void MusApp::Create(shell::Connection* connection, |
| 264 mojom::ClipboardRequest request) { | 269 mojom::ClipboardRequest request) { |
| 265 UserState* user_state = GetUserState(connection); | 270 UserState* user_state = GetUserState(connection); |
| 266 if (!user_state->clipboard) | 271 if (!user_state->clipboard) |
| 267 user_state->clipboard.reset(new clipboard::ClipboardImpl); | 272 user_state->clipboard.reset(new clipboard::ClipboardImpl); |
| 268 user_state->clipboard->AddBinding(std::move(request)); | 273 user_state->clipboard->AddBinding(std::move(request)); |
| 269 } | 274 } |
| 270 | 275 |
| 271 void MusApp::Create(shell::Connection* connection, | 276 void MusApp::Create(shell::Connection* connection, |
| 272 mojom::DisplayManagerRequest request) { | 277 mojom::DisplayManagerRequest request) { |
| 278 // DisplayManagerObservers generally expect there to be at least one display. |
| 279 if (!window_server_->display_manager()->has_displays()) { |
| 280 std::unique_ptr<PendingRequest> pending_request(new PendingRequest); |
| 281 pending_request->connection = connection; |
| 282 pending_request->dm_request.reset( |
| 283 new mojom::DisplayManagerRequest(std::move(request))); |
| 284 pending_requests_.push_back(std::move(pending_request)); |
| 285 return; |
| 286 } |
| 273 window_server_->display_manager() | 287 window_server_->display_manager() |
| 274 ->GetUserDisplayManager(connection->GetRemoteIdentity().user_id()) | 288 ->GetUserDisplayManager(connection->GetRemoteIdentity().user_id()) |
| 275 ->AddDisplayManagerBinding(std::move(request)); | 289 ->AddDisplayManagerBinding(std::move(request)); |
| 276 } | 290 } |
| 277 | 291 |
| 278 void MusApp::Create(shell::Connection* connection, mojom::GpuRequest request) { | 292 void MusApp::Create(shell::Connection* connection, mojom::GpuRequest request) { |
| 279 if (use_chrome_gpu_command_buffer_) | 293 if (use_chrome_gpu_command_buffer_) |
| 280 return; | 294 return; |
| 281 DCHECK(platform_display_init_params_.gpu_state); | 295 DCHECK(platform_display_init_params_.gpu_state); |
| 282 new GpuImpl(std::move(request), platform_display_init_params_.gpu_state); | 296 new GpuImpl(std::move(request), platform_display_init_params_.gpu_state); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 301 connection->GetRemoteIdentity().user_id(), std::move(request)); | 315 connection->GetRemoteIdentity().user_id(), std::move(request)); |
| 302 } | 316 } |
| 303 | 317 |
| 304 void MusApp::Create(Connection* connection, | 318 void MusApp::Create(Connection* connection, |
| 305 mojom::WindowTreeFactoryRequest request) { | 319 mojom::WindowTreeFactoryRequest request) { |
| 306 AddUserIfNecessary(connection); | 320 AddUserIfNecessary(connection); |
| 307 if (!window_server_->display_manager()->has_displays()) { | 321 if (!window_server_->display_manager()->has_displays()) { |
| 308 std::unique_ptr<PendingRequest> pending_request(new PendingRequest); | 322 std::unique_ptr<PendingRequest> pending_request(new PendingRequest); |
| 309 pending_request->connection = connection; | 323 pending_request->connection = connection; |
| 310 pending_request->wtf_request.reset( | 324 pending_request->wtf_request.reset( |
| 311 new mojo::InterfaceRequest<mojom::WindowTreeFactory>( | 325 new mojom::WindowTreeFactoryRequest(std::move(request))); |
| 312 std::move(request))); | |
| 313 pending_requests_.push_back(std::move(pending_request)); | 326 pending_requests_.push_back(std::move(pending_request)); |
| 314 return; | 327 return; |
| 315 } | 328 } |
| 316 AddUserIfNecessary(connection); | 329 AddUserIfNecessary(connection); |
| 317 new ws::WindowTreeFactory( | 330 new ws::WindowTreeFactory( |
| 318 window_server_.get(), connection->GetRemoteIdentity().user_id(), | 331 window_server_.get(), connection->GetRemoteIdentity().user_id(), |
| 319 connection->GetRemoteIdentity().name(), std::move(request)); | 332 connection->GetRemoteIdentity().name(), std::move(request)); |
| 320 } | 333 } |
| 321 | 334 |
| 322 void MusApp::Create(Connection* connection, | 335 void MusApp::Create(Connection* connection, |
| (...skipping 21 matching lines...) Expand all Loading... |
| 344 // Display manages its own lifetime. | 357 // Display manages its own lifetime. |
| 345 ws::Display* host_impl = | 358 ws::Display* host_impl = |
| 346 new ws::Display(window_server_.get(), platform_display_init_params_); | 359 new ws::Display(window_server_.get(), platform_display_init_params_); |
| 347 host_impl->Init(nullptr); | 360 host_impl->Init(nullptr); |
| 348 | 361 |
| 349 if (touch_controller_) | 362 if (touch_controller_) |
| 350 touch_controller_->UpdateTouchTransforms(); | 363 touch_controller_->UpdateTouchTransforms(); |
| 351 } | 364 } |
| 352 | 365 |
| 353 } // namespace mus | 366 } // namespace mus |
| OLD | NEW |