Index: third_party/WebKit/Source/modules/accessibility/AXNodeObject.cpp |
diff --git a/third_party/WebKit/Source/modules/accessibility/AXNodeObject.cpp b/third_party/WebKit/Source/modules/accessibility/AXNodeObject.cpp |
index 4779e922a80661d2542d87ed64984e55a858fd2c..28784db833b75088371370d0c79c0790d8acb3dd 100644 |
--- a/third_party/WebKit/Source/modules/accessibility/AXNodeObject.cpp |
+++ b/third_party/WebKit/Source/modules/accessibility/AXNodeObject.cpp |
@@ -54,6 +54,7 @@ |
#include "core/html/shadow/MediaControlElements.h" |
#include "core/layout/LayoutBlockFlow.h" |
#include "core/layout/LayoutObject.h" |
+#include "core/svg/SVGElement.h" |
#include "modules/accessibility/AXObjectCacheImpl.h" |
#include "platform/UserGestureIndicator.h" |
#include "platform/text/PlatformLocale.h" |
@@ -2377,6 +2378,41 @@ String AXNodeObject::nativeTextAlternative(AXObjectSet& visited, AXNameFrom& nam |
return textAlternative; |
} |
+ // Per SVG AAM 1.0's modifications to 2D of this algorithm. |
+ if (node()->isSVGElement()) { |
+ nameFrom = AXNameFromRelatedElement; |
+ if (nameSources) { |
+ nameSources->append(NameSource(*foundTextAlternative)); |
+ nameSources->last().type = nameFrom; |
+ nameSources->last().nativeSource = AXTextFromNativeHTMLTitleElement; |
+ } |
+ ASSERT(node()->isContainerNode()); |
+ Element* title = ElementTraversal::firstChild( |
+ toContainerNode(*(node())), |
+ HasTagName(SVGNames::titleTag)); |
+ |
+ if (title) { |
+ AXObject* titleAXObject = axObjectCache().getOrCreate(title); |
+ if (titleAXObject && !visited.contains(titleAXObject)) { |
+ textAlternative = recursiveTextAlternative(*titleAXObject, false, visited); |
+ if (relatedObjects) { |
+ localRelatedObjects.append(new NameSourceRelatedObject( |
+ titleAXObject, textAlternative)); |
+ *relatedObjects = localRelatedObjects; |
+ localRelatedObjects.clear(); |
+ } |
+ } |
+ if (nameSources) { |
+ NameSource& source = nameSources->last(); |
+ source.text = textAlternative; |
+ source.relatedObjects = *relatedObjects; |
+ *foundTextAlternative = true; |
+ } else { |
+ return textAlternative; |
+ } |
+ } |
+ } |
+ |
// Fieldset / legend. |
if (isHTMLFieldSetElement(node())) { |
nameFrom = AXNameFromRelatedElement; |