#ifndef FUCHSIA_WEB_WEBENGINE_BROWSER_FAKE_SEMANTICS_MANAGER_H_
#define FUCHSIA_WEB_WEBENGINE_BROWSER_FAKE_SEMANTICS_MANAGER_H_
#include <fuchsia/accessibility/semantics/cpp/fidl.h>
#include <fuchsia/accessibility/semantics/cpp/fidl_test_base.h>
#include <lib/fidl/cpp/binding.h>
#include <optional>
#include "base/functional/callback.h"
#include "fuchsia_web/webengine/browser/fake_semantic_tree.h"
class FakeSemanticsManager : public fuchsia::accessibility::semantics::testing::
SemanticsManager_TestBase {
public:
FakeSemanticsManager();
~FakeSemanticsManager() override;
FakeSemanticsManager(const FakeSemanticsManager&) = delete;
FakeSemanticsManager& operator=(const FakeSemanticsManager&) = delete;
bool is_view_registered() const { return view_ref_.reference.is_valid(); }
bool is_listener_valid() const { return static_cast<bool>(listener_); }
FakeSemanticTree* semantic_tree() { return &semantic_tree_; }
int32_t num_actions_handled() { return num_actions_handled_; }
int32_t num_actions_unhandled() { return num_actions_unhandled_; }
void SetSemanticsModeEnabled(bool is_enabled);
void WaitUntilViewRegistered();
uint32_t HitTestAtPointSync(fuchsia::math::PointF target_point);
void CheckNumActions();
void RequestAccessibilityAction(
uint32_t node_id,
fuchsia::accessibility::semantics::Action action);
bool RequestAccessibilityActionSync(
uint32_t node_id,
fuchsia::accessibility::semantics::Action action);
void RunUntilNumActionsHandledEquals(int32_t num_actions);
void RegisterViewForSemantics(
fuchsia::ui::views::ViewRef view_ref,
fidl::InterfaceHandle<fuchsia::accessibility::semantics::SemanticListener>
listener,
fidl::InterfaceRequest<fuchsia::accessibility::semantics::SemanticTree>
semantic_tree_request) final;
void NotImplemented_(const std::string& name) final;
private:
fuchsia::ui::views::ViewRef view_ref_;
fuchsia::accessibility::semantics::SemanticListenerPtr listener_;
FakeSemanticTree semantic_tree_;
std::optional<uint32_t> hit_test_result_;
int32_t num_actions_handled_ = 0;
int32_t num_actions_unhandled_ = 0;
int32_t expected_num_actions_ = 0;
base::RepeatingClosure on_expected_num_actions_;
base::OnceClosure on_view_registered_;
};
#endif