// Copyright 2014 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef COMPONENTS_VIEW_MANAGER_TEST_CHANGE_TRACKER_H_ #define COMPONENTS_VIEW_MANAGER_TEST_CHANGE_TRACKER_H_ #include #include #include "base/basictypes.h" #include "components/view_manager/public/cpp/types.h" #include "components/view_manager/public/interfaces/view_tree.mojom.h" #include "third_party/mojo/src/mojo/public/cpp/bindings/array.h" #include "ui/mojo/geometry/geometry.mojom.h" namespace view_manager { enum ChangeType { CHANGE_TYPE_EMBED, CHANGE_TYPE_EMBEDDED_APP_DISCONNECTED, CHANGE_TYPE_UNEMBED, // TODO(sky): nuke NODE. CHANGE_TYPE_NODE_BOUNDS_CHANGED, CHANGE_TYPE_NODE_VIEWPORT_METRICS_CHANGED, CHANGE_TYPE_NODE_HIERARCHY_CHANGED, CHANGE_TYPE_NODE_REORDERED, CHANGE_TYPE_NODE_VISIBILITY_CHANGED, CHANGE_TYPE_NODE_DRAWN_STATE_CHANGED, CHANGE_TYPE_NODE_DELETED, CHANGE_TYPE_INPUT_EVENT, CHANGE_TYPE_PROPERTY_CHANGED, CHANGE_TYPE_DELEGATE_EMBED, CHANGE_TYPE_FOCUSED, }; // TODO(sky): consider nuking and converting directly to ViewData. struct TestView { TestView(); ~TestView(); // Returns a string description of this. std::string ToString() const; // Returns a string description that includes visible and drawn. std::string ToString2() const; mojo::Id parent_id; mojo::Id view_id; bool visible; bool drawn; std::map> properties; }; // Tracks a call to ViewTreeClient. See the individual functions for the fields // that are used. struct Change { Change(); ~Change(); ChangeType type; mojo::ConnectionSpecificId connection_id; std::vector views; mojo::Id view_id; mojo::Id view_id2; mojo::Id view_id3; mojo::Rect bounds; mojo::Rect bounds2; int32_t event_action; mojo::String embed_url; mojo::OrderDirection direction; bool bool_value; std::string property_key; std::string property_value; }; // Converts Changes to string descriptions. std::vector ChangesToDescription1( const std::vector& changes); // Convenience for returning the description of the first item in |changes|. // Returns an empty string if |changes| has something other than one entry. std::string SingleChangeToDescription(const std::vector& changes); // Convenience for returning the description of the first item in |views|. // Returns an empty string if |views| has something other than one entry. std::string SingleViewDescription(const std::vector& views); // Returns a string description of |changes[0].views|. Returns an empty string // if change.size() != 1. std::string ChangeViewDescription(const std::vector& changes); // Converts ViewDatas to TestViews. void ViewDatasToTestViews(const mojo::Array& data, std::vector* test_views); // TestChangeTracker is used to record ViewTreeClient functions. It notifies // a delegate any time a change is added. class TestChangeTracker { public: // Used to notify the delegate when a change is added. A change corresponds to // a single ViewTreeClient function. class Delegate { public: virtual void OnChangeAdded() = 0; protected: virtual ~Delegate() {} }; TestChangeTracker(); ~TestChangeTracker(); void set_delegate(Delegate* delegate) { delegate_ = delegate; } std::vector* changes() { return &changes_; } // Each of these functions generate a Change. There is one per // ViewTreeClient function. void OnEmbed(mojo::ConnectionSpecificId connection_id, mojo::ViewDataPtr root); void OnEmbeddedAppDisconnected(mojo::Id view_id); void OnUnembed(); void OnViewBoundsChanged(mojo::Id view_id, mojo::RectPtr old_bounds, mojo::RectPtr new_bounds); void OnViewViewportMetricsChanged(mojo::ViewportMetricsPtr old_bounds, mojo::ViewportMetricsPtr new_bounds); void OnViewHierarchyChanged(mojo::Id view_id, mojo::Id new_parent_id, mojo::Id old_parent_id, mojo::Array views); void OnViewReordered(mojo::Id view_id, mojo::Id relative_view_id, mojo::OrderDirection direction); void OnViewDeleted(mojo::Id view_id); void OnViewVisibilityChanged(mojo::Id view_id, bool visible); void OnViewDrawnStateChanged(mojo::Id view_id, bool drawn); void OnViewInputEvent(mojo::Id view_id, mojo::EventPtr event); void OnViewSharedPropertyChanged(mojo::Id view_id, mojo::String name, mojo::Array data); void OnViewFocused(mojo::Id view_id); void DelegateEmbed(const mojo::String& url); private: void AddChange(const Change& change); Delegate* delegate_; std::vector changes_; DISALLOW_COPY_AND_ASSIGN(TestChangeTracker); }; } // namespace view_manager #endif // COMPONENTS_VIEW_MANAGER_TEST_CHANGE_TRACKER_H_