Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(25)

Side by Side Diff: mojo/services/view_manager/view_manager_connection.cc

Issue 272833002: View synchronization (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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/view_manager_connection.h" 5 #include "mojo/services/view_manager/view_manager_connection.h"
6 6
7 #include "base/stl_util.h" 7 #include "base/stl_util.h"
8 #include "mojo/public/cpp/bindings/allocation_scope.h" 8 #include "mojo/public/cpp/bindings/allocation_scope.h"
9 #include "mojo/services/view_manager/node.h" 9 #include "mojo/services/view_manager/node.h"
10 #include "mojo/services/view_manager/root_node_manager.h" 10 #include "mojo/services/view_manager/root_node_manager.h"
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
89 } 89 }
90 90
91 Node* ViewManagerConnection::GetNode(const NodeId& id) { 91 Node* ViewManagerConnection::GetNode(const NodeId& id) {
92 if (id_ == id.connection_id) { 92 if (id_ == id.connection_id) {
93 NodeMap::iterator i = node_map_.find(id.node_id); 93 NodeMap::iterator i = node_map_.find(id.node_id);
94 return i == node_map_.end() ? NULL : i->second; 94 return i == node_map_.end() ? NULL : i->second;
95 } 95 }
96 return context()->GetNode(id); 96 return context()->GetNode(id);
97 } 97 }
98 98
99 View* ViewManagerConnection::GetView(const ViewId& id) { 99 service::View* ViewManagerConnection::GetView(const ViewId& id) {
100 if (id_ == id.connection_id) { 100 if (id_ == id.connection_id) {
101 ViewMap::const_iterator i = view_map_.find(id.view_id); 101 ViewMap::const_iterator i = view_map_.find(id.view_id);
102 return i == view_map_.end() ? NULL : i->second; 102 return i == view_map_.end() ? NULL : i->second;
103 } 103 }
104 return context()->GetView(id); 104 return context()->GetView(id);
105 } 105 }
106 106
107 void ViewManagerConnection::NotifyNodeHierarchyChanged( 107 void ViewManagerConnection::NotifyNodeHierarchyChanged(
108 const NodeId& node, 108 const NodeId& node,
109 const NodeId& new_parent, 109 const NodeId& new_parent,
(...skipping 19 matching lines...) Expand all
129 } 129 }
130 130
131 void ViewManagerConnection::NotifyNodeDeleted( 131 void ViewManagerConnection::NotifyNodeDeleted(
132 const NodeId& node, 132 const NodeId& node,
133 TransportChangeId server_change_id, 133 TransportChangeId server_change_id,
134 TransportChangeId client_change_id) { 134 TransportChangeId client_change_id) {
135 client()->OnNodeDeleted(NodeIdToTransportId(node), server_change_id, 135 client()->OnNodeDeleted(NodeIdToTransportId(node), server_change_id,
136 client_change_id); 136 client_change_id);
137 } 137 }
138 138
139 void ViewManagerConnection::NotifyViewDeleted(
140 const ViewId& view,
141 TransportChangeId server_change_id,
142 TransportChangeId client_change_id) {
143 client()->OnViewDeleted(ViewIdToTransportId(view), server_change_id,
144 client_change_id);
145 }
146
139 bool ViewManagerConnection::DeleteNodeImpl(ViewManagerConnection* source, 147 bool ViewManagerConnection::DeleteNodeImpl(ViewManagerConnection* source,
140 const NodeId& node_id, 148 const NodeId& node_id,
141 TransportChangeId change_id) { 149 TransportChangeId change_id) {
142 DCHECK_EQ(node_id.connection_id, id_); 150 DCHECK_EQ(node_id.connection_id, id_);
143 Node* node = GetNode(node_id); 151 Node* node = GetNode(node_id);
144 if (!node) 152 if (!node)
145 return false; 153 return false;
146 RootNodeManager::ScopedChange change( 154 RootNodeManager::ScopedChange change(
147 source, context(), change_id, 155 source, context(), change_id,
148 RootNodeManager::CHANGE_TYPE_ADVANCE_SERVER_CHANGE_ID); 156 RootNodeManager::CHANGE_TYPE_ADVANCE_SERVER_CHANGE_ID);
149 if (node->GetParent()) 157 if (node->GetParent())
150 node->GetParent()->Remove(node); 158 node->GetParent()->Remove(node);
151 std::vector<Node*> children(node->GetChildren()); 159 std::vector<Node*> children(node->GetChildren());
152 for (size_t i = 0; i < children.size(); ++i) 160 for (size_t i = 0; i < children.size(); ++i)
153 node->Remove(children[i]); 161 node->Remove(children[i]);
154 DCHECK(node->GetChildren().empty()); 162 DCHECK(node->GetChildren().empty());
155 node_map_.erase(node_id.node_id); 163 node_map_.erase(node_id.node_id);
156 delete node; 164 delete node;
157 node = NULL; 165 node = NULL;
158 context()->NotifyNodeDeleted(node_id); 166 context()->NotifyNodeDeleted(node_id);
159 return true; 167 return true;
160 } 168 }
161 169
162 bool ViewManagerConnection::DeleteViewImpl(ViewManagerConnection* source, 170 bool ViewManagerConnection::DeleteViewImpl(ViewManagerConnection* source,
163 const ViewId& view_id, 171 const ViewId& view_id,
164 TransportChangeId change_id) { 172 TransportChangeId change_id) {
165 DCHECK_EQ(view_id.connection_id, id_); 173 DCHECK_EQ(view_id.connection_id, id_);
166 View* view = GetView(view_id); 174 service::View* view = GetView(view_id);
167 if (!view) 175 if (!view)
168 return false; 176 return false;
169 RootNodeManager::ScopedChange change( 177 RootNodeManager::ScopedChange change(
170 source, context(), change_id, 178 source, context(), change_id,
171 RootNodeManager::CHANGE_TYPE_DONT_ADVANCE_SERVER_CHANGE_ID); 179 RootNodeManager::CHANGE_TYPE_DONT_ADVANCE_SERVER_CHANGE_ID);
172 if (view->node()) 180 if (view->node())
173 view->node()->SetView(NULL); 181 view->node()->SetView(NULL);
174 view_map_.erase(view_id.view_id); 182 view_map_.erase(view_id.view_id);
175 delete view; 183 delete view;
184 context()->NotifyViewDeleted(view_id);
176 return true; 185 return true;
177 } 186 }
178 187
179 bool ViewManagerConnection::SetViewImpl(const NodeId& node_id, 188 bool ViewManagerConnection::SetViewImpl(const NodeId& node_id,
180 const ViewId& view_id, 189 const ViewId& view_id,
181 TransportChangeId change_id) { 190 TransportChangeId change_id) {
182 Node* node = GetNode(node_id); 191 Node* node = GetNode(node_id);
183 if (!node) 192 if (!node)
184 return false; 193 return false;
185 View* view = GetView(view_id); 194 service::View* view = GetView(view_id);
186 if (!view && view_id != ViewId()) 195 if (!view && view_id != ViewId())
187 return false; 196 return false;
188 RootNodeManager::ScopedChange change( 197 RootNodeManager::ScopedChange change(
189 this, context(), change_id, 198 this, context(), change_id,
190 RootNodeManager::CHANGE_TYPE_DONT_ADVANCE_SERVER_CHANGE_ID); 199 RootNodeManager::CHANGE_TYPE_DONT_ADVANCE_SERVER_CHANGE_ID);
191 node->SetView(view); 200 node->SetView(view);
192 return true; 201 return true;
193 } 202 }
194 203
195 void ViewManagerConnection::CreateNode( 204 void ViewManagerConnection::CreateNode(
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
269 callback.Run(array_builder.Finish()); 278 callback.Run(array_builder.Finish());
270 } 279 }
271 280
272 void ViewManagerConnection::CreateView( 281 void ViewManagerConnection::CreateView(
273 TransportConnectionSpecificViewId view_id, 282 TransportConnectionSpecificViewId view_id,
274 const Callback<void(bool)>& callback) { 283 const Callback<void(bool)>& callback) {
275 if (view_map_.count(view_id)) { 284 if (view_map_.count(view_id)) {
276 callback.Run(false); 285 callback.Run(false);
277 return; 286 return;
278 } 287 }
279 view_map_[view_id] = new View(ViewId(id_, view_id)); 288 view_map_[view_id] = new service::View(ViewId(id_, view_id));
280 callback.Run(true); 289 callback.Run(true);
281 } 290 }
282 291
283 void ViewManagerConnection::DeleteView( 292 void ViewManagerConnection::DeleteView(
284 TransportViewId transport_view_id, 293 TransportViewId transport_view_id,
285 TransportChangeId change_id, 294 TransportChangeId change_id,
286 const Callback<void(bool)>& callback) { 295 const Callback<void(bool)>& callback) {
287 const ViewId view_id(ViewIdFromTransportId(transport_view_id)); 296 const ViewId view_id(ViewIdFromTransportId(transport_view_id));
288 ViewManagerConnection* connection = context()->GetConnection( 297 ViewManagerConnection* connection = context()->GetConnection(
289 view_id.connection_id); 298 view_id.connection_id);
290 callback.Run(connection && 299 callback.Run(connection &&
291 connection->DeleteViewImpl(this, view_id, change_id)); 300 connection->DeleteViewImpl(this, view_id, change_id));
292 } 301 }
293 302
294 void ViewManagerConnection::SetView( 303 void ViewManagerConnection::SetView(
295 TransportNodeId transport_node_id, 304 TransportNodeId transport_node_id,
296 TransportViewId transport_view_id, 305 TransportViewId transport_view_id,
297 TransportChangeId change_id, 306 TransportChangeId change_id,
298 const Callback<void(bool)>& callback) { 307 const Callback<void(bool)>& callback) {
299 const NodeId node_id(NodeIdFromTransportId(transport_node_id)); 308 const NodeId node_id(NodeIdFromTransportId(transport_node_id));
300 callback.Run(SetViewImpl(node_id, ViewIdFromTransportId(transport_view_id), 309 callback.Run(SetViewImpl(node_id, ViewIdFromTransportId(transport_view_id),
301 change_id)); 310 change_id));
302 } 311 }
303 312
304 void ViewManagerConnection::SetViewContents( 313 void ViewManagerConnection::SetViewContents(
305 TransportViewId view_id, 314 TransportViewId view_id,
306 ScopedSharedBufferHandle buffer, 315 ScopedSharedBufferHandle buffer,
307 uint32_t buffer_size) { 316 uint32_t buffer_size) {
308 View* view = GetView(ViewIdFromTransportId(view_id)); 317 service::View* view = GetView(ViewIdFromTransportId(view_id));
309 if (!view) 318 if (!view)
310 return; 319 return;
311 void* handle_data; 320 void* handle_data;
312 if (MapBuffer(buffer.get(), 0, buffer_size, &handle_data, 321 if (MapBuffer(buffer.get(), 0, buffer_size, &handle_data,
313 MOJO_MAP_BUFFER_FLAG_NONE) != MOJO_RESULT_OK) { 322 MOJO_MAP_BUFFER_FLAG_NONE) != MOJO_RESULT_OK) {
314 return; 323 return;
315 } 324 }
316 SkBitmap bitmap; 325 SkBitmap bitmap;
317 gfx::PNGCodec::Decode(static_cast<const unsigned char*>(handle_data), 326 gfx::PNGCodec::Decode(static_cast<const unsigned char*>(handle_data),
318 buffer_size, &bitmap); 327 buffer_size, &bitmap);
319 view->SetBitmap(bitmap); 328 view->SetBitmap(bitmap);
320 UnmapBuffer(handle_data); 329 UnmapBuffer(handle_data);
321 } 330 }
322 331
323 void ViewManagerConnection::OnNodeHierarchyChanged(const NodeId& node, 332 void ViewManagerConnection::OnNodeHierarchyChanged(const NodeId& node,
324 const NodeId& new_parent, 333 const NodeId& new_parent,
325 const NodeId& old_parent) { 334 const NodeId& old_parent) {
326 context()->NotifyNodeHierarchyChanged(node, new_parent, old_parent); 335 context()->NotifyNodeHierarchyChanged(node, new_parent, old_parent);
327 } 336 }
328 337
329 void ViewManagerConnection::OnNodeViewReplaced(const NodeId& node, 338 void ViewManagerConnection::OnNodeViewReplaced(const NodeId& node,
330 const ViewId& new_view_id, 339 const ViewId& new_view_id,
331 const ViewId& old_view_id) { 340 const ViewId& old_view_id) {
332 context()->NotifyNodeViewReplaced(node, new_view_id, old_view_id); 341 context()->NotifyNodeViewReplaced(node, new_view_id, old_view_id);
333 } 342 }
334 343
335 } // namespace view_manager 344 } // namespace view_manager
336 } // namespace services 345 } // namespace services
337 } // namespace mojo 346 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/services/view_manager/view_manager_connection.h ('k') | mojo/services/view_manager/view_manager_connection_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698