[orca] Prevent children which cannot have context being returned as context



commit 17c14a25ca4f486c4b8060e6e0e7914a964cf5d7
Author: Joanmarie Diggs <jdiggs igalia com>
Date:   Fri May 1 20:00:50 2020 -0400

    Prevent children which cannot have context being returned as context
    
    find{Next,Previous}CaretInOrder() was returning children which should
    be treated as a whole as valid caret context without checking if
    said child could actually serve as a caret context. Objects which cannot
    serve as a caret context include objects we which to ignore because they
    are dead, zombies, empty, hidden, etc., etc.
    
    As a consequence of this bug, we were sometimes wandering into hidden
    objects (not good), presenting them (worse), and then getting stuck in
    them (doubleplusbad).
    
    This failure seems to be responsible for our getting stuck in Riot in
    (at least) Chromium.

 src/orca/scripts/web/script_utilities.py | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)
---
diff --git a/src/orca/scripts/web/script_utilities.py b/src/orca/scripts/web/script_utilities.py
index 3ac4bdd93..9cdbf45f1 100644
--- a/src/orca/scripts/web/script_utilities.py
+++ b/src/orca/scripts/web/script_utilities.py
@@ -4782,9 +4782,9 @@ class Utilities(script_utilities.Utilities):
                 allText = text.getText(0, -1)
                 for i in range(offset + 1, len(allText)):
                     child = self.getChildAtOffset(obj, i)
-                    if child and self._treatObjectAsWhole(child):
-                        return child, 0
                     if self._canHaveCaretContext(child):
+                        if self._treatObjectAsWhole(child):
+                            return child, 0
                         return self.findNextCaretInOrder(child, -1)
                     if allText[i] not in (self.EMBEDDED_OBJECT_CHARACTER, self.ZERO_WIDTH_NO_BREAK_SPACE):
                         return obj, i
@@ -4846,9 +4846,9 @@ class Utilities(script_utilities.Utilities):
                     offset = len(allText)
                 for i in range(offset - 1, -1, -1):
                     child = self.getChildAtOffset(obj, i)
-                    if child and self._treatObjectAsWhole(child):
-                        return child, 0
                     if self._canHaveCaretContext(child):
+                        if self._treatObjectAsWhole(child):
+                            return child, 0
                         return self.findPreviousCaretInOrder(child, -1)
                     if allText[i] not in (self.EMBEDDED_OBJECT_CHARACTER, self.ZERO_WIDTH_NO_BREAK_SPACE):
                         return obj, i


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]