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 "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 21 matching lines...) Expand all Loading... |
32 #include "services/ui/ws/display_binding.h" | 32 #include "services/ui/ws/display_binding.h" |
33 #include "services/ui/ws/display_manager.h" | 33 #include "services/ui/ws/display_manager.h" |
34 #include "services/ui/ws/gpu_host.h" | 34 #include "services/ui/ws/gpu_host.h" |
35 #include "services/ui/ws/user_activity_monitor.h" | 35 #include "services/ui/ws/user_activity_monitor.h" |
36 #include "services/ui/ws/user_display_manager.h" | 36 #include "services/ui/ws/user_display_manager.h" |
37 #include "services/ui/ws/window_server.h" | 37 #include "services/ui/ws/window_server.h" |
38 #include "services/ui/ws/window_server_test_impl.h" | 38 #include "services/ui/ws/window_server_test_impl.h" |
39 #include "services/ui/ws/window_tree.h" | 39 #include "services/ui/ws/window_tree.h" |
40 #include "services/ui/ws/window_tree_binding.h" | 40 #include "services/ui/ws/window_tree_binding.h" |
41 #include "services/ui/ws/window_tree_factory.h" | 41 #include "services/ui/ws/window_tree_factory.h" |
42 #include "services/ui/ws/window_tree_host_factory.h" | 42 #include "services/ui/ws/window_tree_host_factory_registrar.h" |
43 #include "ui/base/platform_window_defaults.h" | 43 #include "ui/base/platform_window_defaults.h" |
44 #include "ui/base/resource/resource_bundle.h" | 44 #include "ui/base/resource/resource_bundle.h" |
45 #include "ui/base/ui_base_paths.h" | 45 #include "ui/base/ui_base_paths.h" |
46 #include "ui/events/event_switches.h" | 46 #include "ui/events/event_switches.h" |
47 #include "ui/events/platform/platform_event_source.h" | 47 #include "ui/events/platform/platform_event_source.h" |
48 #include "ui/gfx/geometry/rect.h" | 48 #include "ui/gfx/geometry/rect.h" |
49 #include "ui/gl/gl_surface.h" | 49 #include "ui/gl/gl_surface.h" |
50 | 50 |
51 #if defined(USE_X11) | 51 #if defined(USE_X11) |
52 #include <X11/Xlib.h> | 52 #include <X11/Xlib.h> |
53 #include "ui/base/x/x11_util.h" // nogncheck | 53 #include "ui/base/x/x11_util.h" // nogncheck |
54 #include "ui/platform_window/x11/x11_window.h" | 54 #include "ui/platform_window/x11/x11_window.h" |
55 #elif defined(USE_OZONE) | 55 #elif defined(USE_OZONE) |
56 #include "ui/events/ozone/layout/keyboard_layout_engine.h" | 56 #include "ui/events/ozone/layout/keyboard_layout_engine.h" |
57 #include "ui/events/ozone/layout/keyboard_layout_engine_manager.h" | 57 #include "ui/events/ozone/layout/keyboard_layout_engine_manager.h" |
58 #include "ui/ozone/public/ozone_platform.h" | 58 #include "ui/ozone/public/ozone_platform.h" |
59 #endif | 59 #endif |
60 | 60 |
61 using service_manager::Connection; | 61 using service_manager::Connection; |
62 using mojo::InterfaceRequest; | 62 using mojo::InterfaceRequest; |
63 using ui::mojom::WindowServerTest; | 63 using ui::mojom::WindowServerTest; |
64 using ui::mojom::WindowTreeHostFactory; | |
65 | 64 |
66 namespace ui { | 65 namespace ui { |
67 | 66 |
68 namespace { | 67 namespace { |
69 | 68 |
70 const char kResourceFileStrings[] = "mus_app_resources_strings.pak"; | 69 const char kResourceFileStrings[] = "mus_app_resources_strings.pak"; |
71 const char kResourceFile100[] = "mus_app_resources_100.pak"; | 70 const char kResourceFile100[] = "mus_app_resources_100.pak"; |
72 const char kResourceFile200[] = "mus_app_resources_200.pak"; | 71 const char kResourceFile200[] = "mus_app_resources_200.pak"; |
73 | 72 |
74 } // namespace | 73 } // namespace |
75 | 74 |
76 // TODO(sky): this is a pretty typical pattern, make it easier to do. | 75 // TODO(sky): this is a pretty typical pattern, make it easier to do. |
77 struct Service::PendingRequest { | 76 struct Service::PendingRequest { |
78 service_manager::Identity remote_identity; | 77 service_manager::Identity remote_identity; |
79 std::unique_ptr<mojom::WindowTreeFactoryRequest> wtf_request; | 78 std::unique_ptr<mojom::WindowTreeFactoryRequest> wtf_request; |
80 std::unique_ptr<mojom::DisplayManagerRequest> dm_request; | 79 std::unique_ptr<mojom::DisplayManagerRequest> dm_request; |
81 }; | 80 }; |
82 | 81 |
83 struct Service::UserState { | 82 struct Service::UserState { |
84 std::unique_ptr<clipboard::ClipboardImpl> clipboard; | 83 std::unique_ptr<clipboard::ClipboardImpl> clipboard; |
85 std::unique_ptr<ws::AccessibilityManager> accessibility; | 84 std::unique_ptr<ws::AccessibilityManager> accessibility; |
86 std::unique_ptr<ws::WindowTreeHostFactory> window_tree_host_factory; | |
87 }; | 85 }; |
88 | 86 |
89 Service::Service() | 87 Service::Service() |
90 : test_config_(false), | 88 : test_config_(false), |
91 screen_manager_(display::ScreenManager::Create()), | 89 screen_manager_(display::ScreenManager::Create()), |
92 ime_registrar_(&ime_server_) {} | 90 ime_registrar_(&ime_server_) {} |
93 | 91 |
94 Service::~Service() { | 92 Service::~Service() { |
95 // Destroy |window_server_| first, since it depends on |event_source_|. | 93 // Destroy |window_server_| first, since it depends on |event_source_|. |
96 // WindowServer (or more correctly its Displays) may have state that needs to | 94 // WindowServer (or more correctly its Displays) may have state that needs to |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
200 bool Service::OnConnect(const service_manager::ServiceInfo& remote_info, | 198 bool Service::OnConnect(const service_manager::ServiceInfo& remote_info, |
201 service_manager::InterfaceRegistry* registry) { | 199 service_manager::InterfaceRegistry* registry) { |
202 registry->AddInterface<mojom::AccessibilityManager>(this); | 200 registry->AddInterface<mojom::AccessibilityManager>(this); |
203 registry->AddInterface<mojom::Clipboard>(this); | 201 registry->AddInterface<mojom::Clipboard>(this); |
204 registry->AddInterface<mojom::DisplayManager>(this); | 202 registry->AddInterface<mojom::DisplayManager>(this); |
205 registry->AddInterface<mojom::Gpu>(this); | 203 registry->AddInterface<mojom::Gpu>(this); |
206 registry->AddInterface<mojom::IMERegistrar>(this); | 204 registry->AddInterface<mojom::IMERegistrar>(this); |
207 registry->AddInterface<mojom::IMEServer>(this); | 205 registry->AddInterface<mojom::IMEServer>(this); |
208 registry->AddInterface<mojom::UserAccessManager>(this); | 206 registry->AddInterface<mojom::UserAccessManager>(this); |
209 registry->AddInterface<mojom::UserActivityMonitor>(this); | 207 registry->AddInterface<mojom::UserActivityMonitor>(this); |
210 registry->AddInterface<WindowTreeHostFactory>(this); | 208 registry->AddInterface<mojom::WindowTreeHostFactoryRegistrar>(this); |
211 registry->AddInterface<mojom::WindowManagerWindowTreeFactory>(this); | 209 registry->AddInterface<mojom::WindowManagerWindowTreeFactory>(this); |
212 registry->AddInterface<mojom::WindowTreeFactory>(this); | 210 registry->AddInterface<mojom::WindowTreeFactory>(this); |
213 registry | 211 registry |
214 ->AddInterface<discardable_memory::mojom::DiscardableSharedMemoryManager>( | 212 ->AddInterface<discardable_memory::mojom::DiscardableSharedMemoryManager>( |
215 this); | 213 this); |
216 if (test_config_) | 214 if (test_config_) |
217 registry->AddInterface<WindowServerTest>(this); | 215 registry->AddInterface<WindowServerTest>(this); |
218 | 216 |
219 // On non-Linux platforms there will be no DeviceDataManager instance and no | 217 // On non-Linux platforms there will be no DeviceDataManager instance and no |
220 // purpose in adding the Mojo interface to connect to. | 218 // purpose in adding the Mojo interface to connect to. |
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
339 return; | 337 return; |
340 } | 338 } |
341 AddUserIfNecessary(remote_identity); | 339 AddUserIfNecessary(remote_identity); |
342 mojo::MakeStrongBinding(base::MakeUnique<ws::WindowTreeFactory>( | 340 mojo::MakeStrongBinding(base::MakeUnique<ws::WindowTreeFactory>( |
343 window_server_.get(), remote_identity.user_id(), | 341 window_server_.get(), remote_identity.user_id(), |
344 remote_identity.name()), | 342 remote_identity.name()), |
345 std::move(request)); | 343 std::move(request)); |
346 } | 344 } |
347 | 345 |
348 void Service::Create(const service_manager::Identity& remote_identity, | 346 void Service::Create(const service_manager::Identity& remote_identity, |
349 mojom::WindowTreeHostFactoryRequest request) { | 347 mojom::WindowTreeHostFactoryRegistrarRequest request) { |
350 UserState* user_state = GetUserState(remote_identity); | 348 AddUserIfNecessary(remote_identity); |
351 if (!user_state->window_tree_host_factory) { | 349 mojo::MakeStrongBinding(base::MakeUnique<ws::WindowTreeHostFactoryRegistrar>( |
352 user_state->window_tree_host_factory.reset(new ws::WindowTreeHostFactory( | 350 window_server_.get(), remote_identity.user_id()), |
353 window_server_.get(), remote_identity.user_id())); | 351 std::move(request)); |
354 } | |
355 user_state->window_tree_host_factory->AddBinding(std::move(request)); | |
356 } | 352 } |
357 | 353 |
358 void Service::Create( | 354 void Service::Create( |
359 const service_manager::Identity& remote_identity, | 355 const service_manager::Identity& remote_identity, |
360 discardable_memory::mojom::DiscardableSharedMemoryManagerRequest request) { | 356 discardable_memory::mojom::DiscardableSharedMemoryManagerRequest request) { |
361 discardable_shared_memory_manager_->Bind(std::move(request)); | 357 discardable_shared_memory_manager_->Bind(std::move(request)); |
362 } | 358 } |
363 | 359 |
364 void Service::Create(const service_manager::Identity& remote_identity, | 360 void Service::Create(const service_manager::Identity& remote_identity, |
365 mojom::WindowServerTestRequest request) { | 361 mojom::WindowServerTestRequest request) { |
366 if (!test_config_) | 362 if (!test_config_) |
367 return; | 363 return; |
368 mojo::MakeStrongBinding( | 364 mojo::MakeStrongBinding( |
369 base::MakeUnique<ws::WindowServerTestImpl>(window_server_.get()), | 365 base::MakeUnique<ws::WindowServerTestImpl>(window_server_.get()), |
370 std::move(request)); | 366 std::move(request)); |
371 } | 367 } |
372 | 368 |
373 | 369 |
374 } // namespace ui | 370 } // namespace ui |
OLD | NEW |