| 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 "view_manager/public/cpp/lib/view_manager_client_impl.h" | 5 #include "view_manager/public/cpp/lib/view_manager_client_impl.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | |
| 8 #include "base/message_loop/message_loop.h" | |
| 9 #include "base/stl_util.h" | |
| 10 #include "mojo/public/cpp/application/application_impl.h" | 7 #include "mojo/public/cpp/application/application_impl.h" |
| 11 #include "mojo/public/cpp/application/connect.h" | 8 #include "mojo/public/cpp/application/connect.h" |
| 12 #include "mojo/public/cpp/application/service_provider_impl.h" | 9 #include "mojo/public/cpp/application/service_provider_impl.h" |
| 13 #include "mojo/public/interfaces/application/service_provider.mojom.h" | 10 #include "mojo/public/interfaces/application/service_provider.mojom.h" |
| 14 #include "mojo/public/interfaces/application/shell.mojom.h" | 11 #include "mojo/public/interfaces/application/shell.mojom.h" |
| 15 #include "view_manager/public/cpp/lib/view_private.h" | 12 #include "view_manager/public/cpp/lib/view_private.h" |
| 16 #include "view_manager/public/cpp/util.h" | 13 #include "view_manager/public/cpp/util.h" |
| 17 #include "view_manager/public/cpp/view_manager_delegate.h" | 14 #include "view_manager/public/cpp/view_manager_delegate.h" |
| 18 #include "view_manager/public/cpp/view_observer.h" | 15 #include "view_manager/public/cpp/view_observer.h" |
| 19 | 16 |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 83 void OnViewDestroyed(View* view) override { | 80 void OnViewDestroyed(View* view) override { |
| 84 DCHECK_EQ(view, root_); | 81 DCHECK_EQ(view, root_); |
| 85 static_cast<ViewManagerClientImpl*>(root_->view_manager()) | 82 static_cast<ViewManagerClientImpl*>(root_->view_manager()) |
| 86 ->RootDestroyed(root_); | 83 ->RootDestroyed(root_); |
| 87 view->RemoveObserver(this); | 84 view->RemoveObserver(this); |
| 88 delete this; | 85 delete this; |
| 89 } | 86 } |
| 90 | 87 |
| 91 View* root_; | 88 View* root_; |
| 92 | 89 |
| 93 DISALLOW_COPY_AND_ASSIGN(RootObserver); | 90 MOJO_DISALLOW_COPY_AND_ASSIGN(RootObserver); |
| 94 }; | 91 }; |
| 95 | 92 |
| 96 ViewManagerClientImpl::ViewManagerClientImpl( | 93 ViewManagerClientImpl::ViewManagerClientImpl( |
| 97 ViewManagerDelegate* delegate, | 94 ViewManagerDelegate* delegate, |
| 98 Shell* shell, | 95 Shell* shell, |
| 99 InterfaceRequest<ViewManagerClient> request, | 96 InterfaceRequest<ViewManagerClient> request, |
| 100 bool delete_on_error) | 97 bool delete_on_error) |
| 101 : connection_id_(0), | 98 : connection_id_(0), |
| 102 next_id_(1), | 99 next_id_(1), |
| 103 delegate_(delegate), | 100 delegate_(delegate), |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 229 DCHECK(!service_); | 226 DCHECK(!service_); |
| 230 DCHECK(service); | 227 DCHECK(service); |
| 231 service_ = service.Pass(); | 228 service_ = service.Pass(); |
| 232 } | 229 } |
| 233 //////////////////////////////////////////////////////////////////////////////// | 230 //////////////////////////////////////////////////////////////////////////////// |
| 234 // ViewManagerClientImpl, ViewManager implementation: | 231 // ViewManagerClientImpl, ViewManager implementation: |
| 235 | 232 |
| 236 Id ViewManagerClientImpl::CreateViewOnServer() { | 233 Id ViewManagerClientImpl::CreateViewOnServer() { |
| 237 DCHECK(service_); | 234 DCHECK(service_); |
| 238 const Id view_id = MakeTransportId(connection_id_, ++next_id_); | 235 const Id view_id = MakeTransportId(connection_id_, ++next_id_); |
| 239 service_->CreateView(view_id, ActionCompletedCallbackWithErrorCode()); | 236 service_->CreateView(view_id, [this](ErrorCode code) { |
| 237 OnActionCompleted(code == ERROR_CODE_NONE); |
| 238 }); |
| 240 return view_id; | 239 return view_id; |
| 241 } | 240 } |
| 242 | 241 |
| 243 const std::string& ViewManagerClientImpl::GetEmbedderURL() const { | 242 const std::string& ViewManagerClientImpl::GetEmbedderURL() const { |
| 244 return creator_url_; | 243 return creator_url_; |
| 245 } | 244 } |
| 246 | 245 |
| 247 View* ViewManagerClientImpl::GetRoot() { | 246 View* ViewManagerClientImpl::GetRoot() { |
| 248 return root_; | 247 return root_; |
| 249 } | 248 } |
| (...skipping 29 matching lines...) Expand all Loading... |
| 279 service_ = view_manager_service.Pass(); | 278 service_ = view_manager_service.Pass(); |
| 280 } | 279 } |
| 281 connection_id_ = connection_id; | 280 connection_id_ = connection_id; |
| 282 creator_url_ = String::From(creator_url); | 281 creator_url_ = String::From(creator_url); |
| 283 | 282 |
| 284 DCHECK(!root_); | 283 DCHECK(!root_); |
| 285 root_ = AddViewToViewManager(this, nullptr, root_data); | 284 root_ = AddViewToViewManager(this, nullptr, root_data); |
| 286 root_->AddObserver(new RootObserver(root_)); | 285 root_->AddObserver(new RootObserver(root_)); |
| 287 | 286 |
| 288 window_manager_.Bind(window_manager_pipe.Pass()); | 287 window_manager_.Bind(window_manager_pipe.Pass()); |
| 289 // base::Unretained() is safe here as |window_manager_| is bound to our | |
| 290 // lifetime. | |
| 291 WindowManagerObserverPtr observer; | 288 WindowManagerObserverPtr observer; |
| 292 wm_observer_binding_.Bind(GetProxy(&observer)); | 289 wm_observer_binding_.Bind(GetProxy(&observer)); |
| 290 // binding to |this| is safe here as |window_manager_| is bound to our |
| 291 // lifetime. |
| 293 window_manager_->GetFocusedAndActiveViews( | 292 window_manager_->GetFocusedAndActiveViews( |
| 294 observer.Pass(), | 293 observer.Pass(), |
| 295 base::Bind(&ViewManagerClientImpl::OnGotFocusedAndActiveViews, | 294 [this](uint32_t capture_view_id, uint32_t focused_view_id, |
| 296 base::Unretained(this))); | 295 uint32_t active_view_id) { |
| 296 if (GetViewById(capture_view_id) != capture_view_) |
| 297 OnCaptureChanged(capture_view_id); |
| 298 if (GetViewById(focused_view_id) != focused_view_) |
| 299 OnFocusChanged(focused_view_id); |
| 300 if (GetViewById(active_view_id) != activated_view_) |
| 301 OnActiveWindowChanged(active_view_id); |
| 302 }); |
| 297 | 303 |
| 298 delegate_->OnEmbed(root_, services.Pass(), exposed_services.Pass()); | 304 delegate_->OnEmbed(root_, services.Pass(), exposed_services.Pass()); |
| 299 } | 305 } |
| 300 | 306 |
| 301 void ViewManagerClientImpl::OnEmbeddedAppDisconnected(Id view_id) { | 307 void ViewManagerClientImpl::OnEmbeddedAppDisconnected(Id view_id) { |
| 302 View* view = GetViewById(view_id); | 308 View* view = GetViewById(view_id); |
| 303 if (view) { | 309 if (view) { |
| 304 FOR_EACH_OBSERVER(ViewObserver, *ViewPrivate(view).observers(), | 310 FOR_EACH_OBSERVER(ViewObserver, *ViewPrivate(view).observers(), |
| 305 OnViewEmbeddedAppDisconnected(view)); | 311 OnViewEmbeddedAppDisconnected(view)); |
| 306 } | 312 } |
| (...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 476 void ViewManagerClientImpl::RootDestroyed(View* root) { | 482 void ViewManagerClientImpl::RootDestroyed(View* root) { |
| 477 DCHECK_EQ(root, root_); | 483 DCHECK_EQ(root, root_); |
| 478 root_ = nullptr; | 484 root_ = nullptr; |
| 479 } | 485 } |
| 480 | 486 |
| 481 void ViewManagerClientImpl::OnActionCompleted(bool success) { | 487 void ViewManagerClientImpl::OnActionCompleted(bool success) { |
| 482 if (!change_acked_callback_.is_null()) | 488 if (!change_acked_callback_.is_null()) |
| 483 change_acked_callback_.Run(); | 489 change_acked_callback_.Run(); |
| 484 } | 490 } |
| 485 | 491 |
| 486 void ViewManagerClientImpl::OnActionCompletedWithErrorCode(ErrorCode code) { | 492 Callback<void(bool)> ViewManagerClientImpl::ActionCompletedCallback() { |
| 487 OnActionCompleted(code == ERROR_CODE_NONE); | 493 return [this](bool success) { OnActionCompleted(success); }; |
| 488 } | |
| 489 | |
| 490 base::Callback<void(bool)> ViewManagerClientImpl::ActionCompletedCallback() { | |
| 491 return base::Bind(&ViewManagerClientImpl::OnActionCompleted, | |
| 492 base::Unretained(this)); | |
| 493 } | |
| 494 | |
| 495 base::Callback<void(ErrorCode)> | |
| 496 ViewManagerClientImpl::ActionCompletedCallbackWithErrorCode() { | |
| 497 return base::Bind(&ViewManagerClientImpl::OnActionCompletedWithErrorCode, | |
| 498 base::Unretained(this)); | |
| 499 } | |
| 500 | |
| 501 void ViewManagerClientImpl::OnGotFocusedAndActiveViews( | |
| 502 uint32_t capture_view_id, | |
| 503 uint32_t focused_view_id, | |
| 504 uint32_t active_view_id) { | |
| 505 if (GetViewById(capture_view_id) != capture_view_) | |
| 506 OnCaptureChanged(capture_view_id); | |
| 507 if (GetViewById(focused_view_id) != focused_view_) | |
| 508 OnFocusChanged(focused_view_id); | |
| 509 if (GetViewById(active_view_id) != activated_view_) | |
| 510 OnActiveWindowChanged(active_view_id); | |
| 511 } | 494 } |
| 512 | 495 |
| 513 } // namespace mojo | 496 } // namespace mojo |
| OLD | NEW |