https://bugs.webkit.org/show_bug.cgi?id=164331
Reviewed by Chris Fleizach.
Source/WebCore:
The ATK code is using is<AccessibilityListBox>() to identify native listboxes.
But is<AccessibilityListBox>() returns the value of isListBox() which returns
true both for AccessibilityListBox instances as well as for AccessibilityObject
instances which have an AccessibilityRole value of ListBoxRole. Because only
native listboxes should be AccessibilityListBoxes, add isNativeListBox() so
that we can distinguish native and ARIA listboxes.
Tests: accessibility/aria-listbox-clear-selection-crash.html
accessibility/listbox-clear-selection.html
* accessibility/AccessibilityListBox.h:
* accessibility/AccessibilityObject.h:
(WebCore::AccessibilityObject::isNativeListBox):
(WebCore::AccessibilityObject::isListBox):
Tools:
Add AccessibilityUIElement::clearSelectedChildren() to DRT and WKTR.
Implement it for ATK.
* DumpRenderTree/AccessibilityUIElement.h:
* DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
(AccessibilityUIElement::clearSelectedChildren):
* DumpRenderTree/mac/AccessibilityUIElementMac.mm:
(AccessibilityUIElement::clearSelectedChildren):
* DumpRenderTree/win/AccessibilityUIElementWin.cpp:
(AccessibilityUIElement::clearSelectedChildren):
* WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
* WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
* WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
(WTR::AccessibilityUIElement::clearSelectedChildren):
* WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
(WTR::AccessibilityUIElement::clearSelectedChildren):
* WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
(WTR::AccessibilityUIElement::clearSelectedChildren):
LayoutTests:
Add tests to verify clearing selection works for native listboxes, and does not
crash for ARIA listboxes. These tests are being skipped for the Mac and Win ports
which do not yet implement AccessibilityUIElement::clearSelectedChildren().
* accessibility/aria-listbox-clear-selection-crash-expected.txt: Added.
* accessibility/aria-listbox-clear-selection-crash.html: Added.
* accessibility/listbox-clear-selection-expected.txt: Added.
* accessibility/listbox-clear-selection.html: Added.
* platform/mac/TestExpectations:
* platform/win/TestExpectations:
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@208384
268f45cc-cd09-0410-ab3c-
d52691b4dbfc
+2016-11-04 Joanmarie Diggs <jdiggs@igalia.com>
+
+ AX: [ATK] Attempting to clear selection on ARIA listboxes results in crash
+ https://bugs.webkit.org/show_bug.cgi?id=164331
+
+ Reviewed by Chris Fleizach.
+
+ Add tests to verify clearing selection works for native listboxes, and does not
+ crash for ARIA listboxes. These tests are being skipped for the Mac and Win ports
+ which do not yet implement AccessibilityUIElement::clearSelectedChildren().
+
+ * accessibility/aria-listbox-clear-selection-crash-expected.txt: Added.
+ * accessibility/aria-listbox-clear-selection-crash.html: Added.
+ * accessibility/listbox-clear-selection-expected.txt: Added.
+ * accessibility/listbox-clear-selection.html: Added.
+ * platform/mac/TestExpectations:
+ * platform/win/TestExpectations:
+
2016-11-04 Brady Eidson <beidson@apple.com>
IndexedDB 2.0: Throw the correct exceptions during IDBObjectStore/IDBIndex renaming.
--- /dev/null
+Option 1
+Option 2
+Tests that attempting to clear the selection in an ARIA listbox doesn't cause a crash.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS listbox.selectedChildrenCount is 0
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<script src="../resources/js-test-pre.js"></script>
+</head>
+<body id="body">
+<ul id="listbox" role="listbox">
+ <li role="option">Option 1</li>
+ <li role="option">Option 2</li>
+</ul>
+<div id="description"></div>
+<div id="console"></div>
+<script>
+ description("Tests that attempting to clear the selection in an ARIA listbox doesn't cause a crash.");
+ if (window.accessibilityController) {
+ var listbox = accessibilityController.accessibleElementById("listbox");
+ listbox.clearSelectedChildren();
+ shouldBe("listbox.selectedChildrenCount", "0");
+ }
+</script>
+<script src="../resources/js-test-post.js"></script>
+</body>
+</html>
--- /dev/null
+
+Tests clearing the selection of a multi-select select element.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS listbox.selectedChildrenCount is 0
+PASS listbox.selectedChildrenCount is 1
+PASS listbox.selectedChildrenCount is 2
+PASS listbox.selectedChildrenCount is 0
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<script src="../resources/js-test-pre.js"></script>
+</head>
+<body id="body">
+<select id="listbox" multiple="multiple">
+ <option>Option 1</option>
+ <option>Option 2</option>
+</select>
+<div id="description"></div>
+<div id="console"></div>
+<script>
+ description("Tests clearing the selection of a multi-select select element.");
+ if (window.accessibilityController) {
+ var listbox = accessibilityController.accessibleElementById("listbox");
+ shouldBe("listbox.selectedChildrenCount", "0");
+
+ listbox.setSelectedChildAtIndex(0);
+ shouldBe("listbox.selectedChildrenCount", "1");
+
+ listbox.setSelectedChildAtIndex(1);
+ shouldBe("listbox.selectedChildrenCount", "2");
+
+ listbox.clearSelectedChildren();
+ shouldBe("listbox.selectedChildrenCount", "0");
+ }
+</script>
+<script src="../resources/js-test-post.js"></script>
+</body>
+</html>
accessibility/menu-list-sends-change-notification.html
accessibility/multiselect-list-reports-active-option.html
+# Need to implement AccessibilityUIElement::clearSelectedChildren()
+accessibility/aria-listbox-clear-selection-crash.html
+accessibility/listbox-clear-selection.html
+
# Need to implement this in plugins code in WebKit
plugins/reloadplugins-and-pages.html
# TODO Need to add functionality to DumpRenderTree to handle enable/disable Spatial Navigation
fast/spatial-navigation/ [ Skip ]
+# Need to implement AccessibilityUIElement::clearSelectedChildren()
+accessibility/aria-listbox-clear-selection-crash.html [ Skip ]
+accessibility/listbox-clear-selection.html [ Skip ]
+
# TODO Investigate why these mouse scroll tests are failing.
fast/events/platform-wheelevent-in-scrolling-div.html [ Failure ]
fast/events/continuous-platform-wheelevent-in-scrolling-div.html [ Failure ]
+2016-11-04 Joanmarie Diggs <jdiggs@igalia.com>
+
+ AX: [ATK] Attempting to clear selection on ARIA listboxes results in crash
+ https://bugs.webkit.org/show_bug.cgi?id=164331
+
+ Reviewed by Chris Fleizach.
+
+ The ATK code is using is<AccessibilityListBox>() to identify native listboxes.
+ But is<AccessibilityListBox>() returns the value of isListBox() which returns
+ true both for AccessibilityListBox instances as well as for AccessibilityObject
+ instances which have an AccessibilityRole value of ListBoxRole. Because only
+ native listboxes should be AccessibilityListBoxes, add isNativeListBox() so
+ that we can distinguish native and ARIA listboxes.
+
+ Tests: accessibility/aria-listbox-clear-selection-crash.html
+ accessibility/listbox-clear-selection.html
+
+ * accessibility/AccessibilityListBox.h:
+ * accessibility/AccessibilityObject.h:
+ (WebCore::AccessibilityObject::isNativeListBox):
+ (WebCore::AccessibilityObject::isListBox):
+
2016-11-04 Brady Eidson <beidson@apple.com>
IndexedDB 2.0: Throw the correct exceptions during IDBObjectStore/IDBIndex renaming.
private:
explicit AccessibilityListBox(RenderObject*);
- bool isListBox() const override { return true; }
+ bool isNativeListBox() const override { return true; }
AccessibilityObject* listBoxOptionAccessibilityObject(HTMLElement*) const;
AccessibilityObject* elementAccessibilityHitTest(const IntPoint&) const override;
};
} // namespace WebCore
-SPECIALIZE_TYPE_TRAITS_ACCESSIBILITY(AccessibilityListBox, isListBox())
+SPECIALIZE_TYPE_TRAITS_ACCESSIBILITY(AccessibilityListBox, isNativeListBox())
bool isWebArea() const { return roleValue() == WebAreaRole; }
virtual bool isCheckbox() const { return roleValue() == CheckBoxRole; }
virtual bool isRadioButton() const { return roleValue() == RadioButtonRole; }
- virtual bool isListBox() const { return roleValue() == ListBoxRole; }
+ virtual bool isNativeListBox() const { return false; }
+ bool isListBox() const { return roleValue() == ListBoxRole; }
virtual bool isListBoxOption() const { return false; }
virtual bool isAttachment() const { return false; }
virtual bool isMediaTimeline() const { return false; }
+2016-11-04 Joanmarie Diggs <jdiggs@igalia.com>
+
+ AX: [ATK] Attempting to clear selection on ARIA listboxes results in crash
+ https://bugs.webkit.org/show_bug.cgi?id=164331
+
+ Reviewed by Chris Fleizach.
+
+ Add AccessibilityUIElement::clearSelectedChildren() to DRT and WKTR.
+ Implement it for ATK.
+
+ * DumpRenderTree/AccessibilityUIElement.h:
+ * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
+ (AccessibilityUIElement::clearSelectedChildren):
+ * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
+ (AccessibilityUIElement::clearSelectedChildren):
+ * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
+ (AccessibilityUIElement::clearSelectedChildren):
+ * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
+ * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
+ * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
+ (WTR::AccessibilityUIElement::clearSelectedChildren):
+ * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
+ (WTR::AccessibilityUIElement::clearSelectedChildren):
+ * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
+ (WTR::AccessibilityUIElement::clearSelectedChildren):
+
2016-11-04 Per Arne Vollan <pvollan@apple.com>
[Win] Page visibility tests are timing out.
AccessibilityUIElement selectedChildAtIndex(unsigned) const;
void setSelectedChildAtIndex(unsigned) const;
void removeSelectionAtIndex(unsigned) const;
+ void clearSelectedChildren() const;
bool isExpanded() const;
bool isChecked() const;
return JSStringCreateWithCharacters(0, 0);
}
+void AccessibilityUIElement::clearSelectedChildren() const
+{
+ // FIXME: implement
+}
+
JSStringRef AccessibilityUIElement::documentEncoding()
{
return JSStringCreateWithCharacters(0, 0);
END_AX_OBJC_EXCEPTIONS
}
+void AccessibilityUIElement::clearSelectedChildren() const
+{
+ // FIXME: implement
+}
+
JSStringRef AccessibilityUIElement::accessibilityValue() const
{
// FIXME: implement
return JSStringCreateWithBSTR(valueBSTR);
}
+void AccessibilityUIElement::clearSelectedChildren() const
+{
+ // FIXME: implement
+}
JSStringRef AccessibilityUIElement::documentEncoding()
{
void setSelectedChild(AccessibilityUIElement*) const;
void setSelectedChildAtIndex(unsigned) const;
void removeSelectionAtIndex(unsigned) const;
+ void clearSelectedChildren() const;
unsigned selectedChildrenCount() const;
RefPtr<AccessibilityUIElement> selectedChildAtIndex(unsigned) const;
void setSelectedChild(AccessibilityUIElement element);
void setSelectedChildAtIndex(unsigned long index);
void removeSelectionAtIndex(unsigned long index);
+ void clearSelectedChildren();
AccessibilityUIElement titleUIElement();
AccessibilityUIElement parentElement();
atk_selection_remove_selection(ATK_SELECTION(m_element.get()), index);
}
+void AccessibilityUIElement::clearSelectedChildren() const
+{
+ if (!ATK_IS_SELECTION(m_element.get()))
+ return;
+
+ atk_selection_clear_selection(ATK_SELECTION(m_element.get()));
+}
+
JSRetainPtr<JSStringRef> AccessibilityUIElement::accessibilityValue() const
{
// FIXME: implement
{
}
+void AccessibilityUIElement::clearSelectedChildren() const
+{
+ // FIXME: implement
+}
+
JSRetainPtr<JSStringRef> AccessibilityUIElement::accessibilityValue() const
{
// FIXME: implement
END_AX_OBJC_EXCEPTIONS
}
+void AccessibilityUIElement::clearSelectedChildren() const
+{
+ // FIXME: implement
+}
+
JSRetainPtr<JSStringRef> AccessibilityUIElement::accessibilityValue() const
{
// FIXME: implement