| Index: mojo/services/view_manager/test_change_tracker.cc
|
| diff --git a/mojo/services/view_manager/test_change_tracker.cc b/mojo/services/view_manager/test_change_tracker.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..3e31aa4f3d793eff10e4414d0df57dd46303e568
|
| --- /dev/null
|
| +++ b/mojo/services/view_manager/test_change_tracker.cc
|
| @@ -0,0 +1,314 @@
|
| +// 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.
|
| +
|
| +#include "mojo/services/view_manager/test_change_tracker.h"
|
| +
|
| +#include "base/strings/string_util.h"
|
| +#include "base/strings/stringprintf.h"
|
| +#include "mojo/common/common_type_converters.h"
|
| +#include "third_party/mojo_services/src/view_manager/public/cpp/util.h"
|
| +
|
| +using mojo::Array;
|
| +using mojo::Id;
|
| +using mojo::ViewDataPtr;
|
| +using mojo::String;
|
| +
|
| +namespace view_manager {
|
| +
|
| +std::string ViewIdToString(Id id) {
|
| + return (id == 0) ? "null" : base::StringPrintf("%d,%d", mojo::HiWord(id),
|
| + mojo::LoWord(id));
|
| +}
|
| +
|
| +namespace {
|
| +
|
| +std::string RectToString(const mojo::Rect& rect) {
|
| + return base::StringPrintf("%d,%d %dx%d", rect.x, rect.y, rect.width,
|
| + rect.height);
|
| +}
|
| +
|
| +std::string DirectionToString(mojo::OrderDirection direction) {
|
| + return direction == mojo::ORDER_DIRECTION_ABOVE ? "above" : "below";
|
| +}
|
| +
|
| +std::string ChangeToDescription1(const Change& change) {
|
| + switch (change.type) {
|
| + case CHANGE_TYPE_EMBED:
|
| + return base::StringPrintf("OnEmbed creator=%s",
|
| + change.creator_url.data());
|
| +
|
| + case CHANGE_TYPE_EMBEDDED_APP_DISCONNECTED:
|
| + return base::StringPrintf("OnEmbeddedAppDisconnected view=%s",
|
| + ViewIdToString(change.view_id).c_str());
|
| +
|
| + case CHANGE_TYPE_NODE_BOUNDS_CHANGED:
|
| + return base::StringPrintf(
|
| + "BoundsChanged view=%s old_bounds=%s new_bounds=%s",
|
| + ViewIdToString(change.view_id).c_str(),
|
| + RectToString(change.bounds).c_str(),
|
| + RectToString(change.bounds2).c_str());
|
| +
|
| + case CHANGE_TYPE_NODE_VIEWPORT_METRICS_CHANGED:
|
| + // TODO(sky): Not implemented.
|
| + return "ViewportMetricsChanged";
|
| +
|
| + case CHANGE_TYPE_NODE_HIERARCHY_CHANGED:
|
| + return base::StringPrintf(
|
| + "HierarchyChanged view=%s new_parent=%s old_parent=%s",
|
| + ViewIdToString(change.view_id).c_str(),
|
| + ViewIdToString(change.view_id2).c_str(),
|
| + ViewIdToString(change.view_id3).c_str());
|
| +
|
| + case CHANGE_TYPE_NODE_REORDERED:
|
| + return base::StringPrintf("Reordered view=%s relative=%s direction=%s",
|
| + ViewIdToString(change.view_id).c_str(),
|
| + ViewIdToString(change.view_id2).c_str(),
|
| + DirectionToString(change.direction).c_str());
|
| +
|
| + case CHANGE_TYPE_NODE_DELETED:
|
| + return base::StringPrintf("ViewDeleted view=%s",
|
| + ViewIdToString(change.view_id).c_str());
|
| +
|
| + case CHANGE_TYPE_NODE_VISIBILITY_CHANGED:
|
| + return base::StringPrintf("VisibilityChanged view=%s visible=%s",
|
| + ViewIdToString(change.view_id).c_str(),
|
| + change.bool_value ? "true" : "false");
|
| +
|
| + case CHANGE_TYPE_NODE_DRAWN_STATE_CHANGED:
|
| + return base::StringPrintf("DrawnStateChanged view=%s drawn=%s",
|
| + ViewIdToString(change.view_id).c_str(),
|
| + change.bool_value ? "true" : "false");
|
| +
|
| + case CHANGE_TYPE_INPUT_EVENT:
|
| + return base::StringPrintf("InputEvent view=%s event_action=%d",
|
| + ViewIdToString(change.view_id).c_str(),
|
| + change.event_action);
|
| +
|
| + case CHANGE_TYPE_PROPERTY_CHANGED:
|
| + return base::StringPrintf("PropertyChanged view=%s key=%s value=%s",
|
| + ViewIdToString(change.view_id).c_str(),
|
| + change.property_key.c_str(),
|
| + change.property_value.c_str());
|
| +
|
| + case CHANGE_TYPE_DELEGATE_EMBED:
|
| + return base::StringPrintf("DelegateEmbed url=%s",
|
| + change.embed_url.data());
|
| + }
|
| + return std::string();
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| +std::vector<std::string> ChangesToDescription1(
|
| + const std::vector<Change>& changes) {
|
| + std::vector<std::string> strings(changes.size());
|
| + for (size_t i = 0; i < changes.size(); ++i)
|
| + strings[i] = ChangeToDescription1(changes[i]);
|
| + return strings;
|
| +}
|
| +
|
| +std::string SingleChangeToDescription(const std::vector<Change>& changes) {
|
| + if (changes.size() != 1u)
|
| + return std::string();
|
| + return ChangeToDescription1(changes[0]);
|
| +}
|
| +
|
| +std::string SingleViewDescription(const std::vector<TestView>& views) {
|
| + if (views.size() != 1u)
|
| + return std::string();
|
| + return views[0].ToString();
|
| +}
|
| +
|
| +std::string ChangeViewDescription(const std::vector<Change>& changes) {
|
| + if (changes.size() != 1)
|
| + return std::string();
|
| + std::vector<std::string> view_strings(changes[0].views.size());
|
| + for (size_t i = 0; i < changes[0].views.size(); ++i)
|
| + view_strings[i] = "[" + changes[0].views[i].ToString() + "]";
|
| + return JoinString(view_strings, ',');
|
| +}
|
| +
|
| +TestView ViewDataToTestView(const ViewDataPtr& data) {
|
| + TestView view;
|
| + view.parent_id = data->parent_id;
|
| + view.view_id = data->view_id;
|
| + view.visible = data->visible;
|
| + view.drawn = data->drawn;
|
| + view.properties =
|
| + data->properties.To<std::map<std::string, std::vector<uint8_t>>>();
|
| + return view;
|
| +}
|
| +
|
| +void ViewDatasToTestViews(const Array<ViewDataPtr>& data,
|
| + std::vector<TestView>* test_views) {
|
| + for (size_t i = 0; i < data.size(); ++i)
|
| + test_views->push_back(ViewDataToTestView(data[i]));
|
| +}
|
| +
|
| +Change::Change()
|
| + : type(CHANGE_TYPE_EMBED),
|
| + connection_id(0),
|
| + view_id(0),
|
| + view_id2(0),
|
| + view_id3(0),
|
| + event_action(0),
|
| + direction(mojo::ORDER_DIRECTION_ABOVE),
|
| + bool_value(false) {
|
| +}
|
| +
|
| +Change::~Change() {
|
| +}
|
| +
|
| +TestChangeTracker::TestChangeTracker()
|
| + : delegate_(NULL) {
|
| +}
|
| +
|
| +TestChangeTracker::~TestChangeTracker() {
|
| +}
|
| +
|
| +void TestChangeTracker::OnEmbed(mojo::ConnectionSpecificId connection_id,
|
| + const String& creator_url,
|
| + ViewDataPtr root) {
|
| + Change change;
|
| + change.type = CHANGE_TYPE_EMBED;
|
| + change.connection_id = connection_id;
|
| + change.creator_url = creator_url;
|
| + change.views.push_back(ViewDataToTestView(root));
|
| + AddChange(change);
|
| +}
|
| +
|
| +void TestChangeTracker::OnEmbeddedAppDisconnected(Id view_id) {
|
| + Change change;
|
| + change.type = CHANGE_TYPE_EMBEDDED_APP_DISCONNECTED;
|
| + change.view_id = view_id;
|
| + AddChange(change);
|
| +}
|
| +
|
| +void TestChangeTracker::OnViewBoundsChanged(Id view_id,
|
| + mojo::RectPtr old_bounds,
|
| + mojo::RectPtr new_bounds) {
|
| + Change change;
|
| + change.type = CHANGE_TYPE_NODE_BOUNDS_CHANGED;
|
| + change.view_id = view_id;
|
| + change.bounds.x = old_bounds->x;
|
| + change.bounds.y = old_bounds->y;
|
| + change.bounds.width = old_bounds->width;
|
| + change.bounds.height = old_bounds->height;
|
| + change.bounds2.x = new_bounds->x;
|
| + change.bounds2.y = new_bounds->y;
|
| + change.bounds2.width = new_bounds->width;
|
| + change.bounds2.height = new_bounds->height;
|
| + AddChange(change);
|
| +}
|
| +
|
| +void TestChangeTracker::OnViewViewportMetricsChanged(
|
| + mojo::ViewportMetricsPtr old_metrics,
|
| + mojo::ViewportMetricsPtr new_metrics) {
|
| + Change change;
|
| + change.type = CHANGE_TYPE_NODE_VIEWPORT_METRICS_CHANGED;
|
| + // NOT IMPLEMENTED
|
| + AddChange(change);
|
| +}
|
| +
|
| +void TestChangeTracker::OnViewHierarchyChanged(Id view_id,
|
| + Id new_parent_id,
|
| + Id old_parent_id,
|
| + Array<ViewDataPtr> views) {
|
| + Change change;
|
| + change.type = CHANGE_TYPE_NODE_HIERARCHY_CHANGED;
|
| + change.view_id = view_id;
|
| + change.view_id2 = new_parent_id;
|
| + change.view_id3 = old_parent_id;
|
| + ViewDatasToTestViews(views, &change.views);
|
| + AddChange(change);
|
| +}
|
| +
|
| +void TestChangeTracker::OnViewReordered(Id view_id,
|
| + Id relative_view_id,
|
| + mojo::OrderDirection direction) {
|
| + Change change;
|
| + change.type = CHANGE_TYPE_NODE_REORDERED;
|
| + change.view_id = view_id;
|
| + change.view_id2 = relative_view_id;
|
| + change.direction = direction;
|
| + AddChange(change);
|
| +}
|
| +
|
| +void TestChangeTracker::OnViewDeleted(Id view_id) {
|
| + Change change;
|
| + change.type = CHANGE_TYPE_NODE_DELETED;
|
| + change.view_id = view_id;
|
| + AddChange(change);
|
| +}
|
| +
|
| +void TestChangeTracker::OnViewVisibilityChanged(Id view_id, bool visible) {
|
| + Change change;
|
| + change.type = CHANGE_TYPE_NODE_VISIBILITY_CHANGED;
|
| + change.view_id = view_id;
|
| + change.bool_value = visible;
|
| + AddChange(change);
|
| +}
|
| +
|
| +void TestChangeTracker::OnViewDrawnStateChanged(Id view_id, bool drawn) {
|
| + Change change;
|
| + change.type = CHANGE_TYPE_NODE_DRAWN_STATE_CHANGED;
|
| + change.view_id = view_id;
|
| + change.bool_value = drawn;
|
| + AddChange(change);
|
| +}
|
| +
|
| +void TestChangeTracker::OnViewInputEvent(Id view_id, mojo::EventPtr event) {
|
| + Change change;
|
| + change.type = CHANGE_TYPE_INPUT_EVENT;
|
| + change.view_id = view_id;
|
| + change.event_action = event->action;
|
| + AddChange(change);
|
| +}
|
| +
|
| +void TestChangeTracker::OnViewSharedPropertyChanged(Id view_id,
|
| + String name,
|
| + Array<uint8_t> data) {
|
| + Change change;
|
| + change.type = CHANGE_TYPE_PROPERTY_CHANGED;
|
| + change.view_id = view_id;
|
| + change.property_key = name;
|
| + if (data.is_null())
|
| + change.property_value = "NULL";
|
| + else
|
| + change.property_value = data.To<std::string>();
|
| + AddChange(change);
|
| +}
|
| +
|
| +void TestChangeTracker::DelegateEmbed(const String& url) {
|
| + Change change;
|
| + change.type = CHANGE_TYPE_DELEGATE_EMBED;
|
| + change.embed_url = url;
|
| + AddChange(change);
|
| +}
|
| +
|
| +void TestChangeTracker::AddChange(const Change& change) {
|
| + changes_.push_back(change);
|
| + if (delegate_)
|
| + delegate_->OnChangeAdded();
|
| +}
|
| +
|
| +TestView::TestView() {}
|
| +
|
| +TestView::~TestView() {}
|
| +
|
| +std::string TestView::ToString() const {
|
| + return base::StringPrintf("view=%s parent=%s",
|
| + ViewIdToString(view_id).c_str(),
|
| + ViewIdToString(parent_id).c_str());
|
| +}
|
| +
|
| +std::string TestView::ToString2() const {
|
| + return base::StringPrintf("view=%s parent=%s visible=%s drawn=%s",
|
| + ViewIdToString(view_id).c_str(),
|
| + ViewIdToString(parent_id).c_str(),
|
| + visible ? "true" : "false",
|
| + drawn ? "true" : "false");
|
| +}
|
| +
|
| +} // namespace view_manager
|
|
|