Changeset 240277 in webkit
- Timestamp:
- Jan 22, 2019 12:52:53 PM (5 years ago)
- Location:
- trunk
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r240271 r240277 1 2019-01-22 Devin Rousso <drousso@apple.com> 2 3 Web Inspector: Audit: provide a way to get related Accessibility nodes for a given node 4 https://bugs.webkit.org/show_bug.cgi?id=193225 5 <rdar://problem/46799956> 6 7 Reviewed by Joseph Pecoraro. 8 9 * inspector/audit/run-accessibility.html: 10 * inspector/audit/run-accessibility-expected.txt: 11 1 12 2019-01-22 Simon Fraser <simon.fraser@apple.com> 2 13 -
trunk/LayoutTests/inspector/audit/run-accessibility-expected.txt
r239986 r240277 40 40 Audit teardown... 41 41 42 -- Running test case: Audit.run.Accessibility.getActiveDescendant.parent 43 Audit setup... 44 Audit run `WebInspectorAudit.Accessibility.getActiveDescendant(document.querySelector("#parent"))`... 45 Result: #child 46 Audit teardown... 47 48 -- Running test case: Audit.run.Accessibility.getActiveDescendant.child 49 Audit setup... 50 Audit run `WebInspectorAudit.Accessibility.getActiveDescendant(document.querySelector("#child"))`... 51 Result: null 52 Audit teardown... 53 54 -- Running test case: Audit.run.Accessibility.getChildNodes.parent 55 Audit setup... 56 Audit run `WebInspectorAudit.Accessibility.getChildNodes(document.querySelector("#parent"))`... 57 Result: ["#child"] 58 Audit teardown... 59 60 -- Running test case: Audit.run.Accessibility.getChildNodes.child 61 Audit setup... 62 Audit run `WebInspectorAudit.Accessibility.getChildNodes(document.querySelector("#child"))`... 63 Result: [] 64 Audit teardown... 65 66 -- Running test case: Audit.run.Accessibility.getControlledNodes.parent 67 Audit setup... 68 Audit run `WebInspectorAudit.Accessibility.getControlledNodes(document.querySelector("#parent"))`... 69 Result: ["#child"] 70 Audit teardown... 71 72 -- Running test case: Audit.run.Accessibility.getControlledNodes.child 73 Audit setup... 74 Audit run `WebInspectorAudit.Accessibility.getControlledNodes(document.querySelector("#child"))`... 75 Result: [] 76 Audit teardown... 77 78 -- Running test case: Audit.run.Accessibility.getFlowedNodes.parent 79 Audit setup... 80 Audit run `WebInspectorAudit.Accessibility.getFlowedNodes(document.querySelector("#parent"))`... 81 Result: ["#child"] 82 Audit teardown... 83 84 -- Running test case: Audit.run.Accessibility.getFlowedNodes.child 85 Audit setup... 86 Audit run `WebInspectorAudit.Accessibility.getFlowedNodes(document.querySelector("#child"))`... 87 Result: [] 88 Audit teardown... 89 90 -- Running test case: Audit.run.Accessibility.getMouseEventNode.parent 91 Audit setup... 92 Audit run `WebInspectorAudit.Accessibility.getMouseEventNode(document.querySelector("#parent"))`... 93 Result: #parent 94 Audit teardown... 95 96 -- Running test case: Audit.run.Accessibility.getMouseEventNode.child 97 Audit setup... 98 Audit run `WebInspectorAudit.Accessibility.getMouseEventNode(document.querySelector("#child"))`... 99 Result: #parent 100 Audit teardown... 101 102 -- Running test case: Audit.run.Accessibility.getOwnedNodes.parent 103 Audit setup... 104 Audit run `WebInspectorAudit.Accessibility.getOwnedNodes(document.querySelector("#parent"))`... 105 Result: ["#child"] 106 Audit teardown... 107 108 -- Running test case: Audit.run.Accessibility.getOwnedNodes.child 109 Audit setup... 110 Audit run `WebInspectorAudit.Accessibility.getOwnedNodes(document.querySelector("#child"))`... 111 Result: null 112 Audit teardown... 113 114 -- Running test case: Audit.run.Accessibility.getParentNode.parent 115 Audit setup... 116 Audit run `WebInspectorAudit.Accessibility.getParentNode(document.querySelector("#parent"))`... 117 Result: undefined 118 Audit teardown... 119 120 -- Running test case: Audit.run.Accessibility.getParentNode.child 121 Audit setup... 122 Audit run `WebInspectorAudit.Accessibility.getParentNode(document.querySelector("#child"))`... 123 Result: #parent 124 Audit teardown... 125 126 -- Running test case: Audit.run.Accessibility.getSelectedChildNodes.parent 127 Audit setup... 128 Audit run `WebInspectorAudit.Accessibility.getSelectedChildNodes(document.querySelector("#parent"))`... 129 Result: ["#child"] 130 Audit teardown... 131 132 -- Running test case: Audit.run.Accessibility.getSelectedChildNodes.child 133 Audit setup... 134 Audit run `WebInspectorAudit.Accessibility.getSelectedChildNodes(document.querySelector("#child"))`... 135 Result: [] 136 Audit teardown... 137 42 138 -- Running test case: Audit.run.Accessibility.InvalidCopiedFunctionCall 43 139 Audit setup... … … 47 143 PASS: Should produce an exception. 48 144 Error: NotAllowedError: Cannot be called outside of a Web Inspector Audit 145 Testing copied getActiveDescendant... 146 PASS: Should produce an exception. 147 Error: NotAllowedError: Cannot be called outside of a Web Inspector Audit 148 Testing copied getChildNodes... 149 PASS: Should produce an exception. 150 Error: NotAllowedError: Cannot be called outside of a Web Inspector Audit 151 Testing copied getControlledNodes... 152 PASS: Should produce an exception. 153 Error: NotAllowedError: Cannot be called outside of a Web Inspector Audit 154 Testing copied getFlowedNodes... 155 PASS: Should produce an exception. 156 Error: NotAllowedError: Cannot be called outside of a Web Inspector Audit 157 Testing copied getMouseEventNode... 158 PASS: Should produce an exception. 159 Error: NotAllowedError: Cannot be called outside of a Web Inspector Audit 160 Testing copied getOwnedNodes... 161 PASS: Should produce an exception. 162 Error: NotAllowedError: Cannot be called outside of a Web Inspector Audit 163 Testing copied getParentNode... 164 PASS: Should produce an exception. 165 Error: NotAllowedError: Cannot be called outside of a Web Inspector Audit 166 Testing copied getSelectedChildNodes... 167 PASS: Should produce an exception. 168 Error: NotAllowedError: Cannot be called outside of a Web Inspector Audit 49 169 -
trunk/LayoutTests/inspector/audit/run-accessibility.html
r239986 r240277 11 11 if (Array.isArray(result)) 12 12 return JSON.stringify(result.map(stringify)); 13 return false; 13 if (result === null || result === undefined); 14 return result; 15 return "UNEXPECTED " + result; 14 16 } 15 17 … … 36 38 { func: "getElementsByComputedRole", role: "button" }, 37 39 { func: "getElementsByComputedRole", role: "button", target: "parent" }, 40 41 { func: "getActiveDescendant", target: "parent" }, 42 { func: "getActiveDescendant", target: "child" }, 43 44 { func: "getChildNodes", target: "parent" }, 45 { func: "getChildNodes", target: "child" }, 46 47 { func: "getControlledNodes", target: "parent" }, 48 { func: "getControlledNodes", target: "child" }, 49 50 { func: "getFlowedNodes", target: "parent" }, 51 { func: "getFlowedNodes", target: "child" }, 52 53 { func: "getMouseEventNode", target: "parent" }, 54 { func: "getMouseEventNode", target: "child" }, 55 56 { func: "getOwnedNodes", target: "parent" }, 57 { func: "getOwnedNodes", target: "child" }, 58 59 { func: "getParentNode", target: "parent" }, 60 { func: "getParentNode", target: "child" }, 61 62 { func: "getSelectedChildNodes", target: "parent" }, 63 { func: "getSelectedChildNodes", target: "child" }, 38 64 ]; 39 65 -
trunk/Source/WebCore/ChangeLog
r240272 r240277 1 2019-01-22 Devin Rousso <drousso@apple.com> 2 3 Web Inspector: Audit: provide a way to get related Accessibility nodes for a given node 4 https://bugs.webkit.org/show_bug.cgi?id=193225 5 <rdar://problem/46799956> 6 7 Reviewed by Joseph Pecoraro. 8 9 Test: inspector/audit/run-accessibility.html 10 11 * inspector/InspectorAuditAccessibilityObject.idl: 12 * inspector/InspectorAuditAccessibilityObject.h: 13 * inspector/InspectorAuditAccessibilityObject.cpp: 14 (WebCore::InspectorAuditAccessibilityObject::getActiveDescendant): Added. 15 (WebCore::addChildren): Added. 16 (WebCore::InspectorAuditAccessibilityObject::getChildNodes): Added. 17 (WebCore::InspectorAuditAccessibilityObject::getControlledNodes): Added. 18 (WebCore::InspectorAuditAccessibilityObject::getFlowedNodes): Added. 19 (WebCore::InspectorAuditAccessibilityObject::getMouseEventNode): Added. 20 (WebCore::InspectorAuditAccessibilityObject::getOwnedNodes): Added. 21 (WebCore::InspectorAuditAccessibilityObject::getParentNode): Added. 22 (WebCore::InspectorAuditAccessibilityObject::getSelectedChildNodes): Added. 23 1 24 2019-01-22 David Kilzer <ddkilzer@apple.com> 2 25 -
trunk/Source/WebCore/inspector/InspectorAuditAccessibilityObject.cpp
r239986 r240277 29 29 30 30 #include "AXObjectCache.h" 31 #include "AccessibilityNodeObject.h" 31 32 #include "AccessibilityObject.h" 32 33 #include "ContainerNode.h" 33 34 #include "Document.h" 35 #include "Element.h" 34 36 #include "ElementDescendantIterator.h" 37 #include "HTMLNames.h" 35 38 #include "Node.h" 36 39 #include <wtf/Vector.h> … … 76 79 } 77 80 81 ExceptionOr<RefPtr<Node>> InspectorAuditAccessibilityObject::getActiveDescendant(Node& node) 82 { 83 ERROR_IF_NO_ACTIVE_AUDIT(); 84 85 if (AccessibilityObject* axObject = accessiblityObjectForNode(node)) { 86 if (AccessibilityObject* activeDescendant = axObject->activeDescendant()) 87 return activeDescendant->node(); 88 } 89 90 return nullptr; 91 } 92 93 static void addChildren(AccessibilityObject& parentObject, Vector<RefPtr<Node>>& childNodes) 94 { 95 for (const RefPtr<AccessibilityObject>& childObject : parentObject.children()) { 96 if (Node* childNode = childObject->node()) 97 childNodes.append(childNode); 98 else 99 addChildren(*childObject, childNodes); 100 } 101 } 102 103 ExceptionOr<Optional<Vector<RefPtr<Node>>>> InspectorAuditAccessibilityObject::getChildNodes(Node& node) 104 { 105 ERROR_IF_NO_ACTIVE_AUDIT(); 106 107 Optional<Vector<RefPtr<Node>>> result; 108 109 if (AccessibilityObject* axObject = accessiblityObjectForNode(node)) { 110 Vector<RefPtr<Node>> childNodes; 111 addChildren(*axObject, childNodes); 112 result = WTFMove(childNodes); 113 } 114 115 return result; 116 } 117 118 119 ExceptionOr<Optional<Vector<RefPtr<Node>>>> InspectorAuditAccessibilityObject::getControlledNodes(Node& node) 120 { 121 ERROR_IF_NO_ACTIVE_AUDIT(); 122 123 Optional<Vector<RefPtr<Node>>> result; 124 125 if (AccessibilityObject* axObject = accessiblityObjectForNode(node)) { 126 Vector<RefPtr<Node>> controlledNodes; 127 128 Vector<Element*> controlledElements; 129 axObject->elementsFromAttribute(controlledElements, HTMLNames::aria_controlsAttr); 130 for (Element* controlledElement : controlledElements) { 131 if (controlledElement) 132 controlledNodes.append(controlledElement); 133 } 134 135 result = WTFMove(controlledNodes); 136 } 137 138 return result; 139 } 140 141 ExceptionOr<Optional<Vector<RefPtr<Node>>>> InspectorAuditAccessibilityObject::getFlowedNodes(Node& node) 142 { 143 ERROR_IF_NO_ACTIVE_AUDIT(); 144 145 Optional<Vector<RefPtr<Node>>> result; 146 147 if (AccessibilityObject* axObject = accessiblityObjectForNode(node)) { 148 Vector<RefPtr<Node>> flowedNodes; 149 150 Vector<Element*> flowedElements; 151 axObject->elementsFromAttribute(flowedElements, HTMLNames::aria_flowtoAttr); 152 for (Element* flowedElement : flowedElements) { 153 if (flowedElement) 154 flowedNodes.append(flowedElement); 155 } 156 157 result = WTFMove(flowedNodes); 158 } 159 160 return result; 161 } 162 163 ExceptionOr<RefPtr<Node>> InspectorAuditAccessibilityObject::getMouseEventNode(Node& node) 164 { 165 ERROR_IF_NO_ACTIVE_AUDIT(); 166 167 if (AccessibilityObject* axObject = accessiblityObjectForNode(node)) { 168 if (is<AccessibilityNodeObject>(axObject)) 169 return downcast<AccessibilityNodeObject>(axObject)->mouseButtonListener(MouseButtonListenerResultFilter::IncludeBodyElement); 170 } 171 172 return nullptr; 173 } 174 175 ExceptionOr<Optional<Vector<RefPtr<Node>>>> InspectorAuditAccessibilityObject::getOwnedNodes(Node& node) 176 { 177 ERROR_IF_NO_ACTIVE_AUDIT(); 178 179 Optional<Vector<RefPtr<Node>>> result; 180 181 if (AccessibilityObject* axObject = accessiblityObjectForNode(node)) { 182 if (axObject->supportsARIAOwns()) { 183 Vector<RefPtr<Node>> ownedNodes; 184 185 Vector<Element*> ownedElements; 186 axObject->elementsFromAttribute(ownedElements, HTMLNames::aria_ownsAttr); 187 for (Element* ownedElement : ownedElements) { 188 if (ownedElement) 189 ownedNodes.append(ownedElement); 190 } 191 192 result = WTFMove(ownedNodes); 193 } 194 } 195 196 return result; 197 } 198 199 ExceptionOr<RefPtr<Node>> InspectorAuditAccessibilityObject::getParentNode(Node& node) 200 { 201 ERROR_IF_NO_ACTIVE_AUDIT(); 202 203 if (AccessibilityObject* axObject = accessiblityObjectForNode(node)) { 204 if (AccessibilityObject* parentObject = axObject->parentObjectUnignored()) 205 return parentObject->node(); 206 } 207 208 return nullptr; 209 } 210 211 ExceptionOr<Optional<Vector<RefPtr<Node>>>> InspectorAuditAccessibilityObject::getSelectedChildNodes(Node& node) 212 { 213 ERROR_IF_NO_ACTIVE_AUDIT(); 214 215 Optional<Vector<RefPtr<Node>>> result; 216 217 if (AccessibilityObject* axObject = accessiblityObjectForNode(node)) { 218 Vector<RefPtr<Node>> selectedChildNodes; 219 220 AccessibilityObject::AccessibilityChildrenVector selectedChildren; 221 axObject->selectedChildren(selectedChildren); 222 for (RefPtr<AccessibilityObject>& selectedChildObject : selectedChildren) { 223 if (Node* selectedChildNode = selectedChildObject->node()) 224 selectedChildNodes.append(selectedChildNode); 225 } 226 227 result = WTFMove(selectedChildNodes); 228 } 229 230 return result; 231 } 232 78 233 } // namespace WebCore -
trunk/Source/WebCore/inspector/InspectorAuditAccessibilityObject.h
r239986 r240277 29 29 #include <JavaScriptCore/InspectorAuditAgent.h> 30 30 #include <wtf/Forward.h> 31 #include <wtf/Optional.h> 31 32 #include <wtf/Ref.h> 32 33 #include <wtf/RefCounted.h> … … 46 47 ExceptionOr<Vector<Ref<Node>>> getElementsByComputedRole(Document&, const String& role, Node* container); 47 48 49 ExceptionOr<RefPtr<Node>> getActiveDescendant(Node&); 50 ExceptionOr<Optional<Vector<RefPtr<Node>>>> getChildNodes(Node&); 51 ExceptionOr<Optional<Vector<RefPtr<Node>>>> getControlledNodes(Node&); 52 ExceptionOr<Optional<Vector<RefPtr<Node>>>> getFlowedNodes(Node&); 53 ExceptionOr<RefPtr<Node>> getMouseEventNode(Node&); 54 ExceptionOr<Optional<Vector<RefPtr<Node>>>> getOwnedNodes(Node&); 55 ExceptionOr<RefPtr<Node>> getParentNode(Node&); 56 ExceptionOr<Optional<Vector<RefPtr<Node>>>> getSelectedChildNodes(Node&); 57 48 58 private: 49 59 explicit InspectorAuditAccessibilityObject(Inspector::InspectorAuditAgent&); -
trunk/Source/WebCore/inspector/InspectorAuditAccessibilityObject.idl
r239986 r240277 30 30 ] interface InspectorAuditAccessibilityObject { 31 31 [CallWith=Document, MayThrowException] sequence<Node> getElementsByComputedRole(DOMString role, optional Node? container); 32 33 [MayThrowException] Node? getActiveDescendant(Node node); 34 [MayThrowException] sequence<Node>? getChildNodes(Node node); 35 [MayThrowException] sequence<Node>? getControlledNodes(Node node); 36 [MayThrowException] sequence<Node>? getFlowedNodes(Node node); 37 [MayThrowException] Node? getMouseEventNode(Node node); 38 [MayThrowException] sequence<Node>? getOwnedNodes(Node node); 39 [MayThrowException] Node? getParentNode(Node node); 40 [MayThrowException] sequence<Node>? getSelectedChildNodes(Node node); 32 41 };
Note: See TracChangeset
for help on using the changeset viewer.