#ifndef UI_VIEWS_ACCESSIBILITY_AX_WINDOW_OBJ_WRAPPER_H_
#define UI_VIEWS_ACCESSIBILITY_AX_WINDOW_OBJ_WRAPPER_H_
#include <stdint.h>
#include <string>
#include <vector>
#include "base/memory/raw_ptr.h"
#include "base/scoped_observation.h"
#include "ui/accessibility/ax_enums.mojom-forward.h"
#include "ui/accessibility/platform/ax_unique_id.h"
#include "ui/aura/window.h"
#include "ui/aura/window_observer.h"
#include "ui/base/ime/input_method.h"
#include "ui/base/ime/input_method_observer.h"
#include "ui/views/accessibility/ax_aura_obj_wrapper.h"
namespace ui {
class InputMethod;
}
namespace views {
class AXAuraObjCache;
class AXWindowObjWrapper : public AXAuraObjWrapper,
public ui::InputMethodObserver,
public aura::WindowObserver {
public:
AXWindowObjWrapper(AXAuraObjCache* aura_obj_cache, aura::Window* window);
AXWindowObjWrapper(const AXWindowObjWrapper&) = delete;
AXWindowObjWrapper& operator=(const AXWindowObjWrapper&) = delete;
~AXWindowObjWrapper() override;
bool HandleAccessibleAction(const ui::AXActionData& action) override;
AXAuraObjWrapper* GetParent() override;
void GetChildren(std::vector<raw_ptr<AXAuraObjWrapper, VectorExperimental>>*
out_children) override;
void Serialize(ui::AXNodeData* out_node_data) override;
ui::AXNodeID GetUniqueId() const final;
std::string ToString() const override;
void OnFocus() override {}
void OnBlur() override {}
void OnInputMethodDestroyed(const ui::InputMethod* input_method) override {}
void OnTextInputStateChanged(const ui::TextInputClient* client) override {}
void OnCaretBoundsChanged(const ui::TextInputClient* client) override;
void OnWindowDestroyed(aura::Window* window) override;
void OnWindowDestroying(aura::Window* window) override;
void OnWindowHierarchyChanged(const HierarchyChangeParams& params) override;
void OnWindowBoundsChanged(aura::Window* window,
const gfx::Rect& old_bounds,
const gfx::Rect& new_bounds,
ui::PropertyChangeReason reason) override;
void OnWindowPropertyChanged(aura::Window* window,
const void* key,
intptr_t old) override;
void OnWindowVisibilityChanged(aura::Window* window, bool visible) override;
void OnWindowTransformed(aura::Window* window,
ui::PropertyChangeReason reason) override;
void OnWindowTitleChanged(aura::Window* window) override;
private:
void FireEvent(ax::mojom::Event event_type);
gfx::Rect GetCaretBounds(const ui::TextInputClient* client);
const raw_ptr<aura::Window> window_;
const bool is_root_window_;
const ui::AXUniqueId unique_id_{ui::AXUniqueId::Create()};
bool window_destroying_ = false;
base::ScopedObservation<aura::Window, aura::WindowObserver> observation_{
this};
base::ScopedObservation<ui::InputMethod, ui::InputMethodObserver>
ime_observation_{this};
};
}
#endif