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

Unified Diff: mojo/services/view_manager/view_manager_service_impl.cc

Issue 396703002: Makes Embed() take a single node (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: cleanup Created 6 years, 5 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/view_manager/view_manager_service_impl.cc
diff --git a/mojo/services/view_manager/view_manager_service_impl.cc b/mojo/services/view_manager/view_manager_service_impl.cc
index a4390262197533f4a17916edb60965b3ae0fcb03..8823691f2dc23e3fc4a05c5e56a0a0319612dc45 100644
--- a/mojo/services/view_manager/view_manager_service_impl.cc
+++ b/mojo/services/view_manager/view_manager_service_impl.cc
@@ -37,13 +37,18 @@ ViewManagerServiceImpl::ViewManagerServiceImpl(
RootNodeManager* root_node_manager,
ConnectionSpecificId creator_id,
const std::string& creator_url,
- const std::string& url)
+ const std::string& url,
+ const NodeId& root_id)
: root_node_manager_(root_node_manager),
id_(root_node_manager_->GetAndAdvanceNextConnectionId()),
url_(url),
creator_id_(creator_id),
creator_url_(creator_url),
delete_on_connection_error_(false) {
+ if (root_id != InvalidNodeId()) {
+ CHECK(GetNode(root_id));
+ roots_.insert(NodeIdToTransportId(root_id));
+ }
}
ViewManagerServiceImpl::~ViewManagerServiceImpl() {
@@ -81,16 +86,6 @@ const View* ViewManagerServiceImpl::GetView(const ViewId& id) const {
return root_node_manager_->GetView(id);
}
-void ViewManagerServiceImpl::SetRoots(const Array<Id>& node_ids) {
- DCHECK(roots_.empty());
- NodeIdSet roots;
- for (size_t i = 0; i < node_ids.size(); ++i) {
- DCHECK(GetNode(NodeIdFromTransportId(node_ids[i])));
- roots.insert(node_ids[i]);
- }
- roots_.swap(roots);
-}
-
void ViewManagerServiceImpl::OnViewManagerServiceImplDestroyed(
ConnectionSpecificId id) {
if (creator_id_ == id)
@@ -343,14 +338,9 @@ bool ViewManagerServiceImpl::CanGetNodeTree(const Node* node) const {
(IsNodeDescendantOfRoots(node) || node->id().connection_id == id_);
}
-bool ViewManagerServiceImpl::CanEmbed(
- const mojo::Array<uint32_t>& node_ids) const {
- for (size_t i = 0; i < node_ids.size(); ++i) {
- const Node* node = GetNode(NodeIdFromTransportId(node_ids[i]));
- if (!node || node->id().connection_id != id_)
- return false;
- }
- return node_ids.size() > 0;
+bool ViewManagerServiceImpl::CanEmbed(Id transport_node_id) const {
+ const Node* node = GetNode(NodeIdFromTransportId(transport_node_id));
+ return node && node->id().connection_id == id_;
}
bool ViewManagerServiceImpl::CanSetNodeVisibility(const Node* node,
@@ -426,32 +416,25 @@ void ViewManagerServiceImpl::RemoveFromKnown(const Node* node) {
RemoveFromKnown(children[i]);
}
-bool ViewManagerServiceImpl::AddRoots(
- const std::vector<Id>& node_ids) {
- std::vector<const Node*> to_send;
- bool did_add_root = false;
- for (size_t i = 0; i < node_ids.size(); ++i) {
- CHECK_EQ(creator_id_, NodeIdFromTransportId(node_ids[i]).connection_id);
- if (roots_.count(node_ids[i]) > 0)
- continue;
+bool ViewManagerServiceImpl::AddRoot(Id transport_node_id) {
+ if (roots_.count(transport_node_id) > 0)
+ return false;
- did_add_root = true;
- roots_.insert(node_ids[i]);
- Node* node = GetNode(NodeIdFromTransportId(node_ids[i]));
- DCHECK(node);
- if (known_nodes_.count(node_ids[i]) == 0) {
- GetUnknownNodesFrom(node, &to_send);
- } else {
- // Even though the connection knows about the new root we need to tell it
- // |node| is now a root.
- to_send.push_back(node);
- }
+ std::vector<const Node*> to_send;
+ const NodeId node_id(NodeIdFromTransportId(transport_node_id));
+ CHECK_EQ(creator_id_, node_id.connection_id);
+ roots_.insert(transport_node_id);
+ Node* node = GetNode(node_id);
+ CHECK(node);
+ if (known_nodes_.count(transport_node_id) == 0) {
+ GetUnknownNodesFrom(node, &to_send);
+ } else {
+ // Even though the connection knows about the new root we need to tell it
+ // |node| is now a root.
+ to_send.push_back(node);
}
- if (!did_add_root)
- return false;
-
- client()->OnRootsAdded(NodesToNodeDatas(to_send));
+ client()->OnRootAdded(NodesToNodeDatas(to_send));
return true;
}
@@ -750,17 +733,17 @@ void ViewManagerServiceImpl::SetNodeVisibility(
}
void ViewManagerServiceImpl::Embed(const String& url,
- Array<uint32_t> node_ids,
+ Id transport_node_id,
const Callback<void(bool)>& callback) {
- bool success = CanEmbed(node_ids);
+ bool success = CanEmbed(transport_node_id);
if (success) {
// We may already have this connection, if so reuse it.
ViewManagerServiceImpl* existing_connection =
root_node_manager_->GetConnectionByCreator(id_, url.To<std::string>());
if (existing_connection)
- success = existing_connection->AddRoots(node_ids.storage());
+ success = existing_connection->AddRoot(transport_node_id);
else
- root_node_manager_->Embed(id_, url, node_ids);
+ root_node_manager_->Embed(id_, url, transport_node_id);
}
callback.Run(success);
}
« no previous file with comments | « mojo/services/view_manager/view_manager_service_impl.h ('k') | mojo/services/view_manager/view_manager_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698