haikuwebkit/LayoutTests/accessibility/canvas-accessibilitynodeobj...

74 lines
2.2 KiB
HTML
Raw Permalink Normal View History

AX: Need AccessibilityObjects for nodes without renderers in canvas subtree https://bugs.webkit.org/show_bug.cgi?id=87899 Reviewed by Chris Fleizach. Source/WebCore: Refactors AccessibilityRenderObject so that it inherits from a new class, AccessibilityNodeObject, that can be constructed from a Node without a renderer. Modifies AXObjectCache so that it automatically creates an AccessibilityNodeObject for elements in a canvas subtree but not otherwise. A new layout test verifies that this correctly exposes an accessibility tree with appropriate roles for elements in a canvas subtree. This patch does not try to complete the implementation of AccessibilityNodeObject. Most AX methods are still unimplemented and need to be migrated from AccessibilityRenderObject to AccessibilityNodeObject in a future patch. This patch also doesn't change anything outside of WebCore/accessibility, so the rest of WebCore only calls AXObjectCache when there are changes to a RenderObject, not to a Node. Accessible notifications on nodes without renderers need to be implemented in a future patch. Test: accessibility/canvas-accessibilitynodeobject.html * CMakeLists.txt: * GNUmakefile.list.am: * Target.pri: * WebCore.gypi: * accessibility/AXObjectCache.cpp: (WebCore::AXObjectCache::get): (WebCore): (WebCore::createFromNode): (WebCore::AXObjectCache::getOrCreate): (WebCore::AXObjectCache::remove): * accessibility/AXObjectCache.h: (AXObjectCache): (WebCore::AXObjectCache::get): (WebCore::AXObjectCache::getOrCreate): (WebCore::AXObjectCache::remove): * accessibility/AccessibilityARIAGrid.cpp: (WebCore::AccessibilityARIAGrid::AccessibilityARIAGrid): (WebCore): (WebCore::AccessibilityARIAGrid::~AccessibilityARIAGrid): (WebCore::AccessibilityARIAGrid::init): (WebCore::AccessibilityARIAGrid::create): * accessibility/AccessibilityARIAGrid.h: (AccessibilityARIAGrid): * accessibility/AccessibilityARIAGridCell.cpp: (WebCore::AccessibilityARIAGridCell::create): * accessibility/AccessibilityARIAGridRow.cpp: (WebCore::AccessibilityARIAGridRow::create): * accessibility/AccessibilityAllInOne.cpp: * accessibility/AccessibilityList.cpp: (WebCore::AccessibilityList::create): * accessibility/AccessibilityListBox.cpp: (WebCore::AccessibilityListBox::create): * accessibility/AccessibilityMediaControls.cpp: (WebCore::AccessibilityMediaControl::create): (WebCore::AccessibilityMediaControlsContainer::create): (WebCore::AccessibilityMediaTimeline::create): (WebCore::AccessibilityMediaTimeDisplay::create): * accessibility/AccessibilityMenuList.cpp: (WebCore::AccessibilityMenuList::create): (WebCore): * accessibility/AccessibilityMenuList.h: (AccessibilityMenuList): * accessibility/AccessibilityNodeObject.cpp: Added. (WebCore): (WebCore::AccessibilityNodeObject::AccessibilityNodeObject): (WebCore::AccessibilityNodeObject::~AccessibilityNodeObject): (WebCore::AccessibilityNodeObject::init): (WebCore::AccessibilityNodeObject::create): (WebCore::AccessibilityNodeObject::detach): (WebCore::AccessibilityNodeObject::childrenChanged): (WebCore::AccessibilityNodeObject::updateAccessibilityRole): (WebCore::AccessibilityNodeObject::firstChild): (WebCore::AccessibilityNodeObject::lastChild): (WebCore::AccessibilityNodeObject::previousSibling): (WebCore::AccessibilityNodeObject::nextSibling): (WebCore::AccessibilityNodeObject::parentObjectIfExists): (WebCore::AccessibilityNodeObject::parentObject): (WebCore::AccessibilityNodeObject::elementRect): (WebCore::AccessibilityNodeObject::setNode): (WebCore::AccessibilityNodeObject::document): (WebCore::AccessibilityNodeObject::determineAccessibilityRole): (WebCore::AccessibilityNodeObject::addChildren): (WebCore::AccessibilityNodeObject::accessibilityIsIgnored): (WebCore::AccessibilityNodeObject::canSetFocusAttribute): (WebCore::AccessibilityNodeObject::determineAriaRoleAttribute): (WebCore::AccessibilityNodeObject::ariaRoleAttribute): (WebCore::AccessibilityNodeObject::remapAriaRoleDueToParent): * accessibility/AccessibilityNodeObject.h: Added. (WebCore): (AccessibilityNodeObject): (WebCore::AccessibilityNodeObject::isAccessibilityNodeObject): (WebCore::AccessibilityNodeObject::node): (WebCore::AccessibilityNodeObject::isDetached): (WebCore::toAccessibilityNodeObject): * accessibility/AccessibilityObject.h: (WebCore::AccessibilityObject::isAccessibilityNodeObject): * accessibility/AccessibilityProgressIndicator.cpp: (WebCore::AccessibilityProgressIndicator::create): * accessibility/AccessibilityRenderObject.cpp: (WebCore::AccessibilityRenderObject::AccessibilityRenderObject): (WebCore::AccessibilityRenderObject::init): (WebCore): (WebCore::AccessibilityRenderObject::create): (WebCore::AccessibilityRenderObject::detach): (WebCore::AccessibilityRenderObject::setRenderer): (WebCore::AccessibilityRenderObject::canHaveChildren): (WebCore::AccessibilityRenderObject::addCanvasChildren): (WebCore::AccessibilityRenderObject::addChildren): * accessibility/AccessibilityRenderObject.h: (AccessibilityRenderObject): * accessibility/AccessibilitySlider.cpp: (WebCore::AccessibilitySlider::create): * accessibility/AccessibilityTable.cpp: (WebCore::AccessibilityTable::AccessibilityTable): (WebCore): (WebCore::AccessibilityTable::~AccessibilityTable): (WebCore::AccessibilityTable::init): (WebCore::AccessibilityTable::create): * accessibility/AccessibilityTable.h: (AccessibilityTable): * accessibility/AccessibilityTableCell.cpp: (WebCore::AccessibilityTableCell::create): * accessibility/AccessibilityTableRow.cpp: (WebCore::AccessibilityTableRow::create): LayoutTests: This new test adds a bunch of elements to a normal container and the same elements to a canvas subtree, then it iterates over all of the accessible objects within each container and makes sure they have identical roles. Because we know the nodes in the canvas subtree don't have renderers, this successfully tests that AccessibilityNodeObjects are getting created for these nodes. * accessibility/canvas-accessibilitynodeobject-expected.txt: Added. * accessibility/canvas-accessibilitynodeobject.html: Added. Canonical link: https://commits.webkit.org/109878@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@123428 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2012-07-24 06:26:32 +00:00
<!DOCTYPE HTML>
<html>
<body>
Change LayoutTests' a* and b* files to use pre and post js files in LayoutTests/resources. https://bugs.webkit.org/show_bug.cgi?id=120985. Rubber stamped by Filip Pizlo. * accessibility/accessibility-node-memory-management.html: * accessibility/accessibility-node-reparent.html: * accessibility/accessibility-object-detached.html: * accessibility/adjacent-continuations-cause-assertion-failure.html: * accessibility/anonymous-render-block-in-continuation-causes-crash.html: * accessibility/aria-checkbox-checked.html: * accessibility/aria-checkbox-sends-notification.html: * accessibility/aria-checkbox-text.html: * accessibility/aria-combobox.html: * accessibility/aria-controls-with-tabs.html: * accessibility/aria-disabled.html: * accessibility/aria-fallback-roles.html: * accessibility/aria-help.html: * accessibility/aria-hidden-hides-all-elements.html: * accessibility/aria-hidden-update.html: * accessibility/aria-hidden-updates-alldescendants.html: * accessibility/aria-hidden-with-elements.html: * accessibility/aria-hidden.html: * accessibility/aria-invalid.html: * accessibility/aria-label.html: * accessibility/aria-labelledby-overrides-label.html: * accessibility/aria-list-and-listitem.html: * accessibility/aria-menubar-menuitems.html: * accessibility/aria-option-role.html: * accessibility/aria-presentational-role.html: * accessibility/aria-readonly.html: * accessibility/aria-required.html: * accessibility/aria-scrollbar-role.html: * accessibility/aria-sort.html: * accessibility/aria-tab-role-on-buttons.html: * accessibility/aria-tab-roles.html: * accessibility/aria-text-role.html: * accessibility/aria-toggle-button-with-title.html: * accessibility/aria-used-on-image-maps.html: * accessibility/button-title-uses-inner-img-alt.html: * accessibility/canvas-accessibilitynodeobject.html: * accessibility/canvas-description-and-role.html: * accessibility/canvas-fallback-content-2.html: * accessibility/canvas-fallback-content.html: * accessibility/color-well.html: * accessibility/container-node-delete-causes-crash.html: * accessibility/content-changed-notification-causes-crash.html: * accessibility/contenteditable-hidden-div.html: * accessibility/contenteditable-table-check-causes-crash.html: * accessibility/corresponding-control-deleted-crash.html: * accessibility/crash-adopt-node-from-new-document.html: * accessibility/crash-determining-aria-role-when-label-present.html: * accessibility/crash-with-noelement-selectbox.html: * accessibility/crashing-a-tag-in-map.html: * accessibility/deleting-iframe-destroys-axcache.html: * accessibility/disabled-controls-not-focusable.html: * accessibility/div-within-anchors-causes-crash.html: * accessibility/duplicate-axrenderobject-crash.html: * accessibility/duplicate-child-nodes.html: * accessibility/element-haspopup.html: * accessibility/ellipsis-text.html: * accessibility/empty-image-with-title.html: * accessibility/file-upload-button-with-axpress.html: * accessibility/first-letter-text-transform-causes-crash.html: * accessibility/focusable-div.html: * accessibility/global-aria-attributes-invalidate-presentational.html: * accessibility/hang-in-isignored.html: * accessibility/heading-level.html: * accessibility/heading-title-includes-links.html: * accessibility/hidden-legend.html: * accessibility/html-html-element-is-ignored.html: * accessibility/html5-required-attribute.html: * accessibility/iframe-bastardization.html: * accessibility/image-map-title-causes-crash.html: * accessibility/image-map-update-parent-crash.html: * accessibility/image-map1.html: * accessibility/img-alt-tag-only-whitespace.html: * accessibility/img-aria-button-alt-tag.html: * accessibility/img-fallsback-to-title.html: * accessibility/inline-continuations.html: * accessibility/input-file-causes-crash.html: * accessibility/input-image-alt.html: * accessibility/insert-selected-option-into-select-causes-crash.html: * accessibility/label-element-press.html: * accessibility/label-for-control-hittest.html: * accessibility/legend.html: * accessibility/link-inside-button-accessible-text.html: * accessibility/listbox-enabled-states.html: * accessibility/loading-iframe-sends-notification.html: * accessibility/loading-iframe-updates-axtree.html: * accessibility/media-controls.html: * accessibility/media-element.html: * accessibility/menu-item-crash.html: * accessibility/menu-list-sends-change-notification.html: * accessibility/meter-element.html: * accessibility/multiselect-list-reports-active-option.html: * accessibility/non-native-image-crash.html: * accessibility/noscript-ignored.html: * accessibility/notification-listeners.html: * accessibility/placeholder.html: * accessibility/platform-name.html: * accessibility/poorly-formed-aria-table.html: * accessibility/popup-button-title.html: * accessibility/presentational-elements-with-focus.html: * accessibility/press-works-on-control-types.html: * accessibility/radio-button-title-label.html: * accessibility/removed-anonymous-block-child-causes-crash.html: * accessibility/removed-continuation-element-causes-crash.html: * accessibility/render-counter-text.html: * accessibility/selection-states.html: * accessibility/spinbutton-value.html: * accessibility/svg-bounds.html: * accessibility/svg-group-element-with-title.html: * accessibility/svg-image.html: * accessibility/svg-remote-element.html: * accessibility/table-cell-for-column-and-row-crash.html: * accessibility/table-destroyed-crash.html: * accessibility/table-remove-cell-crash.html: * accessibility/table-with-empty-thead-causes-crash.html: * accessibility/table-with-hidden-head-section.html: * accessibility/table-with-mismatch-column-count-in-initial-section.html: * accessibility/text-role-with-aria-hidden-inside.html: * accessibility/textarea-insertion-point-line-number.html: * accessibility/textbox-role-reports-selection.html: * accessibility/title-ui-element-correctness.html: * accessibility/transformed-bounds.html: * accessibility/updating-attribute-in-table-causes-crash.html: * animations/animation-css-rule-types.html: * animations/animation-events-create.html: * animations/computed-style.html: * animations/keyframes-rule.html: * animations/script-tests/TEMPLATE.html: * batterystatus/add-listener-from-callback.html: * batterystatus/basic-all-types-of-events.html: * batterystatus/basic-operation.html: * batterystatus/event-after-navigation.html: * batterystatus/multiple-frames.html: * batterystatus/updates.html: * batterystatus/window-property.html: Canonical link: https://commits.webkit.org/138878@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@155274 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2013-09-08 01:18:24 +00:00
<script src="../resources/js-test-pre.js"></script>
AX: Need AccessibilityObjects for nodes without renderers in canvas subtree https://bugs.webkit.org/show_bug.cgi?id=87899 Reviewed by Chris Fleizach. Source/WebCore: Refactors AccessibilityRenderObject so that it inherits from a new class, AccessibilityNodeObject, that can be constructed from a Node without a renderer. Modifies AXObjectCache so that it automatically creates an AccessibilityNodeObject for elements in a canvas subtree but not otherwise. A new layout test verifies that this correctly exposes an accessibility tree with appropriate roles for elements in a canvas subtree. This patch does not try to complete the implementation of AccessibilityNodeObject. Most AX methods are still unimplemented and need to be migrated from AccessibilityRenderObject to AccessibilityNodeObject in a future patch. This patch also doesn't change anything outside of WebCore/accessibility, so the rest of WebCore only calls AXObjectCache when there are changes to a RenderObject, not to a Node. Accessible notifications on nodes without renderers need to be implemented in a future patch. Test: accessibility/canvas-accessibilitynodeobject.html * CMakeLists.txt: * GNUmakefile.list.am: * Target.pri: * WebCore.gypi: * accessibility/AXObjectCache.cpp: (WebCore::AXObjectCache::get): (WebCore): (WebCore::createFromNode): (WebCore::AXObjectCache::getOrCreate): (WebCore::AXObjectCache::remove): * accessibility/AXObjectCache.h: (AXObjectCache): (WebCore::AXObjectCache::get): (WebCore::AXObjectCache::getOrCreate): (WebCore::AXObjectCache::remove): * accessibility/AccessibilityARIAGrid.cpp: (WebCore::AccessibilityARIAGrid::AccessibilityARIAGrid): (WebCore): (WebCore::AccessibilityARIAGrid::~AccessibilityARIAGrid): (WebCore::AccessibilityARIAGrid::init): (WebCore::AccessibilityARIAGrid::create): * accessibility/AccessibilityARIAGrid.h: (AccessibilityARIAGrid): * accessibility/AccessibilityARIAGridCell.cpp: (WebCore::AccessibilityARIAGridCell::create): * accessibility/AccessibilityARIAGridRow.cpp: (WebCore::AccessibilityARIAGridRow::create): * accessibility/AccessibilityAllInOne.cpp: * accessibility/AccessibilityList.cpp: (WebCore::AccessibilityList::create): * accessibility/AccessibilityListBox.cpp: (WebCore::AccessibilityListBox::create): * accessibility/AccessibilityMediaControls.cpp: (WebCore::AccessibilityMediaControl::create): (WebCore::AccessibilityMediaControlsContainer::create): (WebCore::AccessibilityMediaTimeline::create): (WebCore::AccessibilityMediaTimeDisplay::create): * accessibility/AccessibilityMenuList.cpp: (WebCore::AccessibilityMenuList::create): (WebCore): * accessibility/AccessibilityMenuList.h: (AccessibilityMenuList): * accessibility/AccessibilityNodeObject.cpp: Added. (WebCore): (WebCore::AccessibilityNodeObject::AccessibilityNodeObject): (WebCore::AccessibilityNodeObject::~AccessibilityNodeObject): (WebCore::AccessibilityNodeObject::init): (WebCore::AccessibilityNodeObject::create): (WebCore::AccessibilityNodeObject::detach): (WebCore::AccessibilityNodeObject::childrenChanged): (WebCore::AccessibilityNodeObject::updateAccessibilityRole): (WebCore::AccessibilityNodeObject::firstChild): (WebCore::AccessibilityNodeObject::lastChild): (WebCore::AccessibilityNodeObject::previousSibling): (WebCore::AccessibilityNodeObject::nextSibling): (WebCore::AccessibilityNodeObject::parentObjectIfExists): (WebCore::AccessibilityNodeObject::parentObject): (WebCore::AccessibilityNodeObject::elementRect): (WebCore::AccessibilityNodeObject::setNode): (WebCore::AccessibilityNodeObject::document): (WebCore::AccessibilityNodeObject::determineAccessibilityRole): (WebCore::AccessibilityNodeObject::addChildren): (WebCore::AccessibilityNodeObject::accessibilityIsIgnored): (WebCore::AccessibilityNodeObject::canSetFocusAttribute): (WebCore::AccessibilityNodeObject::determineAriaRoleAttribute): (WebCore::AccessibilityNodeObject::ariaRoleAttribute): (WebCore::AccessibilityNodeObject::remapAriaRoleDueToParent): * accessibility/AccessibilityNodeObject.h: Added. (WebCore): (AccessibilityNodeObject): (WebCore::AccessibilityNodeObject::isAccessibilityNodeObject): (WebCore::AccessibilityNodeObject::node): (WebCore::AccessibilityNodeObject::isDetached): (WebCore::toAccessibilityNodeObject): * accessibility/AccessibilityObject.h: (WebCore::AccessibilityObject::isAccessibilityNodeObject): * accessibility/AccessibilityProgressIndicator.cpp: (WebCore::AccessibilityProgressIndicator::create): * accessibility/AccessibilityRenderObject.cpp: (WebCore::AccessibilityRenderObject::AccessibilityRenderObject): (WebCore::AccessibilityRenderObject::init): (WebCore): (WebCore::AccessibilityRenderObject::create): (WebCore::AccessibilityRenderObject::detach): (WebCore::AccessibilityRenderObject::setRenderer): (WebCore::AccessibilityRenderObject::canHaveChildren): (WebCore::AccessibilityRenderObject::addCanvasChildren): (WebCore::AccessibilityRenderObject::addChildren): * accessibility/AccessibilityRenderObject.h: (AccessibilityRenderObject): * accessibility/AccessibilitySlider.cpp: (WebCore::AccessibilitySlider::create): * accessibility/AccessibilityTable.cpp: (WebCore::AccessibilityTable::AccessibilityTable): (WebCore): (WebCore::AccessibilityTable::~AccessibilityTable): (WebCore::AccessibilityTable::init): (WebCore::AccessibilityTable::create): * accessibility/AccessibilityTable.h: (AccessibilityTable): * accessibility/AccessibilityTableCell.cpp: (WebCore::AccessibilityTableCell::create): * accessibility/AccessibilityTableRow.cpp: (WebCore::AccessibilityTableRow::create): LayoutTests: This new test adds a bunch of elements to a normal container and the same elements to a canvas subtree, then it iterates over all of the accessible objects within each container and makes sure they have identical roles. Because we know the nodes in the canvas subtree don't have renderers, this successfully tests that AccessibilityNodeObjects are getting created for these nodes. * accessibility/canvas-accessibilitynodeobject-expected.txt: Added. * accessibility/canvas-accessibilitynodeobject.html: Added. Canonical link: https://commits.webkit.org/109878@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@123428 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2012-07-24 06:26:32 +00:00
<div id="myContainer" tabindex="-1">
<a href="#">Link</a>
<button>Button</button>
<input type="text">
<input type="checkbox">
<input type="radio">
<input type="submit">
<select><option>1<option>2</select>
<span tabindex="0" role="button">ARIA button</span>
<span tabindex="0" role="link">ARIA link</span>
</div>
<canvas id="myCanvas" width="300" height="300" tabindex="-1">
<a href="#">Link</a>
<button>Button</button>
<input type="text">
<input type="checkbox">
<input type="radio">
<input type="submit">
<select><option>1<option>2</select>
<span tabindex="0" role="button">ARIA button</span>
<span tabindex="0" role="link">ARIA link</span>
</canvas>
<div id="console"></div>
<script>
description("This test makes sure that AccessibilityNodeObjects are created for elements in a canvas subtree.");
Use testRunner instead of layoutTestController in the remaining layout tests https://bugs.webkit.org/show_bug.cgi?id=93172 Reviewed by Adam Barth. One last sweeping patch. * accessibility/canvas-accessibilitynodeobject.html: * compositing/backface-visibility/backface-visibility-webgl.html: * compositing/fixed-position-scroll-offset-history-restore.html: * compositing/overflow/image-load-overflow-scrollbars.html: * css3/flexbox/flexitem.html: * dom/html/level1/core/selfhtml.js: (startTest): * dom/html/level2/core/selfhtml.js: (startTest): * dom/html/level2/events/selfhtml.js: (startTest): * dom/html/level2/html/AppletsCollection.html: * dom/html/level2/html/HTMLBaseElement01.html: * dom/html/level2/html/HTMLBaseElement02.html: * dom/html/level2/html/selfhtml.js: (startTest): * dom/svg/level3/xpath/svgunit.js: * dom/xhtml/level1/core/selfxhtml.js: (startTest): * dom/xhtml/level2/core/selfxhtml.js: (startTest): * dom/xhtml/level2/events/selfxhtml.js: (startTest): * dom/xhtml/level2/html/HTMLBaseElement01.xhtml: * dom/xhtml/level2/html/HTMLBaseElement02.xhtml: * dom/xhtml/level2/html/selfxhtml.js: (startTest): * dom/xhtml/level3/core/selfxhtml.js: (startTest): * editing/shadow/adjusting-editing-boundary-with-table-in-shadow.html: * editing/shadow/bold-twice-in-shadow.html: * editing/shadow/breaking-editing-boundaries-2.html: * editing/shadow/contenteditable-propagation-at-shadow-boundary.html: * editing/shadow/delete-characters-in-distributed-node-crash.html: * editing/shadow/delete-list-in-shadow.html: * editing/shadow/insertorderedlist-crash.html: * editing/shadow/pressing-enter-on-list.html: * editing/spelling/grammar-edit-word-expected.txt: * editing/spelling/grammar-edit-word.html: * fast/block/percent-height-descendant-not-removed-crash2.html: * fast/block/positioning/abspositioned-object-under-split-relpositioned-inline-crash.html: * fast/block/positioning/insert-positioned-in-anonymous-crash.html: * fast/canvas/fallback-content.html: * fast/css/counters/counter-reset-subtree-insert-crash.html: * fast/css/crash-on-gradient-with-derived-color.html: * fast/dom/NodeList/childNodes-reverse-iteration.html: * fast/dom/Window/window-property-shadowing-onclick.html: * fast/dom/XMLSerializer-xml-namespace.html: * fast/dom/shadow/content-after-style.html: Canonical link: https://commits.webkit.org/111024@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@124685 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2012-08-04 02:40:10 +00:00
if (window.testRunner && window.accessibilityController) {
window.testRunner.dumpAsText();
AX: Need AccessibilityObjects for nodes without renderers in canvas subtree https://bugs.webkit.org/show_bug.cgi?id=87899 Reviewed by Chris Fleizach. Source/WebCore: Refactors AccessibilityRenderObject so that it inherits from a new class, AccessibilityNodeObject, that can be constructed from a Node without a renderer. Modifies AXObjectCache so that it automatically creates an AccessibilityNodeObject for elements in a canvas subtree but not otherwise. A new layout test verifies that this correctly exposes an accessibility tree with appropriate roles for elements in a canvas subtree. This patch does not try to complete the implementation of AccessibilityNodeObject. Most AX methods are still unimplemented and need to be migrated from AccessibilityRenderObject to AccessibilityNodeObject in a future patch. This patch also doesn't change anything outside of WebCore/accessibility, so the rest of WebCore only calls AXObjectCache when there are changes to a RenderObject, not to a Node. Accessible notifications on nodes without renderers need to be implemented in a future patch. Test: accessibility/canvas-accessibilitynodeobject.html * CMakeLists.txt: * GNUmakefile.list.am: * Target.pri: * WebCore.gypi: * accessibility/AXObjectCache.cpp: (WebCore::AXObjectCache::get): (WebCore): (WebCore::createFromNode): (WebCore::AXObjectCache::getOrCreate): (WebCore::AXObjectCache::remove): * accessibility/AXObjectCache.h: (AXObjectCache): (WebCore::AXObjectCache::get): (WebCore::AXObjectCache::getOrCreate): (WebCore::AXObjectCache::remove): * accessibility/AccessibilityARIAGrid.cpp: (WebCore::AccessibilityARIAGrid::AccessibilityARIAGrid): (WebCore): (WebCore::AccessibilityARIAGrid::~AccessibilityARIAGrid): (WebCore::AccessibilityARIAGrid::init): (WebCore::AccessibilityARIAGrid::create): * accessibility/AccessibilityARIAGrid.h: (AccessibilityARIAGrid): * accessibility/AccessibilityARIAGridCell.cpp: (WebCore::AccessibilityARIAGridCell::create): * accessibility/AccessibilityARIAGridRow.cpp: (WebCore::AccessibilityARIAGridRow::create): * accessibility/AccessibilityAllInOne.cpp: * accessibility/AccessibilityList.cpp: (WebCore::AccessibilityList::create): * accessibility/AccessibilityListBox.cpp: (WebCore::AccessibilityListBox::create): * accessibility/AccessibilityMediaControls.cpp: (WebCore::AccessibilityMediaControl::create): (WebCore::AccessibilityMediaControlsContainer::create): (WebCore::AccessibilityMediaTimeline::create): (WebCore::AccessibilityMediaTimeDisplay::create): * accessibility/AccessibilityMenuList.cpp: (WebCore::AccessibilityMenuList::create): (WebCore): * accessibility/AccessibilityMenuList.h: (AccessibilityMenuList): * accessibility/AccessibilityNodeObject.cpp: Added. (WebCore): (WebCore::AccessibilityNodeObject::AccessibilityNodeObject): (WebCore::AccessibilityNodeObject::~AccessibilityNodeObject): (WebCore::AccessibilityNodeObject::init): (WebCore::AccessibilityNodeObject::create): (WebCore::AccessibilityNodeObject::detach): (WebCore::AccessibilityNodeObject::childrenChanged): (WebCore::AccessibilityNodeObject::updateAccessibilityRole): (WebCore::AccessibilityNodeObject::firstChild): (WebCore::AccessibilityNodeObject::lastChild): (WebCore::AccessibilityNodeObject::previousSibling): (WebCore::AccessibilityNodeObject::nextSibling): (WebCore::AccessibilityNodeObject::parentObjectIfExists): (WebCore::AccessibilityNodeObject::parentObject): (WebCore::AccessibilityNodeObject::elementRect): (WebCore::AccessibilityNodeObject::setNode): (WebCore::AccessibilityNodeObject::document): (WebCore::AccessibilityNodeObject::determineAccessibilityRole): (WebCore::AccessibilityNodeObject::addChildren): (WebCore::AccessibilityNodeObject::accessibilityIsIgnored): (WebCore::AccessibilityNodeObject::canSetFocusAttribute): (WebCore::AccessibilityNodeObject::determineAriaRoleAttribute): (WebCore::AccessibilityNodeObject::ariaRoleAttribute): (WebCore::AccessibilityNodeObject::remapAriaRoleDueToParent): * accessibility/AccessibilityNodeObject.h: Added. (WebCore): (AccessibilityNodeObject): (WebCore::AccessibilityNodeObject::isAccessibilityNodeObject): (WebCore::AccessibilityNodeObject::node): (WebCore::AccessibilityNodeObject::isDetached): (WebCore::toAccessibilityNodeObject): * accessibility/AccessibilityObject.h: (WebCore::AccessibilityObject::isAccessibilityNodeObject): * accessibility/AccessibilityProgressIndicator.cpp: (WebCore::AccessibilityProgressIndicator::create): * accessibility/AccessibilityRenderObject.cpp: (WebCore::AccessibilityRenderObject::AccessibilityRenderObject): (WebCore::AccessibilityRenderObject::init): (WebCore): (WebCore::AccessibilityRenderObject::create): (WebCore::AccessibilityRenderObject::detach): (WebCore::AccessibilityRenderObject::setRenderer): (WebCore::AccessibilityRenderObject::canHaveChildren): (WebCore::AccessibilityRenderObject::addCanvasChildren): (WebCore::AccessibilityRenderObject::addChildren): * accessibility/AccessibilityRenderObject.h: (AccessibilityRenderObject): * accessibility/AccessibilitySlider.cpp: (WebCore::AccessibilitySlider::create): * accessibility/AccessibilityTable.cpp: (WebCore::AccessibilityTable::AccessibilityTable): (WebCore): (WebCore::AccessibilityTable::~AccessibilityTable): (WebCore::AccessibilityTable::init): (WebCore::AccessibilityTable::create): * accessibility/AccessibilityTable.h: (AccessibilityTable): * accessibility/AccessibilityTableCell.cpp: (WebCore::AccessibilityTableCell::create): * accessibility/AccessibilityTableRow.cpp: (WebCore::AccessibilityTableRow::create): LayoutTests: This new test adds a bunch of elements to a normal container and the same elements to a canvas subtree, then it iterates over all of the accessible objects within each container and makes sure they have identical roles. Because we know the nodes in the canvas subtree don't have renderers, this successfully tests that AccessibilityNodeObjects are getting created for these nodes. * accessibility/canvas-accessibilitynodeobject-expected.txt: Added. * accessibility/canvas-accessibilitynodeobject.html: Added. Canonical link: https://commits.webkit.org/109878@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@123428 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2012-07-24 06:26:32 +00:00
function appendFocusableDescendants(axObject, axFocusableList) {
for (var i = 0; i < axObject.childrenCount; i++) {
var axChild = axObject.childAtIndex(i);
if (axChild.isFocusable)
axFocusableList.push(axChild);
appendFocusableDescendants(axChild, axFocusableList);
}
}
var container = document.getElementById("myContainer");
container.focus();
var axContainer = accessibilityController.focusedElement;
var canvas = document.getElementById("myCanvas");
canvas.focus();
var axCanvas = accessibilityController.focusedElement;
var axRenderObjects = [];
var axNodeObjects = [];
appendFocusableDescendants(axContainer, axRenderObjects);
appendFocusableDescendants(axCanvas, axNodeObjects);
shouldBe("axRenderObjects.length", "axNodeObjects.length");
for (var i = 0; i < axRenderObjects.length; i++) {
var axRenderObject = axRenderObjects[i];
var axNodeObject = axNodeObjects[i];
shouldBe("i == " + i + "; axRenderObject.role == axNodeObject.role", "true");
}
}
</script>
Change LayoutTests' a* and b* files to use pre and post js files in LayoutTests/resources. https://bugs.webkit.org/show_bug.cgi?id=120985. Rubber stamped by Filip Pizlo. * accessibility/accessibility-node-memory-management.html: * accessibility/accessibility-node-reparent.html: * accessibility/accessibility-object-detached.html: * accessibility/adjacent-continuations-cause-assertion-failure.html: * accessibility/anonymous-render-block-in-continuation-causes-crash.html: * accessibility/aria-checkbox-checked.html: * accessibility/aria-checkbox-sends-notification.html: * accessibility/aria-checkbox-text.html: * accessibility/aria-combobox.html: * accessibility/aria-controls-with-tabs.html: * accessibility/aria-disabled.html: * accessibility/aria-fallback-roles.html: * accessibility/aria-help.html: * accessibility/aria-hidden-hides-all-elements.html: * accessibility/aria-hidden-update.html: * accessibility/aria-hidden-updates-alldescendants.html: * accessibility/aria-hidden-with-elements.html: * accessibility/aria-hidden.html: * accessibility/aria-invalid.html: * accessibility/aria-label.html: * accessibility/aria-labelledby-overrides-label.html: * accessibility/aria-list-and-listitem.html: * accessibility/aria-menubar-menuitems.html: * accessibility/aria-option-role.html: * accessibility/aria-presentational-role.html: * accessibility/aria-readonly.html: * accessibility/aria-required.html: * accessibility/aria-scrollbar-role.html: * accessibility/aria-sort.html: * accessibility/aria-tab-role-on-buttons.html: * accessibility/aria-tab-roles.html: * accessibility/aria-text-role.html: * accessibility/aria-toggle-button-with-title.html: * accessibility/aria-used-on-image-maps.html: * accessibility/button-title-uses-inner-img-alt.html: * accessibility/canvas-accessibilitynodeobject.html: * accessibility/canvas-description-and-role.html: * accessibility/canvas-fallback-content-2.html: * accessibility/canvas-fallback-content.html: * accessibility/color-well.html: * accessibility/container-node-delete-causes-crash.html: * accessibility/content-changed-notification-causes-crash.html: * accessibility/contenteditable-hidden-div.html: * accessibility/contenteditable-table-check-causes-crash.html: * accessibility/corresponding-control-deleted-crash.html: * accessibility/crash-adopt-node-from-new-document.html: * accessibility/crash-determining-aria-role-when-label-present.html: * accessibility/crash-with-noelement-selectbox.html: * accessibility/crashing-a-tag-in-map.html: * accessibility/deleting-iframe-destroys-axcache.html: * accessibility/disabled-controls-not-focusable.html: * accessibility/div-within-anchors-causes-crash.html: * accessibility/duplicate-axrenderobject-crash.html: * accessibility/duplicate-child-nodes.html: * accessibility/element-haspopup.html: * accessibility/ellipsis-text.html: * accessibility/empty-image-with-title.html: * accessibility/file-upload-button-with-axpress.html: * accessibility/first-letter-text-transform-causes-crash.html: * accessibility/focusable-div.html: * accessibility/global-aria-attributes-invalidate-presentational.html: * accessibility/hang-in-isignored.html: * accessibility/heading-level.html: * accessibility/heading-title-includes-links.html: * accessibility/hidden-legend.html: * accessibility/html-html-element-is-ignored.html: * accessibility/html5-required-attribute.html: * accessibility/iframe-bastardization.html: * accessibility/image-map-title-causes-crash.html: * accessibility/image-map-update-parent-crash.html: * accessibility/image-map1.html: * accessibility/img-alt-tag-only-whitespace.html: * accessibility/img-aria-button-alt-tag.html: * accessibility/img-fallsback-to-title.html: * accessibility/inline-continuations.html: * accessibility/input-file-causes-crash.html: * accessibility/input-image-alt.html: * accessibility/insert-selected-option-into-select-causes-crash.html: * accessibility/label-element-press.html: * accessibility/label-for-control-hittest.html: * accessibility/legend.html: * accessibility/link-inside-button-accessible-text.html: * accessibility/listbox-enabled-states.html: * accessibility/loading-iframe-sends-notification.html: * accessibility/loading-iframe-updates-axtree.html: * accessibility/media-controls.html: * accessibility/media-element.html: * accessibility/menu-item-crash.html: * accessibility/menu-list-sends-change-notification.html: * accessibility/meter-element.html: * accessibility/multiselect-list-reports-active-option.html: * accessibility/non-native-image-crash.html: * accessibility/noscript-ignored.html: * accessibility/notification-listeners.html: * accessibility/placeholder.html: * accessibility/platform-name.html: * accessibility/poorly-formed-aria-table.html: * accessibility/popup-button-title.html: * accessibility/presentational-elements-with-focus.html: * accessibility/press-works-on-control-types.html: * accessibility/radio-button-title-label.html: * accessibility/removed-anonymous-block-child-causes-crash.html: * accessibility/removed-continuation-element-causes-crash.html: * accessibility/render-counter-text.html: * accessibility/selection-states.html: * accessibility/spinbutton-value.html: * accessibility/svg-bounds.html: * accessibility/svg-group-element-with-title.html: * accessibility/svg-image.html: * accessibility/svg-remote-element.html: * accessibility/table-cell-for-column-and-row-crash.html: * accessibility/table-destroyed-crash.html: * accessibility/table-remove-cell-crash.html: * accessibility/table-with-empty-thead-causes-crash.html: * accessibility/table-with-hidden-head-section.html: * accessibility/table-with-mismatch-column-count-in-initial-section.html: * accessibility/text-role-with-aria-hidden-inside.html: * accessibility/textarea-insertion-point-line-number.html: * accessibility/textbox-role-reports-selection.html: * accessibility/title-ui-element-correctness.html: * accessibility/transformed-bounds.html: * accessibility/updating-attribute-in-table-causes-crash.html: * animations/animation-css-rule-types.html: * animations/animation-events-create.html: * animations/computed-style.html: * animations/keyframes-rule.html: * animations/script-tests/TEMPLATE.html: * batterystatus/add-listener-from-callback.html: * batterystatus/basic-all-types-of-events.html: * batterystatus/basic-operation.html: * batterystatus/event-after-navigation.html: * batterystatus/multiple-frames.html: * batterystatus/updates.html: * batterystatus/window-property.html: Canonical link: https://commits.webkit.org/138878@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@155274 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2013-09-08 01:18:24 +00:00
<script src="../resources/js-test-post.js"></script>
AX: Need AccessibilityObjects for nodes without renderers in canvas subtree https://bugs.webkit.org/show_bug.cgi?id=87899 Reviewed by Chris Fleizach. Source/WebCore: Refactors AccessibilityRenderObject so that it inherits from a new class, AccessibilityNodeObject, that can be constructed from a Node without a renderer. Modifies AXObjectCache so that it automatically creates an AccessibilityNodeObject for elements in a canvas subtree but not otherwise. A new layout test verifies that this correctly exposes an accessibility tree with appropriate roles for elements in a canvas subtree. This patch does not try to complete the implementation of AccessibilityNodeObject. Most AX methods are still unimplemented and need to be migrated from AccessibilityRenderObject to AccessibilityNodeObject in a future patch. This patch also doesn't change anything outside of WebCore/accessibility, so the rest of WebCore only calls AXObjectCache when there are changes to a RenderObject, not to a Node. Accessible notifications on nodes without renderers need to be implemented in a future patch. Test: accessibility/canvas-accessibilitynodeobject.html * CMakeLists.txt: * GNUmakefile.list.am: * Target.pri: * WebCore.gypi: * accessibility/AXObjectCache.cpp: (WebCore::AXObjectCache::get): (WebCore): (WebCore::createFromNode): (WebCore::AXObjectCache::getOrCreate): (WebCore::AXObjectCache::remove): * accessibility/AXObjectCache.h: (AXObjectCache): (WebCore::AXObjectCache::get): (WebCore::AXObjectCache::getOrCreate): (WebCore::AXObjectCache::remove): * accessibility/AccessibilityARIAGrid.cpp: (WebCore::AccessibilityARIAGrid::AccessibilityARIAGrid): (WebCore): (WebCore::AccessibilityARIAGrid::~AccessibilityARIAGrid): (WebCore::AccessibilityARIAGrid::init): (WebCore::AccessibilityARIAGrid::create): * accessibility/AccessibilityARIAGrid.h: (AccessibilityARIAGrid): * accessibility/AccessibilityARIAGridCell.cpp: (WebCore::AccessibilityARIAGridCell::create): * accessibility/AccessibilityARIAGridRow.cpp: (WebCore::AccessibilityARIAGridRow::create): * accessibility/AccessibilityAllInOne.cpp: * accessibility/AccessibilityList.cpp: (WebCore::AccessibilityList::create): * accessibility/AccessibilityListBox.cpp: (WebCore::AccessibilityListBox::create): * accessibility/AccessibilityMediaControls.cpp: (WebCore::AccessibilityMediaControl::create): (WebCore::AccessibilityMediaControlsContainer::create): (WebCore::AccessibilityMediaTimeline::create): (WebCore::AccessibilityMediaTimeDisplay::create): * accessibility/AccessibilityMenuList.cpp: (WebCore::AccessibilityMenuList::create): (WebCore): * accessibility/AccessibilityMenuList.h: (AccessibilityMenuList): * accessibility/AccessibilityNodeObject.cpp: Added. (WebCore): (WebCore::AccessibilityNodeObject::AccessibilityNodeObject): (WebCore::AccessibilityNodeObject::~AccessibilityNodeObject): (WebCore::AccessibilityNodeObject::init): (WebCore::AccessibilityNodeObject::create): (WebCore::AccessibilityNodeObject::detach): (WebCore::AccessibilityNodeObject::childrenChanged): (WebCore::AccessibilityNodeObject::updateAccessibilityRole): (WebCore::AccessibilityNodeObject::firstChild): (WebCore::AccessibilityNodeObject::lastChild): (WebCore::AccessibilityNodeObject::previousSibling): (WebCore::AccessibilityNodeObject::nextSibling): (WebCore::AccessibilityNodeObject::parentObjectIfExists): (WebCore::AccessibilityNodeObject::parentObject): (WebCore::AccessibilityNodeObject::elementRect): (WebCore::AccessibilityNodeObject::setNode): (WebCore::AccessibilityNodeObject::document): (WebCore::AccessibilityNodeObject::determineAccessibilityRole): (WebCore::AccessibilityNodeObject::addChildren): (WebCore::AccessibilityNodeObject::accessibilityIsIgnored): (WebCore::AccessibilityNodeObject::canSetFocusAttribute): (WebCore::AccessibilityNodeObject::determineAriaRoleAttribute): (WebCore::AccessibilityNodeObject::ariaRoleAttribute): (WebCore::AccessibilityNodeObject::remapAriaRoleDueToParent): * accessibility/AccessibilityNodeObject.h: Added. (WebCore): (AccessibilityNodeObject): (WebCore::AccessibilityNodeObject::isAccessibilityNodeObject): (WebCore::AccessibilityNodeObject::node): (WebCore::AccessibilityNodeObject::isDetached): (WebCore::toAccessibilityNodeObject): * accessibility/AccessibilityObject.h: (WebCore::AccessibilityObject::isAccessibilityNodeObject): * accessibility/AccessibilityProgressIndicator.cpp: (WebCore::AccessibilityProgressIndicator::create): * accessibility/AccessibilityRenderObject.cpp: (WebCore::AccessibilityRenderObject::AccessibilityRenderObject): (WebCore::AccessibilityRenderObject::init): (WebCore): (WebCore::AccessibilityRenderObject::create): (WebCore::AccessibilityRenderObject::detach): (WebCore::AccessibilityRenderObject::setRenderer): (WebCore::AccessibilityRenderObject::canHaveChildren): (WebCore::AccessibilityRenderObject::addCanvasChildren): (WebCore::AccessibilityRenderObject::addChildren): * accessibility/AccessibilityRenderObject.h: (AccessibilityRenderObject): * accessibility/AccessibilitySlider.cpp: (WebCore::AccessibilitySlider::create): * accessibility/AccessibilityTable.cpp: (WebCore::AccessibilityTable::AccessibilityTable): (WebCore): (WebCore::AccessibilityTable::~AccessibilityTable): (WebCore::AccessibilityTable::init): (WebCore::AccessibilityTable::create): * accessibility/AccessibilityTable.h: (AccessibilityTable): * accessibility/AccessibilityTableCell.cpp: (WebCore::AccessibilityTableCell::create): * accessibility/AccessibilityTableRow.cpp: (WebCore::AccessibilityTableRow::create): LayoutTests: This new test adds a bunch of elements to a normal container and the same elements to a canvas subtree, then it iterates over all of the accessible objects within each container and makes sure they have identical roles. Because we know the nodes in the canvas subtree don't have renderers, this successfully tests that AccessibilityNodeObjects are getting created for these nodes. * accessibility/canvas-accessibilitynodeobject-expected.txt: Added. * accessibility/canvas-accessibilitynodeobject.html: Added. Canonical link: https://commits.webkit.org/109878@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@123428 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2012-07-24 06:26:32 +00:00
</body>
</html>