OLD | NEW |
| (Empty) |
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 | |
3 // found in the LICENSE file. | |
4 | |
5 #ifndef COMPONENTS_MUS_MUS_APP_H_ | |
6 #define COMPONENTS_MUS_MUS_APP_H_ | |
7 | |
8 #include <stdint.h> | |
9 | |
10 #include <map> | |
11 #include <memory> | |
12 #include <string> | |
13 #include <vector> | |
14 | |
15 #include "base/macros.h" | |
16 #include "base/memory/weak_ptr.h" | |
17 #include "components/mus/input_devices/input_device_server.h" | |
18 #include "components/mus/public/interfaces/clipboard.mojom.h" | |
19 #include "components/mus/public/interfaces/display.mojom.h" | |
20 #include "components/mus/public/interfaces/gpu.mojom.h" | |
21 #include "components/mus/public/interfaces/gpu_service.mojom.h" | |
22 #include "components/mus/public/interfaces/user_access_manager.mojom.h" | |
23 #include "components/mus/public/interfaces/user_activity_monitor.mojom.h" | |
24 #include "components/mus/public/interfaces/window_manager_window_tree_factory.mo
jom.h" | |
25 #include "components/mus/public/interfaces/window_server_test.mojom.h" | |
26 #include "components/mus/public/interfaces/window_tree.mojom.h" | |
27 #include "components/mus/public/interfaces/window_tree_host.mojom.h" | |
28 #include "components/mus/ws/platform_display_init_params.h" | |
29 #include "components/mus/ws/touch_controller.h" | |
30 #include "components/mus/ws/user_id.h" | |
31 #include "components/mus/ws/window_server_delegate.h" | |
32 #include "services/shell/public/cpp/application_runner.h" | |
33 #include "services/shell/public/cpp/interface_factory.h" | |
34 #include "services/shell/public/cpp/shell_client.h" | |
35 #include "services/tracing/public/cpp/tracing_impl.h" | |
36 | |
37 #if defined(USE_OZONE) | |
38 #include "ui/ozone/public/client_native_pixmap_factory.h" | |
39 #endif | |
40 | |
41 namespace gfx { | |
42 class Rect; | |
43 } | |
44 | |
45 namespace shell { | |
46 class Connector; | |
47 } | |
48 | |
49 namespace ui { | |
50 class PlatformEventSource; | |
51 } | |
52 | |
53 namespace mus { | |
54 namespace ws { | |
55 class ForwardingWindowManager; | |
56 class PlatformScreen; | |
57 class WindowServer; | |
58 } | |
59 | |
60 class MusApp | |
61 : public shell::ShellClient, | |
62 public ws::WindowServerDelegate, | |
63 public shell::InterfaceFactory<mojom::Clipboard>, | |
64 public shell::InterfaceFactory<mojom::DisplayManager>, | |
65 public shell::InterfaceFactory<mojom::Gpu>, | |
66 public shell::InterfaceFactory<mojom::GpuService>, | |
67 public shell::InterfaceFactory<mojom::UserAccessManager>, | |
68 public shell::InterfaceFactory<mojom::UserActivityMonitor>, | |
69 public shell::InterfaceFactory<mojom::WindowManagerWindowTreeFactory>, | |
70 public shell::InterfaceFactory<mojom::WindowTreeFactory>, | |
71 public shell::InterfaceFactory<mojom::WindowTreeHostFactory>, | |
72 public shell::InterfaceFactory<mojom::WindowServerTest> { | |
73 public: | |
74 MusApp(); | |
75 ~MusApp() override; | |
76 | |
77 private: | |
78 // Holds InterfaceRequests received before the first WindowTreeHost Display | |
79 // has been established. | |
80 struct PendingRequest; | |
81 struct UserState; | |
82 | |
83 using UserIdToUserState = std::map<ws::UserId, std::unique_ptr<UserState>>; | |
84 | |
85 void InitializeResources(shell::Connector* connector); | |
86 | |
87 // Returns the user specific state for the user id of |connection|. MusApp | |
88 // owns the return value. | |
89 // TODO(sky): if we allow removal of user ids then we need to close anything | |
90 // associated with the user (all incoming pipes...) on removal. | |
91 UserState* GetUserState(shell::Connection* connection); | |
92 | |
93 void AddUserIfNecessary(shell::Connection* connection); | |
94 | |
95 // shell::ShellClient: | |
96 void Initialize(shell::Connector* connector, | |
97 const shell::Identity& identity, | |
98 uint32_t id) override; | |
99 bool AcceptConnection(shell::Connection* connection) override; | |
100 | |
101 // WindowServerDelegate: | |
102 void OnFirstDisplayReady() override; | |
103 void OnNoMoreDisplays() override; | |
104 bool IsTestConfig() const override; | |
105 void CreateDefaultDisplays() override; | |
106 | |
107 // shell::InterfaceFactory<mojom::Clipboard> implementation. | |
108 void Create(shell::Connection* connection, | |
109 mojom::ClipboardRequest request) override; | |
110 | |
111 // shell::InterfaceFactory<mojom::DisplayManager> implementation. | |
112 void Create(shell::Connection* connection, | |
113 mojom::DisplayManagerRequest request) override; | |
114 | |
115 // shell::InterfaceFactory<mojom::Gpu> implementation. | |
116 void Create(shell::Connection* connection, | |
117 mojom::GpuRequest request) override; | |
118 | |
119 // shell::InterfaceFactory<mojom::GpuService> implementation. | |
120 void Create(shell::Connection* connection, | |
121 mojom::GpuServiceRequest request) override; | |
122 | |
123 // shell::InterfaceFactory<mojom::UserAccessManager> implementation. | |
124 void Create(shell::Connection* connection, | |
125 mojom::UserAccessManagerRequest request) override; | |
126 | |
127 // shell::InterfaceFactory<mojom::UserActivityMonitor> implementation. | |
128 void Create(shell::Connection* connection, | |
129 mojom::UserActivityMonitorRequest request) override; | |
130 | |
131 // shell::InterfaceFactory<mojom::WindowManagerWindowTreeFactory> | |
132 // implementation. | |
133 void Create(shell::Connection* connection, | |
134 mojom::WindowManagerWindowTreeFactoryRequest request) override; | |
135 | |
136 // shell::InterfaceFactory<mojom::WindowTreeFactory>: | |
137 void Create(shell::Connection* connection, | |
138 mojom::WindowTreeFactoryRequest request) override; | |
139 | |
140 // shell::InterfaceFactory<mojom::WindowTreeHostFactory>: | |
141 void Create(shell::Connection* connection, | |
142 mojom::WindowTreeHostFactoryRequest request) override; | |
143 | |
144 // shell::InterfaceFactory<mojom::WindowServerTest> implementation. | |
145 void Create(shell::Connection* connection, | |
146 mojom::WindowServerTestRequest request) override; | |
147 | |
148 // Callback for display configuration. |id| is the identifying token for the | |
149 // configured display that will identify a specific physical display across | |
150 // configuration changes. |bounds| is the bounds of the display in screen | |
151 // coordinates. | |
152 void OnCreatedPhysicalDisplay(int64_t id, const gfx::Rect& bounds); | |
153 | |
154 ws::PlatformDisplayInitParams platform_display_init_params_; | |
155 std::unique_ptr<ws::WindowServer> window_server_; | |
156 std::unique_ptr<ui::PlatformEventSource> event_source_; | |
157 mojo::TracingImpl tracing_; | |
158 using PendingRequests = std::vector<std::unique_ptr<PendingRequest>>; | |
159 PendingRequests pending_requests_; | |
160 | |
161 UserIdToUserState user_id_to_user_state_; | |
162 | |
163 // Provides input-device information via Mojo IPC. | |
164 InputDeviceServer input_device_server_; | |
165 | |
166 bool test_config_; | |
167 bool use_chrome_gpu_command_buffer_; | |
168 #if defined(USE_OZONE) | |
169 std::unique_ptr<ui::ClientNativePixmapFactory> client_native_pixmap_factory_; | |
170 #endif | |
171 | |
172 std::unique_ptr<ws::PlatformScreen> platform_screen_; | |
173 std::unique_ptr<ws::TouchController> touch_controller_; | |
174 | |
175 base::WeakPtrFactory<MusApp> weak_ptr_factory_; | |
176 | |
177 DISALLOW_COPY_AND_ASSIGN(MusApp); | |
178 }; | |
179 | |
180 } // namespace mus | |
181 | |
182 #endif // COMPONENTS_MUS_MUS_APP_H_ | |
OLD | NEW |