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

Side by Side Diff: services/window_manager/window_manager_app.cc

Issue 788453002: Put code in //services/window_manager in namespace window_manager (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 6 years 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
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/window_manager/window_manager_app.h" 5 #include "services/window_manager/window_manager_app.h"
6 6
7 #include "base/message_loop/message_loop.h" 7 #include "base/message_loop/message_loop.h"
8 #include "base/stl_util.h" 8 #include "base/stl_util.h"
9 #include "mojo/converters/geometry/geometry_type_converters.h" 9 #include "mojo/converters/geometry/geometry_type_converters.h"
10 #include "mojo/converters/input_events/input_events_type_converters.h" 10 #include "mojo/converters/input_events/input_events_type_converters.h"
11 #include "mojo/public/cpp/application/application_connection.h" 11 #include "mojo/public/cpp/application/application_connection.h"
12 #include "mojo/public/cpp/application/application_impl.h" 12 #include "mojo/public/cpp/application/application_impl.h"
13 #include "mojo/public/interfaces/application/shell.mojom.h" 13 #include "mojo/public/interfaces/application/shell.mojom.h"
14 #include "mojo/services/public/cpp/view_manager/view.h" 14 #include "mojo/services/public/cpp/view_manager/view.h"
15 #include "mojo/services/public/cpp/view_manager/view_manager.h" 15 #include "mojo/services/public/cpp/view_manager/view_manager.h"
16 #include "services/window_manager/focus_controller.h" 16 #include "services/window_manager/focus_controller.h"
17 #include "services/window_manager/focus_rules.h" 17 #include "services/window_manager/focus_rules.h"
18 #include "services/window_manager/view_event_dispatcher.h" 18 #include "services/window_manager/view_event_dispatcher.h"
19 #include "services/window_manager/view_target.h" 19 #include "services/window_manager/view_target.h"
20 #include "services/window_manager/view_targeter.h" 20 #include "services/window_manager/view_targeter.h"
21 #include "services/window_manager/window_manager_delegate.h" 21 #include "services/window_manager/window_manager_delegate.h"
22 #include "ui/base/hit_test.h" 22 #include "ui/base/hit_test.h"
23 23
24 namespace mojo { 24 using mojo::ApplicationConnection;
25 using mojo::Id;
26 using mojo::ServiceProvider;
27 using mojo::View;
28 using mojo::WindowManager;
29
30 namespace window_manager {
25 31
26 namespace { 32 namespace {
27 33
28 Id GetIdForView(View* view) { 34 Id GetIdForView(View* view) {
29 return view ? view->id() : 0; 35 return view ? view->id() : 0;
30 } 36 }
31 37
32 } // namespace 38 } // namespace
33 39
34 // Used for calls to Embed() that occur before we've connected to the 40 // Used for calls to Embed() that occur before we've connected to the
35 // ViewManager. 41 // ViewManager.
36 struct WindowManagerApp::PendingEmbed { 42 struct WindowManagerApp::PendingEmbed {
37 String url; 43 mojo::String url;
38 InterfaceRequest<mojo::ServiceProvider> service_provider; 44 mojo::InterfaceRequest<ServiceProvider> service_provider;
39 }; 45 };
40 46
41 //////////////////////////////////////////////////////////////////////////////// 47 ////////////////////////////////////////////////////////////////////////////////
42 // WindowManagerApp, public: 48 // WindowManagerApp, public:
43 49
44 WindowManagerApp::WindowManagerApp( 50 WindowManagerApp::WindowManagerApp(
45 ViewManagerDelegate* view_manager_delegate, 51 ViewManagerDelegate* view_manager_delegate,
46 WindowManagerDelegate* window_manager_delegate) 52 WindowManagerDelegate* window_manager_delegate)
47 : shell_(nullptr), 53 : shell_(nullptr),
48 native_viewport_event_dispatcher_factory_(this), 54 native_viewport_event_dispatcher_factory_(this),
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
84 void WindowManagerApp::ActivateWindow(Id view_id) { 90 void WindowManagerApp::ActivateWindow(Id view_id) {
85 View* view = view_manager_->GetViewById(view_id); 91 View* view = view_manager_->GetViewById(view_id);
86 DCHECK(view); 92 DCHECK(view);
87 focus_controller_->ActivateView(view); 93 focus_controller_->ActivateView(view);
88 } 94 }
89 95
90 bool WindowManagerApp::IsReady() const { 96 bool WindowManagerApp::IsReady() const {
91 return view_manager_ && root_; 97 return view_manager_ && root_;
92 } 98 }
93 99
94 void WindowManagerApp::InitFocus(scoped_ptr<mojo::FocusRules> rules) { 100 void WindowManagerApp::InitFocus(scoped_ptr<FocusRules> rules) {
95 focus_controller_.reset(new mojo::FocusController(rules.Pass())); 101 focus_controller_.reset(new FocusController(rules.Pass()));
96 focus_controller_->AddObserver(this); 102 focus_controller_->AddObserver(this);
97 103
98 DCHECK(root_); 104 DCHECK(root_);
99 SetFocusController(root_, focus_controller_.get()); 105 SetFocusController(root_, focus_controller_.get());
100 } 106 }
101 107
102 void WindowManagerApp::Embed( 108 void WindowManagerApp::Embed(
103 const String& url, 109 const mojo::String& url,
104 InterfaceRequest<ServiceProvider> service_provider) { 110 mojo::InterfaceRequest<ServiceProvider> service_provider) {
105 if (view_manager_) { 111 if (view_manager_) {
106 window_manager_delegate_->Embed(url, service_provider.Pass()); 112 window_manager_delegate_->Embed(url, service_provider.Pass());
107 return; 113 return;
108 } 114 }
109 scoped_ptr<PendingEmbed> pending_embed(new PendingEmbed); 115 scoped_ptr<PendingEmbed> pending_embed(new PendingEmbed);
110 pending_embed->url = url; 116 pending_embed->url = url;
111 pending_embed->service_provider = service_provider.Pass(); 117 pending_embed->service_provider = service_provider.Pass();
112 pending_embeds_.push_back(pending_embed.release()); 118 pending_embeds_.push_back(pending_embed.release());
113 } 119 }
114 120
115 //////////////////////////////////////////////////////////////////////////////// 121 ////////////////////////////////////////////////////////////////////////////////
116 // WindowManagerApp, ApplicationDelegate implementation: 122 // WindowManagerApp, ApplicationDelegate implementation:
117 123
118 void WindowManagerApp::Initialize(ApplicationImpl* impl) { 124 void WindowManagerApp::Initialize(mojo::ApplicationImpl* impl) {
119 shell_ = impl->shell(); 125 shell_ = impl->shell();
120 LaunchViewManager(impl); 126 LaunchViewManager(impl);
121 } 127 }
122 128
123 bool WindowManagerApp::ConfigureIncomingConnection( 129 bool WindowManagerApp::ConfigureIncomingConnection(
124 ApplicationConnection* connection) { 130 ApplicationConnection* connection) {
125 connection->AddService(static_cast<InterfaceFactory<WindowManager>*>(this)); 131 connection->AddService(static_cast<InterfaceFactory<WindowManager>*>(this));
126 return true; 132 return true;
127 } 133 }
128 134
129 //////////////////////////////////////////////////////////////////////////////// 135 ////////////////////////////////////////////////////////////////////////////////
130 // WindowManagerApp, ViewManagerDelegate implementation: 136 // WindowManagerApp, ViewManagerDelegate implementation:
131 137
132 void WindowManagerApp::OnEmbed(ViewManager* view_manager, 138 void WindowManagerApp::OnEmbed(mojo::ViewManager* view_manager,
133 View* root, 139 View* root,
134 ServiceProviderImpl* exported_services, 140 mojo::ServiceProviderImpl* exported_services,
135 scoped_ptr<ServiceProvider> imported_services) { 141 scoped_ptr<ServiceProvider> imported_services) {
136 DCHECK(!view_manager_ && !root_); 142 DCHECK(!view_manager_ && !root_);
137 view_manager_ = view_manager; 143 view_manager_ = view_manager;
138 root_ = root; 144 root_ = root;
139 145
140 view_event_dispatcher_.reset(new ViewEventDispatcher()); 146 view_event_dispatcher_.reset(new ViewEventDispatcher);
141 147
142 RegisterSubtree(root_); 148 RegisterSubtree(root_);
143 149
144 // TODO(erg): Also move the capture client over. 150 // TODO(erg): Also move the capture client over.
145 // 151 //
146 // capture_client_.reset( 152 // capture_client_.reset(
147 // new wm::ScopedCaptureClient(window_tree_host_->window())); 153 // new wm::ScopedCaptureClient(window_tree_host_->window()));
148 154
149 if (wrapped_view_manager_delegate_) { 155 if (wrapped_view_manager_delegate_) {
150 wrapped_view_manager_delegate_->OnEmbed( 156 wrapped_view_manager_delegate_->OnEmbed(
151 view_manager, root, exported_services, imported_services.Pass()); 157 view_manager, root, exported_services, imported_services.Pass());
152 } 158 }
153 159
154 for (PendingEmbed* pending_embed : pending_embeds_) 160 for (PendingEmbed* pending_embed : pending_embeds_)
155 Embed(pending_embed->url, pending_embed->service_provider.Pass()); 161 Embed(pending_embed->url, pending_embed->service_provider.Pass());
156 pending_embeds_.clear(); 162 pending_embeds_.clear();
157 } 163 }
158 164
159 void WindowManagerApp::OnViewManagerDisconnected( 165 void WindowManagerApp::OnViewManagerDisconnected(
160 ViewManager* view_manager) { 166 mojo::ViewManager* view_manager) {
161 DCHECK_EQ(view_manager_, view_manager); 167 DCHECK_EQ(view_manager_, view_manager);
162 if (wrapped_view_manager_delegate_) 168 if (wrapped_view_manager_delegate_)
163 wrapped_view_manager_delegate_->OnViewManagerDisconnected(view_manager); 169 wrapped_view_manager_delegate_->OnViewManagerDisconnected(view_manager);
164 view_manager_ = nullptr; 170 view_manager_ = nullptr;
165 base::MessageLoop::current()->Quit(); 171 base::MessageLoop::current()->Quit();
166 } 172 }
167 173
168 //////////////////////////////////////////////////////////////////////////////// 174 ////////////////////////////////////////////////////////////////////////////////
169 // WindowManagerApp, ViewObserver implementation: 175 // WindowManagerApp, ViewObserver implementation:
170 176
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
207 return; 213 return;
208 214
209 View* view = static_cast<ViewTarget*>(event->target())->view(); 215 View* view = static_cast<ViewTarget*>(event->target())->view();
210 if (!view) 216 if (!view)
211 return; 217 return;
212 218
213 if (focus_controller_) 219 if (focus_controller_)
214 focus_controller_->OnEvent(event); 220 focus_controller_->OnEvent(event);
215 221
216 window_manager_client_->DispatchInputEventToView(view->id(), 222 window_manager_client_->DispatchInputEventToView(view->id(),
217 Event::From(*event)); 223 mojo::Event::From(*event));
218 } 224 }
219 225
220 //////////////////////////////////////////////////////////////////////////////// 226 ////////////////////////////////////////////////////////////////////////////////
221 // WindowManagerApp, mojo::FocusControllerObserver implementation: 227 // WindowManagerApp, mojo::FocusControllerObserver implementation:
222 228
223 void WindowManagerApp::OnViewFocused(View* gained_focus, 229 void WindowManagerApp::OnViewFocused(View* gained_focus,
224 View* lost_focus) { 230 View* lost_focus) {
225 for (Connections::const_iterator it = connections_.begin(); 231 for (Connections::const_iterator it = connections_.begin();
226 it != connections_.end(); ++it) { 232 it != connections_.end(); ++it) {
227 (*it)->NotifyViewFocused(GetIdForView(gained_focus), 233 (*it)->NotifyViewFocused(GetIdForView(gained_focus),
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
272 if (it == registered_view_id_set_.end()) { 278 if (it == registered_view_id_set_.end()) {
273 // Because we unregister in OnViewDestroying() we can still get a subsequent 279 // Because we unregister in OnViewDestroying() we can still get a subsequent
274 // OnTreeChanged for the same view. Ignore this one. 280 // OnTreeChanged for the same view. Ignore this one.
275 return; 281 return;
276 } 282 }
277 view->RemoveObserver(this); 283 view->RemoveObserver(this);
278 DCHECK(it != registered_view_id_set_.end()); 284 DCHECK(it != registered_view_id_set_.end());
279 registered_view_id_set_.erase(it); 285 registered_view_id_set_.erase(it);
280 } 286 }
281 287
282 void WindowManagerApp::DispatchInputEventToView(View* view, EventPtr event) { 288 void WindowManagerApp::DispatchInputEventToView(View* view,
289 mojo::EventPtr event) {
283 window_manager_client_->DispatchInputEventToView(view->id(), event.Pass()); 290 window_manager_client_->DispatchInputEventToView(view->id(), event.Pass());
284 } 291 }
285 292
286 void WindowManagerApp::SetViewportSize(const gfx::Size& size) { 293 void WindowManagerApp::SetViewportSize(const gfx::Size& size) {
287 window_manager_client_->SetViewportSize(Size::From(size)); 294 window_manager_client_->SetViewportSize(mojo::Size::From(size));
288 } 295 }
289 296
290 void WindowManagerApp::LaunchViewManager(ApplicationImpl* app) { 297 void WindowManagerApp::LaunchViewManager(mojo::ApplicationImpl* app) {
291 // TODO(sky): figure out logic if this connection goes away. 298 // TODO(sky): figure out logic if this connection goes away.
292 view_manager_client_factory_.reset( 299 view_manager_client_factory_.reset(
293 new ViewManagerClientFactory(shell_, this)); 300 new mojo::ViewManagerClientFactory(shell_, this));
294 301
295 MessagePipe pipe; 302 mojo::MessagePipe pipe;
296 ApplicationConnection* view_manager_app = 303 ApplicationConnection* view_manager_app =
297 app->ConnectToApplication("mojo:view_manager"); 304 app->ConnectToApplication("mojo:view_manager");
298 ServiceProvider* view_manager_service_provider = 305 ServiceProvider* view_manager_service_provider =
299 view_manager_app->GetServiceProvider(); 306 view_manager_app->GetServiceProvider();
300 view_manager_service_provider->ConnectToService(ViewManagerService::Name_, 307 view_manager_service_provider->ConnectToService(
301 pipe.handle1.Pass()); 308 mojo::ViewManagerService::Name_, pipe.handle1.Pass());
302 view_manager_client_ = ViewManagerClientFactory::WeakBindViewManagerToPipe( 309 view_manager_client_ =
303 pipe.handle0.Pass(), shell_, this).Pass(); 310 mojo::ViewManagerClientFactory::WeakBindViewManagerToPipe(
311 pipe.handle0.Pass(), shell_, this).Pass();
304 312
305 view_manager_app->AddService(&native_viewport_event_dispatcher_factory_); 313 view_manager_app->AddService(&native_viewport_event_dispatcher_factory_);
306 view_manager_app->AddService( 314 view_manager_app->AddService(
307 static_cast<InterfaceFactory<WindowManagerInternal>*>(this)); 315 static_cast<InterfaceFactory<WindowManagerInternal>*>(this));
308 316
309 view_manager_app->ConnectToService(&window_manager_client_); 317 view_manager_app->ConnectToService(&window_manager_client_);
310 } 318 }
311 319
312 void WindowManagerApp::Create(ApplicationConnection* connection, 320 void WindowManagerApp::Create(
313 InterfaceRequest<WindowManagerInternal> request) { 321 ApplicationConnection* connection,
322 mojo::InterfaceRequest<WindowManagerInternal> request) {
314 if (wm_internal_binding_.get()) { 323 if (wm_internal_binding_.get()) {
315 VLOG(1) << 324 VLOG(1) <<
316 "WindowManager allows only one WindowManagerInternal connection."; 325 "WindowManager allows only one WindowManagerInternal connection.";
317 return; 326 return;
318 } 327 }
319 wm_internal_binding_.reset( 328 wm_internal_binding_.reset(
320 new Binding<WindowManagerInternal>(this, request.Pass())); 329 new mojo::Binding<WindowManagerInternal>(this, request.Pass()));
321 } 330 }
322 331
323 void WindowManagerApp::Create(ApplicationConnection* connection, 332 void WindowManagerApp::Create(ApplicationConnection* connection,
324 InterfaceRequest<WindowManager> request) { 333 mojo::InterfaceRequest<WindowManager> request) {
325 WindowManagerImpl* wm = new WindowManagerImpl(this, false); 334 WindowManagerImpl* wm = new WindowManagerImpl(this, false);
326 wm->Bind(request.PassMessagePipe()); 335 wm->Bind(request.PassMessagePipe());
327 // WindowManagerImpl is deleted when the connection has an error, or from our 336 // WindowManagerImpl is deleted when the connection has an error, or from our
328 // destructor. 337 // destructor.
329 } 338 }
330 339
331 void WindowManagerApp::CreateWindowManagerForViewManagerClient( 340 void WindowManagerApp::CreateWindowManagerForViewManagerClient(
332 uint16_t connection_id, 341 uint16_t connection_id,
333 ScopedMessagePipeHandle window_manager_pipe) { 342 mojo::ScopedMessagePipeHandle window_manager_pipe) {
334 WindowManagerImpl* wm = new WindowManagerImpl(this, true); 343 WindowManagerImpl* wm = new WindowManagerImpl(this, true);
335 wm->Bind(window_manager_pipe.Pass()); 344 wm->Bind(window_manager_pipe.Pass());
336 // WindowManagerImpl is deleted when the connection has an error, or from our 345 // WindowManagerImpl is deleted when the connection has an error, or from our
337 // destructor. 346 // destructor.
338 } 347 }
339 348
340 } // namespace mojo 349 } // namespace window_manager
OLDNEW
« no previous file with comments | « services/window_manager/window_manager_app.h ('k') | services/window_manager/window_manager_delegate.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698