Commit 1dba52d0 authored by David Tseng's avatar David Tseng Committed by Commit Bot

Do not return ignored nodes on Chrome OS in attribute wrappers

"tree id=67228E93CA923929527DFFCB9DE1AB88
node id=2 role=rootWebArea state={"focusable":true} parentID=369 childIds=[5]
  node id=5 role=textField state={"editable":true,"focusable":true,"multiline":true,"richlyEditable":true,"focused":true} parentID=2 childIds=[7] name=Document content
    node id=7 role=paragraph state={"editable":true,"richlyEditable":true} parentID=5 childIds=[9,14,19]
      node id=9 role=staticText state={"editable":true,"richlyEditable":true} parentID=7 childIds=[278] name=One two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen
        node id=278 role=inlineTextBox state={} parentID=9 childIds=[] name=One two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen
      node id=14 role=staticText state={"editable":true,"richlyEditable":true} parentID=7 childIds=[280] name=seventeen eighteen nineteen twenty One two three four five six seven eight nine ten eleven
        node id=280 role=inlineTextBox state={} parentID=14 childIds=[] name=seventeen eighteen nineteen twenty One two three four five six seven eight nine ten eleven
      node id=19 role=staticText state={"editable":true,"richlyEditable":true} parentID=7 childIds=[282] name=twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen twenty
        node id=282 role=inlineTextBox state={} parentID=19 childIds=[] name=twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen twenty
"
js> id9.toString()
"node id=9 role=staticText state={"editable":true,"richlyEditable":true} parentID=7 childIds=[278] name=One two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen"
js> id9.firstChild.toString()
"node id=278 role=inlineTextBox state={} parentID=9 childIds=[] name=One two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen"
js> id9.nextOnLine.toString()
"node id=279 role=inlineTextBox state={"ignored":true,"offscreen":true} parentID=7 childIds=[] name=
"

Node 279 isn't actually in the tree and triggers bad editable line output.

Bug: b:140615809,1001562
Change-Id: I4eeaeb1019f77d6fcba688f65230843c7ff4ff48
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1790042
Commit-Queue: David Tseng <dtseng@chromium.org>
Reviewed-by: default avatarAaron Leventhal <aleventhal@chromium.org>
Cr-Commit-Position: refs/heads/master@{#694328}
parent 80ebbf82
...@@ -422,6 +422,11 @@ ui::AXTree::Selection AutomationAXTreeWrapper::GetUnignoredSelection() { ...@@ -422,6 +422,11 @@ ui::AXTree::Selection AutomationAXTreeWrapper::GetUnignoredSelection() {
return unignored_selection; return unignored_selection;
} }
ui::AXNode* AutomationAXTreeWrapper::GetUnignoredNodeFromId(int32_t id) {
ui::AXNode* node = tree_.GetFromId(id);
return (node && !node->IsIgnored()) ? node : nullptr;
}
// static // static
std::map<ui::AXTreeID, AutomationAXTreeWrapper*>& std::map<ui::AXTreeID, AutomationAXTreeWrapper*>&
AutomationAXTreeWrapper::GetChildTreeIDReverseMap() { AutomationAXTreeWrapper::GetChildTreeIDReverseMap() {
......
...@@ -27,6 +27,9 @@ class AutomationAXTreeWrapper : public ui::AXTreeObserver { ...@@ -27,6 +27,9 @@ class AutomationAXTreeWrapper : public ui::AXTreeObserver {
// child trees, if any. // child trees, if any.
static AutomationAXTreeWrapper* GetParentOfTreeId(ui::AXTreeID tree_id); static AutomationAXTreeWrapper* GetParentOfTreeId(ui::AXTreeID tree_id);
static std::map<ui::AXTreeID, AutomationAXTreeWrapper*>&
GetChildTreeIDReverseMap();
ui::AXTreeID tree_id() const { return tree_id_; } ui::AXTreeID tree_id() const { return tree_id_; }
ui::AXTree* tree() { return &tree_; } ui::AXTree* tree() { return &tree_; }
AutomationInternalCustomBindings* owner() { return owner_; } AutomationInternalCustomBindings* owner() { return owner_; }
...@@ -49,8 +52,9 @@ class AutomationAXTreeWrapper : public ui::AXTreeObserver { ...@@ -49,8 +52,9 @@ class AutomationAXTreeWrapper : public ui::AXTreeObserver {
ui::AXTree::Selection GetUnignoredSelection(); ui::AXTree::Selection GetUnignoredSelection();
static std::map<ui::AXTreeID, AutomationAXTreeWrapper*>& // Returns an AXNode from the underlying tree if it both exists and is not
GetChildTreeIDReverseMap(); // ignored.
ui::AXNode* GetUnignoredNodeFromId(int32_t id);
private: private:
// AXTreeObserver overrides. // AXTreeObserver overrides.
......
...@@ -200,7 +200,7 @@ class NodeIDWrapper : public base::RefCountedThreadSafe<NodeIDWrapper> { ...@@ -200,7 +200,7 @@ class NodeIDWrapper : public base::RefCountedThreadSafe<NodeIDWrapper> {
if (!tree_wrapper) if (!tree_wrapper)
return; return;
ui::AXNode* node = tree_wrapper->tree()->GetFromId(node_id); ui::AXNode* node = tree_wrapper->GetUnignoredNodeFromId(node_id);
if (!node) if (!node)
return; return;
...@@ -256,7 +256,7 @@ class NodeIDPlusAttributeWrapper ...@@ -256,7 +256,7 @@ class NodeIDPlusAttributeWrapper
if (!tree_wrapper) if (!tree_wrapper)
return; return;
ui::AXNode* node = tree_wrapper->tree()->GetFromId(node_id); ui::AXNode* node = tree_wrapper->GetUnignoredNodeFromId(node_id);
if (!node) if (!node)
return; return;
...@@ -314,7 +314,7 @@ class NodeIDPlusRangeWrapper ...@@ -314,7 +314,7 @@ class NodeIDPlusRangeWrapper
if (!tree_wrapper) if (!tree_wrapper)
return; return;
ui::AXNode* node = tree_wrapper->tree()->GetFromId(node_id); ui::AXNode* node = tree_wrapper->GetUnignoredNodeFromId(node_id);
if (!node) if (!node)
return; return;
...@@ -366,7 +366,7 @@ class NodeIDPlusStringBoolWrapper ...@@ -366,7 +366,7 @@ class NodeIDPlusStringBoolWrapper
if (!tree_wrapper) if (!tree_wrapper)
return; return;
ui::AXNode* node = tree_wrapper->tree()->GetFromId(node_id); ui::AXNode* node = tree_wrapper->GetUnignoredNodeFromId(node_id);
if (!node) if (!node)
return; return;
...@@ -422,7 +422,7 @@ class NodeIDPlusDimensionsWrapper ...@@ -422,7 +422,7 @@ class NodeIDPlusDimensionsWrapper
if (!tree_wrapper) if (!tree_wrapper)
return; return;
ui::AXNode* node = tree_wrapper->tree()->GetFromId(node_id); ui::AXNode* node = tree_wrapper->GetUnignoredNodeFromId(node_id);
if (!node) if (!node)
return; return;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment