#ifndef UI_VIEWS_TEST_AX_EVENT_COUNTER_H_
#define UI_VIEWS_TEST_AX_EVENT_COUNTER_H_
#include <utility>
#include "base/containers/flat_map.h"
#include "base/memory/raw_ptr.h"
#include "base/run_loop.h"
#include "base/scoped_observation.h"
#include "ui/accessibility/ax_enums.mojom.h"
#include "ui/views/accessibility/ax_update_notifier.h"
#include "ui/views/accessibility/ax_update_observer.h"
namespace views::test {
class AXEventCounter : public views::AXUpdateObserver {
public:
explicit AXEventCounter(views::AXUpdateNotifier* event_manager);
~AXEventCounter() override;
AXEventCounter(const AXEventCounter&) = delete;
AXEventCounter& operator=(const AXEventCounter&) = delete;
int GetCount(ax::mojom::Event event_type) const;
int GetCount(ax::mojom::Event event_type, ax::mojom::Role role) const;
int GetCount(ax::mojom::Event event_type, views::View* view) const;
void ResetAllCounts();
void WaitForEvent(ax::mojom::Event event_type);
void OnViewEvent(views::View* view, ax::mojom::Event event_type) override;
private:
mutable base::flat_map<ax::mojom::Event, int> event_counts_;
mutable base::flat_map<std::pair<ax::mojom::Event, ax::mojom::Role>, int>
event_counts_for_role_;
mutable base::flat_map<std::pair<ax::mojom::Event, views::View*>, int>
event_counts_for_view_;
ax::mojom::Event wait_for_event_type_ = ax::mojom::Event::kNone;
raw_ptr<base::RunLoop> run_loop_ = nullptr;
base::ScopedObservation<views::AXUpdateNotifier, views::AXUpdateObserver>
tree_observation_{this};
};
}
#endif