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 "base/stl_util.h" | 7 #include "base/stl_util.h" |
8 #include "build/build_config.h" | 8 #include "build/build_config.h" |
9 #include "components/mus/common/args.h" | 9 #include "components/mus/common/args.h" |
10 #include "components/mus/gles2/gpu_impl.h" | 10 #include "components/mus/gles2/gpu_impl.h" |
11 #include "components/mus/ws/client_connection.h" | 11 #include "components/mus/ws/client_connection.h" |
12 #include "components/mus/ws/connection_manager.h" | 12 #include "components/mus/ws/connection_manager.h" |
13 #include "components/mus/ws/window_tree_factory.h" | 13 #include "components/mus/ws/window_tree_factory.h" |
14 #include "components/mus/ws/window_tree_host_connection.h" | 14 #include "components/mus/ws/window_tree_host_connection.h" |
15 #include "components/mus/ws/window_tree_host_impl.h" | 15 #include "components/mus/ws/window_tree_host_impl.h" |
16 #include "components/mus/ws/window_tree_impl.h" | 16 #include "components/mus/ws/window_tree_impl.h" |
17 #include "mojo/public/c/system/main.h" | 17 #include "mojo/public/c/system/main.h" |
18 #include "mojo/services/tracing/public/cpp/tracing_impl.h" | 18 #include "mojo/services/tracing/public/cpp/tracing_impl.h" |
19 #include "mojo/shell/public/cpp/application_connection.h" | 19 #include "mojo/shell/public/cpp/connection.h" |
20 #include "mojo/shell/public/cpp/shell.h" | 20 #include "mojo/shell/public/cpp/shell.h" |
21 #include "ui/events/event_switches.h" | 21 #include "ui/events/event_switches.h" |
22 #include "ui/events/platform/platform_event_source.h" | 22 #include "ui/events/platform/platform_event_source.h" |
23 #include "ui/gl/gl_surface.h" | 23 #include "ui/gl/gl_surface.h" |
24 | 24 |
25 #if defined(USE_X11) | 25 #if defined(USE_X11) |
26 #include <X11/Xlib.h> | 26 #include <X11/Xlib.h> |
27 #include "base/command_line.h" | 27 #include "base/command_line.h" |
28 #include "ui/platform_window/x11/x11_window.h" | 28 #include "ui/platform_window/x11/x11_window.h" |
29 #elif defined(USE_OZONE) | 29 #elif defined(USE_OZONE) |
30 #include "ui/ozone/public/ozone_platform.h" | 30 #include "ui/ozone/public/ozone_platform.h" |
31 #endif | 31 #endif |
32 | 32 |
33 using mojo::ApplicationConnection; | 33 using mojo::Connection; |
34 using mojo::InterfaceRequest; | 34 using mojo::InterfaceRequest; |
35 using mus::mojom::WindowTreeHostFactory; | 35 using mus::mojom::WindowTreeHostFactory; |
36 using mus::mojom::Gpu; | 36 using mus::mojom::Gpu; |
37 | 37 |
38 namespace mus { | 38 namespace mus { |
39 | 39 |
40 // TODO(sky): this is a pretty typical pattern, make it easier to do. | 40 // TODO(sky): this is a pretty typical pattern, make it easier to do. |
41 struct MandolineUIServicesApp::PendingRequest { | 41 struct MandolineUIServicesApp::PendingRequest { |
42 scoped_ptr<mojo::InterfaceRequest<mojom::DisplayManager>> dm_request; | 42 scoped_ptr<mojo::InterfaceRequest<mojom::DisplayManager>> dm_request; |
43 scoped_ptr<mojo::InterfaceRequest<mojom::WindowTreeFactory>> wtf_request; | 43 scoped_ptr<mojo::InterfaceRequest<mojom::WindowTreeFactory>> wtf_request; |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
83 | 83 |
84 // TODO(rjkroege): It is possible that we might want to generalize the | 84 // TODO(rjkroege): It is possible that we might want to generalize the |
85 // GpuState object. | 85 // GpuState object. |
86 if (!gpu_state_.get()) | 86 if (!gpu_state_.get()) |
87 gpu_state_ = new GpuState(hardware_rendering_available); | 87 gpu_state_ = new GpuState(hardware_rendering_available); |
88 connection_manager_.reset(new ws::ConnectionManager(this, surfaces_state_)); | 88 connection_manager_.reset(new ws::ConnectionManager(this, surfaces_state_)); |
89 | 89 |
90 tracing_.Initialize(shell, url); | 90 tracing_.Initialize(shell, url); |
91 } | 91 } |
92 | 92 |
93 bool MandolineUIServicesApp::AcceptConnection( | 93 bool MandolineUIServicesApp::AcceptConnection(Connection* connection) { |
94 ApplicationConnection* connection) { | |
95 connection->AddService<Gpu>(this); | 94 connection->AddService<Gpu>(this); |
96 connection->AddService<mojom::DisplayManager>(this); | 95 connection->AddService<mojom::DisplayManager>(this); |
97 connection->AddService<mojom::WindowManagerFactoryService>(this); | 96 connection->AddService<mojom::WindowManagerFactoryService>(this); |
98 connection->AddService<mojom::WindowTreeFactory>(this); | 97 connection->AddService<mojom::WindowTreeFactory>(this); |
99 connection->AddService<WindowTreeHostFactory>(this); | 98 connection->AddService<WindowTreeHostFactory>(this); |
100 return true; | 99 return true; |
101 } | 100 } |
102 | 101 |
103 void MandolineUIServicesApp::OnFirstRootConnectionCreated() { | 102 void MandolineUIServicesApp::OnFirstRootConnectionCreated() { |
104 PendingRequests requests; | 103 PendingRequests requests; |
(...skipping 18 matching lines...) Expand all Loading... |
123 uint32_t policy_bitmask, | 122 uint32_t policy_bitmask, |
124 mojom::WindowTreeClientPtr client) { | 123 mojom::WindowTreeClientPtr client) { |
125 scoped_ptr<ws::WindowTreeImpl> service( | 124 scoped_ptr<ws::WindowTreeImpl> service( |
126 new ws::WindowTreeImpl(connection_manager, root, policy_bitmask)); | 125 new ws::WindowTreeImpl(connection_manager, root, policy_bitmask)); |
127 return new ws::DefaultClientConnection(std::move(service), connection_manager, | 126 return new ws::DefaultClientConnection(std::move(service), connection_manager, |
128 std::move(tree_request), | 127 std::move(tree_request), |
129 std::move(client)); | 128 std::move(client)); |
130 } | 129 } |
131 | 130 |
132 void MandolineUIServicesApp::Create( | 131 void MandolineUIServicesApp::Create( |
133 mojo::ApplicationConnection* connection, | 132 mojo::Connection* connection, |
134 mojo::InterfaceRequest<mojom::DisplayManager> request) { | 133 mojo::InterfaceRequest<mojom::DisplayManager> request) { |
135 if (!connection_manager_->has_tree_host_connections()) { | 134 if (!connection_manager_->has_tree_host_connections()) { |
136 scoped_ptr<PendingRequest> pending_request(new PendingRequest); | 135 scoped_ptr<PendingRequest> pending_request(new PendingRequest); |
137 pending_request->dm_request.reset( | 136 pending_request->dm_request.reset( |
138 new mojo::InterfaceRequest<mojom::DisplayManager>(std::move(request))); | 137 new mojo::InterfaceRequest<mojom::DisplayManager>(std::move(request))); |
139 pending_requests_.push_back(std::move(pending_request)); | 138 pending_requests_.push_back(std::move(pending_request)); |
140 return; | 139 return; |
141 } | 140 } |
142 connection_manager_->AddDisplayManagerBinding(std::move(request)); | 141 connection_manager_->AddDisplayManagerBinding(std::move(request)); |
143 } | 142 } |
144 | 143 |
145 void MandolineUIServicesApp::Create( | 144 void MandolineUIServicesApp::Create( |
146 mojo::ApplicationConnection* connection, | 145 mojo::Connection* connection, |
147 mojo::InterfaceRequest<mojom::WindowManagerFactoryService> request) { | 146 mojo::InterfaceRequest<mojom::WindowManagerFactoryService> request) { |
148 connection_manager_->CreateWindowManagerFactoryService(std::move(request)); | 147 connection_manager_->CreateWindowManagerFactoryService(std::move(request)); |
149 } | 148 } |
150 | 149 |
151 void MandolineUIServicesApp::Create( | 150 void MandolineUIServicesApp::Create( |
152 ApplicationConnection* connection, | 151 Connection* connection, |
153 InterfaceRequest<mojom::WindowTreeFactory> request) { | 152 InterfaceRequest<mojom::WindowTreeFactory> request) { |
154 if (!connection_manager_->has_tree_host_connections()) { | 153 if (!connection_manager_->has_tree_host_connections()) { |
155 scoped_ptr<PendingRequest> pending_request(new PendingRequest); | 154 scoped_ptr<PendingRequest> pending_request(new PendingRequest); |
156 pending_request->wtf_request.reset( | 155 pending_request->wtf_request.reset( |
157 new mojo::InterfaceRequest<mojom::WindowTreeFactory>( | 156 new mojo::InterfaceRequest<mojom::WindowTreeFactory>( |
158 std::move(request))); | 157 std::move(request))); |
159 pending_requests_.push_back(std::move(pending_request)); | 158 pending_requests_.push_back(std::move(pending_request)); |
160 return; | 159 return; |
161 } | 160 } |
162 if (!window_tree_factory_) { | 161 if (!window_tree_factory_) { |
163 window_tree_factory_.reset( | 162 window_tree_factory_.reset( |
164 new ws::WindowTreeFactory(connection_manager_.get())); | 163 new ws::WindowTreeFactory(connection_manager_.get())); |
165 } | 164 } |
166 window_tree_factory_->AddBinding(std::move(request)); | 165 window_tree_factory_->AddBinding(std::move(request)); |
167 } | 166 } |
168 | 167 |
169 void MandolineUIServicesApp::Create( | 168 void MandolineUIServicesApp::Create( |
170 ApplicationConnection* connection, | 169 Connection* connection, |
171 InterfaceRequest<WindowTreeHostFactory> request) { | 170 InterfaceRequest<WindowTreeHostFactory> request) { |
172 factory_bindings_.AddBinding(this, std::move(request)); | 171 factory_bindings_.AddBinding(this, std::move(request)); |
173 } | 172 } |
174 | 173 |
175 void MandolineUIServicesApp::Create(mojo::ApplicationConnection* connection, | 174 void MandolineUIServicesApp::Create(mojo::Connection* connection, |
176 mojo::InterfaceRequest<Gpu> request) { | 175 mojo::InterfaceRequest<Gpu> request) { |
177 DCHECK(gpu_state_); | 176 DCHECK(gpu_state_); |
178 new GpuImpl(std::move(request), gpu_state_); | 177 new GpuImpl(std::move(request), gpu_state_); |
179 } | 178 } |
180 | 179 |
181 void MandolineUIServicesApp::CreateWindowTreeHost( | 180 void MandolineUIServicesApp::CreateWindowTreeHost( |
182 mojo::InterfaceRequest<mojom::WindowTreeHost> host, | 181 mojo::InterfaceRequest<mojom::WindowTreeHost> host, |
183 mojom::WindowTreeClientPtr tree_client) { | 182 mojom::WindowTreeClientPtr tree_client) { |
184 DCHECK(connection_manager_); | 183 DCHECK(connection_manager_); |
185 | 184 |
186 // TODO(fsamuel): We need to make sure that only the window manager can create | 185 // TODO(fsamuel): We need to make sure that only the window manager can create |
187 // new roots. | 186 // new roots. |
188 ws::WindowTreeHostImpl* host_impl = new ws::WindowTreeHostImpl( | 187 ws::WindowTreeHostImpl* host_impl = new ws::WindowTreeHostImpl( |
189 connection_manager_.get(), shell_, gpu_state_, surfaces_state_); | 188 connection_manager_.get(), shell_, gpu_state_, surfaces_state_); |
190 | 189 |
191 // WindowTreeHostConnection manages its own lifetime. | 190 // WindowTreeHostConnection manages its own lifetime. |
192 host_impl->Init(new ws::WindowTreeHostConnectionImpl( | 191 host_impl->Init(new ws::WindowTreeHostConnectionImpl( |
193 std::move(host), make_scoped_ptr(host_impl), std::move(tree_client), | 192 std::move(host), make_scoped_ptr(host_impl), std::move(tree_client), |
194 connection_manager_.get())); | 193 connection_manager_.get())); |
195 } | 194 } |
196 | 195 |
197 } // namespace mus | 196 } // namespace mus |
OLD | NEW |