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

Side by Side Diff: mojo/services/public/cpp/view_manager/lib/view_manager_synchronizer.cc

Issue 288313002: Tweaks to ViewManager: (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: cleanup 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/public/cpp/view_manager/lib/view_manager_synchronizer.h" 5 #include "mojo/services/public/cpp/view_manager/lib/view_manager_synchronizer.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/run_loop.h" 8 #include "base/run_loop.h"
9 #include "mojo/public/cpp/shell/service.h" 9 #include "mojo/public/cpp/shell/service.h"
10 #include "mojo/public/interfaces/shell/shell.mojom.h" 10 #include "mojo/public/interfaces/shell/shell.mojom.h"
(...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after
299 connected_(false), 299 connected_(false),
300 connection_id_(0), 300 connection_id_(0),
301 next_id_(1), 301 next_id_(1),
302 next_server_change_id_(0), 302 next_server_change_id_(0),
303 sync_factory_(this), 303 sync_factory_(this),
304 init_loop_(NULL) { 304 init_loop_(NULL) {
305 ConnectTo(ViewManagerPrivate(view_manager_).shell(), "mojo:mojo_view_manager", 305 ConnectTo(ViewManagerPrivate(view_manager_).shell(), "mojo:mojo_view_manager",
306 &service_); 306 &service_);
307 service_->SetClient(this); 307 service_->SetClient(this);
308 308
309 AllocationScope scope; 309 // Start a runloop. This loop is quit when the server tells us about the
310 service_->GetNodeTree( 310 // connection (OnConnectionEstablished()).
311 1,
312 base::Bind(&ViewManagerSynchronizer::OnRootTreeReceived,
313 base::Unretained(this)));
314
315 base::RunLoop loop; 311 base::RunLoop loop;
316 init_loop_ = &loop; 312 init_loop_ = &loop;
317 init_loop_->Run(); 313 init_loop_->Run();
318 init_loop_ = NULL; 314 init_loop_ = NULL;
319 } 315 }
320 316
321 ViewManagerSynchronizer::~ViewManagerSynchronizer() { 317 ViewManagerSynchronizer::~ViewManagerSynchronizer() {
322 Sync(); 318 Sync();
323 } 319 }
324 320
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
390 pending_transactions_.push_back( 386 pending_transactions_.push_back(
391 new SetActiveViewTransaction(node_id, view_id, this)); 387 new SetActiveViewTransaction(node_id, view_id, this));
392 Sync(); 388 Sync();
393 } 389 }
394 390
395 //////////////////////////////////////////////////////////////////////////////// 391 ////////////////////////////////////////////////////////////////////////////////
396 // ViewManagerSynchronizer, IViewManagerClient implementation: 392 // ViewManagerSynchronizer, IViewManagerClient implementation:
397 393
398 void ViewManagerSynchronizer::OnConnectionEstablished( 394 void ViewManagerSynchronizer::OnConnectionEstablished(
399 TransportConnectionId connection_id, 395 TransportConnectionId connection_id,
400 TransportChangeId next_server_change_id) { 396 TransportChangeId next_server_change_id,
397 const mojo::Array<INode>& nodes) {
401 connected_ = true; 398 connected_ = true;
402 connection_id_ = connection_id; 399 connection_id_ = connection_id;
403 next_server_change_id_ = next_server_change_id; 400 next_server_change_id_ = next_server_change_id;
401
402 ViewManagerPrivate private_manager(view_manager_);
403 std::vector<ViewTreeNode*> parents;
404 ViewTreeNode* root = NULL;
405 ViewTreeNode* last_node = NULL;
406 for (size_t i = 0; i < nodes.size(); ++i) {
407 if (last_node && nodes[i].parent_id() == last_node->id()) {
408 parents.push_back(last_node);
409 } else if (!parents.empty()) {
410 while (parents.back()->id() != nodes[i].parent_id())
411 parents.pop_back();
412 }
413 ViewTreeNode* node =
414 AddNodeToViewManager(view_manager_,
415 !parents.empty() ? parents.back() : NULL,
416 nodes[i].node_id(),
417 nodes[i].view_id());
418 if (!last_node)
419 root = node;
420 last_node = node;
421 }
422 private_manager.set_root(root);
423 if (init_loop_)
424 init_loop_->Quit();
425
404 Sync(); 426 Sync();
405 } 427 }
406 428
429 void ViewManagerSynchronizer::OnServerChangeIdAdvanced(
430 uint32_t next_server_change_id) {
431 next_server_change_id_ = next_server_change_id;
432 }
433
407 void ViewManagerSynchronizer::OnNodeHierarchyChanged( 434 void ViewManagerSynchronizer::OnNodeHierarchyChanged(
408 uint32_t node_id, 435 uint32_t node_id,
409 uint32_t new_parent_id, 436 uint32_t new_parent_id,
410 uint32_t old_parent_id, 437 uint32_t old_parent_id,
411 TransportChangeId server_change_id) { 438 TransportChangeId server_change_id,
439 const mojo::Array<INode>& nodes) {
440 // TODO: deal with |nodes|.
412 next_server_change_id_ = server_change_id + 1; 441 next_server_change_id_ = server_change_id + 1;
413 442
414 ViewTreeNode* new_parent = 443 ViewTreeNode* new_parent =
415 view_manager_->tree()->GetChildById(new_parent_id); 444 view_manager_->tree()->GetChildById(new_parent_id);
416 ViewTreeNode* old_parent = 445 ViewTreeNode* old_parent =
417 view_manager_->tree()->GetChildById(old_parent_id); 446 view_manager_->tree()->GetChildById(old_parent_id);
418 ViewTreeNode* node = NULL; 447 ViewTreeNode* node = NULL;
419 if (old_parent) { 448 if (old_parent) {
420 // Existing node, mapped in this connection's tree. 449 // Existing node, mapped in this connection's tree.
421 // TODO(beng): verify this is actually true. 450 // TODO(beng): verify this is actually true.
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
486 (*it)->Commit(); 515 (*it)->Commit();
487 } 516 }
488 } 517 }
489 518
490 void ViewManagerSynchronizer::RemoveFromPendingQueue( 519 void ViewManagerSynchronizer::RemoveFromPendingQueue(
491 ViewManagerTransaction* transaction) { 520 ViewManagerTransaction* transaction) {
492 DCHECK_EQ(transaction, pending_transactions_.front()); 521 DCHECK_EQ(transaction, pending_transactions_.front());
493 pending_transactions_.erase(pending_transactions_.begin()); 522 pending_transactions_.erase(pending_transactions_.begin());
494 } 523 }
495 524
496 void ViewManagerSynchronizer::OnRootTreeReceived(
497 const Array<INode>& nodes) {
498 ViewManagerPrivate private_manager(view_manager_);
499 std::vector<ViewTreeNode*> parents;
500 ViewTreeNode* root = NULL;
501 ViewTreeNode* last_node = NULL;
502 for (size_t i = 0; i < nodes.size(); ++i) {
503 if (last_node && nodes[i].parent_id() == last_node->id()) {
504 parents.push_back(last_node);
505 } else if (!parents.empty()) {
506 while (parents.back()->id() != nodes[i].parent_id())
507 parents.pop_back();
508 }
509 ViewTreeNode* node =
510 AddNodeToViewManager(view_manager_,
511 !parents.empty() ? parents.back() : NULL,
512 nodes[i].node_id(),
513 nodes[i].view_id());
514 if (!last_node)
515 root = node;
516 last_node = node;
517 }
518 private_manager.set_root(root);
519 if (init_loop_)
520 init_loop_->Quit();
521 }
522
523 } // namespace view_manager 525 } // namespace view_manager
524 } // namespace mojo 526 } // namespace mojo
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698