Index: content/renderer/renderer_accessibility.cc |
diff --git a/content/renderer/renderer_accessibility.cc b/content/renderer/renderer_accessibility.cc |
index 2ca15dd012f7e7e2d81f324b3c473671c7bbd8f0..4b9d7d00ed30fe5518ff24544cace749399bf104 100644 |
--- a/content/renderer/renderer_accessibility.cc |
+++ b/content/renderer/renderer_accessibility.cc |
@@ -213,14 +213,6 @@ void RendererAccessibility::SendPendingAccessibilityNotifications() { |
WebAccessibilityObject obj = document.accessibilityObjectFromID( |
notification.id); |
- if (!obj.isValid()) { |
-#ifndef NDEBUG |
- if (logging_) |
- LOG(WARNING) << "Got notification on invalid object id " << obj.axID(); |
-#endif |
- continue; |
- } |
- |
// The browser may not have this object yet, for example if we get a |
// notification on an object that was recently added, or if we get a |
// notification on a node before the page has loaded. Work our way |
@@ -228,6 +220,7 @@ void RendererAccessibility::SendPendingAccessibilityNotifications() { |
// we reach the root. |
int root_id = document.accessibilityObject().axID(); |
while (browser_id_map_.find(obj.axID()) == browser_id_map_.end() && |
+ obj.isValid() && |
obj.axID() != root_id) { |
obj = obj.parentObject(); |
includes_children = true; |
@@ -237,6 +230,15 @@ void RendererAccessibility::SendPendingAccessibilityNotifications() { |
} |
} |
+ if (!obj.isValid()) { |
+#ifndef NDEBUG |
+ if (logging_) |
+ LOG(WARNING) << "Got notification on object that is invalid or has" |
+ << " invalid ancestor. Id: " << obj.axID(); |
+#endif |
+ continue; |
+ } |
+ |
// Another potential problem is that this notification may be on an |
// object that is detached from the tree. Determine if this node is not a |
// child of its parent, and if so move the notification to the parent. |
@@ -244,10 +246,15 @@ void RendererAccessibility::SendPendingAccessibilityNotifications() { |
// https://bugs.webkit.org/show_bug.cgi?id=68466 is fixed. |
if (obj.axID() != root_id) { |
WebAccessibilityObject parent = obj.parentObject(); |
- while (!parent.isNull() && parent.accessibilityIsIgnored()) |
+ while (!parent.isNull() && |
+ parent.isValid() && |
+ parent.accessibilityIsIgnored()) { |
parent = parent.parentObject(); |
- if (parent.isNull()) { |
+ } |
+ |
+ if (parent.isNull() || !parent.isValid()) { |
NOTREACHED(); |
+ continue; |
} |
bool is_child_of_parent = false; |
for (unsigned int i = 0; i < parent.childCount(); ++i) { |