Chromium Code Reviews| Index: Source/core/accessibility/AXObjectCache.cpp |
| diff --git a/Source/core/accessibility/AXObjectCache.cpp b/Source/core/accessibility/AXObjectCache.cpp |
| index 4f77d0afd23c02941c2015201dbe6d3cbd809727..a36d596ead5403712476ba09be0203765ade37ab 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" |
| @@ -67,6 +68,7 @@ |
| #include "core/page/FocusController.h" |
| #include "core/page/Page.h" |
| #include "core/platform/ScrollView.h" |
| +#include "core/rendering/AbstractInlineTextBox.h" |
| #include "core/rendering/RenderListBox.h" |
| #include "core/rendering/RenderMenuList.h" |
| #include "core/rendering/RenderProgress.h" |
| @@ -105,6 +107,7 @@ void AXComputedObjectAttributeCache::clear() |
| } |
| bool AXObjectCache::gAccessibilityEnabled = false; |
| +bool AXObjectCache::gInlineTextBoxAccessibility = false; |
| AXObjectCache::AXObjectCache(const Document* doc) |
| : m_notificationPostTimer(this, &AXObjectCache::notificationPostTimerFired) |
| @@ -239,6 +242,19 @@ AccessibilityObject* AXObjectCache::get(Node* node) |
| return m_objects.get(nodeID); |
| } |
| +AccessibilityObject* AXObjectCache::get(AbstractInlineTextBox* 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 +323,11 @@ static PassRefPtr<AccessibilityObject> createFromNode(Node* node) |
| return AccessibilityNodeObject::create(node); |
| } |
| +static PassRefPtr<AccessibilityObject> createFromInlineTextBox(AbstractInlineTextBox* inlineTextBox) |
| +{ |
| + return AccessibilityInlineTextBox::create(RefPtr<AbstractInlineTextBox>(inlineTextBox)); |
|
eseidel
2013/10/17 18:43:26
I don't think the RefPtr here is needed?
dmazzoni
2013/10/17 20:39:20
Done.
|
| +} |
| + |
| AccessibilityObject* AXObjectCache::getOrCreate(Widget* widget) |
| { |
| if (!widget) |
| @@ -394,6 +415,30 @@ AccessibilityObject* AXObjectCache::getOrCreate(RenderObject* renderer) |
| return newObj.get(); |
| } |
| +AccessibilityObject* AXObjectCache::getOrCreate(AbstractInlineTextBox* 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()); |
|
eseidel
2013/10/17 18:43:26
Is this to populate the cache? I'm surprised to s
dmazzoni
2013/10/17 20:39:20
This gets a unique ID and sets it on the object. M
|
| + |
| + m_inlineTextBoxObjectMapping.set(inlineTextBox, newObj->axObjectID()); |
| + m_objects.set(newObj->axObjectID(), newObj); |
| + newObj->init(); |
|
eseidel
2013/10/17 18:43:26
init() must be an AXObject concept?
dmazzoni
2013/10/17 20:39:20
Yes. This needs to run after setting the id. We co
|
| + attachWrapper(newObj.get()); |
| + newObj->setLastKnownIsIgnoredValue(newObj->accessibilityIsIgnored()); |
| + |
| + return newObj.get(); |
| +} |
| + |
| AccessibilityObject* AXObjectCache::rootObject() |
| { |
| if (!gAccessibilityEnabled) |
| @@ -509,6 +554,15 @@ void AXObjectCache::remove(Widget* view) |
| m_widgetObjectMapping.remove(view); |
| } |
| +void AXObjectCache::remove(AbstractInlineTextBox* inlineTextBox) |
| +{ |
| + if (!inlineTextBox) |
| + return; |
| + |
| + AXID axID = m_inlineTextBoxObjectMapping.get(inlineTextBox); |
| + remove(axID); |
| + m_inlineTextBoxObjectMapping.remove(inlineTextBox); |
| +} |
| AXID AXObjectCache::platformGenerateAXID() const |
| { |