Index: mojo/ui/associates/mock_view_inspector.cc |
diff --git a/mojo/ui/associates/mock_view_inspector.cc b/mojo/ui/associates/mock_view_inspector.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..b24a861209b36493043e5644c54091f3aa3686d3 |
--- /dev/null |
+++ b/mojo/ui/associates/mock_view_inspector.cc |
@@ -0,0 +1,92 @@ |
+// Copyright 2016 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/ui/associates/mock_view_inspector.h" |
+ |
+#include "base/bind.h" |
+ |
+namespace mojo { |
+namespace ui { |
+ |
+MockViewInspector::MockViewInspector() {} |
+ |
+MockViewInspector::~MockViewInspector() { |
+ for (const auto& pair : hit_tester_callbacks_) |
+ pair.second.Run(false); |
+} |
+ |
+void MockViewInspector::SetHitTester( |
+ uint32_t view_tree_token_value, |
+ mojo::gfx::composition::HitTester* hit_tester) { |
+ DCHECK(view_tree_token_value); |
+ |
+ hit_testers_.erase(hit_testers_.find(view_tree_token_value), |
+ hit_testers_.end()); |
+ if (hit_tester) |
+ hit_testers_.emplace(view_tree_token_value, hit_tester); |
+ |
+ auto pair = hit_tester_callbacks_.equal_range(view_tree_token_value); |
+ for (auto it = pair.first; it != pair.second; ++it) |
+ it->second.Run(hit_tester != nullptr); |
+ hit_tester_callbacks_.erase(pair.first, pair.second); |
+} |
+ |
+void MockViewInspector::CloseHitTesterBindings() { |
+ hit_tester_bindings_.CloseAllBindings(); |
+} |
+ |
+void MockViewInspector::SetSceneMapping(uint32_t scene_token_value, |
+ mojo::ui::ViewTokenPtr view_token) { |
+ DCHECK(scene_token_value); |
+ |
+ if (view_token) |
+ scene_mappings_.emplace(scene_token_value, view_token.Pass()); |
+ else |
+ scene_mappings_.erase(scene_mappings_.find(scene_token_value), |
+ scene_mappings_.end()); |
+} |
+ |
+void MockViewInspector::GetHitTester( |
+ mojo::ui::ViewTreeTokenPtr view_tree_token, |
+ mojo::InterfaceRequest<mojo::gfx::composition::HitTester> |
+ hit_tester_request, |
+ const GetHitTesterCallback& callback) { |
+ DCHECK(view_tree_token); |
+ DCHECK(view_tree_token->value); |
+ DCHECK(hit_tester_request.is_pending()); |
+ |
+ hit_tester_lookups_++; |
+ |
+ auto it = hit_testers_.find(view_tree_token->value); |
+ if (it == hit_testers_.end()) { |
+ callback.Run(false); |
+ return; |
+ } |
+ |
+ hit_tester_bindings_.AddBinding(it->second, hit_tester_request.Pass()); |
+ hit_tester_callbacks_.emplace(view_tree_token->value, callback); |
+} |
+ |
+void MockViewInspector::ResolveScenes( |
+ mojo::Array<mojo::gfx::composition::SceneTokenPtr> scene_tokens, |
+ const ResolveScenesCallback& callback) { |
+ DCHECK(!scene_tokens.is_null()); |
+ |
+ scene_lookups_++; |
+ |
+ mojo::Array<mojo::ui::ViewTokenPtr> view_tokens; |
+ view_tokens.resize(scene_tokens.size()); |
+ for (size_t i = 0; i < scene_tokens.size(); i++) { |
+ DCHECK(scene_tokens[i]); |
+ DCHECK(scene_tokens[i]->value); |
+ auto it = scene_mappings_.find(scene_tokens[i]->value); |
+ if (it != scene_mappings_.end()) |
+ view_tokens[i] = it->second.Clone(); |
+ } |
+ |
+ callback.Run(view_tokens.Pass()); |
+} |
+ |
+} // namespace ui |
+} // namespace mojo |