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

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

Issue 277563006: Introduces another change id to hierarchy mutations (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: merge 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/view_manager/view_manager_connection.cc
diff --git a/mojo/services/view_manager/view_manager_connection.cc b/mojo/services/view_manager/view_manager_connection.cc
index 6b92323e6335da7b5a5f067db7ae75fc8354e83b..6ea756fbc4a75cd6a7f69c58d9c3719d4722b761 100644
--- a/mojo/services/view_manager/view_manager_connection.cc
+++ b/mojo/services/view_manager/view_manager_connection.cc
@@ -10,6 +10,7 @@
#include "mojo/services/view_manager/root_node_manager.h"
#include "mojo/services/view_manager/view.h"
#include "third_party/skia/include/core/SkBitmap.h"
+#include "ui/aura/window.h"
#include "ui/gfx/codec/png_codec.h"
namespace mojo {
@@ -84,7 +85,7 @@ void ViewManagerConnection::Initialize() {
DCHECK_EQ(0, id_); // Should only get Initialize() once.
id_ = context()->GetAndAdvanceNextConnectionId();
context()->AddConnection(this);
- client_->OnConnectionEstablished(id_);
+ client_->OnConnectionEstablished(id_, context()->next_server_change_id());
}
Node* ViewManagerConnection::GetNode(const NodeId& id) {
@@ -107,27 +108,32 @@ void ViewManagerConnection::NotifyNodeHierarchyChanged(
const NodeId& node,
const NodeId& new_parent,
const NodeId& old_parent,
- TransportChangeId change_id) {
+ TransportChangeId server_change_id,
+ TransportChangeId client_change_id) {
client_->OnNodeHierarchyChanged(NodeIdToTransportId(node),
- NodeIdToTransportId(new_parent),
- NodeIdToTransportId(old_parent),
- change_id);
+ NodeIdToTransportId(new_parent),
+ NodeIdToTransportId(old_parent),
+ server_change_id,
+ client_change_id);
}
void ViewManagerConnection::NotifyNodeViewReplaced(
const NodeId& node,
const ViewId& new_view_id,
const ViewId& old_view_id,
- TransportChangeId change_id) {
+ TransportChangeId client_change_id) {
client_->OnNodeViewReplaced(NodeIdToTransportId(node),
- ViewIdToTransportId(new_view_id),
- ViewIdToTransportId(old_view_id),
- change_id);
+ ViewIdToTransportId(new_view_id),
+ ViewIdToTransportId(old_view_id),
+ client_change_id);
}
-void ViewManagerConnection::NotifyNodeDeleted(const NodeId& node,
- TransportChangeId change_id) {
- client_->OnNodeDeleted(NodeIdToTransportId(node), change_id);
+void ViewManagerConnection::NotifyNodeDeleted(
+ const NodeId& node,
+ TransportChangeId server_change_id,
+ TransportChangeId client_change_id) {
+ client_->OnNodeDeleted(NodeIdToTransportId(node), server_change_id,
+ client_change_id);
}
bool ViewManagerConnection::DeleteNodeImpl(ViewManagerConnection* source,
@@ -137,7 +143,9 @@ bool ViewManagerConnection::DeleteNodeImpl(ViewManagerConnection* source,
Node* node = GetNode(node_id);
if (!node)
return false;
- RootNodeManager::ScopedChange change(source, context(), change_id);
+ RootNodeManager::ScopedChange change(
+ source, context(), change_id,
+ RootNodeManager::CHANGE_TYPE_ADVANCE_SERVER_CHANGE_ID);
if (node->GetParent())
node->GetParent()->Remove(node);
std::vector<Node*> children(node->GetChildren());
@@ -146,6 +154,7 @@ bool ViewManagerConnection::DeleteNodeImpl(ViewManagerConnection* source,
DCHECK(node->GetChildren().empty());
node_map_.erase(node_id.node_id);
delete node;
+ node = NULL;
context()->NotifyNodeDeleted(node_id);
return true;
}
@@ -157,7 +166,9 @@ bool ViewManagerConnection::DeleteViewImpl(ViewManagerConnection* source,
View* view = GetView(view_id);
if (!view)
return false;
- RootNodeManager::ScopedChange change(source, context(), change_id);
+ RootNodeManager::ScopedChange change(
+ source, context(), change_id,
+ RootNodeManager::CHANGE_TYPE_DONT_ADVANCE_SERVER_CHANGE_ID);
if (view->node())
view->node()->SetView(NULL);
view_map_.erase(view_id.view_id);
@@ -174,7 +185,9 @@ bool ViewManagerConnection::SetViewImpl(const NodeId& node_id,
View* view = GetView(view_id);
if (!view && view_id != ViewId())
return false;
- RootNodeManager::ScopedChange change(this, context(), change_id);
+ RootNodeManager::ScopedChange change(
+ this, context(), change_id,
+ RootNodeManager::CHANGE_TYPE_DONT_ADVANCE_SERVER_CHANGE_ID);
node->SetView(view);
return true;
}
@@ -209,27 +222,40 @@ void ViewManagerConnection::DeleteNode(
void ViewManagerConnection::AddNode(
TransportNodeId parent_id,
TransportNodeId child_id,
- TransportChangeId change_id,
+ TransportChangeId server_change_id,
+ TransportChangeId client_change_id,
const Callback<void(bool)>& callback) {
- Node* parent = GetNode(NodeIdFromTransportId(parent_id));
- Node* child = GetNode(NodeIdFromTransportId(child_id));
- const bool success = parent && child && parent != child;
- if (success) {
- RootNodeManager::ScopedChange change(this, context(), change_id);
- parent->Add(child);
+ bool success = false;
+ if (server_change_id == context()->next_server_change_id()) {
+ Node* parent = GetNode(NodeIdFromTransportId(parent_id));
+ Node* child = GetNode(NodeIdFromTransportId(child_id));
+ if (parent && child && child->GetParent() != parent &&
+ !child->window()->Contains(parent->window())) {
+ success = true;
+ RootNodeManager::ScopedChange change(
+ this, context(), client_change_id,
+ RootNodeManager::CHANGE_TYPE_ADVANCE_SERVER_CHANGE_ID);
+ parent->Add(child);
+ }
}
callback.Run(success);
}
void ViewManagerConnection::RemoveNodeFromParent(
TransportNodeId node_id,
- TransportChangeId change_id,
+ TransportChangeId server_change_id,
+ TransportChangeId client_change_id,
const Callback<void(bool)>& callback) {
- Node* node = GetNode(NodeIdFromTransportId(node_id));
- const bool success = (node && node->GetParent());
- if (success) {
- RootNodeManager::ScopedChange change(this, context(), change_id);
- node->GetParent()->Remove(node);
+ bool success = false;
+ if (server_change_id == context()->next_server_change_id()) {
+ Node* node = GetNode(NodeIdFromTransportId(node_id));
+ if (node && node->GetParent()) {
+ success = true;
+ RootNodeManager::ScopedChange change(
+ this, context(), client_change_id,
+ RootNodeManager::CHANGE_TYPE_ADVANCE_SERVER_CHANGE_ID);
+ node->GetParent()->Remove(node);
+ }
}
callback.Run(success);
}
« 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