Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(250)

Unified Diff: Source/core/accessibility/AXObjectCache.cpp

Issue 23983002: Expose InlineTextBoxes in the accessibility tree. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Fix include path Created 7 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/core/accessibility/AXObjectCache.cpp
diff --git a/Source/core/accessibility/AXObjectCache.cpp b/Source/core/accessibility/AXObjectCache.cpp
index 8ba1c815667ed0b35d58754d5065f221461a614f..fe373c895b25748dd367e9e78220f2f59e158257 100644
--- a/Source/core/accessibility/AXObjectCache.cpp
+++ b/Source/core/accessibility/AXObjectCache.cpp
@@ -37,6 +37,7 @@
#include "core/accessibility/AccessibilityARIAGridCell.h"
#include "core/accessibility/AccessibilityARIAGridRow.h"
#include "core/accessibility/AccessibilityImageMapLink.h"
+#include "core/accessibility/AccessibilityInlineTextBox.h"
#include "core/accessibility/AccessibilityList.h"
#include "core/accessibility/AccessibilityListBox.h"
#include "core/accessibility/AccessibilityListBoxOption.h"
@@ -105,6 +106,7 @@ void AXComputedObjectAttributeCache::clear()
}
bool AXObjectCache::gAccessibilityEnabled = false;
+bool AXObjectCache::gInlineTextBoxAccessibility = false;
AXObjectCache::AXObjectCache(const Document* doc)
: m_notificationPostTimer(this, &AXObjectCache::notificationPostTimerFired)
@@ -239,6 +241,19 @@ AccessibilityObject* AXObjectCache::get(Node* node)
return m_objects.get(nodeID);
}
+AccessibilityObject* AXObjectCache::get(InlineTextBox* inlineTextBox)
+{
+ if (!inlineTextBox)
+ return 0;
+
+ AXID axID = m_inlineTextBoxObjectMapping.get(inlineTextBox);
+ ASSERT(!HashTraits<AXID>::isDeletedValue(axID));
+ if (!axID)
+ return 0;
+
+ return m_objects.get(axID);
+}
+
// FIXME: This probably belongs on Node.
// FIXME: This should take a const char*, but one caller passes nullAtom.
bool nodeHasRole(Node* node, const String& role)
@@ -307,6 +322,11 @@ static PassRefPtr<AccessibilityObject> createFromNode(Node* node)
return AccessibilityNodeObject::create(node);
}
+static PassRefPtr<AccessibilityObject> createFromInlineTextBox(RenderText* renderText, RenderText::AbstractInlineTextBox* inlineTextBox)
+{
+ return AccessibilityInlineTextBox::create(renderText, inlineTextBox);
+}
+
AccessibilityObject* AXObjectCache::getOrCreate(Widget* widget)
{
if (!widget)
@@ -394,6 +414,30 @@ AccessibilityObject* AXObjectCache::getOrCreate(RenderObject* renderer)
return newObj.get();
}
+AccessibilityObject* AXObjectCache::getOrCreate(RenderText* renderText, RenderText::AbstractInlineTextBox* inlineTextBox)
+{
+ if (!renderText || !inlineTextBox)
+ return 0;
+
+ if (AccessibilityObject* obj = get(inlineTextBox))
+ return obj;
+
+ RefPtr<AccessibilityObject> newObj = createFromInlineTextBox(renderText, inlineTextBox);
+
+ // Will crash later if we have two objects for the same inlineTextBox.
+ ASSERT(!get(inlineTextBox));
+
+ getAXID(newObj.get());
+
+ m_inlineTextBoxObjectMapping.set(inlineTextBox, newObj->axObjectID());
+ m_objects.set(newObj->axObjectID(), newObj);
+ newObj->init();
+ attachWrapper(newObj.get());
+ newObj->setLastKnownIsIgnoredValue(newObj->accessibilityIsIgnored());
+
+ return newObj.get();
+}
+
AccessibilityObject* AXObjectCache::rootObject()
{
if (!gAccessibilityEnabled)
@@ -509,6 +553,15 @@ void AXObjectCache::remove(Widget* view)
m_widgetObjectMapping.remove(view);
}
+void AXObjectCache::remove(InlineTextBox* inlineTextBox)
+{
+ if (!inlineTextBox)
+ return;
+
+ AXID axID = m_inlineTextBoxObjectMapping.get(inlineTextBox);
+ remove(axID);
+ m_inlineTextBoxObjectMapping.remove(inlineTextBox);
+}
AXID AXObjectCache::platformGenerateAXID() const
{

Powered by Google App Engine
This is Rietveld 408576698