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/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 Loading... |
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, |
(...skipping 27 matching lines...) Expand all Loading... |
122 // 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 |
123 // exception is the window manager, which may know aboutother random views | 123 // exception is the window manager, which may know aboutother random views |
124 // that it doesn't own. | 124 // that it doesn't own. |
125 // NOTE: we manually delete as we're a friend. | 125 // NOTE: we manually delete as we're a friend. |
126 for (size_t i = 0; i < non_owned.size(); ++i) | 126 for (size_t i = 0; i < non_owned.size(); ++i) |
127 delete non_owned[i]; | 127 delete non_owned[i]; |
128 | 128 |
129 delegate_->OnViewManagerDisconnected(this); | 129 delegate_->OnViewManagerDisconnected(this); |
130 } | 130 } |
131 | 131 |
132 Id ViewManagerClientImpl::CreateView() { | |
133 DCHECK(connected_); | |
134 const Id view_id = MakeTransportId(connection_id_, ++next_id_); | |
135 service_->CreateView(view_id, ActionCompletedCallbackWithErrorCode()); | |
136 return view_id; | |
137 } | |
138 | |
139 void ViewManagerClientImpl::DestroyView(Id view_id) { | 132 void ViewManagerClientImpl::DestroyView(Id view_id) { |
140 DCHECK(connected_); | 133 DCHECK(connected_); |
141 service_->DeleteView(view_id, ActionCompletedCallback()); | 134 service_->DeleteView(view_id, ActionCompletedCallback()); |
142 } | 135 } |
143 | 136 |
144 void ViewManagerClientImpl::AddChild(Id child_id, Id parent_id) { | 137 void ViewManagerClientImpl::AddChild(Id child_id, Id parent_id) { |
145 DCHECK(connected_); | 138 DCHECK(connected_); |
146 service_->AddView(parent_id, child_id, ActionCompletedCallback()); | 139 service_->AddView(parent_id, child_id, ActionCompletedCallback()); |
147 } | 140 } |
148 | 141 |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
223 | 216 |
224 void ViewManagerClientImpl::RemoveView(Id view_id) { | 217 void ViewManagerClientImpl::RemoveView(Id view_id) { |
225 IdToViewMap::iterator it = views_.find(view_id); | 218 IdToViewMap::iterator it = views_.find(view_id); |
226 if (it != views_.end()) | 219 if (it != views_.end()) |
227 views_.erase(it); | 220 views_.erase(it); |
228 } | 221 } |
229 | 222 |
230 //////////////////////////////////////////////////////////////////////////////// | 223 //////////////////////////////////////////////////////////////////////////////// |
231 // ViewManagerClientImpl, ViewManager implementation: | 224 // ViewManagerClientImpl, ViewManager implementation: |
232 | 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 |
233 const std::string& ViewManagerClientImpl::GetEmbedderURL() const { | 233 const std::string& ViewManagerClientImpl::GetEmbedderURL() const { |
234 return creator_url_; | 234 return creator_url_; |
235 } | 235 } |
236 | 236 |
237 View* ViewManagerClientImpl::GetRoot() { | 237 View* ViewManagerClientImpl::GetRoot() { |
238 return root_; | 238 return root_; |
239 } | 239 } |
240 | 240 |
241 View* ViewManagerClientImpl::GetViewById(Id id) { | 241 View* ViewManagerClientImpl::GetViewById(Id id) { |
242 IdToViewMap::const_iterator it = views_.find(id); | 242 IdToViewMap::const_iterator it = views_.find(id); |
243 return it != views_.end() ? it->second : NULL; | 243 return it != views_.end() ? it->second : NULL; |
244 } | 244 } |
245 | 245 |
246 View* ViewManagerClientImpl::GetFocusedView() { | 246 View* ViewManagerClientImpl::GetFocusedView() { |
247 return focused_view_; | 247 return focused_view_; |
248 } | 248 } |
249 | 249 |
| 250 View* ViewManagerClientImpl::CreateView() { |
| 251 View* view = new View(this, CreateViewOnServer()); |
| 252 AddView(view); |
| 253 return view; |
| 254 } |
| 255 |
250 //////////////////////////////////////////////////////////////////////////////// | 256 //////////////////////////////////////////////////////////////////////////////// |
251 // ViewManagerClientImpl, ViewManagerClient implementation: | 257 // ViewManagerClientImpl, ViewManagerClient implementation: |
252 | 258 |
253 void ViewManagerClientImpl::OnEmbed( | 259 void ViewManagerClientImpl::OnEmbed( |
254 ConnectionSpecificId connection_id, | 260 ConnectionSpecificId connection_id, |
255 const String& creator_url, | 261 const String& creator_url, |
256 ViewDataPtr root_data, | 262 ViewDataPtr root_data, |
257 InterfaceRequest<ServiceProvider> parent_services, | 263 InterfaceRequest<ServiceProvider> parent_services, |
258 ScopedMessagePipeHandle window_manager_pipe) { | 264 ScopedMessagePipeHandle window_manager_pipe) { |
259 DCHECK(!connected_); | 265 DCHECK(!connected_); |
(...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
471 uint32 active_view_id) { | 477 uint32 active_view_id) { |
472 if (GetViewById(focused_view_id) != focused_view_) | 478 if (GetViewById(focused_view_id) != focused_view_) |
473 OnFocusChanged(focused_view_ ? focused_view_->id() : 0, focused_view_id); | 479 OnFocusChanged(focused_view_ ? focused_view_->id() : 0, focused_view_id); |
474 if (GetViewById(active_view_id) != activated_view_) { | 480 if (GetViewById(active_view_id) != activated_view_) { |
475 OnActiveWindowChanged(activated_view_ ? activated_view_->id() : 0, | 481 OnActiveWindowChanged(activated_view_ ? activated_view_->id() : 0, |
476 active_view_id); | 482 active_view_id); |
477 } | 483 } |
478 } | 484 } |
479 | 485 |
480 } // namespace mojo | 486 } // namespace mojo |
OLD | NEW |