blob: b24a861209b36493043e5644c54091f3aa3686d3 [file] [log] [blame]
// 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