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

Unified Diff: Source/modules/accessibility/AXObjectCacheImpl.cpp

Issue 742353004: Implement computedRole and computedName (behind a flag) (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Finished pulling out ScopedAXObjectCache etc. Many fprintfs remain. Created 6 years 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/modules/accessibility/AXObjectCacheImpl.cpp
diff --git a/Source/modules/accessibility/AXObjectCacheImpl.cpp b/Source/modules/accessibility/AXObjectCacheImpl.cpp
index a17b75167db5f827637e0a16f3a91891736c9e7d..720c601a95ddca028e25398e2a325e31d7bb5835 100644
--- a/Source/modules/accessibility/AXObjectCacheImpl.cpp
+++ b/Source/modules/accessibility/AXObjectCacheImpl.cpp
@@ -177,60 +177,83 @@ AXObject* AXObjectCacheImpl::focusedUIElementForPage(const Page* page)
AXObject* AXObjectCacheImpl::get(Widget* widget)
{
+ fprintf(stderr, "AXObjectCacheImpl.get(widget)\n");
if (!widget)
return 0;
+ fprintf(stderr, "about to call m_widgetObjectMapping(%p)\n", widget);
AXID axID = m_widgetObjectMapping.get(widget);
ASSERT(!HashTraits<AXID>::isDeletedValue(axID));
if (!axID)
return 0;
+ fprintf(stderr, "about to call m_objects.get(%d)\n", axID);
return m_objects.get(axID);
}
AXObject* AXObjectCacheImpl::get(RenderObject* renderer)
{
+ fprintf(stderr, "AXObjectCacheImpl::get(renderer)\n");
if (!renderer)
return 0;
+ fprintf(stderr, "about to call m_renderObjectMapping.get(%p)\n", renderer);
AXID axID = m_renderObjectMapping.get(renderer);
ASSERT(!HashTraits<AXID>::isDeletedValue(axID));
if (!axID)
return 0;
+ fprintf(stderr, "about to call m_objects.get(%d)\n", axID);
return m_objects.get(axID);
}
AXObject* AXObjectCacheImpl::get(Node* node)
{
+ fprintf(stderr, "AXObjectCacheImpl.get(node)\n");
if (!node)
return 0;
+ fprintf(stderr, "about to call m_renderObjectMapping(%p)\n", node->renderer());
AXID renderID = node->renderer() ? m_renderObjectMapping.get(node->renderer()) : 0;
+ fprintf(stderr, "got renderID: %d\n", renderID);
ASSERT(!HashTraits<AXID>::isDeletedValue(renderID));
+ fprintf(stderr, "about to call m_nodeObjectMapping(%p)\n", node);
AXID nodeID = m_nodeObjectMapping.get(node);
+ fprintf(stderr, "got nodeID %d\n", nodeID);
ASSERT(!HashTraits<AXID>::isDeletedValue(nodeID));
+ fprintf(stderr, "Assert passed\n");
if (node->renderer() && nodeID && !renderID) {
+ fprintf(stderr, "about to call remove(%d)\n", nodeID);
// This can happen if an AXNodeObject is created for a node that's not
// rendered, but later something changes and it gets a renderer (like if it's
// reparented).
remove(nodeID);
return 0;
+ } else {
+ fprintf(stderr, "not removing nodeID\n");
}
- if (renderID)
+ if (renderID) {
+ fprintf(stderr, "about to call m_objects.get(%d)\n", renderID);
return m_objects.get(renderID);
+ }
+ fprintf(stderr, "%d was false\n", renderID);
- if (!nodeID)
+ if (!nodeID) {
+ fprintf(stderr, "returning 0\n");
return 0;
+ }
+ fprintf(stderr, "!%d was false\n", nodeID);
+ fprintf(stderr, "about to call m_objects.get(%d)\n", nodeID);
return m_objects.get(nodeID);
}
AXObject* AXObjectCacheImpl::get(AbstractInlineTextBox* inlineTextBox)
{
+ fprintf(stderr, "get(AbstractInlineTextBox)\n");
if (!inlineTextBox)
return 0;
@@ -252,7 +275,7 @@ bool nodeHasRole(Node* node, const String& role)
return equalIgnoringCase(toElement(node)->getAttribute(roleAttr), role);
}
-static PassRefPtr<AXObject> createFromRenderer(RenderObject* renderer)
+PassRefPtr<AXObject> AXObjectCacheImpl::createFromRenderer(RenderObject* renderer)
{
// FIXME: How could renderer->node() ever not be an Element?
Node* node = renderer->node();
@@ -261,61 +284,61 @@ static PassRefPtr<AXObject> createFromRenderer(RenderObject* renderer)
// ul/ol/dl type (it shouldn't be a list if aria says otherwise).
if (node && ((nodeHasRole(node, "list") || nodeHasRole(node, "directory"))
|| (nodeHasRole(node, nullAtom) && (isHTMLUListElement(*node) || isHTMLOListElement(*node) || isHTMLDListElement(*node)))))
- return AXList::create(renderer);
+ return AXList::create(renderer, this);
// aria tables
if (nodeHasRole(node, "grid") || nodeHasRole(node, "treegrid"))
- return AXARIAGrid::create(renderer);
+ return AXARIAGrid::create(renderer, this);
if (nodeHasRole(node, "row"))
- return AXARIAGridRow::create(renderer);
+ return AXARIAGridRow::create(renderer, this);
if (nodeHasRole(node, "gridcell") || nodeHasRole(node, "columnheader") || nodeHasRole(node, "rowheader"))
- return AXARIAGridCell::create(renderer);
+ return AXARIAGridCell::create(renderer, this);
// media controls
if (node && node->isMediaControlElement())
- return AccessibilityMediaControl::create(renderer);
+ return AccessibilityMediaControl::create(renderer, this);
if (isHTMLOptionElement(node))
- return AXListBoxOption::create(renderer);
+ return AXListBoxOption::create(renderer, this);
if (renderer->isSVGRoot())
- return AXSVGRoot::create(renderer);
+ return AXSVGRoot::create(renderer, this);
if (renderer->isBoxModelObject()) {
RenderBoxModelObject* cssBox = toRenderBoxModelObject(renderer);
if (cssBox->isListBox())
- return AXListBox::create(toRenderListBox(cssBox));
+ return AXListBox::create(toRenderListBox(cssBox), this);
if (cssBox->isMenuList())
- return AXMenuList::create(toRenderMenuList(cssBox));
+ return AXMenuList::create(toRenderMenuList(cssBox), this);
// standard tables
if (cssBox->isTable())
- return AXTable::create(toRenderTable(cssBox));
+ return AXTable::create(toRenderTable(cssBox), this);
if (cssBox->isTableRow())
- return AXTableRow::create(toRenderTableRow(cssBox));
+ return AXTableRow::create(toRenderTableRow(cssBox), this);
if (cssBox->isTableCell())
- return AXTableCell::create(toRenderTableCell(cssBox));
+ return AXTableCell::create(toRenderTableCell(cssBox), this);
// progress bar
if (cssBox->isProgress())
- return AXProgressIndicator::create(toRenderProgress(cssBox));
+ return AXProgressIndicator::create(toRenderProgress(cssBox), this);
// input type=range
if (cssBox->isSlider())
- return AXSlider::create(toRenderSlider(cssBox));
+ return AXSlider::create(toRenderSlider(cssBox), this);
}
- return AXRenderObject::create(renderer);
+ return AXRenderObject::create(renderer, this);
}
-static PassRefPtr<AXObject> createFromNode(Node* node)
+PassRefPtr<AXObject> AXObjectCacheImpl::createFromNode(Node* node)
{
- return AXNodeObject::create(node);
+ return AXNodeObject::create(node, this);
}
-static PassRefPtr<AXObject> createFromInlineTextBox(AbstractInlineTextBox* inlineTextBox)
+PassRefPtr<AXObject> AXObjectCacheImpl::createFromInlineTextBox(AbstractInlineTextBox* inlineTextBox)
{
- return AXInlineTextBox::create(inlineTextBox);
+ return AXInlineTextBox::create(inlineTextBox, this);
}
AXObject* AXObjectCacheImpl::getOrCreate(Widget* widget)
@@ -328,9 +351,9 @@ AXObject* AXObjectCacheImpl::getOrCreate(Widget* widget)
RefPtr<AXObject> newObj = nullptr;
if (widget->isFrameView())
- newObj = AXScrollView::create(toFrameView(widget));
+ newObj = AXScrollView::create(toFrameView(widget), this);
else if (widget->isScrollbar())
- newObj = AXScrollbar::create(toScrollbar(widget));
+ newObj = AXScrollbar::create(toScrollbar(widget), this);
// Will crash later if we have two objects for the same widget.
ASSERT(!get(widget));
@@ -356,8 +379,13 @@ AXObject* AXObjectCacheImpl::getOrCreate(Node* node)
if (AXObject* obj = get(node))
return obj;
- if (node->renderer())
+ fprintf(stderr, "get(node) returned nil\n");
+
+ if (node->renderer()) {
+ fprintf(stderr, "calling getOrCreate(Renderer)\n");
return getOrCreate(node->renderer());
+ }
+ fprintf(stderr, "renderer was null\n");
if (!node->parentElement())
return 0;
@@ -445,28 +473,28 @@ AXObject* AXObjectCacheImpl::getOrCreate(AccessibilityRole role)
// will be filled in...
switch (role) {
case ImageMapLinkRole:
- obj = AXImageMapLink::create();
+ obj = AXImageMapLink::create(this);
break;
case ColumnRole:
- obj = AXTableColumn::create();
+ obj = AXTableColumn::create(this);
break;
case TableHeaderContainerRole:
- obj = AXTableHeaderContainer::create();
+ obj = AXTableHeaderContainer::create(this);
break;
case SliderThumbRole:
- obj = AXSliderThumb::create();
+ obj = AXSliderThumb::create(this);
break;
case MenuListPopupRole:
- obj = AXMenuListPopup::create();
+ obj = AXMenuListPopup::create(this);
break;
case MenuListOptionRole:
- obj = AXMenuListOption::create();
+ obj = AXMenuListOption::create(this);
break;
case SpinButtonRole:
- obj = AXSpinButton::create();
+ obj = AXSpinButton::create(this);
break;
case SpinButtonPartRole:
- obj = AXSpinButtonPart::create();
+ obj = AXSpinButtonPart::create(this);
break;
default:
obj = nullptr;
@@ -1053,6 +1081,14 @@ void AXObjectCacheImpl::handleScrollPositionChanged(RenderObject* renderObject)
postPlatformNotification(getOrCreate(renderObject), AXScrollPositionChanged);
}
+PublicAXObject* AXObjectCacheImpl::publicAXObjectForNode(Node* node)
+{
+ fprintf(stderr, "publicAXObjectForNode(%p)\n", node);
+ AXObject* obj = getOrCreate(node);
+ fprintf(stderr, "Got AXObject %p\n", obj);
+ return new PublicAXObjectImpl(obj);
+}
+
void AXObjectCacheImpl::setCanvasObjectBounds(Element* element, const LayoutRect& rect)
{
AXObject* obj = getOrCreate(element);
@@ -1062,4 +1098,32 @@ void AXObjectCacheImpl::setCanvasObjectBounds(Element* element, const LayoutRect
obj->setElementRect(rect);
}
+PublicAXObjectImpl::PublicAXObjectImpl(AXObject* axObject)
+ : m_object(axObject)
+{
+ fprintf(stderr, "PublicAXObjectImpl constructor\n");
+}
+
+PublicAXObjectImpl::~PublicAXObjectImpl() { }
+
+const AtomicString& PublicAXObjectImpl::computedRole()
+{
+ fprintf(stderr, "computedRole()\n");
+ if (!m_object)
+ return AXObject::roleName(NoRole);
+
+ AccessibilityRole role = m_object->roleValue();
+ return AXObject::roleName(role);
+}
+
+const String PublicAXObjectImpl::computedText()
+{
+ fprintf(stderr, "publicaxobjectimpl::computedText()\n");
+ if (!m_object) {
+ fprintf(stderr, "!m_object\n");
+ return "";
+ }
+ return m_object->title();
+}
+
} // namespace blink

Powered by Google App Engine
This is Rietveld 408576698