[orca] Handle a couple "The process appears to be hung" AT-SPI2 errors from Firefox



commit c4c11442da245b38bcf79dec204f6412ab105a6a
Author: Joanmarie Diggs <jdiggs igalia com>
Date:   Fri Aug 28 15:30:14 2015 -0400

    Handle a couple "The process appears to be hung" AT-SPI2 errors from Firefox

 src/orca/script_utilities.py                       |    7 +++++-
 .../scripts/toolkits/Gecko/script_utilities.py     |   19 +---------------
 src/orca/scripts/web/script.py                     |   15 ++++++++-----
 src/orca/scripts/web/script_utilities.py           |   22 +++++++++++++++----
 4 files changed, 34 insertions(+), 29 deletions(-)
---
diff --git a/src/orca/script_utilities.py b/src/orca/script_utilities.py
index 126c369..40622d1 100644
--- a/src/orca/script_utilities.py
+++ b/src/orca/script_utilities.py
@@ -2912,7 +2912,12 @@ class Utilities:
         if isSame(root):
             replicant = root
         else:
-            replicant = pyatspi.findDescendant(root, isSame)
+            try:
+                replicant = pyatspi.findDescendant(root, isSame)
+            except:
+                msg = "INFO: Exception from findDescendant for %s" % root
+                debug.println(debug.LEVEL_INFO, msg)
+                replicant = None
 
         msg = "HACK: Returning %s as replicant for Zombie %s" % (replicant, obj)
         debug.println(debug.LEVEL_INFO, msg)
diff --git a/src/orca/scripts/toolkits/Gecko/script_utilities.py 
b/src/orca/scripts/toolkits/Gecko/script_utilities.py
index 061fba9..4455ada 100644
--- a/src/orca/scripts/toolkits/Gecko/script_utilities.py
+++ b/src/orca/scripts/toolkits/Gecko/script_utilities.py
@@ -55,25 +55,10 @@ class Utilities(web.Utilities):
             return -1
 
         try:
-            state = obj.getState()
-        except:
-            return -1
-        else:
-            if state.contains(pyatspi.STATE_DEFUNCT):
-                # Yelp (or perhaps the work-in-progress a11y patch)
-                # seems to be guilty of this.
-                #
-                #print "nodeLevel - obj is defunct", obj
-                debug.println(debug.LEVEL_WARNING,
-                              "nodeLevel - obj is defunct")
-                debug.printStack(debug.LEVEL_WARNING)
-                return -1
-
-        try:
             attrs = obj.getAttributes()
         except:
-            attrs = None
-        if attrs is None:
+            msg = "GECKO: Exception getting attributes for %s" % obj
+            debug.println(debug.LEVEL_INFO, msg)
             return -1
         for attr in attrs:
             if attr.startswith("level:"):
diff --git a/src/orca/scripts/web/script.py b/src/orca/scripts/web/script.py
index 6796d74..9d5e8f0 100644
--- a/src/orca/scripts/web/script.py
+++ b/src/orca/scripts/web/script.py
@@ -1091,7 +1091,8 @@ class Script(default.Script):
             return False
 
         if not self.utilities.inDocumentContent(orca_state.locusOfFocus):
-            msg = "WEB: Ignoring event source is in document; locusOfFocus is not"
+            msg = "WEB: Event ignored: locusOfFocus (%s) is not in document content" \
+                  % orca_state.locusOfFocus
             debug.println(debug.LEVEL_INFO, msg)
             return True
 
@@ -1281,7 +1282,7 @@ class Script(default.Script):
             utterances.append(messages.NEW_ITEM_ADDED)
             utterances.extend(self.speechGenerator.generateSpeech(child, force=True))
             speech.speak(utterances)
-            self.lastMouseOverObject = child
+            self._lastMouseOverObject = child
             self.preMouseOverContext = self.utilities.getCaretContext()
             return True
 
@@ -1412,7 +1413,8 @@ class Script(default.Script):
             return False
 
         if not self.utilities.inDocumentContent(orca_state.locusOfFocus):
-            msg = "WEB: Ignoring event source is in document; locusOfFocus is not"
+            msg = "WEB: Event ignored: locusOfFocus (%s) is not in document content" \
+                  % orca_state.locusOfFocus
             debug.println(debug.LEVEL_INFO, msg)
             return True
 
@@ -1469,8 +1471,8 @@ class Script(default.Script):
 
         state = event.source.getState()
         if not state.contains(pyatspi.STATE_EDITABLE):
-            if self.inMouseOverObject \
-               and self.utilities.isZombie(self.lastMouseOverObject):
+            if self._inMouseOverObject \
+               and self.utilities.isZombie(self._lastMouseOverObject):
                 msg = "WEB: Restoring pre-mouseover context"
                 debug.println(debug.LEVEL_INFO, msg)
                 self.restorePreMouseOverContext()
@@ -1557,7 +1559,8 @@ class Script(default.Script):
             return True
 
         if not self.utilities.inDocumentContent(orca_state.locusOfFocus):
-            msg = "WEB: Ignoring: Event in document content; focus is not"
+            msg = "WEB: Event ignored: locusOfFocus (%s) is not in document content" \
+                  % orca_state.locusOfFocus
             debug.println(debug.LEVEL_INFO, msg)
             return True
 
diff --git a/src/orca/scripts/web/script_utilities.py b/src/orca/scripts/web/script_utilities.py
index 366a14d..272df68 100644
--- a/src/orca/scripts/web/script_utilities.py
+++ b/src/orca/scripts/web/script_utilities.py
@@ -167,7 +167,7 @@ class Utilities(script_utilities.Utilities):
         try:
             windows = [child for child in self._script.app]
         except:
-            msg = "WEB: Exception getting children for %s" % self._script.app
+            msg = "WEB: Exception getting children for app %s" % self._script.app
             debug.println(debug.LEVEL_INFO, msg)
             windows = []
 
@@ -2330,8 +2330,14 @@ class Utilities(script_utilities.Utilities):
                 return self.findNextCaretInOrder(parent, start)
 
             index = obj.getIndexInParent() + 1
-            if 0 <= index < parent.childCount:
-                return self.findNextCaretInOrder(parent[index], -1)
+            try:
+                parentChildCount = parent.childCount
+            except:
+                msg = "WEB: Exception getting childCount for %s" % parent
+                debug.println(debug.LEVEL_INFO, msg)
+            else:
+                if 0 <= index < parentChildCount:
+                    return self.findNextCaretInOrder(parent[index], -1)
             obj = parent
 
         return None, -1
@@ -2383,8 +2389,14 @@ class Utilities(script_utilities.Utilities):
                 return self.findPreviousCaretInOrder(parent, start)
 
             index = obj.getIndexInParent() - 1
-            if 0 <= index < parent.childCount:
-                return self.findPreviousCaretInOrder(parent[index], -1)
+            try:
+                parentChildCount = parent.childCount
+            except:
+                msg = "WEB: Exception getting childCount for %s" % parent
+                debug.println(debug.LEVEL_INFO, msg)
+            else:
+                if 0 <= index < parentChildCount:
+                    return self.findPreviousCaretInOrder(parent[index], -1)
             obj = parent
 
         return None, -1


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