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

Unified 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: fix 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 side-by-side diff with in-line comments
Download patch
Index: mojo/services/public/cpp/view_manager/lib/view_manager_synchronizer.cc
diff --git a/mojo/services/public/cpp/view_manager/lib/view_manager_synchronizer.cc b/mojo/services/public/cpp/view_manager/lib/view_manager_synchronizer.cc
index 434fa28fce76656e8992d2c2ef3d9f4375d45477..0d2642f910064009be154119d4a619286cd8e2bd 100644
--- a/mojo/services/public/cpp/view_manager/lib/view_manager_synchronizer.cc
+++ b/mojo/services/public/cpp/view_manager/lib/view_manager_synchronizer.cc
@@ -306,12 +306,8 @@ ViewManagerSynchronizer::ViewManagerSynchronizer(ViewManager* view_manager)
&service_);
service_->SetClient(this);
- AllocationScope scope;
- service_->GetNodeTree(
- 1,
- base::Bind(&ViewManagerSynchronizer::OnRootTreeReceived,
- base::Unretained(this)));
-
+ // Start a runloop. This loop is quit when the server tells us about the
+ // connection (OnConnectionEstablished()).
base::RunLoop loop;
init_loop_ = &loop;
init_loop_->Run();
@@ -397,18 +393,51 @@ void ViewManagerSynchronizer::SetActiveView(TransportNodeId node_id,
void ViewManagerSynchronizer::OnConnectionEstablished(
TransportConnectionId connection_id,
- TransportChangeId next_server_change_id) {
+ TransportChangeId next_server_change_id,
+ const mojo::Array<INode>& nodes) {
connected_ = true;
connection_id_ = connection_id;
next_server_change_id_ = next_server_change_id;
+
+ ViewManagerPrivate private_manager(view_manager_);
+ std::vector<ViewTreeNode*> parents;
+ ViewTreeNode* root = NULL;
+ ViewTreeNode* last_node = NULL;
+ for (size_t i = 0; i < nodes.size(); ++i) {
+ if (last_node && nodes[i].parent_id() == last_node->id()) {
+ parents.push_back(last_node);
+ } else if (!parents.empty()) {
+ while (parents.back()->id() != nodes[i].parent_id())
+ parents.pop_back();
+ }
+ ViewTreeNode* node =
+ AddNodeToViewManager(view_manager_,
+ !parents.empty() ? parents.back() : NULL,
+ nodes[i].node_id(),
+ nodes[i].view_id());
+ if (!last_node)
+ root = node;
+ last_node = node;
+ }
+ private_manager.set_root(root);
+ if (init_loop_)
+ init_loop_->Quit();
+
Sync();
}
+void ViewManagerSynchronizer::OnServerChangeIdAdvanced(
+ uint32_t next_server_change_id) {
+ next_server_change_id_ = next_server_change_id;
+}
+
void ViewManagerSynchronizer::OnNodeHierarchyChanged(
uint32_t node_id,
uint32_t new_parent_id,
uint32_t old_parent_id,
- TransportChangeId server_change_id) {
+ TransportChangeId server_change_id,
+ const mojo::Array<INode>& nodes) {
+ // TODO: deal with |nodes|.
next_server_change_id_ = server_change_id + 1;
ViewTreeNode* new_parent =
@@ -493,32 +522,5 @@ void ViewManagerSynchronizer::RemoveFromPendingQueue(
pending_transactions_.erase(pending_transactions_.begin());
}
-void ViewManagerSynchronizer::OnRootTreeReceived(
- const Array<INode>& nodes) {
- ViewManagerPrivate private_manager(view_manager_);
- std::vector<ViewTreeNode*> parents;
- ViewTreeNode* root = NULL;
- ViewTreeNode* last_node = NULL;
- for (size_t i = 0; i < nodes.size(); ++i) {
- if (last_node && nodes[i].parent_id() == last_node->id()) {
- parents.push_back(last_node);
- } else if (!parents.empty()) {
- while (parents.back()->id() != nodes[i].parent_id())
- parents.pop_back();
- }
- ViewTreeNode* node =
- AddNodeToViewManager(view_manager_,
- !parents.empty() ? parents.back() : NULL,
- nodes[i].node_id(),
- nodes[i].view_id());
- if (!last_node)
- root = node;
- last_node = node;
- }
- private_manager.set_root(root);
- if (init_loop_)
- init_loop_->Quit();
-}
-
} // namespace view_manager
} // namespace mojo

Powered by Google App Engine
This is Rietveld 408576698