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 "mojo/services/view_manager/test_change_tracker.h" |
| 6 |
| 7 #include "base/strings/string_util.h" |
| 8 #include "base/strings/stringprintf.h" |
| 9 #include "mojo/common/common_type_converters.h" |
| 10 #include "third_party/mojo_services/src/view_manager/public/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::ORDER_DIRECTION_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 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(0), |
| 156 direction(mojo::ORDER_DIRECTION_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 |