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 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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 : connected_(false), connection_id_(0), next_id_(1), delegate_(delegate) { | 96 ScopedMessagePipeHandle handle, |
| 97 bool delete_on_error) |
| 98 : connected_(false), |
| 99 connection_id_(0), |
| 100 next_id_(1), |
| 101 delegate_(delegate), |
| 102 binding_(this, handle.Pass()), |
| 103 service_(binding_.client()), |
| 104 delete_on_error_(delete_on_error) { |
97 } | 105 } |
98 | 106 |
99 ViewManagerClientImpl::~ViewManagerClientImpl() { | 107 ViewManagerClientImpl::~ViewManagerClientImpl() { |
100 std::vector<View*> non_owned; | 108 std::vector<View*> non_owned; |
101 while (!views_.empty()) { | 109 while (!views_.empty()) { |
102 IdToViewMap::iterator it = views_.begin(); | 110 IdToViewMap::iterator it = views_.begin(); |
103 if (OwnsView(it->second->id())) { | 111 if (OwnsView(it->second->id())) { |
104 it->second->Destroy(); | 112 it->second->Destroy(); |
105 } else { | 113 } else { |
106 non_owned.push_back(it->second); | 114 non_owned.push_back(it->second); |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
192 ServiceProviderPtr sp; | 200 ServiceProviderPtr sp; |
193 BindToProxy(new ServiceProviderImpl, &sp); | 201 BindToProxy(new ServiceProviderImpl, &sp); |
194 Embed(url, view_id, sp.Pass()); | 202 Embed(url, view_id, sp.Pass()); |
195 } | 203 } |
196 | 204 |
197 void ViewManagerClientImpl::Embed( | 205 void ViewManagerClientImpl::Embed( |
198 const String& url, | 206 const String& url, |
199 Id view_id, | 207 Id view_id, |
200 ServiceProviderPtr service_provider) { | 208 ServiceProviderPtr service_provider) { |
201 DCHECK(connected_); | 209 DCHECK(connected_); |
202 service_->Embed(url, view_id, service_provider.Pass(), | 210 service_->Embed(url, view_id, |
203 ActionCompletedCallback()); | 211 MakeRequest<ServiceProvider>(service_provider.PassMessagePipe()), |
| 212 ActionCompletedCallback()); |
204 } | 213 } |
205 | 214 |
206 void ViewManagerClientImpl::AddView(View* view) { | 215 void ViewManagerClientImpl::AddView(View* view) { |
207 DCHECK(views_.find(view->id()) == views_.end()); | 216 DCHECK(views_.find(view->id()) == views_.end()); |
208 views_[view->id()] = view; | 217 views_[view->id()] = view; |
209 } | 218 } |
210 | 219 |
211 void ViewManagerClientImpl::RemoveView(Id view_id) { | 220 void ViewManagerClientImpl::RemoveView(Id view_id) { |
212 IdToViewMap::iterator it = views_.find(view_id); | 221 IdToViewMap::iterator it = views_.find(view_id); |
213 if (it != views_.end()) | 222 if (it != views_.end()) |
(...skipping 10 matching lines...) Expand all Loading... |
224 const std::vector<View*>& ViewManagerClientImpl::GetRoots() const { | 233 const std::vector<View*>& ViewManagerClientImpl::GetRoots() const { |
225 return roots_; | 234 return roots_; |
226 } | 235 } |
227 | 236 |
228 View* ViewManagerClientImpl::GetViewById(Id id) { | 237 View* ViewManagerClientImpl::GetViewById(Id id) { |
229 IdToViewMap::const_iterator it = views_.find(id); | 238 IdToViewMap::const_iterator it = views_.find(id); |
230 return it != views_.end() ? it->second : NULL; | 239 return it != views_.end() ? it->second : NULL; |
231 } | 240 } |
232 | 241 |
233 //////////////////////////////////////////////////////////////////////////////// | 242 //////////////////////////////////////////////////////////////////////////////// |
234 // ViewManagerClientImpl, InterfaceImpl overrides: | |
235 | |
236 void ViewManagerClientImpl::OnConnectionEstablished() { | |
237 service_ = client(); | |
238 } | |
239 | |
240 //////////////////////////////////////////////////////////////////////////////// | |
241 // ViewManagerClientImpl, ViewManagerClient implementation: | 243 // ViewManagerClientImpl, ViewManagerClient implementation: |
242 | 244 |
243 void ViewManagerClientImpl::OnEmbed( | 245 void ViewManagerClientImpl::OnEmbed( |
244 ConnectionSpecificId connection_id, | 246 ConnectionSpecificId connection_id, |
245 const String& creator_url, | 247 const String& creator_url, |
246 ViewDataPtr root_data, | 248 ViewDataPtr root_data, |
247 InterfaceRequest<ServiceProvider> parent_services, | 249 InterfaceRequest<ServiceProvider> parent_services, |
248 ScopedMessagePipeHandle window_manager_pipe) { | 250 ScopedMessagePipeHandle window_manager_pipe) { |
249 if (!connected_) { | 251 if (!connected_) { |
250 connected_ = true; | 252 connected_ = true; |
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
388 FOR_EACH_OBSERVER(ViewObserver, | 390 FOR_EACH_OBSERVER(ViewObserver, |
389 *ViewPrivate(focused).observers(), | 391 *ViewPrivate(focused).observers(), |
390 OnViewFocusChanged(focused, blurred)); | 392 OnViewFocusChanged(focused, blurred)); |
391 } | 393 } |
392 } | 394 } |
393 | 395 |
394 void ViewManagerClientImpl::OnActiveWindowChanged(Id old_focused_window, | 396 void ViewManagerClientImpl::OnActiveWindowChanged(Id old_focused_window, |
395 Id new_focused_window) {} | 397 Id new_focused_window) {} |
396 | 398 |
397 //////////////////////////////////////////////////////////////////////////////// | 399 //////////////////////////////////////////////////////////////////////////////// |
| 400 // OnConnectionError, private: |
| 401 void ViewManagerClientImpl::OnConnectionError() { |
| 402 if (delete_on_error_) |
| 403 delete this; |
| 404 } |
| 405 |
| 406 //////////////////////////////////////////////////////////////////////////////// |
398 // ViewManagerClientImpl, private: | 407 // ViewManagerClientImpl, private: |
399 | 408 |
400 void ViewManagerClientImpl::RemoveRoot(View* root) { | 409 void ViewManagerClientImpl::RemoveRoot(View* root) { |
401 std::vector<View*>::iterator it = | 410 std::vector<View*>::iterator it = |
402 std::find(roots_.begin(), roots_.end(), root); | 411 std::find(roots_.begin(), roots_.end(), root); |
403 if (it != roots_.end()) | 412 if (it != roots_.end()) |
404 roots_.erase(it); | 413 roots_.erase(it); |
405 } | 414 } |
406 | 415 |
407 void ViewManagerClientImpl::OnActionCompleted(bool success) { | 416 void ViewManagerClientImpl::OnActionCompleted(bool success) { |
(...skipping 10 matching lines...) Expand all Loading... |
418 base::Unretained(this)); | 427 base::Unretained(this)); |
419 } | 428 } |
420 | 429 |
421 base::Callback<void(ErrorCode)> | 430 base::Callback<void(ErrorCode)> |
422 ViewManagerClientImpl::ActionCompletedCallbackWithErrorCode() { | 431 ViewManagerClientImpl::ActionCompletedCallbackWithErrorCode() { |
423 return base::Bind(&ViewManagerClientImpl::OnActionCompletedWithErrorCode, | 432 return base::Bind(&ViewManagerClientImpl::OnActionCompletedWithErrorCode, |
424 base::Unretained(this)); | 433 base::Unretained(this)); |
425 } | 434 } |
426 | 435 |
427 } // namespace mojo | 436 } // namespace mojo |
OLD | NEW |