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
3 // found in the LICENSE file.
5 #ifndef MOJO_SERVICES_VIEW_MANAGER_TEST_CHANGE_TRACKER_H_
6 #define MOJO_SERVICES_VIEW_MANAGER_TEST_CHANGE_TRACKER_H_
11 #include "mojo/public/cpp/bindings/array.h"
12 #include "mojo/services/public/cpp/view_manager/types.h"
13 #include "mojo/services/public/interfaces/view_manager/view_manager.mojom.h"
14 #include "ui/gfx/rect.h"
17 namespace view_manager {
21 CHANGE_TYPE_CONNECTION_ESTABLISHED,
22 CHANGE_TYPE_ROOTS_ADDED,
23 CHANGE_TYPE_SERVER_CHANGE_ID_ADVANCED,
24 CHANGE_TYPE_NODE_BOUNDS_CHANGED,
25 CHANGE_TYPE_NODE_HIERARCHY_CHANGED,
26 CHANGE_TYPE_NODE_REORDERED,
27 CHANGE_TYPE_NODE_DELETED,
28 CHANGE_TYPE_VIEW_DELETED,
29 CHANGE_TYPE_VIEW_REPLACED,
30 CHANGE_TYPE_INPUT_EVENT,
33 // TODO(sky): consider nuking and converting directly to NodeData.
35 // Returns a string description of this.
36 std::string ToString() const;
43 // Tracks a call to ViewManagerClient. See the individual functions for the
44 // fields that are used.
50 ConnectionSpecificId connection_id;
52 std::vector<TestNode> nodes;
62 OrderDirection direction;
65 // Converts Changes to string descriptions.
66 std::vector<std::string> ChangesToDescription1(
67 const std::vector<Change>& changes);
69 // Returns a string description of |changes[0].nodes|. Returns an empty string
70 // if change.size() != 1.
71 std::string ChangeNodeDescription(const std::vector<Change>& changes);
73 // Converts NodeDatas to TestNodes.
74 void NodeDatasToTestNodes(const Array<NodeDataPtr>& data,
75 std::vector<TestNode>* test_nodes);
77 // TestChangeTracker is used to record ViewManagerClient functions. It notifies
78 // a delegate any time a change is added.
79 class TestChangeTracker {
81 // Used to notify the delegate when a change is added. A change corresponds to
82 // a single ViewManagerClient function.
85 virtual void OnChangeAdded() = 0;
88 virtual ~Delegate() {}
94 void set_delegate(Delegate* delegate) { delegate_ = delegate; }
96 std::vector<Change>* changes() { return &changes_; }
98 // Each of these functions generate a Change. There is one per
99 // ViewManagerClient function.
100 void OnViewManagerConnectionEstablished(ConnectionSpecificId connection_id,
101 const String& creator_url,
102 Id next_server_change_id,
103 Array<NodeDataPtr> nodes);
104 void OnRootsAdded(Array<NodeDataPtr> nodes);
105 void OnServerChangeIdAdvanced(Id change_id);
106 void OnNodeBoundsChanged(Id node_id, RectPtr old_bounds, RectPtr new_bounds);
107 void OnNodeHierarchyChanged(Id node_id,
111 Array<NodeDataPtr> nodes);
112 void OnNodeReordered(Id node_id,
114 OrderDirection direction,
115 Id server_change_id);
116 void OnNodeDeleted(Id node_id, Id server_change_id);
117 void OnViewDeleted(Id view_id);
118 void OnNodeViewReplaced(Id node_id, Id new_view_id, Id old_view_id);
119 void OnViewInputEvent(Id view_id, EventPtr event);
122 void AddChange(const Change& change);
125 std::vector<Change> changes_;
127 DISALLOW_COPY_AND_ASSIGN(TestChangeTracker);
130 } // namespace service
131 } // namespace view_manager
134 #endif // MOJO_SERVICES_VIEW_MANAGER_TEST_CHANGE_TRACKER_H_