Add version checking to webview library loads.
[chromium-blink-merge.git] / components / view_manager / test_change_tracker.cc
blob90acac77b19c85e6bd5e42cbbd02b1d690baac2b
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 #include "components/view_manager/test_change_tracker.h"
7 #include "base/strings/string_util.h"
8 #include "base/strings/stringprintf.h"
9 #include "components/view_manager/public/cpp/util.h"
10 #include "mojo/common/common_type_converters.h"
12 using mojo::Array;
13 using mojo::Id;
14 using mojo::ViewDataPtr;
15 using mojo::String;
17 namespace view_manager {
19 std::string ViewIdToString(Id id) {
20 return (id == 0) ? "null" : base::StringPrintf("%d,%d", mojo::HiWord(id),
21 mojo::LoWord(id));
24 namespace {
26 std::string RectToString(const mojo::Rect& rect) {
27 return base::StringPrintf("%d,%d %dx%d", rect.x, rect.y, rect.width,
28 rect.height);
31 std::string DirectionToString(mojo::OrderDirection direction) {
32 return direction == mojo::ORDER_DIRECTION_ABOVE ? "above" : "below";
35 std::string ChangeToDescription1(const Change& change) {
36 switch (change.type) {
37 case CHANGE_TYPE_EMBED:
38 return "OnEmbed";
40 case CHANGE_TYPE_EMBEDDED_APP_DISCONNECTED:
41 return base::StringPrintf("OnEmbeddedAppDisconnected view=%s",
42 ViewIdToString(change.view_id).c_str());
44 case CHANGE_TYPE_EMBED_FOR_DESCENDANT:
45 return base::StringPrintf("OnEmbedForDescendant view=%s",
46 ViewIdToString(change.view_id).c_str());
48 case CHANGE_TYPE_UNEMBED:
49 return "OnUnembed";
51 case CHANGE_TYPE_NODE_BOUNDS_CHANGED:
52 return base::StringPrintf(
53 "BoundsChanged view=%s old_bounds=%s new_bounds=%s",
54 ViewIdToString(change.view_id).c_str(),
55 RectToString(change.bounds).c_str(),
56 RectToString(change.bounds2).c_str());
58 case CHANGE_TYPE_NODE_VIEWPORT_METRICS_CHANGED:
59 // TODO(sky): Not implemented.
60 return "ViewportMetricsChanged";
62 case CHANGE_TYPE_NODE_HIERARCHY_CHANGED:
63 return base::StringPrintf(
64 "HierarchyChanged view=%s new_parent=%s old_parent=%s",
65 ViewIdToString(change.view_id).c_str(),
66 ViewIdToString(change.view_id2).c_str(),
67 ViewIdToString(change.view_id3).c_str());
69 case CHANGE_TYPE_NODE_REORDERED:
70 return base::StringPrintf("Reordered view=%s relative=%s direction=%s",
71 ViewIdToString(change.view_id).c_str(),
72 ViewIdToString(change.view_id2).c_str(),
73 DirectionToString(change.direction).c_str());
75 case CHANGE_TYPE_NODE_DELETED:
76 return base::StringPrintf("ViewDeleted view=%s",
77 ViewIdToString(change.view_id).c_str());
79 case CHANGE_TYPE_NODE_VISIBILITY_CHANGED:
80 return base::StringPrintf("VisibilityChanged view=%s visible=%s",
81 ViewIdToString(change.view_id).c_str(),
82 change.bool_value ? "true" : "false");
84 case CHANGE_TYPE_NODE_DRAWN_STATE_CHANGED:
85 return base::StringPrintf("DrawnStateChanged view=%s drawn=%s",
86 ViewIdToString(change.view_id).c_str(),
87 change.bool_value ? "true" : "false");
89 case CHANGE_TYPE_INPUT_EVENT:
90 return base::StringPrintf("InputEvent view=%s event_action=%d",
91 ViewIdToString(change.view_id).c_str(),
92 change.event_action);
94 case CHANGE_TYPE_PROPERTY_CHANGED:
95 return base::StringPrintf("PropertyChanged view=%s key=%s value=%s",
96 ViewIdToString(change.view_id).c_str(),
97 change.property_key.c_str(),
98 change.property_value.c_str());
100 case CHANGE_TYPE_DELEGATE_EMBED:
101 return base::StringPrintf("DelegateEmbed url=%s",
102 change.embed_url.data());
104 case CHANGE_TYPE_FOCUSED:
105 return base::StringPrintf("Focused id=%s",
106 ViewIdToString(change.view_id).c_str());
108 return std::string();
111 } // namespace
113 std::vector<std::string> ChangesToDescription1(
114 const std::vector<Change>& changes) {
115 std::vector<std::string> strings(changes.size());
116 for (size_t i = 0; i < changes.size(); ++i)
117 strings[i] = ChangeToDescription1(changes[i]);
118 return strings;
121 std::string SingleChangeToDescription(const std::vector<Change>& changes) {
122 std::string result;
123 for (auto& change : changes) {
124 if (!result.empty())
125 result += "\n";
126 result += ChangeToDescription1(change);
128 return result;
131 std::string SingleViewDescription(const std::vector<TestView>& views) {
132 if (views.size() != 1u)
133 return "more than one changes and expected only one";
134 return views[0].ToString();
137 std::string ChangeViewDescription(const std::vector<Change>& changes) {
138 if (changes.size() != 1)
139 return std::string();
140 std::vector<std::string> view_strings(changes[0].views.size());
141 for (size_t i = 0; i < changes[0].views.size(); ++i)
142 view_strings[i] = "[" + changes[0].views[i].ToString() + "]";
143 return base::JoinString(view_strings, ",");
146 TestView ViewDataToTestView(const ViewDataPtr& data) {
147 TestView view;
148 view.parent_id = data->parent_id;
149 view.view_id = data->view_id;
150 view.visible = data->visible;
151 view.drawn = data->drawn;
152 view.properties =
153 data->properties.To<std::map<std::string, std::vector<uint8_t>>>();
154 return view;
157 void ViewDatasToTestViews(const Array<ViewDataPtr>& data,
158 std::vector<TestView>* test_views) {
159 for (size_t i = 0; i < data.size(); ++i)
160 test_views->push_back(ViewDataToTestView(data[i]));
163 Change::Change()
164 : type(CHANGE_TYPE_EMBED),
165 connection_id(0),
166 view_id(0),
167 view_id2(0),
168 view_id3(0),
169 event_action(0),
170 direction(mojo::ORDER_DIRECTION_ABOVE),
171 bool_value(false) {
174 Change::~Change() {
177 TestChangeTracker::TestChangeTracker()
178 : delegate_(NULL) {
181 TestChangeTracker::~TestChangeTracker() {
184 void TestChangeTracker::OnEmbed(mojo::ConnectionSpecificId connection_id,
185 ViewDataPtr root) {
186 Change change;
187 change.type = CHANGE_TYPE_EMBED;
188 change.connection_id = connection_id;
189 change.views.push_back(ViewDataToTestView(root));
190 AddChange(change);
193 void TestChangeTracker::OnEmbedForDescendant(mojo::Id view_id) {
194 Change change;
195 change.type = CHANGE_TYPE_EMBED_FOR_DESCENDANT;
196 change.view_id = view_id;
197 AddChange(change);
200 void TestChangeTracker::OnEmbeddedAppDisconnected(Id view_id) {
201 Change change;
202 change.type = CHANGE_TYPE_EMBEDDED_APP_DISCONNECTED;
203 change.view_id = view_id;
204 AddChange(change);
207 void TestChangeTracker::OnViewBoundsChanged(Id view_id,
208 mojo::RectPtr old_bounds,
209 mojo::RectPtr new_bounds) {
210 Change change;
211 change.type = CHANGE_TYPE_NODE_BOUNDS_CHANGED;
212 change.view_id = view_id;
213 change.bounds.x = old_bounds->x;
214 change.bounds.y = old_bounds->y;
215 change.bounds.width = old_bounds->width;
216 change.bounds.height = old_bounds->height;
217 change.bounds2.x = new_bounds->x;
218 change.bounds2.y = new_bounds->y;
219 change.bounds2.width = new_bounds->width;
220 change.bounds2.height = new_bounds->height;
221 AddChange(change);
224 void TestChangeTracker::OnUnembed() {
225 Change change;
226 change.type = CHANGE_TYPE_UNEMBED;
227 AddChange(change);
230 void TestChangeTracker::OnViewViewportMetricsChanged(
231 mojo::ViewportMetricsPtr old_metrics,
232 mojo::ViewportMetricsPtr new_metrics) {
233 Change change;
234 change.type = CHANGE_TYPE_NODE_VIEWPORT_METRICS_CHANGED;
235 // NOT IMPLEMENTED
236 AddChange(change);
239 void TestChangeTracker::OnViewHierarchyChanged(Id view_id,
240 Id new_parent_id,
241 Id old_parent_id,
242 Array<ViewDataPtr> views) {
243 Change change;
244 change.type = CHANGE_TYPE_NODE_HIERARCHY_CHANGED;
245 change.view_id = view_id;
246 change.view_id2 = new_parent_id;
247 change.view_id3 = old_parent_id;
248 ViewDatasToTestViews(views, &change.views);
249 AddChange(change);
252 void TestChangeTracker::OnViewReordered(Id view_id,
253 Id relative_view_id,
254 mojo::OrderDirection direction) {
255 Change change;
256 change.type = CHANGE_TYPE_NODE_REORDERED;
257 change.view_id = view_id;
258 change.view_id2 = relative_view_id;
259 change.direction = direction;
260 AddChange(change);
263 void TestChangeTracker::OnViewDeleted(Id view_id) {
264 Change change;
265 change.type = CHANGE_TYPE_NODE_DELETED;
266 change.view_id = view_id;
267 AddChange(change);
270 void TestChangeTracker::OnViewVisibilityChanged(Id view_id, bool visible) {
271 Change change;
272 change.type = CHANGE_TYPE_NODE_VISIBILITY_CHANGED;
273 change.view_id = view_id;
274 change.bool_value = visible;
275 AddChange(change);
278 void TestChangeTracker::OnViewDrawnStateChanged(Id view_id, bool drawn) {
279 Change change;
280 change.type = CHANGE_TYPE_NODE_DRAWN_STATE_CHANGED;
281 change.view_id = view_id;
282 change.bool_value = drawn;
283 AddChange(change);
286 void TestChangeTracker::OnViewInputEvent(Id view_id, mojo::EventPtr event) {
287 Change change;
288 change.type = CHANGE_TYPE_INPUT_EVENT;
289 change.view_id = view_id;
290 change.event_action = event->action;
291 AddChange(change);
294 void TestChangeTracker::OnViewSharedPropertyChanged(Id view_id,
295 String name,
296 Array<uint8_t> data) {
297 Change change;
298 change.type = CHANGE_TYPE_PROPERTY_CHANGED;
299 change.view_id = view_id;
300 change.property_key = name;
301 if (data.is_null())
302 change.property_value = "NULL";
303 else
304 change.property_value = data.To<std::string>();
305 AddChange(change);
308 void TestChangeTracker::OnViewFocused(mojo::Id view_id) {
309 Change change;
310 change.type = CHANGE_TYPE_FOCUSED;
311 change.view_id = view_id;
312 AddChange(change);
315 void TestChangeTracker::DelegateEmbed(const String& url) {
316 Change change;
317 change.type = CHANGE_TYPE_DELEGATE_EMBED;
318 change.embed_url = url;
319 AddChange(change);
322 void TestChangeTracker::AddChange(const Change& change) {
323 changes_.push_back(change);
324 if (delegate_)
325 delegate_->OnChangeAdded();
328 TestView::TestView() {}
330 TestView::~TestView() {}
332 std::string TestView::ToString() const {
333 return base::StringPrintf("view=%s parent=%s",
334 ViewIdToString(view_id).c_str(),
335 ViewIdToString(parent_id).c_str());
338 std::string TestView::ToString2() const {
339 return base::StringPrintf("view=%s parent=%s visible=%s drawn=%s",
340 ViewIdToString(view_id).c_str(),
341 ViewIdToString(parent_id).c_str(),
342 visible ? "true" : "false",
343 drawn ? "true" : "false");
346 } // namespace view_manager