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

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

Issue 287003004: Revert 270867 "Mojo: Internalize ServiceConnector<>" (Closed) Base URL: svn://svn.chromium.org/chrome/
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 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
52 52
53 std::vector<Node*> children(node->GetChildren()); 53 std::vector<Node*> children(node->GetChildren());
54 for (size_t i = 0 ; i < children.size(); ++i) { 54 for (size_t i = 0 ; i < children.size(); ++i) {
55 (*index)++; 55 (*index)++;
56 NodeToINode(children[i], array_builder, index); 56 NodeToINode(children[i], array_builder, index);
57 } 57 }
58 } 58 }
59 59
60 } // namespace 60 } // namespace
61 61
62 ViewManagerConnection::ViewManagerConnection(RootNodeManager* root_node_manager) 62 ViewManagerConnection::ViewManagerConnection() : id_(0) {
63 : root_node_manager_(root_node_manager),
64 id_(0) {
65 } 63 }
66 64
67 ViewManagerConnection::~ViewManagerConnection() { 65 ViewManagerConnection::~ViewManagerConnection() {
68 // Delete any views we own. 66 // Delete any views we own.
69 while (!view_map_.empty()) { 67 while (!view_map_.empty()) {
70 bool result = DeleteViewImpl(this, view_map_.begin()->second->id()); 68 bool result = DeleteViewImpl(this, view_map_.begin()->second->id());
71 DCHECK(result); 69 DCHECK(result);
72 } 70 }
73 71
74 // We're about to destroy all our nodes. Detach any views from them. 72 // We're about to destroy all our nodes. Detach any views from them.
75 for (NodeMap::iterator i = node_map_.begin(); i != node_map_.end(); ++i) { 73 for (NodeMap::iterator i = node_map_.begin(); i != node_map_.end(); ++i) {
76 if (i->second->view()) { 74 if (i->second->view()) {
77 bool result = SetViewImpl(i->second->id(), ViewId()); 75 bool result = SetViewImpl(i->second->id(), ViewId());
78 DCHECK(result); 76 DCHECK(result);
79 } 77 }
80 } 78 }
81 79
82 STLDeleteContainerPairSecondPointers(node_map_.begin(), node_map_.end()); 80 STLDeleteContainerPairSecondPointers(node_map_.begin(), node_map_.end());
83 root_node_manager_->RemoveConnection(this); 81 context()->RemoveConnection(this);
84 } 82 }
85 83
86 void ViewManagerConnection::OnConnectionEstablished() { 84 void ViewManagerConnection::Initialize() {
87 DCHECK_EQ(0, id_); // Should only get SetClient() once. 85 DCHECK_EQ(0, id_); // Should only get Initialize() once.
88 id_ = root_node_manager_->GetAndAdvanceNextConnectionId(); 86 id_ = context()->GetAndAdvanceNextConnectionId();
89 root_node_manager_->AddConnection(this); 87 context()->AddConnection(this);
90 client()->OnConnectionEstablished( 88 client()->OnConnectionEstablished(id_, context()->next_server_change_id());
91 id_, root_node_manager_->next_server_change_id());
92 } 89 }
93 90
94 void ViewManagerConnection::OnConnectionError() {}
95
96 Node* ViewManagerConnection::GetNode(const NodeId& id) { 91 Node* ViewManagerConnection::GetNode(const NodeId& id) {
97 if (id_ == id.connection_id) { 92 if (id_ == id.connection_id) {
98 NodeMap::iterator i = node_map_.find(id.node_id); 93 NodeMap::iterator i = node_map_.find(id.node_id);
99 return i == node_map_.end() ? NULL : i->second; 94 return i == node_map_.end() ? NULL : i->second;
100 } 95 }
101 return root_node_manager_->GetNode(id); 96 return context()->GetNode(id);
102 } 97 }
103 98
104 View* ViewManagerConnection::GetView(const ViewId& id) { 99 View* ViewManagerConnection::GetView(const ViewId& id) {
105 if (id_ == id.connection_id) { 100 if (id_ == id.connection_id) {
106 ViewMap::const_iterator i = view_map_.find(id.view_id); 101 ViewMap::const_iterator i = view_map_.find(id.view_id);
107 return i == view_map_.end() ? NULL : i->second; 102 return i == view_map_.end() ? NULL : i->second;
108 } 103 }
109 return root_node_manager_->GetView(id); 104 return context()->GetView(id);
110 } 105 }
111 106
112 void ViewManagerConnection::NotifyNodeHierarchyChanged( 107 void ViewManagerConnection::NotifyNodeHierarchyChanged(
113 const NodeId& node, 108 const NodeId& node,
114 const NodeId& new_parent, 109 const NodeId& new_parent,
115 const NodeId& old_parent, 110 const NodeId& old_parent,
116 TransportChangeId server_change_id) { 111 TransportChangeId server_change_id) {
117 client()->OnNodeHierarchyChanged(NodeIdToTransportId(node), 112 client()->OnNodeHierarchyChanged(NodeIdToTransportId(node),
118 NodeIdToTransportId(new_parent), 113 NodeIdToTransportId(new_parent),
119 NodeIdToTransportId(old_parent), 114 NodeIdToTransportId(old_parent),
(...skipping 19 matching lines...) Expand all
139 client()->OnViewDeleted(ViewIdToTransportId(view)); 134 client()->OnViewDeleted(ViewIdToTransportId(view));
140 } 135 }
141 136
142 bool ViewManagerConnection::DeleteNodeImpl(ViewManagerConnection* source, 137 bool ViewManagerConnection::DeleteNodeImpl(ViewManagerConnection* source,
143 const NodeId& node_id) { 138 const NodeId& node_id) {
144 DCHECK_EQ(node_id.connection_id, id_); 139 DCHECK_EQ(node_id.connection_id, id_);
145 Node* node = GetNode(node_id); 140 Node* node = GetNode(node_id);
146 if (!node) 141 if (!node)
147 return false; 142 return false;
148 RootNodeManager::ScopedChange change( 143 RootNodeManager::ScopedChange change(
149 source, root_node_manager_, 144 source, context(), RootNodeManager::CHANGE_TYPE_ADVANCE_SERVER_CHANGE_ID);
150 RootNodeManager::CHANGE_TYPE_ADVANCE_SERVER_CHANGE_ID);
151 if (node->GetParent()) 145 if (node->GetParent())
152 node->GetParent()->Remove(node); 146 node->GetParent()->Remove(node);
153 std::vector<Node*> children(node->GetChildren()); 147 std::vector<Node*> children(node->GetChildren());
154 for (size_t i = 0; i < children.size(); ++i) 148 for (size_t i = 0; i < children.size(); ++i)
155 node->Remove(children[i]); 149 node->Remove(children[i]);
156 DCHECK(node->GetChildren().empty()); 150 DCHECK(node->GetChildren().empty());
157 node_map_.erase(node_id.node_id); 151 node_map_.erase(node_id.node_id);
158 delete node; 152 delete node;
159 node = NULL; 153 node = NULL;
160 root_node_manager_->NotifyNodeDeleted(node_id); 154 context()->NotifyNodeDeleted(node_id);
161 return true; 155 return true;
162 } 156 }
163 157
164 bool ViewManagerConnection::DeleteViewImpl(ViewManagerConnection* source, 158 bool ViewManagerConnection::DeleteViewImpl(ViewManagerConnection* source,
165 const ViewId& view_id) { 159 const ViewId& view_id) {
166 DCHECK_EQ(view_id.connection_id, id_); 160 DCHECK_EQ(view_id.connection_id, id_);
167 View* view = GetView(view_id); 161 View* view = GetView(view_id);
168 if (!view) 162 if (!view)
169 return false; 163 return false;
170 RootNodeManager::ScopedChange change( 164 RootNodeManager::ScopedChange change(
171 source, root_node_manager_, 165 source, context(),
172 RootNodeManager::CHANGE_TYPE_DONT_ADVANCE_SERVER_CHANGE_ID); 166 RootNodeManager::CHANGE_TYPE_DONT_ADVANCE_SERVER_CHANGE_ID);
173 if (view->node()) 167 if (view->node())
174 view->node()->SetView(NULL); 168 view->node()->SetView(NULL);
175 view_map_.erase(view_id.view_id); 169 view_map_.erase(view_id.view_id);
176 // Make a copy of |view_id| as once we delete view |view_id| may no longer be 170 // Make a copy of |view_id| as once we delete view |view_id| may no longer be
177 // valid. 171 // valid.
178 const ViewId view_id_copy(view_id); 172 const ViewId view_id_copy(view_id);
179 delete view; 173 delete view;
180 root_node_manager_->NotifyViewDeleted(view_id_copy); 174 context()->NotifyViewDeleted(view_id_copy);
181 return true; 175 return true;
182 } 176 }
183 177
184 bool ViewManagerConnection::SetViewImpl(const NodeId& node_id, 178 bool ViewManagerConnection::SetViewImpl(const NodeId& node_id,
185 const ViewId& view_id) { 179 const ViewId& view_id) {
186 Node* node = GetNode(node_id); 180 Node* node = GetNode(node_id);
187 if (!node) 181 if (!node)
188 return false; 182 return false;
189 View* view = GetView(view_id); 183 View* view = GetView(view_id);
190 if (!view && view_id != ViewId()) 184 if (!view && view_id != ViewId())
191 return false; 185 return false;
192 RootNodeManager::ScopedChange change( 186 RootNodeManager::ScopedChange change(
193 this, root_node_manager_, 187 this, context(),
194 RootNodeManager::CHANGE_TYPE_DONT_ADVANCE_SERVER_CHANGE_ID); 188 RootNodeManager::CHANGE_TYPE_DONT_ADVANCE_SERVER_CHANGE_ID);
195 node->SetView(view); 189 node->SetView(view);
196 return true; 190 return true;
197 } 191 }
198 192
199 void ViewManagerConnection::CreateNode( 193 void ViewManagerConnection::CreateNode(
200 TransportNodeId transport_node_id, 194 TransportNodeId transport_node_id,
201 const Callback<void(bool)>& callback) { 195 const Callback<void(bool)>& callback) {
202 const NodeId node_id(NodeIdFromTransportId(transport_node_id)); 196 const NodeId node_id(NodeIdFromTransportId(transport_node_id));
203 if (node_id.connection_id != id_ || 197 if (node_id.connection_id != id_ ||
204 node_map_.find(node_id.node_id) != node_map_.end()) { 198 node_map_.find(node_id.node_id) != node_map_.end()) {
205 callback.Run(false); 199 callback.Run(false);
206 return; 200 return;
207 } 201 }
208 node_map_[node_id.node_id] = new Node(this, node_id); 202 node_map_[node_id.node_id] = new Node(this, node_id);
209 callback.Run(true); 203 callback.Run(true);
210 } 204 }
211 205
212 void ViewManagerConnection::DeleteNode( 206 void ViewManagerConnection::DeleteNode(
213 TransportNodeId transport_node_id, 207 TransportNodeId transport_node_id,
214 const Callback<void(bool)>& callback) { 208 const Callback<void(bool)>& callback) {
215 const NodeId node_id(NodeIdFromTransportId(transport_node_id)); 209 const NodeId node_id(NodeIdFromTransportId(transport_node_id));
216 ViewManagerConnection* connection = root_node_manager_->GetConnection( 210 ViewManagerConnection* connection = context()->GetConnection(
217 node_id.connection_id); 211 node_id.connection_id);
218 callback.Run(connection && 212 callback.Run(connection &&
219 connection->DeleteNodeImpl(this, node_id)); 213 connection->DeleteNodeImpl(this, node_id));
220 } 214 }
221 215
222 void ViewManagerConnection::AddNode( 216 void ViewManagerConnection::AddNode(
223 TransportNodeId parent_id, 217 TransportNodeId parent_id,
224 TransportNodeId child_id, 218 TransportNodeId child_id,
225 TransportChangeId server_change_id, 219 TransportChangeId server_change_id,
226 const Callback<void(bool)>& callback) { 220 const Callback<void(bool)>& callback) {
227 bool success = false; 221 bool success = false;
228 if (server_change_id == root_node_manager_->next_server_change_id()) { 222 if (server_change_id == context()->next_server_change_id()) {
229 Node* parent = GetNode(NodeIdFromTransportId(parent_id)); 223 Node* parent = GetNode(NodeIdFromTransportId(parent_id));
230 Node* child = GetNode(NodeIdFromTransportId(child_id)); 224 Node* child = GetNode(NodeIdFromTransportId(child_id));
231 if (parent && child && child->GetParent() != parent && 225 if (parent && child && child->GetParent() != parent &&
232 !child->window()->Contains(parent->window())) { 226 !child->window()->Contains(parent->window())) {
233 success = true; 227 success = true;
234 RootNodeManager::ScopedChange change( 228 RootNodeManager::ScopedChange change(
235 this, root_node_manager_, 229 this, context(),
236 RootNodeManager::CHANGE_TYPE_ADVANCE_SERVER_CHANGE_ID); 230 RootNodeManager::CHANGE_TYPE_ADVANCE_SERVER_CHANGE_ID);
237 parent->Add(child); 231 parent->Add(child);
238 } 232 }
239 } 233 }
240 callback.Run(success); 234 callback.Run(success);
241 } 235 }
242 236
243 void ViewManagerConnection::RemoveNodeFromParent( 237 void ViewManagerConnection::RemoveNodeFromParent(
244 TransportNodeId node_id, 238 TransportNodeId node_id,
245 TransportChangeId server_change_id, 239 TransportChangeId server_change_id,
246 const Callback<void(bool)>& callback) { 240 const Callback<void(bool)>& callback) {
247 bool success = false; 241 bool success = false;
248 if (server_change_id == root_node_manager_->next_server_change_id()) { 242 if (server_change_id == context()->next_server_change_id()) {
249 Node* node = GetNode(NodeIdFromTransportId(node_id)); 243 Node* node = GetNode(NodeIdFromTransportId(node_id));
250 if (node && node->GetParent()) { 244 if (node && node->GetParent()) {
251 success = true; 245 success = true;
252 RootNodeManager::ScopedChange change( 246 RootNodeManager::ScopedChange change(
253 this, root_node_manager_, 247 this, context(),
254 RootNodeManager::CHANGE_TYPE_ADVANCE_SERVER_CHANGE_ID); 248 RootNodeManager::CHANGE_TYPE_ADVANCE_SERVER_CHANGE_ID);
255 node->GetParent()->Remove(node); 249 node->GetParent()->Remove(node);
256 } 250 }
257 } 251 }
258 callback.Run(success); 252 callback.Run(success);
259 } 253 }
260 254
261 void ViewManagerConnection::GetNodeTree( 255 void ViewManagerConnection::GetNodeTree(
262 TransportNodeId node_id, 256 TransportNodeId node_id,
263 const Callback<void(Array<INode>)>& callback) { 257 const Callback<void(Array<INode>)>& callback) {
(...skipping 16 matching lines...) Expand all
280 return; 274 return;
281 } 275 }
282 view_map_[view_id.view_id] = new View(view_id); 276 view_map_[view_id.view_id] = new View(view_id);
283 callback.Run(true); 277 callback.Run(true);
284 } 278 }
285 279
286 void ViewManagerConnection::DeleteView( 280 void ViewManagerConnection::DeleteView(
287 TransportViewId transport_view_id, 281 TransportViewId transport_view_id,
288 const Callback<void(bool)>& callback) { 282 const Callback<void(bool)>& callback) {
289 const ViewId view_id(ViewIdFromTransportId(transport_view_id)); 283 const ViewId view_id(ViewIdFromTransportId(transport_view_id));
290 ViewManagerConnection* connection = root_node_manager_->GetConnection( 284 ViewManagerConnection* connection = context()->GetConnection(
291 view_id.connection_id); 285 view_id.connection_id);
292 callback.Run(connection && connection->DeleteViewImpl(this, view_id)); 286 callback.Run(connection && connection->DeleteViewImpl(this, view_id));
293 } 287 }
294 288
295 void ViewManagerConnection::SetView( 289 void ViewManagerConnection::SetView(
296 TransportNodeId transport_node_id, 290 TransportNodeId transport_node_id,
297 TransportViewId transport_view_id, 291 TransportViewId transport_view_id,
298 const Callback<void(bool)>& callback) { 292 const Callback<void(bool)>& callback) {
299 const NodeId node_id(NodeIdFromTransportId(transport_node_id)); 293 const NodeId node_id(NodeIdFromTransportId(transport_node_id));
300 callback.Run(SetViewImpl(node_id, ViewIdFromTransportId(transport_view_id))); 294 callback.Run(SetViewImpl(node_id, ViewIdFromTransportId(transport_view_id)));
(...skipping 14 matching lines...) Expand all
315 SkBitmap bitmap; 309 SkBitmap bitmap;
316 gfx::PNGCodec::Decode(static_cast<const unsigned char*>(handle_data), 310 gfx::PNGCodec::Decode(static_cast<const unsigned char*>(handle_data),
317 buffer_size, &bitmap); 311 buffer_size, &bitmap);
318 view->SetBitmap(bitmap); 312 view->SetBitmap(bitmap);
319 UnmapBuffer(handle_data); 313 UnmapBuffer(handle_data);
320 } 314 }
321 315
322 void ViewManagerConnection::OnNodeHierarchyChanged(const NodeId& node, 316 void ViewManagerConnection::OnNodeHierarchyChanged(const NodeId& node,
323 const NodeId& new_parent, 317 const NodeId& new_parent,
324 const NodeId& old_parent) { 318 const NodeId& old_parent) {
325 root_node_manager_->NotifyNodeHierarchyChanged(node, new_parent, old_parent); 319 context()->NotifyNodeHierarchyChanged(node, new_parent, old_parent);
326 } 320 }
327 321
328 void ViewManagerConnection::OnNodeViewReplaced(const NodeId& node, 322 void ViewManagerConnection::OnNodeViewReplaced(const NodeId& node,
329 const ViewId& new_view_id, 323 const ViewId& new_view_id,
330 const ViewId& old_view_id) { 324 const ViewId& old_view_id) {
331 root_node_manager_->NotifyNodeViewReplaced(node, new_view_id, old_view_id); 325 context()->NotifyNodeViewReplaced(node, new_view_id, old_view_id);
332 } 326 }
333 327
334 } // namespace service 328 } // namespace service
335 } // namespace view_manager 329 } // namespace view_manager
336 } // namespace mojo 330 } // namespace mojo
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698