| 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(
|
|
|