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

Side by Side Diff: mojo/services/view_manager/public/cpp/lib/view_manager_client_impl.cc

Issue 795593004: Update mojo sdk to rev cc531b32182099a5a034a99daff35ed5d38a61c8 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: More workarounds for MSVC Created 5 years, 11 months 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 "mojo/services/view_manager/public/cpp/lib/view_manager_client_impl.h" 5 #include "mojo/services/view_manager/public/cpp/lib/view_manager_client_impl.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/message_loop/message_loop.h" 8 #include "base/message_loop/message_loop.h"
9 #include "base/stl_util.h" 9 #include "base/stl_util.h"
10 #include "mojo/public/cpp/application/application_impl.h" 10 #include "mojo/public/cpp/application/application_impl.h"
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
73 // destroyed. 73 // destroyed.
74 class RootObserver : public ViewObserver { 74 class RootObserver : public ViewObserver {
75 public: 75 public:
76 explicit RootObserver(View* root) : root_(root) {} 76 explicit RootObserver(View* root) : root_(root) {}
77 ~RootObserver() override {} 77 ~RootObserver() override {}
78 78
79 private: 79 private:
80 // Overridden from ViewObserver: 80 // Overridden from ViewObserver:
81 void OnViewDestroyed(View* view) override { 81 void OnViewDestroyed(View* view) override {
82 DCHECK_EQ(view, root_); 82 DCHECK_EQ(view, root_);
83 static_cast<ViewManagerClientImpl*>( 83 static_cast<ViewManagerClientImpl*>(root_->view_manager())
84 ViewPrivate(root_).view_manager())->RootDestroyed(root_); 84 ->RootDestroyed(root_);
85 view->RemoveObserver(this); 85 view->RemoveObserver(this);
86 delete this; 86 delete this;
87 } 87 }
88 88
89 View* root_; 89 View* root_;
90 90
91 DISALLOW_COPY_AND_ASSIGN(RootObserver); 91 DISALLOW_COPY_AND_ASSIGN(RootObserver);
92 }; 92 };
93 93
94 ViewManagerClientImpl::ViewManagerClientImpl(ViewManagerDelegate* delegate, 94 ViewManagerClientImpl::ViewManagerClientImpl(ViewManagerDelegate* delegate,
95 Shell* shell, 95 Shell* shell,
96 ScopedMessagePipeHandle handle, 96 ScopedMessagePipeHandle handle,
97 bool delete_on_error) 97 bool delete_on_error)
98 : connected_(false), 98 : connected_(false),
99 connection_id_(0), 99 connection_id_(0),
100 next_id_(1), 100 next_id_(1),
101 delegate_(delegate), 101 delegate_(delegate),
102 root_(nullptr), 102 root_(nullptr),
103 capture_view_(nullptr),
103 focused_view_(nullptr), 104 focused_view_(nullptr),
105 activated_view_(nullptr),
104 binding_(this, handle.Pass()), 106 binding_(this, handle.Pass()),
105 service_(binding_.client()), 107 service_(binding_.client()),
106 delete_on_error_(delete_on_error) { 108 delete_on_error_(delete_on_error) {
107 } 109 }
108 110
109 ViewManagerClientImpl::~ViewManagerClientImpl() { 111 ViewManagerClientImpl::~ViewManagerClientImpl() {
110 std::vector<View*> non_owned; 112 std::vector<View*> non_owned;
111 while (!views_.empty()) { 113 while (!views_.empty()) {
112 IdToViewMap::iterator it = views_.begin(); 114 IdToViewMap::iterator it = views_.begin();
113 if (OwnsView(it->second->id())) { 115 if (OwnsView(it->second->id())) {
114 it->second->Destroy(); 116 it->second->Destroy();
115 } else { 117 } else {
116 non_owned.push_back(it->second); 118 non_owned.push_back(it->second);
117 views_.erase(it); 119 views_.erase(it);
118 } 120 }
119 } 121 }
120 // Delete the non-owned views last. In the typical case these are roots. The 122 // Delete the non-owned views last. In the typical case these are roots. The
121 // exception is the window manager, which may know aboutother random views 123 // exception is the window manager, which may know aboutother random views
122 // that it doesn't own. 124 // that it doesn't own.
123 // NOTE: we manually delete as we're a friend. 125 // NOTE: we manually delete as we're a friend.
124 for (size_t i = 0; i < non_owned.size(); ++i) 126 for (size_t i = 0; i < non_owned.size(); ++i)
125 delete non_owned[i]; 127 delete non_owned[i];
126 128
127 delegate_->OnViewManagerDisconnected(this); 129 delegate_->OnViewManagerDisconnected(this);
128 } 130 }
129 131
130 Id ViewManagerClientImpl::CreateView() {
131 DCHECK(connected_);
132 const Id view_id = MakeTransportId(connection_id_, ++next_id_);
133 service_->CreateView(view_id, ActionCompletedCallbackWithErrorCode());
134 return view_id;
135 }
136
137 void ViewManagerClientImpl::DestroyView(Id view_id) { 132 void ViewManagerClientImpl::DestroyView(Id view_id) {
138 DCHECK(connected_); 133 DCHECK(connected_);
139 service_->DeleteView(view_id, ActionCompletedCallback()); 134 service_->DeleteView(view_id, ActionCompletedCallback());
140 } 135 }
141 136
142 void ViewManagerClientImpl::AddChild(Id child_id, Id parent_id) { 137 void ViewManagerClientImpl::AddChild(Id child_id, Id parent_id) {
143 DCHECK(connected_); 138 DCHECK(connected_);
144 service_->AddView(parent_id, child_id, ActionCompletedCallback()); 139 service_->AddView(parent_id, child_id, ActionCompletedCallback());
145 } 140 }
146 141
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
221 216
222 void ViewManagerClientImpl::RemoveView(Id view_id) { 217 void ViewManagerClientImpl::RemoveView(Id view_id) {
223 IdToViewMap::iterator it = views_.find(view_id); 218 IdToViewMap::iterator it = views_.find(view_id);
224 if (it != views_.end()) 219 if (it != views_.end())
225 views_.erase(it); 220 views_.erase(it);
226 } 221 }
227 222
228 //////////////////////////////////////////////////////////////////////////////// 223 ////////////////////////////////////////////////////////////////////////////////
229 // ViewManagerClientImpl, ViewManager implementation: 224 // ViewManagerClientImpl, ViewManager implementation:
230 225
226 Id ViewManagerClientImpl::CreateViewOnServer() {
227 DCHECK(connected_);
228 const Id view_id = MakeTransportId(connection_id_, ++next_id_);
229 service_->CreateView(view_id, ActionCompletedCallbackWithErrorCode());
230 return view_id;
231 }
232
231 const std::string& ViewManagerClientImpl::GetEmbedderURL() const { 233 const std::string& ViewManagerClientImpl::GetEmbedderURL() const {
232 return creator_url_; 234 return creator_url_;
233 } 235 }
234 236
235 View* ViewManagerClientImpl::GetRoot() { 237 View* ViewManagerClientImpl::GetRoot() {
236 return root_; 238 return root_;
237 } 239 }
238 240
239 View* ViewManagerClientImpl::GetViewById(Id id) { 241 View* ViewManagerClientImpl::GetViewById(Id id) {
240 IdToViewMap::const_iterator it = views_.find(id); 242 IdToViewMap::const_iterator it = views_.find(id);
241 return it != views_.end() ? it->second : NULL; 243 return it != views_.end() ? it->second : NULL;
242 } 244 }
243 245
244 View* ViewManagerClientImpl::GetFocusedView() { 246 View* ViewManagerClientImpl::GetFocusedView() {
245 return focused_view_; 247 return focused_view_;
246 } 248 }
247 249
250 View* ViewManagerClientImpl::CreateView() {
251 View* view = new View(this, CreateViewOnServer());
252 AddView(view);
253 return view;
254 }
255
248 //////////////////////////////////////////////////////////////////////////////// 256 ////////////////////////////////////////////////////////////////////////////////
249 // ViewManagerClientImpl, ViewManagerClient implementation: 257 // ViewManagerClientImpl, ViewManagerClient implementation:
250 258
251 void ViewManagerClientImpl::OnEmbed( 259 void ViewManagerClientImpl::OnEmbed(
252 ConnectionSpecificId connection_id, 260 ConnectionSpecificId connection_id,
253 const String& creator_url, 261 const String& creator_url,
254 ViewDataPtr root_data, 262 ViewDataPtr root_data,
255 InterfaceRequest<ServiceProvider> parent_services, 263 InterfaceRequest<ServiceProvider> parent_services,
256 ScopedMessagePipeHandle window_manager_pipe) { 264 ScopedMessagePipeHandle window_manager_pipe) {
257 DCHECK(!connected_); 265 DCHECK(!connected_);
(...skipping 14 matching lines...) Expand all
272 BindToRequest(exported_services, &parent_services); 280 BindToRequest(exported_services, &parent_services);
273 remote.reset(exported_services->CreateRemoteServiceProvider()); 281 remote.reset(exported_services->CreateRemoteServiceProvider());
274 } 282 }
275 window_manager_.Bind(window_manager_pipe.Pass()); 283 window_manager_.Bind(window_manager_pipe.Pass());
276 window_manager_.set_client(this); 284 window_manager_.set_client(this);
277 // base::Unretained() is safe here as |window_manager_| is bound to our 285 // base::Unretained() is safe here as |window_manager_| is bound to our
278 // lifetime. 286 // lifetime.
279 window_manager_->GetFocusedAndActiveViews( 287 window_manager_->GetFocusedAndActiveViews(
280 base::Bind(&ViewManagerClientImpl::OnGotFocusedAndActiveViews, 288 base::Bind(&ViewManagerClientImpl::OnGotFocusedAndActiveViews,
281 base::Unretained(this))); 289 base::Unretained(this)));
282 delegate_->OnEmbed(this, root_, exported_services, remote.Pass()); 290 delegate_->OnEmbed(root_, exported_services, remote.Pass());
283 } 291 }
284 292
285 void ViewManagerClientImpl::OnEmbeddedAppDisconnected(Id view_id) { 293 void ViewManagerClientImpl::OnEmbeddedAppDisconnected(Id view_id) {
286 View* view = GetViewById(view_id); 294 View* view = GetViewById(view_id);
287 if (view) { 295 if (view) {
288 FOR_EACH_OBSERVER(ViewObserver, *ViewPrivate(view).observers(), 296 FOR_EACH_OBSERVER(ViewObserver, *ViewPrivate(view).observers(),
289 OnViewEmbeddedAppDisconnected(view)); 297 OnViewEmbeddedAppDisconnected(view));
290 } 298 }
291 } 299 }
292 300
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
373 *ViewPrivate(view).observers(), 381 *ViewPrivate(view).observers(),
374 OnViewInputEvent(view, event)); 382 OnViewInputEvent(view, event));
375 } 383 }
376 ack_callback.Run(); 384 ack_callback.Run();
377 } 385 }
378 386
379 //////////////////////////////////////////////////////////////////////////////// 387 ////////////////////////////////////////////////////////////////////////////////
380 // ViewManagerClientImpl, WindowManagerClient implementation: 388 // ViewManagerClientImpl, WindowManagerClient implementation:
381 389
382 void ViewManagerClientImpl::OnCaptureChanged(Id old_capture_view_id, 390 void ViewManagerClientImpl::OnCaptureChanged(Id old_capture_view_id,
383 Id new_capture_view_id) {} 391 Id new_capture_view_id) {
392 View* gained_capture = GetViewById(new_capture_view_id);
393 View* lost_capture = GetViewById(old_capture_view_id);
394 if (lost_capture) {
395 FOR_EACH_OBSERVER(ViewObserver,
396 *ViewPrivate(lost_capture).observers(),
397 OnViewFocusChanged(gained_capture, lost_capture));
398 }
399 capture_view_ = gained_capture;
400 if (gained_capture) {
401 FOR_EACH_OBSERVER(ViewObserver,
402 *ViewPrivate(gained_capture).observers(),
403 OnViewFocusChanged(gained_capture, lost_capture));
404 }
405 }
384 406
385 void ViewManagerClientImpl::OnFocusChanged(Id old_focused_view_id, 407 void ViewManagerClientImpl::OnFocusChanged(Id old_focused_view_id,
386 Id new_focused_view_id) { 408 Id new_focused_view_id) {
387 View* focused = GetViewById(new_focused_view_id); 409 View* focused = GetViewById(new_focused_view_id);
388 View* blurred = GetViewById(old_focused_view_id); 410 View* blurred = GetViewById(old_focused_view_id);
389 if (blurred) { 411 if (blurred) {
390 FOR_EACH_OBSERVER(ViewObserver, 412 FOR_EACH_OBSERVER(ViewObserver,
391 *ViewPrivate(blurred).observers(), 413 *ViewPrivate(blurred).observers(),
392 OnViewFocusChanged(focused, blurred)); 414 OnViewFocusChanged(focused, blurred));
393 } 415 }
394 focused_view_ = focused; 416 focused_view_ = focused;
395 if (focused) { 417 if (focused) {
396 FOR_EACH_OBSERVER(ViewObserver, 418 FOR_EACH_OBSERVER(ViewObserver,
397 *ViewPrivate(focused).observers(), 419 *ViewPrivate(focused).observers(),
398 OnViewFocusChanged(focused, blurred)); 420 OnViewFocusChanged(focused, blurred));
399 } 421 }
400 } 422 }
401 423
402 void ViewManagerClientImpl::OnActiveWindowChanged(Id old_focused_window, 424 void ViewManagerClientImpl::OnActiveWindowChanged(Id old_active_view_id,
403 Id new_focused_window) {} 425 Id new_active_view_id) {
426 View* activated = GetViewById(new_active_view_id);
427 View* deactivated = GetViewById(old_active_view_id);
428 if (deactivated) {
429 FOR_EACH_OBSERVER(ViewObserver,
430 *ViewPrivate(deactivated).observers(),
431 OnViewActivationChanged(activated, deactivated));
432 }
433 activated_view_ = activated;
434 if (activated) {
435 FOR_EACH_OBSERVER(ViewObserver,
436 *ViewPrivate(activated).observers(),
437 OnViewActivationChanged(activated, deactivated));
438 }
439 }
404 440
405 //////////////////////////////////////////////////////////////////////////////// 441 ////////////////////////////////////////////////////////////////////////////////
406 // OnConnectionError, private: 442 // OnConnectionError, private:
407 void ViewManagerClientImpl::OnConnectionError() { 443 void ViewManagerClientImpl::OnConnectionError() {
408 if (delete_on_error_) 444 if (delete_on_error_)
409 delete this; 445 delete this;
410 } 446 }
411 447
412 //////////////////////////////////////////////////////////////////////////////// 448 ////////////////////////////////////////////////////////////////////////////////
413 // ViewManagerClientImpl, private: 449 // ViewManagerClientImpl, private:
(...skipping 20 matching lines...) Expand all
434 base::Callback<void(ErrorCode)> 470 base::Callback<void(ErrorCode)>
435 ViewManagerClientImpl::ActionCompletedCallbackWithErrorCode() { 471 ViewManagerClientImpl::ActionCompletedCallbackWithErrorCode() {
436 return base::Bind(&ViewManagerClientImpl::OnActionCompletedWithErrorCode, 472 return base::Bind(&ViewManagerClientImpl::OnActionCompletedWithErrorCode,
437 base::Unretained(this)); 473 base::Unretained(this));
438 } 474 }
439 475
440 void ViewManagerClientImpl::OnGotFocusedAndActiveViews(uint32 focused_view_id, 476 void ViewManagerClientImpl::OnGotFocusedAndActiveViews(uint32 focused_view_id,
441 uint32 active_view_id) { 477 uint32 active_view_id) {
442 if (GetViewById(focused_view_id) != focused_view_) 478 if (GetViewById(focused_view_id) != focused_view_)
443 OnFocusChanged(focused_view_ ? focused_view_->id() : 0, focused_view_id); 479 OnFocusChanged(focused_view_ ? focused_view_->id() : 0, focused_view_id);
480 if (GetViewById(active_view_id) != activated_view_) {
481 OnActiveWindowChanged(activated_view_ ? activated_view_->id() : 0,
482 active_view_id);
483 }
444 } 484 }
445 485
446 } // namespace mojo 486 } // namespace mojo
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698