summaryrefslogtreecommitdiffstats
path: root/WebCore/page/AXObjectCache.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'WebCore/page/AXObjectCache.cpp')
-rw-r--r--WebCore/page/AXObjectCache.cpp51
1 files changed, 34 insertions, 17 deletions
diff --git a/WebCore/page/AXObjectCache.cpp b/WebCore/page/AXObjectCache.cpp
index d9c4c9a..f8167a5 100644
--- a/WebCore/page/AXObjectCache.cpp
+++ b/WebCore/page/AXObjectCache.cpp
@@ -58,6 +58,7 @@ AXObjectCache::~AXObjectCache()
AccessibilityObject* obj = (*it).second.get();
detachWrapper(obj);
obj->detach();
+ removeAXID(obj);
}
}
@@ -66,39 +67,52 @@ AccessibilityObject* AXObjectCache::get(RenderObject* renderer)
if (!renderer)
return 0;
- RefPtr<AccessibilityObject> obj = 0;
+ AccessibilityObject* obj = 0;
AXID axID = m_renderObjectMapping.get(renderer);
ASSERT(!HashTraits<AXID>::isDeletedValue(axID));
if (axID)
obj = m_objects.get(axID).get();
+
+ return obj;
+}
+
+AccessibilityObject* AXObjectCache::getOrCreate(RenderObject* renderer)
+{
+ if (!renderer)
+ return 0;
+
+ AccessibilityObject* obj = get(renderer);
- Node* element = renderer->element();
if (!obj) {
+ Node* node = renderer->node();
+ RefPtr<AccessibilityObject> newObj = 0;
if (renderer->isListBox())
- obj = AccessibilityListBox::create(renderer);
- else if (element && (element->hasTagName(ulTag) || element->hasTagName(olTag) || element->hasTagName(dlTag)))
- obj = AccessibilityList::create(renderer);
+ newObj = AccessibilityListBox::create(renderer);
+ else if (node && (node->hasTagName(ulTag) || node->hasTagName(olTag) || node->hasTagName(dlTag)))
+ newObj = AccessibilityList::create(renderer);
else if (renderer->isTable())
- obj = AccessibilityTable::create(renderer);
+ newObj = AccessibilityTable::create(renderer);
else if (renderer->isTableRow())
- obj = AccessibilityTableRow::create(renderer);
+ newObj = AccessibilityTableRow::create(renderer);
else if (renderer->isTableCell())
- obj = AccessibilityTableCell::create(renderer);
+ newObj = AccessibilityTableCell::create(renderer);
else
- obj = AccessibilityRenderObject::create(renderer);
+ newObj = AccessibilityRenderObject::create(renderer);
- getAXID(obj.get());
+ obj = newObj.get();
+
+ getAXID(obj);
- m_renderObjectMapping.set(renderer, obj.get()->axObjectID());
- m_objects.set(obj.get()->axObjectID(), obj);
- attachWrapper(obj.get());
+ m_renderObjectMapping.set(renderer, obj->axObjectID());
+ m_objects.set(obj->axObjectID(), obj);
+ attachWrapper(obj);
}
- return obj.get();
+ return obj;
}
-AccessibilityObject* AXObjectCache::get(AccessibilityRole role)
+AccessibilityObject* AXObjectCache::getOrCreate(AccessibilityRole role)
{
RefPtr<AccessibilityObject> obj = 0;
@@ -186,6 +200,9 @@ AXID AXObjectCache::getAXID(AccessibilityObject* obj)
void AXObjectCache::removeAXID(AccessibilityObject* obj)
{
+ if (!obj)
+ return;
+
AXID objID = obj->axObjectID();
if (objID == 0)
return;
@@ -221,7 +238,7 @@ void AXObjectCache::handleActiveDescendantChanged(RenderObject* renderer)
{
if (!renderer)
return;
- AccessibilityObject* obj = get(renderer);
+ AccessibilityObject* obj = getOrCreate(renderer);
if (obj)
obj->handleActiveDescendantChanged();
}
@@ -230,7 +247,7 @@ void AXObjectCache::handleAriaRoleChanged(RenderObject* renderer)
{
if (!renderer)
return;
- AccessibilityObject* obj = get(renderer);
+ AccessibilityObject* obj = getOrCreate(renderer);
if (obj && obj->isAccessibilityRenderObject())
static_cast<AccessibilityRenderObject*>(obj)->setAriaRole();
}