blob: 2df99d70871eb00d977f32657f58c1aebc6fc17b [file] [log] [blame]
// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef UI_VIEWS_ACCESSIBILITY_ATOMIC_VIEW_AX_TREE_MANAGER_H_
#define UI_VIEWS_ACCESSIBILITY_ATOMIC_VIEW_AX_TREE_MANAGER_H_
#include <memory>
#include <string>
#include "base/memory/raw_ptr.h"
#include "ui/accessibility/ax_tree.h"
#include "ui/accessibility/ax_tree_manager.h"
#include "ui/accessibility/platform/ax_platform_tree_manager.h"
#include "ui/views/accessibility/view_ax_platform_node_delegate.h"
namespace views {
// This class manages a "tree" which consists of a single node. This is intended
// for use with Views, enabling the UIA ITextProvider and ITextRangeProvider,
// and creating AXPosition objects. This class is TEMPORARY and not a long term
// solution.
// TODO(crbug.com/40924888): Remove this temporary class once the ViewsAX
// project is completed.
class VIEWS_EXPORT AtomicViewAXTreeManager : public ui::AXPlatformTreeManager {
public:
static std::unique_ptr<AtomicViewAXTreeManager> Create(
ViewAXPlatformNodeDelegate* delegate,
const ui::AXNodeData& node_data);
friend std::unique_ptr<AtomicViewAXTreeManager> Create(
ViewAXPlatformNodeDelegate* delegate,
const ui::AXNodeData& node_data);
~AtomicViewAXTreeManager() override;
// AXTreeManager overrides.
bool IsView() const override;
ui::AXNode* GetNode(ui::AXNodeID node_id) const override;
ui::AXTreeID GetParentTreeID() const override;
ui::AXNode* GetRoot() const override;
ui::AXNode* GetParentNodeFromParentTree() const override;
// AXPlatformTreeManager overrides.
ui::AXPlatformNode* GetPlatformNodeFromTree(
ui::AXNodeID node_id) const override;
ui::AXPlatformNode* GetPlatformNodeFromTree(const ui::AXNode&) const override;
ui::AXPlatformNodeDelegate* RootDelegate() const override;
void ClearComputedRootData();
private:
explicit AtomicViewAXTreeManager(ViewAXPlatformNodeDelegate* delegate,
const ui::AXNodeData& node_data);
raw_ptr<ViewAXPlatformNodeDelegate> delegate_;
};
} // namespace views
#endif // UI_VIEWS_ACCESSIBILITY_ATOMIC_VIEW_AX_TREE_MANAGER_H_