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. 4 5#ifndef MOJO_SERVICES_VIEW_MANAGER_TEST_CHANGE_TRACKER_H_ 6#define MOJO_SERVICES_VIEW_MANAGER_TEST_CHANGE_TRACKER_H_ 7 8#include <string> 9#include <vector> 10 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" 15 16namespace mojo { 17namespace view_manager { 18namespace service { 19 20enum ChangeType { 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, 31}; 32 33// TODO(sky): consider nuking and converting directly to NodeData. 34struct TestNode { 35 // Returns a string description of this. 36 std::string ToString() const; 37 38 Id parent_id; 39 Id node_id; 40 Id view_id; 41}; 42 43// Tracks a call to ViewManagerClient. See the individual functions for the 44// fields that are used. 45struct Change { 46 Change(); 47 ~Change(); 48 49 ChangeType type; 50 ConnectionSpecificId connection_id; 51 Id change_id; 52 std::vector<TestNode> nodes; 53 Id node_id; 54 Id node_id2; 55 Id node_id3; 56 Id view_id; 57 Id view_id2; 58 gfx::Rect bounds; 59 gfx::Rect bounds2; 60 int32 event_action; 61 String creator_url; 62 OrderDirection direction; 63}; 64 65// Converts Changes to string descriptions. 66std::vector<std::string> ChangesToDescription1( 67 const std::vector<Change>& changes); 68 69// Returns a string description of |changes[0].nodes|. Returns an empty string 70// if change.size() != 1. 71std::string ChangeNodeDescription(const std::vector<Change>& changes); 72 73// Converts NodeDatas to TestNodes. 74void NodeDatasToTestNodes(const Array<NodeDataPtr>& data, 75 std::vector<TestNode>* test_nodes); 76 77// TestChangeTracker is used to record ViewManagerClient functions. It notifies 78// a delegate any time a change is added. 79class TestChangeTracker { 80 public: 81 // Used to notify the delegate when a change is added. A change corresponds to 82 // a single ViewManagerClient function. 83 class Delegate { 84 public: 85 virtual void OnChangeAdded() = 0; 86 87 protected: 88 virtual ~Delegate() {} 89 }; 90 91 TestChangeTracker(); 92 ~TestChangeTracker(); 93 94 void set_delegate(Delegate* delegate) { delegate_ = delegate; } 95 96 std::vector<Change>* changes() { return &changes_; } 97 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, 108 Id new_parent_id, 109 Id old_parent_id, 110 Id server_change_id, 111 Array<NodeDataPtr> nodes); 112 void OnNodeReordered(Id node_id, 113 Id relative_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); 120 121 private: 122 void AddChange(const Change& change); 123 124 Delegate* delegate_; 125 std::vector<Change> changes_; 126 127 DISALLOW_COPY_AND_ASSIGN(TestChangeTracker); 128}; 129 130} // namespace service 131} // namespace view_manager 132} // namespace mojo 133 134#endif // MOJO_SERVICES_VIEW_MANAGER_TEST_CHANGE_TRACKER_H_ 135