1cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// found in the LICENSE file. 4cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 5cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#ifndef MOJO_SERVICES_VIEW_MANAGER_TEST_CHANGE_TRACKER_H_ 6cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#define MOJO_SERVICES_VIEW_MANAGER_TEST_CHANGE_TRACKER_H_ 7cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 8cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include <string> 9cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include <vector> 10cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 11cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "mojo/public/cpp/bindings/array.h" 12f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "mojo/services/public/cpp/view_manager/types.h" 13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "mojo/services/public/interfaces/view_manager/view_manager.mojom.h" 14cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/gfx/rect.h" 15cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 16cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace mojo { 17cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace service { 18cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 19cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)enum ChangeType { 205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) CHANGE_TYPE_EMBED, 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // TODO(sky): NODE->VIEW. 22cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) CHANGE_TYPE_NODE_BOUNDS_CHANGED, 23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) CHANGE_TYPE_NODE_HIERARCHY_CHANGED, 24f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) CHANGE_TYPE_NODE_REORDERED, 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CHANGE_TYPE_NODE_VISIBILITY_CHANGED, 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CHANGE_TYPE_NODE_DRAWN_STATE_CHANGED, 27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) CHANGE_TYPE_NODE_DELETED, 2846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) CHANGE_TYPE_INPUT_EVENT, 295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) CHANGE_TYPE_DELEGATE_EMBED, 30cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}; 31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// TODO(sky): consider nuking and converting directly to ViewData. 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccistruct TestView { 34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Returns a string description of this. 35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) std::string ToString() const; 36cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Returns a string description that includes visible and drawn. 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string ToString2() const; 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 40f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) Id parent_id; 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Id view_id; 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool visible; 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool drawn; 44cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}; 45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 46f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Tracks a call to ViewManagerClient. See the individual functions for the 47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// fields that are used. 48cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)struct Change { 49cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) Change(); 50cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ~Change(); 51cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 52cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ChangeType type; 53f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ConnectionSpecificId connection_id; 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::vector<TestView> views; 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Id view_id; 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Id view_id2; 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Id view_id3; 58cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) gfx::Rect bounds; 59cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) gfx::Rect bounds2; 6046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) int32 event_action; 61f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) String creator_url; 625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) String embed_url; 63f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) OrderDirection direction; 641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool bool_value; 65cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}; 66cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 67cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Converts Changes to string descriptions. 68cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)std::vector<std::string> ChangesToDescription1( 69cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const std::vector<Change>& changes); 70cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Returns a string description of |changes[0].views|. Returns an empty string 72cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// if change.size() != 1. 731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccistd::string ChangeViewDescription(const std::vector<Change>& changes); 74cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Converts ViewDatas to TestViews. 761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid ViewDatasToTestViews(const Array<ViewDataPtr>& data, 771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::vector<TestView>* test_views); 7846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 79f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// TestChangeTracker is used to record ViewManagerClient functions. It notifies 80cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// a delegate any time a change is added. 81cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class TestChangeTracker { 82cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public: 83cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Used to notify the delegate when a change is added. A change corresponds to 84f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // a single ViewManagerClient function. 85cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) class Delegate { 86cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public: 87cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void OnChangeAdded() = 0; 88cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 89cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) protected: 90cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual ~Delegate() {} 91cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) }; 92cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 93cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) TestChangeTracker(); 94cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ~TestChangeTracker(); 95cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 966e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) void set_delegate(Delegate* delegate) { 976e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) delegate_ = delegate; 986e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 99cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 100cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) std::vector<Change>* changes() { return &changes_; } 101cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 102cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Each of these functions generate a Change. There is one per 103f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // ViewManagerClient function. 1045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) void OnEmbed(ConnectionSpecificId connection_id, 1055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const String& creator_url, 1066e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ViewDataPtr root); 1071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void OnViewBoundsChanged(Id view_id, RectPtr old_bounds, RectPtr new_bounds); 1081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void OnViewHierarchyChanged(Id view_id, 109f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) Id new_parent_id, 110f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) Id old_parent_id, 1111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Array<ViewDataPtr> views); 1121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void OnViewReordered(Id view_id, 1131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Id relative_view_id, 114116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch OrderDirection direction); 1151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void OnViewDeleted(Id view_id); 1161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void OnViewVisibilityChanged(Id view_id, bool visible); 1171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void OnViewDrawnStateChanged(Id view_id, bool drawn); 1181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void OnViewInputEvent(Id view_id, EventPtr event); 1195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) void DelegateEmbed(const String& url); 120cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 121cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) private: 122cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void AddChange(const Change& change); 123cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 124cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) Delegate* delegate_; 125cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) std::vector<Change> changes_; 126cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 127cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TestChangeTracker); 128cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}; 129cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 130cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} // namespace service 131cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} // namespace mojo 132cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 133cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#endif // MOJO_SERVICES_VIEW_MANAGER_TEST_CHANGE_TRACKER_H_ 134