blob: 490eeec82053ef1a60f95c10f468c4fd522aee80 [file] [log] [blame]
// Copyright 2018 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_ASH_ARC_ACCESSIBILITY_ACCESSIBILITY_INFO_DATA_WRAPPER_H_
#define CHROME_BROWSER_ASH_ARC_ACCESSIBILITY_ACCESSIBILITY_INFO_DATA_WRAPPER_H_
#include "ash/components/arc/mojom/accessibility_helper.mojom.h"
#include <string>
#include <vector>
namespace ui {
struct AXNodeData;
} // namespace ui
namespace arc {
class AXTreeSourceArc;
// AccessibilityInfoDataWrapper represents a single ARC++ node or window. This
// class can be used by AXTreeSourceArc to encapsulate ARC-side information
// which maps to a single AXNodeData.
class AccessibilityInfoDataWrapper {
public:
explicit AccessibilityInfoDataWrapper(AXTreeSourceArc* tree_source);
virtual ~AccessibilityInfoDataWrapper() = default;
// True if this AccessibilityInfoDataWrapper represents an Android node, false
// if it represents an Android window.
virtual bool IsNode() const = 0;
// These getters return nullptr if the class doesn't hold the specified type
// of data.
virtual mojom::AccessibilityNodeInfoData* GetNode() const = 0;
virtual mojom::AccessibilityWindowInfoData* GetWindow() const = 0;
virtual int32_t GetId() const = 0;
virtual const gfx::Rect GetBounds() const = 0;
virtual bool IsVisibleToUser() const = 0;
virtual bool IsVirtualNode() const = 0;
virtual bool IsIgnored() const = 0;
virtual bool IsImportantInAndroid() const = 0;
virtual bool IsFocusableInFullFocusMode() const = 0;
virtual bool IsAccessibilityFocusableContainer() const = 0;
virtual void PopulateAXRole(ui::AXNodeData* out_data) const = 0;
virtual void PopulateAXState(ui::AXNodeData* out_data) const = 0;
virtual void Serialize(ui::AXNodeData* out_data) const;
virtual std::string ComputeAXName(bool do_recursive) const = 0;
virtual void GetChildren(
std::vector<AccessibilityInfoDataWrapper*>* children) const = 0;
virtual int32_t GetWindowId() const = 0;
protected:
AXTreeSourceArc* tree_source_;
private:
// Populate bounds of a node which can be passed to AXNodeData.location.
// Bounds are returned in the following coordinates depending on whether it's
// root or not.
// - Root node is relative to its container, i.e. focused window.
// - Non-root node is relative to the root node of this tree.
void PopulateBounds(ui::AXNodeData* out_data) const;
};
} // namespace arc
#endif // CHROME_BROWSER_ASH_ARC_ACCESSIBILITY_ACCESSIBILITY_INFO_DATA_WRAPPER_H_