diff options
author | cevans@chromium.org <cevans@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-04-23 03:35:22 +0000 |
---|---|---|
committer | cevans@chromium.org <cevans@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-04-23 03:35:22 +0000 |
commit | 73d9df5068df650a01803b64cca293a3b2ff57a4 (patch) | |
tree | f12f7ada3d2a19421dd950fab742238856254db9 /webkit/glue | |
parent | 64505e1c7f8a2a97e67a9b5bb6deb56f90c5296c (diff) | |
download | chromium_src-73d9df5068df650a01803b64cca293a3b2ff57a4.zip chromium_src-73d9df5068df650a01803b64cca293a3b2ff57a4.tar.gz chromium_src-73d9df5068df650a01803b64cca293a3b2ff57a4.tar.bz2 |
Merge 82256 - Fix handling of a case where an AccessibilityObject is listed as a child multiple times.
BUG=79726
TEST=browser_tests:RendererAccessibilityBrowserTest.CrossPlatformDuplicateChildrenAccessibility
Committed: http://src.chromium.org/viewvc/chrome?view=rev&revision=82076
Review URL: http://codereview.chromium.org/6873063
TBR=ctguil@chromium.org
Review URL: http://codereview.chromium.org/6899054
git-svn-id: svn://svn.chromium.org/chrome/branches/742/src@82780 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/glue')
-rw-r--r-- | webkit/glue/webaccessibility.cc | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/webkit/glue/webaccessibility.cc b/webkit/glue/webaccessibility.cc index aef31e4..615aeda 100644 --- a/webkit/glue/webaccessibility.cc +++ b/webkit/glue/webaccessibility.cc @@ -4,6 +4,8 @@ #include "webkit/glue/webaccessibility.h" +#include <set> + #include "base/string_number_conversions.h" #include "base/string_util.h" #include "base/utf_string_conversions.h" @@ -387,8 +389,10 @@ void WebAccessibility::Init(const WebKit::WebAccessibilityObject& src, if (include_children) { // Recursively create children. int child_count = src.childCount(); + std::set<int32> child_ids; for (int i = 0; i < child_count; i++) { WebAccessibilityObject child = src.childAt(i); + int32 child_id = cache->addOrGetId(child); // The child may be invalid due to issues in webkit accessibility code. // Don't add children that are invalid thus preventing a crash. @@ -397,6 +401,13 @@ void WebAccessibility::Init(const WebKit::WebAccessibilityObject& src, if (!child.isValid()) continue; + // Children may duplicated in the webkit accessibility tree. Only add a + // child once for the web accessibility tree. + // https://bugs.webkit.org/show_bug.cgi?id=58930 + if (child_ids.find(child_id) != child_ids.end()) + continue; + child_ids.insert(child_id); + // Some nodes appear in the tree in more than one place: for example, // a cell in a table appears as a child of both a row and a column. // Only recursively add child nodes that have this node as its @@ -408,7 +419,7 @@ void WebAccessibility::Init(const WebKit::WebAccessibilityObject& src, if (is_iframe || IsParentUnignoredOf(src, child)) { children.push_back(WebAccessibility(child, cache, include_children)); } else { - indirect_child_ids.push_back(cache->addOrGetId(child)); + indirect_child_ids.push_back(child_id); } } } |