Index: mojo/services/view_manager/root_node_manager.h |
diff --git a/mojo/services/view_manager/root_node_manager.h b/mojo/services/view_manager/root_node_manager.h |
index d97acea4e21b2ebd38f14c5dc830eb86fdd8ab8f..e0404168036ffedec5dc771e9c423590d8bb775f 100644 |
--- a/mojo/services/view_manager/root_node_manager.h |
+++ b/mojo/services/view_manager/root_node_manager.h |
@@ -28,17 +28,26 @@ class ViewManagerConnection; |
// as well as providing the root of the node hierarchy. |
class MOJO_VIEW_MANAGER_EXPORT RootNodeManager : public NodeDelegate { |
public: |
+ // Used to indicate if the server id should be incremented after notifiying |
+ // clients of the change. |
+ enum ChangeType { |
+ CHANGE_TYPE_ADVANCE_SERVER_CHANGE_ID, |
+ CHANGE_TYPE_DONT_ADVANCE_SERVER_CHANGE_ID, |
+ }; |
+ |
// Create when a ViewManagerConnection is about to make a change. Ensures |
// clients are notified of the correct change id. |
class ScopedChange { |
public: |
ScopedChange(ViewManagerConnection* connection, |
RootNodeManager* root, |
- TransportChangeId change_id); |
+ TransportChangeId change_id, |
+ RootNodeManager::ChangeType change_type); |
~ScopedChange(); |
private: |
RootNodeManager* root_; |
+ const ChangeType change_type_; |
DISALLOW_COPY_AND_ASSIGN(ScopedChange); |
}; |
@@ -49,6 +58,10 @@ class MOJO_VIEW_MANAGER_EXPORT RootNodeManager : public NodeDelegate { |
// Returns the id for the next ViewManagerConnection. |
TransportConnectionId GetAndAdvanceNextConnectionId(); |
+ TransportChangeId next_server_change_id() const { |
+ return next_server_change_id_; |
+ } |
+ |
void AddConnection(ViewManagerConnection* connection); |
void RemoveConnection(ViewManagerConnection* connection); |
@@ -82,13 +95,14 @@ class MOJO_VIEW_MANAGER_EXPORT RootNodeManager : public NodeDelegate { |
// Tracks a change. |
struct Change { |
- Change(TransportConnectionId connection_id, TransportChangeId change_id) |
+ Change(TransportConnectionId connection_id, |
+ TransportChangeId client_change_id) |
: connection_id(connection_id), |
- change_id(change_id) { |
+ client_change_id(client_change_id) { |
} |
TransportConnectionId connection_id; |
- TransportChangeId change_id; |
+ TransportChangeId client_change_id; |
}; |
typedef std::map<TransportConnectionId, ViewManagerConnection*> ConnectionMap; |
@@ -103,7 +117,10 @@ class MOJO_VIEW_MANAGER_EXPORT RootNodeManager : public NodeDelegate { |
TransportChangeId change_id); |
// Balances a call to PrepareForChange(). |
- void FinishChange(); |
+ void FinishChange(ChangeType change_type); |
+ |
+ TransportChangeId GetClientChangeId( |
+ TransportConnectionId connection_id) const; |
// Overriden from NodeDelegate: |
virtual void OnNodeHierarchyChanged(const NodeId& node, |
@@ -118,6 +135,8 @@ class MOJO_VIEW_MANAGER_EXPORT RootNodeManager : public NodeDelegate { |
// ID to use for next ViewManagerConnection. |
TransportConnectionId next_connection_id_; |
+ TransportChangeId next_server_change_id_; |
+ |
// Set of ViewManagerConnections. |
ConnectionMap connection_map_; |