| 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 "mojo/services/public/cpp/view_manager/lib/view_manager_client_impl.h" | 5 #include "mojo/services/public/cpp/view_manager/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 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 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 : connected_(false), connection_id_(0), next_id_(1), delegate_(delegate) { | 96 : connected_(false), connection_id_(0), next_id_(1), delegate_(delegate) { |
| 97 InterfacePtr<ServiceProvider> sp; | |
| 98 shell->ConnectToApplication("mojo:window_manager", GetProxy(&sp)); | |
| 99 ConnectToService(sp.get(), &window_manager_); | |
| 100 window_manager_.set_client(this); | |
| 101 } | 97 } |
| 102 | 98 |
| 103 ViewManagerClientImpl::~ViewManagerClientImpl() { | 99 ViewManagerClientImpl::~ViewManagerClientImpl() { |
| 104 std::vector<View*> non_owned; | 100 std::vector<View*> non_owned; |
| 105 while (!views_.empty()) { | 101 while (!views_.empty()) { |
| 106 IdToViewMap::iterator it = views_.begin(); | 102 IdToViewMap::iterator it = views_.begin(); |
| 107 if (OwnsView(it->second->id())) { | 103 if (OwnsView(it->second->id())) { |
| 108 it->second->Destroy(); | 104 it->second->Destroy(); |
| 109 } else { | 105 } else { |
| 110 non_owned.push_back(it->second); | 106 non_owned.push_back(it->second); |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 163 | 159 |
| 164 void ViewManagerClientImpl::SetSurfaceId(Id view_id, SurfaceIdPtr surface_id) { | 160 void ViewManagerClientImpl::SetSurfaceId(Id view_id, SurfaceIdPtr surface_id) { |
| 165 DCHECK(connected_); | 161 DCHECK(connected_); |
| 166 if (surface_id.is_null()) | 162 if (surface_id.is_null()) |
| 167 return; | 163 return; |
| 168 service_->SetViewSurfaceId( | 164 service_->SetViewSurfaceId( |
| 169 view_id, surface_id.Pass(), ActionCompletedCallback()); | 165 view_id, surface_id.Pass(), ActionCompletedCallback()); |
| 170 } | 166 } |
| 171 | 167 |
| 172 void ViewManagerClientImpl::SetFocus(Id view_id) { | 168 void ViewManagerClientImpl::SetFocus(Id view_id) { |
| 169 // In order for us to get here we had to have exposed a view, which implies we |
| 170 // got a connection. |
| 171 DCHECK(window_manager_.get()); |
| 173 window_manager_->FocusWindow(view_id, ActionCompletedCallback()); | 172 window_manager_->FocusWindow(view_id, ActionCompletedCallback()); |
| 174 } | 173 } |
| 175 | 174 |
| 176 void ViewManagerClientImpl::SetVisible(Id view_id, bool visible) { | 175 void ViewManagerClientImpl::SetVisible(Id view_id, bool visible) { |
| 177 DCHECK(connected_); | 176 DCHECK(connected_); |
| 178 service_->SetViewVisibility(view_id, visible, ActionCompletedCallback()); | 177 service_->SetViewVisibility(view_id, visible, ActionCompletedCallback()); |
| 179 } | 178 } |
| 180 | 179 |
| 181 void ViewManagerClientImpl::SetProperty( | 180 void ViewManagerClientImpl::SetProperty( |
| 182 Id view_id, | 181 Id view_id, |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 238 service_ = client(); | 237 service_ = client(); |
| 239 } | 238 } |
| 240 | 239 |
| 241 //////////////////////////////////////////////////////////////////////////////// | 240 //////////////////////////////////////////////////////////////////////////////// |
| 242 // ViewManagerClientImpl, ViewManagerClient implementation: | 241 // ViewManagerClientImpl, ViewManagerClient implementation: |
| 243 | 242 |
| 244 void ViewManagerClientImpl::OnEmbed( | 243 void ViewManagerClientImpl::OnEmbed( |
| 245 ConnectionSpecificId connection_id, | 244 ConnectionSpecificId connection_id, |
| 246 const String& creator_url, | 245 const String& creator_url, |
| 247 ViewDataPtr root_data, | 246 ViewDataPtr root_data, |
| 248 InterfaceRequest<ServiceProvider> service_provider) { | 247 InterfaceRequest<ServiceProvider> parent_services, |
| 248 ScopedMessagePipeHandle window_manager_pipe) { |
| 249 if (!connected_) { | 249 if (!connected_) { |
| 250 connected_ = true; | 250 connected_ = true; |
| 251 connection_id_ = connection_id; | 251 connection_id_ = connection_id; |
| 252 creator_url_ = String::From(creator_url); | 252 creator_url_ = String::From(creator_url); |
| 253 } else { | 253 } else { |
| 254 DCHECK_EQ(connection_id_, connection_id); | 254 DCHECK_EQ(connection_id_, connection_id); |
| 255 DCHECK_EQ(creator_url_, creator_url); | 255 DCHECK_EQ(creator_url_, creator_url); |
| 256 } | 256 } |
| 257 | 257 |
| 258 // A new root must not already exist as a root or be contained by an existing | 258 // A new root must not already exist as a root or be contained by an existing |
| 259 // hierarchy visible to this view manager. | 259 // hierarchy visible to this view manager. |
| 260 View* root = AddViewToViewManager(this, NULL, root_data); | 260 View* root = AddViewToViewManager(this, NULL, root_data); |
| 261 roots_.push_back(root); | 261 roots_.push_back(root); |
| 262 root->AddObserver(new RootObserver(root)); | 262 root->AddObserver(new RootObserver(root)); |
| 263 | 263 |
| 264 ServiceProviderImpl* exported_services = nullptr; | 264 ServiceProviderImpl* exported_services = nullptr; |
| 265 scoped_ptr<ServiceProvider> remote; | 265 scoped_ptr<ServiceProvider> remote; |
| 266 | 266 |
| 267 if (service_provider.is_pending()) { | 267 if (parent_services.is_pending()) { |
| 268 // BindToRequest() binds the lifetime of |exported_services| to the pipe. | 268 // BindToRequest() binds the lifetime of |exported_services| to the pipe. |
| 269 exported_services = new ServiceProviderImpl; | 269 exported_services = new ServiceProviderImpl; |
| 270 BindToRequest(exported_services, &service_provider); | 270 BindToRequest(exported_services, &parent_services); |
| 271 remote.reset(exported_services->CreateRemoteServiceProvider()); | 271 remote.reset(exported_services->CreateRemoteServiceProvider()); |
| 272 } | 272 } |
| 273 window_manager_.Bind(window_manager_pipe.Pass()); |
| 274 window_manager_.set_client(this); |
| 273 delegate_->OnEmbed(this, root, exported_services, remote.Pass()); | 275 delegate_->OnEmbed(this, root, exported_services, remote.Pass()); |
| 274 } | 276 } |
| 275 | 277 |
| 276 void ViewManagerClientImpl::OnViewBoundsChanged(Id view_id, | 278 void ViewManagerClientImpl::OnViewBoundsChanged(Id view_id, |
| 277 RectPtr old_bounds, | 279 RectPtr old_bounds, |
| 278 RectPtr new_bounds) { | 280 RectPtr new_bounds) { |
| 279 View* view = GetViewById(view_id); | 281 View* view = GetViewById(view_id); |
| 280 ViewPrivate(view).LocalSetBounds(*old_bounds, *new_bounds); | 282 ViewPrivate(view).LocalSetBounds(*old_bounds, *new_bounds); |
| 281 } | 283 } |
| 282 | 284 |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 353 View* view = GetViewById(view_id); | 355 View* view = GetViewById(view_id); |
| 354 if (view) { | 356 if (view) { |
| 355 FOR_EACH_OBSERVER(ViewObserver, | 357 FOR_EACH_OBSERVER(ViewObserver, |
| 356 *ViewPrivate(view).observers(), | 358 *ViewPrivate(view).observers(), |
| 357 OnViewInputEvent(view, event)); | 359 OnViewInputEvent(view, event)); |
| 358 } | 360 } |
| 359 ack_callback.Run(); | 361 ack_callback.Run(); |
| 360 } | 362 } |
| 361 | 363 |
| 362 //////////////////////////////////////////////////////////////////////////////// | 364 //////////////////////////////////////////////////////////////////////////////// |
| 363 // ViewManagerClientImpl, WindowManagerClient2 implementation: | 365 // ViewManagerClientImpl, WindowManagerClient implementation: |
| 364 | |
| 365 void ViewManagerClientImpl::OnWindowManagerReady() {} | |
| 366 | 366 |
| 367 void ViewManagerClientImpl::OnCaptureChanged(Id old_capture_view_id, | 367 void ViewManagerClientImpl::OnCaptureChanged(Id old_capture_view_id, |
| 368 Id new_capture_view_id) {} | 368 Id new_capture_view_id) {} |
| 369 | 369 |
| 370 void ViewManagerClientImpl::OnFocusChanged(Id old_focused_view_id, | 370 void ViewManagerClientImpl::OnFocusChanged(Id old_focused_view_id, |
| 371 Id new_focused_view_id) { | 371 Id new_focused_view_id) { |
| 372 View* focused = GetViewById(new_focused_view_id); | 372 View* focused = GetViewById(new_focused_view_id); |
| 373 View* blurred = GetViewById(old_focused_view_id); | 373 View* blurred = GetViewById(old_focused_view_id); |
| 374 if (blurred) { | 374 if (blurred) { |
| 375 FOR_EACH_OBSERVER(ViewObserver, | 375 FOR_EACH_OBSERVER(ViewObserver, |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 410 base::Unretained(this)); | 410 base::Unretained(this)); |
| 411 } | 411 } |
| 412 | 412 |
| 413 base::Callback<void(ErrorCode)> | 413 base::Callback<void(ErrorCode)> |
| 414 ViewManagerClientImpl::ActionCompletedCallbackWithErrorCode() { | 414 ViewManagerClientImpl::ActionCompletedCallbackWithErrorCode() { |
| 415 return base::Bind(&ViewManagerClientImpl::OnActionCompletedWithErrorCode, | 415 return base::Bind(&ViewManagerClientImpl::OnActionCompletedWithErrorCode, |
| 416 base::Unretained(this)); | 416 base::Unretained(this)); |
| 417 } | 417 } |
| 418 | 418 |
| 419 } // namespace mojo | 419 } // namespace mojo |
| OLD | NEW |