| Index: Source/core/accessibility/AXObjectCache.cpp
|
| diff --git a/Source/core/accessibility/AXObjectCache.cpp b/Source/core/accessibility/AXObjectCache.cpp
|
| index 526c600c82591639c3b47ebf48f580a8d011918f..305b7748f78dfd3b784ee5fd2167350296ca3f81 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"
|
| @@ -100,6 +101,7 @@ void AXComputedObjectAttributeCache::setIgnored(AXID id, AccessibilityObjectIncl
|
| }
|
|
|
| bool AXObjectCache::gAccessibilityEnabled = false;
|
| +bool AXObjectCache::gInlineTextBoxAccessibility = false;
|
|
|
| AXObjectCache::AXObjectCache(const Document* doc)
|
| : m_notificationPostTimer(this, &AXObjectCache::notificationPostTimerFired)
|
| @@ -233,6 +235,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)
|
| @@ -301,6 +316,11 @@ static PassRefPtr<AccessibilityObject> createFromNode(Node* node)
|
| return AccessibilityNodeObject::create(node);
|
| }
|
|
|
| +static PassRefPtr<AccessibilityObject> createFromInlineTextBox(InlineTextBox* inlineTextBox)
|
| +{
|
| + return AccessibilityInlineTextBox::create(inlineTextBox);
|
| +}
|
| +
|
| AccessibilityObject* AXObjectCache::getOrCreate(Widget* widget)
|
| {
|
| if (!widget)
|
| @@ -388,6 +408,30 @@ AccessibilityObject* AXObjectCache::getOrCreate(RenderObject* renderer)
|
| return newObj.get();
|
| }
|
|
|
| +AccessibilityObject* AXObjectCache::getOrCreate(InlineTextBox* inlineTextBox)
|
| +{
|
| + if (!inlineTextBox)
|
| + return 0;
|
| +
|
| + if (AccessibilityObject* obj = get(inlineTextBox))
|
| + return obj;
|
| +
|
| + RefPtr<AccessibilityObject> newObj = createFromInlineTextBox(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)
|
| @@ -503,6 +547,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
|
| {
|
|
|