static PassRefPtr<AccessibilityObject> createFromRenderer(RenderObject* renderer) { // FIXME: How could renderer->node() ever not be an Element? Node* node = renderer->node(); // If the node is aria role="list" or the aria role is empty and its a // 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) && (node->hasTagName(ulTag) || node->hasTagName(olTag) || node->hasTagName(dlTag))))) return AccessibilityList::create(renderer); // aria tables if (nodeHasRole(node, "grid") || nodeHasRole(node, "treegrid")) return AccessibilityARIAGrid::create(renderer); if (nodeHasRole(node, "row")) return AccessibilityARIAGridRow::create(renderer); if (nodeHasRole(node, "gridcell") || nodeHasRole(node, "columnheader") || nodeHasRole(node, "rowheader")) return AccessibilityARIAGridCell::create(renderer); #if ENABLE(VIDEO) // media controls if (node && node->isMediaControlElement()) return AccessibilityMediaControl::create(renderer); #endif #if ENABLE(SVG) if (renderer->isSVGRoot()) return AccessibilitySVGRoot::create(renderer); #endif // Search field buttons if (node && node->isElementNode() && toElement(node)->isSearchFieldCancelButtonElement()) return AccessibilitySearchFieldCancelButton::create(renderer); if (renderer->isBoxModelObject()) { RenderBoxModelObject* cssBox = toRenderBoxModelObject(renderer); if (cssBox->isListBox()) return AccessibilityListBox::create(toRenderListBox(cssBox)); if (cssBox->isMenuList()) return AccessibilityMenuList::create(toRenderMenuList(cssBox)); // standard tables if (cssBox->isTable()) return AccessibilityTable::create(toRenderTable(cssBox)); if (cssBox->isTableRow()) return AccessibilityTableRow::create(toRenderTableRow(cssBox)); if (cssBox->isTableCell()) return AccessibilityTableCell::create(toRenderTableCell(cssBox)); #if ENABLE(PROGRESS_ELEMENT) // progress bar if (cssBox->isProgress()) return AccessibilityProgressIndicator::create(toRenderProgress(cssBox)); #endif #if ENABLE(METER_ELEMENT) if (cssBox->isMeter()) return AccessibilityProgressIndicator::create(toRenderMeter(cssBox)); #endif // input type=range if (cssBox->isSlider()) return AccessibilitySlider::create(toRenderSlider(cssBox)); } return AccessibilityRenderObject::create(renderer); }