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

Side by Side Diff: mojo/services/view_manager/root_node_manager.h

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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef MOJO_SERVICES_VIEW_MANAGER_ROOT_NODE_MANAGER_H_ 5 #ifndef MOJO_SERVICES_VIEW_MANAGER_ROOT_NODE_MANAGER_H_
6 #define MOJO_SERVICES_VIEW_MANAGER_ROOT_NODE_MANAGER_H_ 6 #define MOJO_SERVICES_VIEW_MANAGER_ROOT_NODE_MANAGER_H_
7 7
8 #include <map> 8 #include <map>
9 9
10 #include "base/basictypes.h" 10 #include "base/basictypes.h"
(...skipping 10 matching lines...) Expand all
21 namespace services { 21 namespace services {
22 namespace view_manager { 22 namespace view_manager {
23 23
24 class View; 24 class View;
25 class ViewManagerConnection; 25 class ViewManagerConnection;
26 26
27 // RootNodeManager is responsible for managing the set of ViewManagerConnections 27 // RootNodeManager is responsible for managing the set of ViewManagerConnections
28 // as well as providing the root of the node hierarchy. 28 // as well as providing the root of the node hierarchy.
29 class MOJO_VIEW_MANAGER_EXPORT RootNodeManager : public NodeDelegate { 29 class MOJO_VIEW_MANAGER_EXPORT RootNodeManager : public NodeDelegate {
30 public: 30 public:
31 // Used to indicate if the server id should be incremented after notifiying
32 // clients of the change.
33 enum ChangeType {
34 CHANGE_TYPE_ADVANCE_SERVER_CHANGE_ID,
35 CHANGE_TYPE_DONT_ADVANCE_SERVER_CHANGE_ID,
36 };
37
31 // Create when a ViewManagerConnection is about to make a change. Ensures 38 // Create when a ViewManagerConnection is about to make a change. Ensures
32 // clients are notified of the correct change id. 39 // clients are notified of the correct change id.
33 class ScopedChange { 40 class ScopedChange {
34 public: 41 public:
35 ScopedChange(ViewManagerConnection* connection, 42 ScopedChange(ViewManagerConnection* connection,
36 RootNodeManager* root, 43 RootNodeManager* root,
37 TransportChangeId change_id); 44 TransportChangeId change_id,
45 RootNodeManager::ChangeType change_type);
38 ~ScopedChange(); 46 ~ScopedChange();
39 47
40 private: 48 private:
41 RootNodeManager* root_; 49 RootNodeManager* root_;
50 const ChangeType change_type_;
42 51
43 DISALLOW_COPY_AND_ASSIGN(ScopedChange); 52 DISALLOW_COPY_AND_ASSIGN(ScopedChange);
44 }; 53 };
45 54
46 explicit RootNodeManager(Shell* shell); 55 explicit RootNodeManager(Shell* shell);
47 virtual ~RootNodeManager(); 56 virtual ~RootNodeManager();
48 57
49 // Returns the id for the next ViewManagerConnection. 58 // Returns the id for the next ViewManagerConnection.
50 TransportConnectionId GetAndAdvanceNextConnectionId(); 59 TransportConnectionId GetAndAdvanceNextConnectionId();
51 60
61 TransportChangeId next_server_change_id() const {
62 return next_server_change_id_;
63 }
64
52 void AddConnection(ViewManagerConnection* connection); 65 void AddConnection(ViewManagerConnection* connection);
53 void RemoveConnection(ViewManagerConnection* connection); 66 void RemoveConnection(ViewManagerConnection* connection);
54 67
55 // Returns the connection by id. 68 // Returns the connection by id.
56 ViewManagerConnection* GetConnection(TransportConnectionId connection_id); 69 ViewManagerConnection* GetConnection(TransportConnectionId connection_id);
57 70
58 // Returns the Node identified by |id|. 71 // Returns the Node identified by |id|.
59 Node* GetNode(const NodeId& id); 72 Node* GetNode(const NodeId& id);
60 73
61 // Returns the View identified by |id|. 74 // Returns the View identified by |id|.
(...skipping 13 matching lines...) Expand all
75 88
76 private: 89 private:
77 // Used to setup any static state needed by RootNodeManager. 90 // Used to setup any static state needed by RootNodeManager.
78 struct Context { 91 struct Context {
79 Context(); 92 Context();
80 ~Context(); 93 ~Context();
81 }; 94 };
82 95
83 // Tracks a change. 96 // Tracks a change.
84 struct Change { 97 struct Change {
85 Change(TransportConnectionId connection_id, TransportChangeId change_id) 98 Change(TransportConnectionId connection_id,
99 TransportChangeId client_change_id)
86 : connection_id(connection_id), 100 : connection_id(connection_id),
87 change_id(change_id) { 101 client_change_id(client_change_id) {
88 } 102 }
89 103
90 TransportConnectionId connection_id; 104 TransportConnectionId connection_id;
91 TransportChangeId change_id; 105 TransportChangeId client_change_id;
92 }; 106 };
93 107
94 typedef std::map<TransportConnectionId, ViewManagerConnection*> ConnectionMap; 108 typedef std::map<TransportConnectionId, ViewManagerConnection*> ConnectionMap;
95 109
96 // Invoked when a particular connection is about to make a change. Records 110 // Invoked when a particular connection is about to make a change. Records
97 // the |change_id| so that it can be supplied to the clients by way of 111 // the |change_id| so that it can be supplied to the clients by way of
98 // OnNodeHierarchyChanged(). 112 // OnNodeHierarchyChanged().
99 // Changes should never nest, meaning each PrepareForChange() must be 113 // Changes should never nest, meaning each PrepareForChange() must be
100 // balanced with a call to FinishChange() with no PrepareForChange() 114 // balanced with a call to FinishChange() with no PrepareForChange()
101 // in between. 115 // in between.
102 void PrepareForChange(ViewManagerConnection* connection, 116 void PrepareForChange(ViewManagerConnection* connection,
103 TransportChangeId change_id); 117 TransportChangeId change_id);
104 118
105 // Balances a call to PrepareForChange(). 119 // Balances a call to PrepareForChange().
106 void FinishChange(); 120 void FinishChange(ChangeType change_type);
121
122 TransportChangeId GetClientChangeId(
123 TransportConnectionId connection_id) const;
107 124
108 // Overriden from NodeDelegate: 125 // Overriden from NodeDelegate:
109 virtual void OnNodeHierarchyChanged(const NodeId& node, 126 virtual void OnNodeHierarchyChanged(const NodeId& node,
110 const NodeId& new_parent, 127 const NodeId& new_parent,
111 const NodeId& old_parent) OVERRIDE; 128 const NodeId& old_parent) OVERRIDE;
112 virtual void OnNodeViewReplaced(const NodeId& node, 129 virtual void OnNodeViewReplaced(const NodeId& node,
113 const ViewId& new_view_id, 130 const ViewId& new_view_id,
114 const ViewId& old_view_id) OVERRIDE; 131 const ViewId& old_view_id) OVERRIDE;
115 132
116 Context context_; 133 Context context_;
117 134
118 // ID to use for next ViewManagerConnection. 135 // ID to use for next ViewManagerConnection.
119 TransportConnectionId next_connection_id_; 136 TransportConnectionId next_connection_id_;
120 137
138 TransportChangeId next_server_change_id_;
139
121 // Set of ViewManagerConnections. 140 // Set of ViewManagerConnections.
122 ConnectionMap connection_map_; 141 ConnectionMap connection_map_;
123 142
124 // If non-null we're processing a change. 143 // If non-null we're processing a change.
125 scoped_ptr<Change> change_; 144 scoped_ptr<Change> change_;
126 145
127 RootViewManager root_view_manager_; 146 RootViewManager root_view_manager_;
128 147
129 // Root node. 148 // Root node.
130 Node root_; 149 Node root_;
131 150
132 DISALLOW_COPY_AND_ASSIGN(RootNodeManager); 151 DISALLOW_COPY_AND_ASSIGN(RootNodeManager);
133 }; 152 };
134 153
135 } // namespace view_manager 154 } // namespace view_manager
136 } // namespace services 155 } // namespace services
137 } // namespace mojo 156 } // namespace mojo
138 157
139 #endif // MOJO_SERVICES_VIEW_MANAGER_ROOT_NODE_MANAGER_H_ 158 #endif // MOJO_SERVICES_VIEW_MANAGER_ROOT_NODE_MANAGER_H_
OLDNEW
« no previous file with comments | « mojo/services/public/interfaces/view_manager/view_manager.mojom ('k') | mojo/services/view_manager/root_node_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698