OLD | NEW |
| (Empty) |
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 #include "services/view_manager/test_change_tracker.h" | |
6 | |
7 #include "base/strings/string_util.h" | |
8 #include "base/strings/stringprintf.h" | |
9 #include "mojo/converters/array_string/array_string_type_converters.h" | |
10 #include "mojo/services/view_manager/cpp/util.h" | |
11 | |
12 using mojo::Array; | |
13 using mojo::Id; | |
14 using mojo::ViewDataPtr; | |
15 using mojo::String; | |
16 | |
17 namespace view_manager { | |
18 | |
19 std::string ViewIdToString(Id id) { | |
20 return (id == 0) ? "null" : base::StringPrintf("%d,%d", mojo::HiWord(id), | |
21 mojo::LoWord(id)); | |
22 } | |
23 | |
24 namespace { | |
25 | |
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); | |
29 } | |
30 | |
31 std::string DirectionToString(mojo::OrderDirection direction) { | |
32 return direction == mojo::OrderDirection::ABOVE ? "above" : "below"; | |
33 } | |
34 | |
35 std::string ChangeToDescription1(const Change& change) { | |
36 switch (change.type) { | |
37 case CHANGE_TYPE_EMBED: | |
38 return base::StringPrintf("OnEmbed creator=%s", | |
39 change.creator_url.data()); | |
40 | |
41 case CHANGE_TYPE_EMBEDDED_APP_DISCONNECTED: | |
42 return base::StringPrintf("OnEmbeddedAppDisconnected view=%s", | |
43 ViewIdToString(change.view_id).c_str()); | |
44 | |
45 case CHANGE_TYPE_NODE_BOUNDS_CHANGED: | |
46 return base::StringPrintf( | |
47 "BoundsChanged view=%s old_bounds=%s new_bounds=%s", | |
48 ViewIdToString(change.view_id).c_str(), | |
49 RectToString(change.bounds).c_str(), | |
50 RectToString(change.bounds2).c_str()); | |
51 | |
52 case CHANGE_TYPE_NODE_VIEWPORT_METRICS_CHANGED: | |
53 // TODO(sky): Not implemented. | |
54 return "ViewportMetricsChanged"; | |
55 | |
56 case CHANGE_TYPE_NODE_HIERARCHY_CHANGED: | |
57 return base::StringPrintf( | |
58 "HierarchyChanged view=%s new_parent=%s old_parent=%s", | |
59 ViewIdToString(change.view_id).c_str(), | |
60 ViewIdToString(change.view_id2).c_str(), | |
61 ViewIdToString(change.view_id3).c_str()); | |
62 | |
63 case CHANGE_TYPE_NODE_REORDERED: | |
64 return base::StringPrintf("Reordered view=%s relative=%s direction=%s", | |
65 ViewIdToString(change.view_id).c_str(), | |
66 ViewIdToString(change.view_id2).c_str(), | |
67 DirectionToString(change.direction).c_str()); | |
68 | |
69 case CHANGE_TYPE_NODE_DELETED: | |
70 return base::StringPrintf("ViewDeleted view=%s", | |
71 ViewIdToString(change.view_id).c_str()); | |
72 | |
73 case CHANGE_TYPE_NODE_VISIBILITY_CHANGED: | |
74 return base::StringPrintf("VisibilityChanged view=%s visible=%s", | |
75 ViewIdToString(change.view_id).c_str(), | |
76 change.bool_value ? "true" : "false"); | |
77 | |
78 case CHANGE_TYPE_NODE_DRAWN_STATE_CHANGED: | |
79 return base::StringPrintf("DrawnStateChanged view=%s drawn=%s", | |
80 ViewIdToString(change.view_id).c_str(), | |
81 change.bool_value ? "true" : "false"); | |
82 | |
83 case CHANGE_TYPE_INPUT_EVENT: | |
84 return base::StringPrintf("InputEvent view=%s event_action=%d", | |
85 ViewIdToString(change.view_id).c_str(), | |
86 static_cast<int32_t>(change.event_action)); | |
87 | |
88 case CHANGE_TYPE_PROPERTY_CHANGED: | |
89 return base::StringPrintf("PropertyChanged view=%s key=%s value=%s", | |
90 ViewIdToString(change.view_id).c_str(), | |
91 change.property_key.c_str(), | |
92 change.property_value.c_str()); | |
93 | |
94 case CHANGE_TYPE_DELEGATE_EMBED: | |
95 return base::StringPrintf("DelegateEmbed url=%s", | |
96 change.embed_url.data()); | |
97 } | |
98 return std::string(); | |
99 } | |
100 | |
101 } // namespace | |
102 | |
103 std::vector<std::string> ChangesToDescription1( | |
104 const std::vector<Change>& changes) { | |
105 std::vector<std::string> strings(changes.size()); | |
106 for (size_t i = 0; i < changes.size(); ++i) | |
107 strings[i] = ChangeToDescription1(changes[i]); | |
108 return strings; | |
109 } | |
110 | |
111 std::string SingleChangeToDescription(const std::vector<Change>& changes) { | |
112 if (changes.size() != 1u) | |
113 return std::string(); | |
114 return ChangeToDescription1(changes[0]); | |
115 } | |
116 | |
117 std::string SingleViewDescription(const std::vector<TestView>& views) { | |
118 if (views.size() != 1u) | |
119 return std::string(); | |
120 return views[0].ToString(); | |
121 } | |
122 | |
123 std::string ChangeViewDescription(const std::vector<Change>& changes) { | |
124 if (changes.size() != 1) | |
125 return std::string(); | |
126 std::vector<std::string> view_strings(changes[0].views.size()); | |
127 for (size_t i = 0; i < changes[0].views.size(); ++i) | |
128 view_strings[i] = "[" + changes[0].views[i].ToString() + "]"; | |
129 return JoinString(view_strings, ','); | |
130 } | |
131 | |
132 TestView ViewDataToTestView(const ViewDataPtr& data) { | |
133 TestView view; | |
134 view.parent_id = data->parent_id; | |
135 view.view_id = data->view_id; | |
136 view.visible = data->visible; | |
137 view.drawn = data->drawn; | |
138 view.properties = | |
139 data->properties.To<std::map<std::string, std::vector<uint8_t>>>(); | |
140 return view; | |
141 } | |
142 | |
143 void ViewDatasToTestViews(const Array<ViewDataPtr>& data, | |
144 std::vector<TestView>* test_views) { | |
145 for (size_t i = 0; i < data.size(); ++i) | |
146 test_views->push_back(ViewDataToTestView(data[i])); | |
147 } | |
148 | |
149 Change::Change() | |
150 : type(CHANGE_TYPE_EMBED), | |
151 connection_id(0), | |
152 view_id(0), | |
153 view_id2(0), | |
154 view_id3(0), | |
155 event_action(mojo::EventType::UNKNOWN), | |
156 direction(mojo::OrderDirection::ABOVE), | |
157 bool_value(false) { | |
158 } | |
159 | |
160 Change::~Change() { | |
161 } | |
162 | |
163 TestChangeTracker::TestChangeTracker() | |
164 : delegate_(NULL) { | |
165 } | |
166 | |
167 TestChangeTracker::~TestChangeTracker() { | |
168 } | |
169 | |
170 void TestChangeTracker::OnEmbed(mojo::ConnectionSpecificId connection_id, | |
171 const String& creator_url, | |
172 ViewDataPtr root) { | |
173 Change change; | |
174 change.type = CHANGE_TYPE_EMBED; | |
175 change.connection_id = connection_id; | |
176 change.creator_url = creator_url; | |
177 change.views.push_back(ViewDataToTestView(root)); | |
178 AddChange(change); | |
179 } | |
180 | |
181 void TestChangeTracker::OnEmbeddedAppDisconnected(Id view_id) { | |
182 Change change; | |
183 change.type = CHANGE_TYPE_EMBEDDED_APP_DISCONNECTED; | |
184 change.view_id = view_id; | |
185 AddChange(change); | |
186 } | |
187 | |
188 void TestChangeTracker::OnViewBoundsChanged(Id view_id, | |
189 mojo::RectPtr old_bounds, | |
190 mojo::RectPtr new_bounds) { | |
191 Change change; | |
192 change.type = CHANGE_TYPE_NODE_BOUNDS_CHANGED; | |
193 change.view_id = view_id; | |
194 change.bounds.x = old_bounds->x; | |
195 change.bounds.y = old_bounds->y; | |
196 change.bounds.width = old_bounds->width; | |
197 change.bounds.height = old_bounds->height; | |
198 change.bounds2.x = new_bounds->x; | |
199 change.bounds2.y = new_bounds->y; | |
200 change.bounds2.width = new_bounds->width; | |
201 change.bounds2.height = new_bounds->height; | |
202 AddChange(change); | |
203 } | |
204 | |
205 void TestChangeTracker::OnViewViewportMetricsChanged( | |
206 mojo::ViewportMetricsPtr old_metrics, | |
207 mojo::ViewportMetricsPtr new_metrics) { | |
208 Change change; | |
209 change.type = CHANGE_TYPE_NODE_VIEWPORT_METRICS_CHANGED; | |
210 // NOT IMPLEMENTED | |
211 AddChange(change); | |
212 } | |
213 | |
214 void TestChangeTracker::OnViewHierarchyChanged(Id view_id, | |
215 Id new_parent_id, | |
216 Id old_parent_id, | |
217 Array<ViewDataPtr> views) { | |
218 Change change; | |
219 change.type = CHANGE_TYPE_NODE_HIERARCHY_CHANGED; | |
220 change.view_id = view_id; | |
221 change.view_id2 = new_parent_id; | |
222 change.view_id3 = old_parent_id; | |
223 ViewDatasToTestViews(views, &change.views); | |
224 AddChange(change); | |
225 } | |
226 | |
227 void TestChangeTracker::OnViewReordered(Id view_id, | |
228 Id relative_view_id, | |
229 mojo::OrderDirection direction) { | |
230 Change change; | |
231 change.type = CHANGE_TYPE_NODE_REORDERED; | |
232 change.view_id = view_id; | |
233 change.view_id2 = relative_view_id; | |
234 change.direction = direction; | |
235 AddChange(change); | |
236 } | |
237 | |
238 void TestChangeTracker::OnViewDeleted(Id view_id) { | |
239 Change change; | |
240 change.type = CHANGE_TYPE_NODE_DELETED; | |
241 change.view_id = view_id; | |
242 AddChange(change); | |
243 } | |
244 | |
245 void TestChangeTracker::OnViewVisibilityChanged(Id view_id, bool visible) { | |
246 Change change; | |
247 change.type = CHANGE_TYPE_NODE_VISIBILITY_CHANGED; | |
248 change.view_id = view_id; | |
249 change.bool_value = visible; | |
250 AddChange(change); | |
251 } | |
252 | |
253 void TestChangeTracker::OnViewDrawnStateChanged(Id view_id, bool drawn) { | |
254 Change change; | |
255 change.type = CHANGE_TYPE_NODE_DRAWN_STATE_CHANGED; | |
256 change.view_id = view_id; | |
257 change.bool_value = drawn; | |
258 AddChange(change); | |
259 } | |
260 | |
261 void TestChangeTracker::OnViewInputEvent(Id view_id, mojo::EventPtr event) { | |
262 Change change; | |
263 change.type = CHANGE_TYPE_INPUT_EVENT; | |
264 change.view_id = view_id; | |
265 change.event_action = event->action; | |
266 AddChange(change); | |
267 } | |
268 | |
269 void TestChangeTracker::OnViewSharedPropertyChanged(Id view_id, | |
270 String name, | |
271 Array<uint8_t> data) { | |
272 Change change; | |
273 change.type = CHANGE_TYPE_PROPERTY_CHANGED; | |
274 change.view_id = view_id; | |
275 change.property_key = name; | |
276 if (data.is_null()) | |
277 change.property_value = "NULL"; | |
278 else | |
279 change.property_value = data.To<std::string>(); | |
280 AddChange(change); | |
281 } | |
282 | |
283 void TestChangeTracker::DelegateEmbed(const String& url) { | |
284 Change change; | |
285 change.type = CHANGE_TYPE_DELEGATE_EMBED; | |
286 change.embed_url = url; | |
287 AddChange(change); | |
288 } | |
289 | |
290 void TestChangeTracker::AddChange(const Change& change) { | |
291 changes_.push_back(change); | |
292 if (delegate_) | |
293 delegate_->OnChangeAdded(); | |
294 } | |
295 | |
296 TestView::TestView() {} | |
297 | |
298 TestView::~TestView() {} | |
299 | |
300 std::string TestView::ToString() const { | |
301 return base::StringPrintf("view=%s parent=%s", | |
302 ViewIdToString(view_id).c_str(), | |
303 ViewIdToString(parent_id).c_str()); | |
304 } | |
305 | |
306 std::string TestView::ToString2() const { | |
307 return base::StringPrintf("view=%s parent=%s visible=%s drawn=%s", | |
308 ViewIdToString(view_id).c_str(), | |
309 ViewIdToString(parent_id).c_str(), | |
310 visible ? "true" : "false", | |
311 drawn ? "true" : "false"); | |
312 } | |
313 | |
314 } // namespace view_manager | |
OLD | NEW |