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

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

Issue 307003004: Fixes bug where IViewManagerClient could be messaged unnecessarily (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 side-by-side diff with in-line comments
Download patch
Index: mojo/services/view_manager/root_node_manager.cc
diff --git a/mojo/services/view_manager/root_node_manager.cc b/mojo/services/view_manager/root_node_manager.cc
index b88e1a3108c058a7adf6e7e9a99d2ad9e8edc9bd..1f49b2578d8a7627f16cbbc691ab55e90de2b3d4 100644
--- a/mojo/services/view_manager/root_node_manager.cc
+++ b/mojo/services/view_manager/root_node_manager.cc
@@ -19,12 +19,14 @@ RootNodeManager::ScopedChange::ScopedChange(
RootNodeManager::ChangeType change_type,
bool is_delete_node)
: root_(root),
- change_type_(change_type) {
- root_->PrepareForChange(connection, is_delete_node);
+ connection_id_(connection->id()),
+ change_type_(change_type),
+ is_delete_node_(is_delete_node) {
+ root_->PrepareForChange(this);
}
RootNodeManager::ScopedChange::~ScopedChange() {
- root_->FinishChange(change_type_);
+ root_->FinishChange();
}
RootNodeManager::Context::Context() {
@@ -41,10 +43,9 @@ RootNodeManager::RootNodeManager(ServiceProvider* service_provider,
: service_provider_(service_provider),
next_connection_id_(1),
next_server_change_id_(1),
- change_source_(kRootConnection),
- is_processing_delete_node_(false),
root_view_manager_(service_provider, this, view_manager_delegate),
- root_(this, RootNodeId()) {
+ root_(this, RootNodeId()),
+ current_change_(NULL) {
}
RootNodeManager::~RootNodeManager() {
@@ -100,6 +101,16 @@ View* RootNodeManager::GetView(const ViewId& id) {
return i == connection_map_.end() ? NULL : i->second->GetView(id);
}
+void RootNodeManager::OnConnectionMessagedClient(TransportConnectionId id) {
+ if (current_change_)
+ current_change_->MarkConnectionAsMessaged(id);
+}
+
+bool RootNodeManager::DidConnectionMessageClient(
+ TransportConnectionId id) const {
+ return current_change_ && current_change_->DidMessageConnection(id);
+}
+
void RootNodeManager::ProcessNodeBoundsChanged(const Node* node,
const gfx::Rect& old_bounds,
const gfx::Rect& new_bounds) {
@@ -146,21 +157,18 @@ void RootNodeManager::ProcessViewDeleted(const ViewId& view) {
}
}
-void RootNodeManager::PrepareForChange(ViewManagerConnection* connection,
- bool is_delete_node) {
+void RootNodeManager::PrepareForChange(ScopedChange* change) {
// Should only ever have one change in flight.
- DCHECK_EQ(kRootConnection, change_source_);
- change_source_ = connection->id();
- is_processing_delete_node_ = is_delete_node;
+ CHECK(!current_change_);
+ current_change_ = change;
}
-void RootNodeManager::FinishChange(ChangeType change_type) {
+void RootNodeManager::FinishChange() {
// PrepareForChange/FinishChange should be balanced.
- DCHECK_NE(kRootConnection, change_source_);
- change_source_ = 0;
- is_processing_delete_node_ = false;
- if (change_type == CHANGE_TYPE_ADVANCE_SERVER_CHANGE_ID)
+ CHECK(current_change_);
+ if (current_change_->change_type() == CHANGE_TYPE_ADVANCE_SERVER_CHANGE_ID)
next_server_change_id_++;
+ current_change_ = NULL;
}
ViewManagerConnection* RootNodeManager::ConnectImpl(
« no previous file with comments | « mojo/services/view_manager/root_node_manager.h ('k') | mojo/services/view_manager/view_manager_connection.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698