| 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_connection.h" | 10 #include "mojo/public/cpp/application/application_connection.h" |
| 11 #include "mojo/public/cpp/application/connect.h" | 11 #include "mojo/public/cpp/application/connect.h" |
| 12 #include "mojo/public/cpp/application/service_provider_impl.h" | 12 #include "mojo/public/cpp/application/service_provider_impl.h" |
| 13 #include "mojo/public/interfaces/application/service_provider.mojom.h" | 13 #include "mojo/public/interfaces/application/service_provider.mojom.h" |
| 14 #include "mojo/services/public/cpp/view_manager/lib/node_private.h" | 14 #include "mojo/services/public/cpp/view_manager/lib/view_private.h" |
| 15 #include "mojo/services/public/cpp/view_manager/node_observer.h" | |
| 16 #include "mojo/services/public/cpp/view_manager/util.h" | 15 #include "mojo/services/public/cpp/view_manager/util.h" |
| 17 #include "mojo/services/public/cpp/view_manager/view_manager_delegate.h" | 16 #include "mojo/services/public/cpp/view_manager/view_manager_delegate.h" |
| 17 #include "mojo/services/public/cpp/view_manager/view_observer.h" |
| 18 #include "mojo/services/public/cpp/view_manager/window_manager_delegate.h" | 18 #include "mojo/services/public/cpp/view_manager/window_manager_delegate.h" |
| 19 #include "third_party/skia/include/core/SkBitmap.h" | 19 #include "third_party/skia/include/core/SkBitmap.h" |
| 20 #include "ui/gfx/codec/png_codec.h" | 20 #include "ui/gfx/codec/png_codec.h" |
| 21 | 21 |
| 22 namespace mojo { | 22 namespace mojo { |
| 23 | 23 |
| 24 Id MakeTransportId(ConnectionSpecificId connection_id, | 24 Id MakeTransportId(ConnectionSpecificId connection_id, |
| 25 ConnectionSpecificId local_id) { | 25 ConnectionSpecificId local_id) { |
| 26 return (connection_id << 16) | local_id; | 26 return (connection_id << 16) | local_id; |
| 27 } | 27 } |
| 28 | 28 |
| 29 // Helper called to construct a local node/view object from transport data. | 29 // Helper called to construct a local view object from transport data. |
| 30 Node* AddNodeToViewManager(ViewManagerClientImpl* client, | 30 View* AddViewToViewManager(ViewManagerClientImpl* client, |
| 31 Node* parent, | 31 View* parent, |
| 32 Id node_id, | 32 Id view_id, |
| 33 const gfx::Rect& bounds) { | 33 const gfx::Rect& bounds) { |
| 34 // We don't use the ctor that takes a ViewManager here, since it will call | 34 // We don't use the ctor that takes a ViewManager here, since it will call |
| 35 // back to the service and attempt to create a new node. | 35 // back to the service and attempt to create a new view. |
| 36 Node* node = NodePrivate::LocalCreate(); | 36 View* view = ViewPrivate::LocalCreate(); |
| 37 NodePrivate private_node(node); | 37 ViewPrivate private_view(view); |
| 38 private_node.set_view_manager(client); | 38 private_view.set_view_manager(client); |
| 39 private_node.set_id(node_id); | 39 private_view.set_id(view_id); |
| 40 client->AddNode(node); | 40 client->AddView(view); |
| 41 private_node.LocalSetBounds(gfx::Rect(), bounds); | 41 private_view.LocalSetBounds(gfx::Rect(), bounds); |
| 42 if (parent) | 42 if (parent) |
| 43 NodePrivate(parent).LocalAddChild(node); | 43 ViewPrivate(parent).LocalAddChild(view); |
| 44 return node; | 44 return view; |
| 45 } | 45 } |
| 46 | 46 |
| 47 Node* BuildNodeTree(ViewManagerClientImpl* client, | 47 View* BuildViewTree(ViewManagerClientImpl* client, |
| 48 const Array<NodeDataPtr>& nodes, | 48 const Array<ViewDataPtr>& views, |
| 49 Node* initial_parent) { | 49 View* initial_parent) { |
| 50 std::vector<Node*> parents; | 50 std::vector<View*> parents; |
| 51 Node* root = NULL; | 51 View* root = NULL; |
| 52 Node* last_node = NULL; | 52 View* last_view = NULL; |
| 53 if (initial_parent) | 53 if (initial_parent) |
| 54 parents.push_back(initial_parent); | 54 parents.push_back(initial_parent); |
| 55 for (size_t i = 0; i < nodes.size(); ++i) { | 55 for (size_t i = 0; i < views.size(); ++i) { |
| 56 if (last_node && nodes[i]->parent_id == last_node->id()) { | 56 if (last_view && views[i]->parent_id == last_view->id()) { |
| 57 parents.push_back(last_node); | 57 parents.push_back(last_view); |
| 58 } else if (!parents.empty()) { | 58 } else if (!parents.empty()) { |
| 59 while (parents.back()->id() != nodes[i]->parent_id) | 59 while (parents.back()->id() != views[i]->parent_id) |
| 60 parents.pop_back(); | 60 parents.pop_back(); |
| 61 } | 61 } |
| 62 Node* node = AddNodeToViewManager( | 62 View* view = AddViewToViewManager( |
| 63 client, | 63 client, |
| 64 !parents.empty() ? parents.back() : NULL, | 64 !parents.empty() ? parents.back() : NULL, |
| 65 nodes[i]->node_id, | 65 views[i]->view_id, |
| 66 nodes[i]->bounds.To<gfx::Rect>()); | 66 views[i]->bounds.To<gfx::Rect>()); |
| 67 if (!last_node) | 67 if (!last_view) |
| 68 root = node; | 68 root = view; |
| 69 last_node = node; | 69 last_view = view; |
| 70 } | 70 } |
| 71 return root; | 71 return root; |
| 72 } | 72 } |
| 73 | 73 |
| 74 // Responsible for removing a root from the ViewManager when that node is | 74 // Responsible for removing a root from the ViewManager when that view is |
| 75 // destroyed. | 75 // destroyed. |
| 76 class RootObserver : public NodeObserver { | 76 class RootObserver : public ViewObserver { |
| 77 public: | 77 public: |
| 78 explicit RootObserver(Node* root) : root_(root) {} | 78 explicit RootObserver(View* root) : root_(root) {} |
| 79 virtual ~RootObserver() {} | 79 virtual ~RootObserver() {} |
| 80 | 80 |
| 81 private: | 81 private: |
| 82 // Overridden from NodeObserver: | 82 // Overridden from ViewObserver: |
| 83 virtual void OnNodeDestroyed(Node* node) OVERRIDE { | 83 virtual void OnViewDestroyed(View* view) OVERRIDE { |
| 84 DCHECK_EQ(node, root_); | 84 DCHECK_EQ(view, root_); |
| 85 static_cast<ViewManagerClientImpl*>( | 85 static_cast<ViewManagerClientImpl*>( |
| 86 NodePrivate(root_).view_manager())->RemoveRoot(root_); | 86 ViewPrivate(root_).view_manager())->RemoveRoot(root_); |
| 87 node->RemoveObserver(this); | 87 view->RemoveObserver(this); |
| 88 delete this; | 88 delete this; |
| 89 } | 89 } |
| 90 | 90 |
| 91 Node* root_; | 91 View* root_; |
| 92 | 92 |
| 93 DISALLOW_COPY_AND_ASSIGN(RootObserver); | 93 DISALLOW_COPY_AND_ASSIGN(RootObserver); |
| 94 }; | 94 }; |
| 95 | 95 |
| 96 bool CreateMapAndDupSharedBuffer(size_t size, | 96 bool CreateMapAndDupSharedBuffer(size_t size, |
| 97 void** memory, | 97 void** memory, |
| 98 ScopedSharedBufferHandle* handle, | 98 ScopedSharedBufferHandle* handle, |
| 99 ScopedSharedBufferHandle* duped) { | 99 ScopedSharedBufferHandle* duped) { |
| 100 MojoResult result = CreateSharedBuffer(NULL, size, handle); | 100 MojoResult result = CreateSharedBuffer(NULL, size, handle); |
| 101 if (result != MOJO_RESULT_OK) | 101 if (result != MOJO_RESULT_OK) |
| (...skipping 16 matching lines...) Expand all Loading... |
| 118 | 118 |
| 119 ViewManagerClientImpl::ViewManagerClientImpl(ViewManagerDelegate* delegate) | 119 ViewManagerClientImpl::ViewManagerClientImpl(ViewManagerDelegate* delegate) |
| 120 : connected_(false), | 120 : connected_(false), |
| 121 connection_id_(0), | 121 connection_id_(0), |
| 122 next_id_(1), | 122 next_id_(1), |
| 123 delegate_(delegate), | 123 delegate_(delegate), |
| 124 window_manager_delegate_(NULL) { | 124 window_manager_delegate_(NULL) { |
| 125 } | 125 } |
| 126 | 126 |
| 127 ViewManagerClientImpl::~ViewManagerClientImpl() { | 127 ViewManagerClientImpl::~ViewManagerClientImpl() { |
| 128 std::vector<Node*> non_owned; | 128 std::vector<View*> non_owned; |
| 129 while (!nodes_.empty()) { | 129 while (!views_.empty()) { |
| 130 IdToNodeMap::iterator it = nodes_.begin(); | 130 IdToViewMap::iterator it = views_.begin(); |
| 131 if (OwnsNode(it->second->id())) { | 131 if (OwnsView(it->second->id())) { |
| 132 it->second->Destroy(); | 132 it->second->Destroy(); |
| 133 } else { | 133 } else { |
| 134 non_owned.push_back(it->second); | 134 non_owned.push_back(it->second); |
| 135 nodes_.erase(it); | 135 views_.erase(it); |
| 136 } | 136 } |
| 137 } | 137 } |
| 138 // Delete the non-owned nodes last. In the typical case these are roots. The | 138 // Delete the non-owned views last. In the typical case these are roots. The |
| 139 // exception is the window manager, which may know aboutother random nodes | 139 // exception is the window manager, which may know aboutother random views |
| 140 // that it doesn't own. | 140 // that it doesn't own. |
| 141 // NOTE: we manually delete as we're a friend. | 141 // NOTE: we manually delete as we're a friend. |
| 142 for (size_t i = 0; i < non_owned.size(); ++i) | 142 for (size_t i = 0; i < non_owned.size(); ++i) |
| 143 delete non_owned[i]; | 143 delete non_owned[i]; |
| 144 delegate_->OnViewManagerDisconnected(this); | 144 delegate_->OnViewManagerDisconnected(this); |
| 145 } | 145 } |
| 146 | 146 |
| 147 Id ViewManagerClientImpl::CreateNode() { | 147 Id ViewManagerClientImpl::CreateView() { |
| 148 DCHECK(connected_); | 148 DCHECK(connected_); |
| 149 const Id node_id = MakeTransportId(connection_id_, ++next_id_); | 149 const Id view_id = MakeTransportId(connection_id_, ++next_id_); |
| 150 service_->CreateNode(node_id, ActionCompletedCallbackWithErrorCode()); | 150 service_->CreateView(view_id, ActionCompletedCallbackWithErrorCode()); |
| 151 return node_id; | 151 return view_id; |
| 152 } | 152 } |
| 153 | 153 |
| 154 void ViewManagerClientImpl::DestroyNode(Id node_id) { | 154 void ViewManagerClientImpl::DestroyView(Id view_id) { |
| 155 DCHECK(connected_); | 155 DCHECK(connected_); |
| 156 service_->DeleteNode(node_id, ActionCompletedCallback()); | 156 service_->DeleteView(view_id, ActionCompletedCallback()); |
| 157 } | 157 } |
| 158 | 158 |
| 159 void ViewManagerClientImpl::AddChild(Id child_id, Id parent_id) { | 159 void ViewManagerClientImpl::AddChild(Id child_id, Id parent_id) { |
| 160 DCHECK(connected_); | 160 DCHECK(connected_); |
| 161 service_->AddNode(parent_id, child_id, ActionCompletedCallback()); | 161 service_->AddView(parent_id, child_id, ActionCompletedCallback()); |
| 162 } | 162 } |
| 163 | 163 |
| 164 void ViewManagerClientImpl::RemoveChild(Id child_id, Id parent_id) { | 164 void ViewManagerClientImpl::RemoveChild(Id child_id, Id parent_id) { |
| 165 DCHECK(connected_); | 165 DCHECK(connected_); |
| 166 service_->RemoveNodeFromParent(child_id, ActionCompletedCallback()); | 166 service_->RemoveViewFromParent(child_id, ActionCompletedCallback()); |
| 167 } | 167 } |
| 168 | 168 |
| 169 void ViewManagerClientImpl::Reorder( | 169 void ViewManagerClientImpl::Reorder( |
| 170 Id node_id, | 170 Id view_id, |
| 171 Id relative_node_id, | 171 Id relative_view_id, |
| 172 OrderDirection direction) { | 172 OrderDirection direction) { |
| 173 DCHECK(connected_); | 173 DCHECK(connected_); |
| 174 service_->ReorderNode(node_id, relative_node_id, direction, | 174 service_->ReorderView(view_id, relative_view_id, direction, |
| 175 ActionCompletedCallback()); | 175 ActionCompletedCallback()); |
| 176 } | 176 } |
| 177 | 177 |
| 178 bool ViewManagerClientImpl::OwnsNode(Id id) const { | 178 bool ViewManagerClientImpl::OwnsView(Id id) const { |
| 179 return HiWord(id) == connection_id_; | 179 return HiWord(id) == connection_id_; |
| 180 } | 180 } |
| 181 | 181 |
| 182 void ViewManagerClientImpl::SetBounds(Id node_id, const gfx::Rect& bounds) { | 182 void ViewManagerClientImpl::SetBounds(Id view_id, const gfx::Rect& bounds) { |
| 183 DCHECK(connected_); | 183 DCHECK(connected_); |
| 184 service_->SetNodeBounds(node_id, Rect::From(bounds), | 184 service_->SetViewBounds(view_id, Rect::From(bounds), |
| 185 ActionCompletedCallback()); | 185 ActionCompletedCallback()); |
| 186 } | 186 } |
| 187 | 187 |
| 188 void ViewManagerClientImpl::SetNodeContents(Id node_id, | 188 void ViewManagerClientImpl::SetViewContents(Id view_id, |
| 189 const SkBitmap& contents) { | 189 const SkBitmap& contents) { |
| 190 DCHECK(connected_); | 190 DCHECK(connected_); |
| 191 std::vector<unsigned char> data; | 191 std::vector<unsigned char> data; |
| 192 gfx::PNGCodec::EncodeBGRASkBitmap(contents, false, &data); | 192 gfx::PNGCodec::EncodeBGRASkBitmap(contents, false, &data); |
| 193 | 193 |
| 194 void* memory = NULL; | 194 void* memory = NULL; |
| 195 ScopedSharedBufferHandle duped, shared_state_handle; | 195 ScopedSharedBufferHandle duped, shared_state_handle; |
| 196 bool result = CreateMapAndDupSharedBuffer(data.size(), | 196 bool result = CreateMapAndDupSharedBuffer(data.size(), |
| 197 &memory, | 197 &memory, |
| 198 &shared_state_handle, | 198 &shared_state_handle, |
| 199 &duped); | 199 &duped); |
| 200 if (!result) | 200 if (!result) |
| 201 return; | 201 return; |
| 202 | 202 |
| 203 memcpy(memory, &data[0], data.size()); | 203 memcpy(memory, &data[0], data.size()); |
| 204 | 204 |
| 205 service_->SetNodeContents(node_id, duped.Pass(), | 205 service_->SetViewContents(view_id, duped.Pass(), |
| 206 static_cast<uint32_t>(data.size()), | 206 static_cast<uint32_t>(data.size()), |
| 207 ActionCompletedCallback()); | 207 ActionCompletedCallback()); |
| 208 } | 208 } |
| 209 | 209 |
| 210 void ViewManagerClientImpl::SetFocus(Id node_id) { | 210 void ViewManagerClientImpl::SetFocus(Id view_id) { |
| 211 DCHECK(connected_); | 211 DCHECK(connected_); |
| 212 service_->SetFocus(node_id, ActionCompletedCallback()); | 212 service_->SetFocus(view_id, ActionCompletedCallback()); |
| 213 } | 213 } |
| 214 | 214 |
| 215 void ViewManagerClientImpl::SetVisible(Id node_id, bool visible) { | 215 void ViewManagerClientImpl::SetVisible(Id view_id, bool visible) { |
| 216 DCHECK(connected_); | 216 DCHECK(connected_); |
| 217 service_->SetNodeVisibility(node_id, visible, ActionCompletedCallback()); | 217 service_->SetViewVisibility(view_id, visible, ActionCompletedCallback()); |
| 218 } | 218 } |
| 219 | 219 |
| 220 void ViewManagerClientImpl::Embed(const String& url, Id node_id) { | 220 void ViewManagerClientImpl::Embed(const String& url, Id view_id) { |
| 221 ServiceProviderPtr sp; | 221 ServiceProviderPtr sp; |
| 222 BindToProxy(new ServiceProviderImpl, &sp); | 222 BindToProxy(new ServiceProviderImpl, &sp); |
| 223 Embed(url, node_id, sp.Pass()); | 223 Embed(url, view_id, sp.Pass()); |
| 224 } | 224 } |
| 225 | 225 |
| 226 void ViewManagerClientImpl::Embed( | 226 void ViewManagerClientImpl::Embed( |
| 227 const String& url, | 227 const String& url, |
| 228 Id node_id, | 228 Id view_id, |
| 229 ServiceProviderPtr service_provider) { | 229 ServiceProviderPtr service_provider) { |
| 230 DCHECK(connected_); | 230 DCHECK(connected_); |
| 231 service_->Embed(url, node_id, service_provider.Pass(), | 231 service_->Embed(url, view_id, service_provider.Pass(), |
| 232 ActionCompletedCallback()); | 232 ActionCompletedCallback()); |
| 233 } | 233 } |
| 234 | 234 |
| 235 void ViewManagerClientImpl::AddNode(Node* node) { | 235 void ViewManagerClientImpl::AddView(View* view) { |
| 236 DCHECK(nodes_.find(node->id()) == nodes_.end()); | 236 DCHECK(views_.find(view->id()) == views_.end()); |
| 237 nodes_[node->id()] = node; | 237 views_[view->id()] = view; |
| 238 } | 238 } |
| 239 | 239 |
| 240 void ViewManagerClientImpl::RemoveNode(Id node_id) { | 240 void ViewManagerClientImpl::RemoveView(Id view_id) { |
| 241 IdToNodeMap::iterator it = nodes_.find(node_id); | 241 IdToViewMap::iterator it = views_.find(view_id); |
| 242 if (it != nodes_.end()) | 242 if (it != views_.end()) |
| 243 nodes_.erase(it); | 243 views_.erase(it); |
| 244 } | 244 } |
| 245 | 245 |
| 246 //////////////////////////////////////////////////////////////////////////////// | 246 //////////////////////////////////////////////////////////////////////////////// |
| 247 // ViewManagerClientImpl, ViewManager implementation: | 247 // ViewManagerClientImpl, ViewManager implementation: |
| 248 | 248 |
| 249 void ViewManagerClientImpl::SetWindowManagerDelegate( | 249 void ViewManagerClientImpl::SetWindowManagerDelegate( |
| 250 WindowManagerDelegate* window_manager_delegate) { | 250 WindowManagerDelegate* window_manager_delegate) { |
| 251 CHECK(NULL != GetNodeById(1)); | 251 CHECK(NULL != GetViewById(1)); |
| 252 window_manager_delegate_ = window_manager_delegate; | 252 window_manager_delegate_ = window_manager_delegate; |
| 253 } | 253 } |
| 254 | 254 |
| 255 void ViewManagerClientImpl::DispatchEvent(Node* target, EventPtr event) { | 255 void ViewManagerClientImpl::DispatchEvent(View* target, EventPtr event) { |
| 256 CHECK(window_manager_delegate_); | 256 CHECK(window_manager_delegate_); |
| 257 service_->DispatchOnNodeInputEvent(target->id(), event.Pass()); | 257 service_->DispatchOnViewInputEvent(target->id(), event.Pass()); |
| 258 } | 258 } |
| 259 | 259 |
| 260 const std::string& ViewManagerClientImpl::GetEmbedderURL() const { | 260 const std::string& ViewManagerClientImpl::GetEmbedderURL() const { |
| 261 return creator_url_; | 261 return creator_url_; |
| 262 } | 262 } |
| 263 | 263 |
| 264 const std::vector<Node*>& ViewManagerClientImpl::GetRoots() const { | 264 const std::vector<View*>& ViewManagerClientImpl::GetRoots() const { |
| 265 return roots_; | 265 return roots_; |
| 266 } | 266 } |
| 267 | 267 |
| 268 Node* ViewManagerClientImpl::GetNodeById(Id id) { | 268 View* ViewManagerClientImpl::GetViewById(Id id) { |
| 269 IdToNodeMap::const_iterator it = nodes_.find(id); | 269 IdToViewMap::const_iterator it = views_.find(id); |
| 270 return it != nodes_.end() ? it->second : NULL; | 270 return it != views_.end() ? it->second : NULL; |
| 271 } | 271 } |
| 272 | 272 |
| 273 //////////////////////////////////////////////////////////////////////////////// | 273 //////////////////////////////////////////////////////////////////////////////// |
| 274 // ViewManagerClientImpl, InterfaceImpl overrides: | 274 // ViewManagerClientImpl, InterfaceImpl overrides: |
| 275 | 275 |
| 276 void ViewManagerClientImpl::OnConnectionEstablished() { | 276 void ViewManagerClientImpl::OnConnectionEstablished() { |
| 277 service_ = client(); | 277 service_ = client(); |
| 278 } | 278 } |
| 279 | 279 |
| 280 //////////////////////////////////////////////////////////////////////////////// | 280 //////////////////////////////////////////////////////////////////////////////// |
| 281 // ViewManagerClientImpl, ViewManagerClient implementation: | 281 // ViewManagerClientImpl, ViewManagerClient implementation: |
| 282 | 282 |
| 283 void ViewManagerClientImpl::OnEmbed( | 283 void ViewManagerClientImpl::OnEmbed( |
| 284 ConnectionSpecificId connection_id, | 284 ConnectionSpecificId connection_id, |
| 285 const String& creator_url, | 285 const String& creator_url, |
| 286 NodeDataPtr root_data, | 286 ViewDataPtr root_data, |
| 287 InterfaceRequest<ServiceProvider> service_provider) { | 287 InterfaceRequest<ServiceProvider> service_provider) { |
| 288 if (!connected_) { | 288 if (!connected_) { |
| 289 connected_ = true; | 289 connected_ = true; |
| 290 connection_id_ = connection_id; | 290 connection_id_ = connection_id; |
| 291 creator_url_ = TypeConverter<String, std::string>::ConvertFrom(creator_url); | 291 creator_url_ = TypeConverter<String, std::string>::ConvertFrom(creator_url); |
| 292 } else { | 292 } else { |
| 293 DCHECK_EQ(connection_id_, connection_id); | 293 DCHECK_EQ(connection_id_, connection_id); |
| 294 DCHECK_EQ(creator_url_, creator_url); | 294 DCHECK_EQ(creator_url_, creator_url); |
| 295 } | 295 } |
| 296 | 296 |
| 297 // A new root must not already exist as a root or be contained by an existing | 297 // A new root must not already exist as a root or be contained by an existing |
| 298 // hierarchy visible to this view manager. | 298 // hierarchy visible to this view manager. |
| 299 Node* root = AddNodeToViewManager(this, NULL, root_data->node_id, | 299 View* root = AddViewToViewManager(this, NULL, root_data->view_id, |
| 300 root_data->bounds.To<gfx::Rect>()); | 300 root_data->bounds.To<gfx::Rect>()); |
| 301 roots_.push_back(root); | 301 roots_.push_back(root); |
| 302 root->AddObserver(new RootObserver(root)); | 302 root->AddObserver(new RootObserver(root)); |
| 303 | 303 |
| 304 // BindToRequest() binds the lifetime of |exported_services| to the pipe. | 304 // BindToRequest() binds the lifetime of |exported_services| to the pipe. |
| 305 ServiceProviderImpl* exported_services = new ServiceProviderImpl; | 305 ServiceProviderImpl* exported_services = new ServiceProviderImpl; |
| 306 BindToRequest(exported_services, &service_provider); | 306 BindToRequest(exported_services, &service_provider); |
| 307 scoped_ptr<ServiceProvider> remote( | 307 scoped_ptr<ServiceProvider> remote( |
| 308 exported_services->CreateRemoteServiceProvider()); | 308 exported_services->CreateRemoteServiceProvider()); |
| 309 delegate_->OnEmbed(this, root, exported_services, remote.Pass()); | 309 delegate_->OnEmbed(this, root, exported_services, remote.Pass()); |
| 310 } | 310 } |
| 311 | 311 |
| 312 void ViewManagerClientImpl::OnNodeBoundsChanged(Id node_id, | 312 void ViewManagerClientImpl::OnViewBoundsChanged(Id view_id, |
| 313 RectPtr old_bounds, | 313 RectPtr old_bounds, |
| 314 RectPtr new_bounds) { | 314 RectPtr new_bounds) { |
| 315 Node* node = GetNodeById(node_id); | 315 View* view = GetViewById(view_id); |
| 316 NodePrivate(node).LocalSetBounds(old_bounds.To<gfx::Rect>(), | 316 ViewPrivate(view).LocalSetBounds(old_bounds.To<gfx::Rect>(), |
| 317 new_bounds.To<gfx::Rect>()); | 317 new_bounds.To<gfx::Rect>()); |
| 318 } | 318 } |
| 319 | 319 |
| 320 void ViewManagerClientImpl::OnNodeHierarchyChanged( | 320 void ViewManagerClientImpl::OnViewHierarchyChanged( |
| 321 Id node_id, | 321 Id view_id, |
| 322 Id new_parent_id, | 322 Id new_parent_id, |
| 323 Id old_parent_id, | 323 Id old_parent_id, |
| 324 mojo::Array<NodeDataPtr> nodes) { | 324 mojo::Array<ViewDataPtr> views) { |
| 325 Node* initial_parent = nodes.size() ? | 325 View* initial_parent = views.size() ? |
| 326 GetNodeById(nodes[0]->parent_id) : NULL; | 326 GetViewById(views[0]->parent_id) : NULL; |
| 327 | 327 |
| 328 BuildNodeTree(this, nodes, initial_parent); | 328 BuildViewTree(this, views, initial_parent); |
| 329 | 329 |
| 330 Node* new_parent = GetNodeById(new_parent_id); | 330 View* new_parent = GetViewById(new_parent_id); |
| 331 Node* old_parent = GetNodeById(old_parent_id); | 331 View* old_parent = GetViewById(old_parent_id); |
| 332 Node* node = GetNodeById(node_id); | 332 View* view = GetViewById(view_id); |
| 333 if (new_parent) | 333 if (new_parent) |
| 334 NodePrivate(new_parent).LocalAddChild(node); | 334 ViewPrivate(new_parent).LocalAddChild(view); |
| 335 else | 335 else |
| 336 NodePrivate(old_parent).LocalRemoveChild(node); | 336 ViewPrivate(old_parent).LocalRemoveChild(view); |
| 337 } | 337 } |
| 338 | 338 |
| 339 void ViewManagerClientImpl::OnNodeReordered(Id node_id, | 339 void ViewManagerClientImpl::OnViewReordered(Id view_id, |
| 340 Id relative_node_id, | 340 Id relative_view_id, |
| 341 OrderDirection direction) { | 341 OrderDirection direction) { |
| 342 Node* node = GetNodeById(node_id); | 342 View* view = GetViewById(view_id); |
| 343 Node* relative_node = GetNodeById(relative_node_id); | 343 View* relative_view = GetViewById(relative_view_id); |
| 344 if (node && relative_node) | 344 if (view && relative_view) |
| 345 NodePrivate(node).LocalReorder(relative_node, direction); | 345 ViewPrivate(view).LocalReorder(relative_view, direction); |
| 346 } | 346 } |
| 347 | 347 |
| 348 void ViewManagerClientImpl::OnNodeDeleted(Id node_id) { | 348 void ViewManagerClientImpl::OnViewDeleted(Id view_id) { |
| 349 Node* node = GetNodeById(node_id); | 349 View* view = GetViewById(view_id); |
| 350 if (node) | 350 if (view) |
| 351 NodePrivate(node).LocalDestroy(); | 351 ViewPrivate(view).LocalDestroy(); |
| 352 } | 352 } |
| 353 | 353 |
| 354 void ViewManagerClientImpl::OnNodeInputEvent( | 354 void ViewManagerClientImpl::OnViewInputEvent( |
| 355 Id node_id, | 355 Id view_id, |
| 356 EventPtr event, | 356 EventPtr event, |
| 357 const Callback<void()>& ack_callback) { | 357 const Callback<void()>& ack_callback) { |
| 358 Node* node = GetNodeById(node_id); | 358 View* view = GetViewById(view_id); |
| 359 if (node) { | 359 if (view) { |
| 360 FOR_EACH_OBSERVER(NodeObserver, | 360 FOR_EACH_OBSERVER(ViewObserver, |
| 361 *NodePrivate(node).observers(), | 361 *ViewPrivate(view).observers(), |
| 362 OnNodeInputEvent(node, event)); | 362 OnViewInputEvent(view, event)); |
| 363 } | 363 } |
| 364 ack_callback.Run(); | 364 ack_callback.Run(); |
| 365 } | 365 } |
| 366 | 366 |
| 367 void ViewManagerClientImpl::OnFocusChanged(Id gained_focus_id, | 367 void ViewManagerClientImpl::OnFocusChanged(Id gained_focus_id, |
| 368 Id lost_focus_id) { | 368 Id lost_focus_id) { |
| 369 Node* focused = GetNodeById(gained_focus_id); | 369 View* focused = GetViewById(gained_focus_id); |
| 370 Node* blurred = GetNodeById(lost_focus_id); | 370 View* blurred = GetViewById(lost_focus_id); |
| 371 if (blurred) { | 371 if (blurred) { |
| 372 FOR_EACH_OBSERVER(NodeObserver, | 372 FOR_EACH_OBSERVER(ViewObserver, |
| 373 *NodePrivate(blurred).observers(), | 373 *ViewPrivate(blurred).observers(), |
| 374 OnNodeFocusChanged(focused, blurred)); | 374 OnViewFocusChanged(focused, blurred)); |
| 375 } | 375 } |
| 376 if (focused) { | 376 if (focused) { |
| 377 FOR_EACH_OBSERVER(NodeObserver, | 377 FOR_EACH_OBSERVER(ViewObserver, |
| 378 *NodePrivate(focused).observers(), | 378 *ViewPrivate(focused).observers(), |
| 379 OnNodeFocusChanged(focused, blurred)); | 379 OnViewFocusChanged(focused, blurred)); |
| 380 } | 380 } |
| 381 } | 381 } |
| 382 | 382 |
| 383 void ViewManagerClientImpl::Embed( | 383 void ViewManagerClientImpl::Embed( |
| 384 const String& url, | 384 const String& url, |
| 385 InterfaceRequest<ServiceProvider> service_provider) { | 385 InterfaceRequest<ServiceProvider> service_provider) { |
| 386 window_manager_delegate_->Embed(url, service_provider.Pass()); | 386 window_manager_delegate_->Embed(url, service_provider.Pass()); |
| 387 } | 387 } |
| 388 | 388 |
| 389 void ViewManagerClientImpl::DispatchOnNodeInputEvent(Id node_id, | 389 void ViewManagerClientImpl::DispatchOnViewInputEvent(Id view_id, |
| 390 EventPtr event) { | 390 EventPtr event) { |
| 391 if (window_manager_delegate_) | 391 if (window_manager_delegate_) |
| 392 window_manager_delegate_->DispatchEvent(GetNodeById(node_id), event.Pass()); | 392 window_manager_delegate_->DispatchEvent(GetViewById(view_id), event.Pass()); |
| 393 } | 393 } |
| 394 | 394 |
| 395 //////////////////////////////////////////////////////////////////////////////// | 395 //////////////////////////////////////////////////////////////////////////////// |
| 396 // ViewManagerClientImpl, private: | 396 // ViewManagerClientImpl, private: |
| 397 | 397 |
| 398 void ViewManagerClientImpl::RemoveRoot(Node* root) { | 398 void ViewManagerClientImpl::RemoveRoot(View* root) { |
| 399 std::vector<Node*>::iterator it = | 399 std::vector<View*>::iterator it = |
| 400 std::find(roots_.begin(), roots_.end(), root); | 400 std::find(roots_.begin(), roots_.end(), root); |
| 401 if (it != roots_.end()) | 401 if (it != roots_.end()) |
| 402 roots_.erase(it); | 402 roots_.erase(it); |
| 403 } | 403 } |
| 404 | 404 |
| 405 void ViewManagerClientImpl::OnActionCompleted(bool success) { | 405 void ViewManagerClientImpl::OnActionCompleted(bool success) { |
| 406 if (!change_acked_callback_.is_null()) | 406 if (!change_acked_callback_.is_null()) |
| 407 change_acked_callback_.Run(); | 407 change_acked_callback_.Run(); |
| 408 } | 408 } |
| 409 | 409 |
| 410 void ViewManagerClientImpl::OnActionCompletedWithErrorCode(ErrorCode code) { | 410 void ViewManagerClientImpl::OnActionCompletedWithErrorCode(ErrorCode code) { |
| 411 OnActionCompleted(code == ERROR_CODE_NONE); | 411 OnActionCompleted(code == ERROR_CODE_NONE); |
| 412 } | 412 } |
| 413 | 413 |
| 414 base::Callback<void(bool)> ViewManagerClientImpl::ActionCompletedCallback() { | 414 base::Callback<void(bool)> ViewManagerClientImpl::ActionCompletedCallback() { |
| 415 return base::Bind(&ViewManagerClientImpl::OnActionCompleted, | 415 return base::Bind(&ViewManagerClientImpl::OnActionCompleted, |
| 416 base::Unretained(this)); | 416 base::Unretained(this)); |
| 417 } | 417 } |
| 418 | 418 |
| 419 base::Callback<void(ErrorCode)> | 419 base::Callback<void(ErrorCode)> |
| 420 ViewManagerClientImpl::ActionCompletedCallbackWithErrorCode() { | 420 ViewManagerClientImpl::ActionCompletedCallbackWithErrorCode() { |
| 421 return base::Bind(&ViewManagerClientImpl::OnActionCompletedWithErrorCode, | 421 return base::Bind(&ViewManagerClientImpl::OnActionCompletedWithErrorCode, |
| 422 base::Unretained(this)); | 422 base::Unretained(this)); |
| 423 } | 423 } |
| 424 | 424 |
| 425 } // namespace mojo | 425 } // namespace mojo |
| OLD | NEW |