-
Notifications
You must be signed in to change notification settings - Fork 6.7k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
ax_ui: JAWS and NVDA reads the characters as BLANK when traverse thro…
…ugh the characters using arrow keys This is a partial revert of crrev.com/c/3876499 with a difference of a new AXDummyTreeManager which is a blunt copy of TestAXTreeManager used as a hot fix. Later, TestAXTreeManager can be inherited from AXDummyTreeManager and even probably merged with AXTreeManagerBase or AXPlatformTreeManager. (cherry picked from commit 88f3833) Change-Id: I65e04a3875b1bdab53f839933e42d6423d292ab6 Bug: 1366311 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3910168 Reviewed-by: Nektarios Paisios <nektar@chromium.org> Commit-Queue: Nektarios Paisios <nektar@chromium.org> Cr-Original-Commit-Position: refs/heads/main@{#1051816} Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3922654 Reviewed-by: Srinivas Sista <srinivassista@chromium.org> Owners-Override: Srinivas Sista <srinivassista@chromium.org> Commit-Queue: Prudhvikumar Bommana <pbommana@google.com> Cr-Commit-Position: refs/branch-heads/5326@{#2} Cr-Branched-From: 1f40050-refs/heads/main@{#1051738}
- Loading branch information
Showing
6 changed files
with
160 additions
and
7 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,89 @@ | ||
// Copyright 2022 The Chromium Authors | ||
// Use of this source code is governed by a BSD-style license that can be | ||
// found in the LICENSE file. | ||
|
||
#include "ui/accessibility/ax_dummy_tree_manager.h" | ||
|
||
#include "ui/accessibility/ax_node.h" | ||
#include "ui/accessibility/ax_tree_data.h" | ||
#include "ui/accessibility/ax_tree_manager_map.h" | ||
|
||
namespace ui { | ||
|
||
AXDummyTreeManager::AXDummyTreeManager() = default; | ||
|
||
AXDummyTreeManager::AXDummyTreeManager(std::unique_ptr<AXTree> tree) | ||
: AXTreeManager(std::move(tree)) {} | ||
|
||
AXDummyTreeManager::AXDummyTreeManager(AXDummyTreeManager&& manager) | ||
: AXTreeManager(std::move(manager.ax_tree_)) { | ||
if (ax_tree_) { | ||
GetMap().RemoveTreeManager(GetTreeID()); | ||
GetMap().AddTreeManager(GetTreeID(), this); | ||
} | ||
} | ||
|
||
AXDummyTreeManager& AXDummyTreeManager::operator=( | ||
AXDummyTreeManager&& manager) { | ||
if (this == &manager) | ||
return *this; | ||
if (manager.ax_tree_) | ||
GetMap().RemoveTreeManager(manager.GetTreeID()); | ||
// std::move(nullptr) == nullptr, so no need to check if `manager.tree_` is | ||
// assigned. | ||
SetTree(std::move(manager.ax_tree_)); | ||
return *this; | ||
} | ||
|
||
AXDummyTreeManager::~AXDummyTreeManager() = default; | ||
|
||
void AXDummyTreeManager::DestroyTree() { | ||
if (!ax_tree_) | ||
return; | ||
|
||
GetMap().RemoveTreeManager(GetTreeID()); | ||
ax_tree_.reset(); | ||
} | ||
|
||
AXTree* AXDummyTreeManager::GetTree() const { | ||
DCHECK(ax_tree_) << "Did you forget to call SetTree?"; | ||
return ax_tree_.get(); | ||
} | ||
|
||
void AXDummyTreeManager::SetTree(std::unique_ptr<AXTree> tree) { | ||
if (ax_tree_) | ||
GetMap().RemoveTreeManager(GetTreeID()); | ||
|
||
ax_tree_ = std::move(tree); | ||
ax_tree_id_ = GetTreeID(); | ||
if (ax_tree_) | ||
GetMap().AddTreeManager(GetTreeID(), this); | ||
} | ||
|
||
AXNode* AXDummyTreeManager::GetNodeFromTree(const AXTreeID& tree_id, | ||
const AXNodeID node_id) const { | ||
return (ax_tree_ && GetTreeID() == tree_id) ? ax_tree_->GetFromId(node_id) | ||
: nullptr; | ||
} | ||
|
||
AXNode* AXDummyTreeManager::GetParentNodeFromParentTreeAsAXNode() const { | ||
AXTreeID parent_tree_id = GetParentTreeID(); | ||
AXDummyTreeManager* parent_manager = | ||
static_cast<AXDummyTreeManager*>(AXTreeManager::FromID(parent_tree_id)); | ||
if (!parent_manager) | ||
return nullptr; | ||
|
||
std::set<AXNodeID> host_node_ids = | ||
parent_manager->GetTree()->GetNodeIdsForChildTreeId(GetTreeID()); | ||
|
||
for (AXNodeID host_node_id : host_node_ids) { | ||
AXNode* parent_node = | ||
parent_manager->GetNodeFromTree(parent_tree_id, host_node_id); | ||
if (parent_node) | ||
return parent_node; | ||
} | ||
|
||
return nullptr; | ||
} | ||
|
||
} // namespace ui |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,54 @@ | ||
// Copyright 2022 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_ACCESSIBILITY_AX_DUMMY_TREE_MANAGER_H_ | ||
#define UI_ACCESSIBILITY_AX_DUMMY_TREE_MANAGER_H_ | ||
|
||
#include <memory> | ||
|
||
#include "ui/accessibility/ax_export.h" | ||
#include "ui/accessibility/ax_tree.h" | ||
#include "ui/accessibility/ax_tree_id.h" | ||
#include "ui/accessibility/ax_tree_manager.h" | ||
|
||
namespace ui { | ||
|
||
class AXNode; | ||
|
||
// A basic implementation of AXTreeManager. | ||
// | ||
// For simplicity, this class supports only a single tree and doesn't perform | ||
// any walking across multiple trees. | ||
class AX_EXPORT AXDummyTreeManager : public AXTreeManager { | ||
public: | ||
// This constructor does not create an empty AXTree. Call "SetTree" if you | ||
// need to manage a specific tree. Useful when you need to test for the | ||
// situation when no AXTree has been loaded yet. | ||
AXDummyTreeManager(); | ||
|
||
// Takes ownership of |tree|. | ||
explicit AXDummyTreeManager(std::unique_ptr<AXTree> tree); | ||
|
||
~AXDummyTreeManager() override; | ||
|
||
AXDummyTreeManager(const AXDummyTreeManager& manager) = delete; | ||
AXDummyTreeManager& operator=(const AXDummyTreeManager& manager) = delete; | ||
|
||
AXDummyTreeManager(AXDummyTreeManager&& manager); | ||
AXDummyTreeManager& operator=(AXDummyTreeManager&& manager); | ||
|
||
void DestroyTree(); | ||
AXTree* GetTree() const; | ||
// Takes ownership of |tree|. | ||
void SetTree(std::unique_ptr<AXTree> tree); | ||
|
||
// AXTreeManager implementation. | ||
AXNode* GetNodeFromTree(const AXTreeID& tree_id, | ||
const AXNodeID node_id) const override; | ||
AXNode* GetParentNodeFromParentTreeAsAXNode() const override; | ||
}; | ||
|
||
} // namespace ui | ||
|
||
#endif // UI_ACCESSIBILITY_AX_DUMMY_TREE_MANAGER_H_ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters