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

Side by Side Diff: LayoutTests/inspector-protocol/accessibility/accessibility-ignoredNodesTest.js

Issue 1076453004: Show reasons why nodes are ignored in accessibility sidebar (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: pfeldman review comments Created 5 years, 7 months 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 unified diff | Download patch
OLDNEW
(Empty)
1 function initialize_IgnoredNodesTests() {
pfeldman 2015/04/29 13:59:22 insert copyright, unindent contents.
aboxhall 2015/04/29 19:08:11 Done.
2 InspectorTest.dumpAccessibilityNodesByIdref = function(ids, msg)
pfeldman 2015/04/29 13:59:22 ...AndCompleteTest
aboxhall 2015/04/29 19:08:11 Done.
3 {
4 if (msg.error) {
5 InspectorTest.log(msg.error.message);
6 InspectorTest.completeTest();
7 return;
8 }
9
10
11 var rootNode = msg.result.root;
12 var promises = [];
13 for (var id of ids) {
14 var selector = "#" + id;
15 var promise = sendQuerySelector(rootNode.nodeId, selector)
16 .then(getAXNode)
17 .then(rewriteNodes)
18 .then(dumpNode.bind(null, selector))
19 .catch(function(msg) { InspectorTest.log("Error: " + JSON.string ify(msg)); })
20 promises.push(promise);
21 }
22
23 Promise.all(promises).then(function() { InspectorTest.completeTest(); }) ;
24 }
25
26 function sendCommandPromise(command, params)
pfeldman 2015/04/29 13:59:22 These should all be prefixed with InspectorTest.
aboxhall 2015/04/29 19:08:11 Done, but: What benefit does this provide? Won't t
27 {
28 return new Promise(function(resolve, reject) {
29 InspectorTest.sendCommand(command, params, function(msg) {
30 if (msg.error) { reject(msg.error); return; }
31 resolve(msg);
32 })
33 });
34 }
35
36
37 function sendQuerySelector(nodeId, selector)
38 {
39 return sendCommandPromise("DOM.querySelector", { "nodeId": nodeId, "sele ctor": selector });
40 }
41
42 function getAXNode(msg) {
43 var node = msg.result;
44 return sendCommandPromise("Accessibility.getAXNode", { "nodeId": node.no deId });
45 }
46
47 function describeNode(nodeData)
48 {
49 var description = nodeData.nodeName.toLowerCase();
50 switch (nodeData.nodeType) {
51 case Node.ELEMENT_NODE:
52 var p = nodeData.attributes.indexOf("id");
53 if (p >= 0)
54 description += "#" + nodeData.attributes[p + 1];
55 }
56 return description;
57 }
58
59 function rewriteNode(relatedNode)
60 {
61 function rewriteNodePromise(resolve, reject)
62 {
63 if (!("backendNodeId" in relatedNode)) {
64 reject("Could not find backendNodeId in " + JSON.stringify(relat edNode));
65 return;
66 }
67 var backendNodeId = relatedNode.backendNodeId;
68
69 function onNodeResolved(backendNodeId, message)
70 {
71 var nodeId = message.result.nodeIds[0];
72 if (!(nodeId in nodeInfo)) {
73 relatedNode.nodeResult = "[NODE NOT FOUND]";
74 resolve();
75 return;
76 }
77 var node = nodeInfo[nodeId];
78 delete relatedNode.backendNodeId;
79 relatedNode.nodeResult = describeNode(node);
80 resolve();
81 }
82 InspectorTest.sendCommand("DOM.pushNodesByBackendIdsToFrontend", { " backendNodeIds": [ backendNodeId ] }, onNodeResolved.bind(null, backendNodeId));
83 }
84 return new Promise(rewriteNodePromise);
85 }
86
87 function checkExists(path, obj, reject)
88 {
89 var pathComponents = path.split(".");
90 var currentPath = [];
91 var currentObject = obj;
92 for (var component of pathComponents) {
93 currentPath.push(component);
94 if (!(component in currentObject)) {
95 reject("Could not find " + currentPath.join(".") + " in " + JSON .stringify(obj, null, " "));
96 return false;
97 }
98 currentObject = currentObject[component];
99 }
100 return true;
101 }
102
103 function check(condition, errorMsg, obj, reject)
104 {
105 if (condition)
106 return true;
107 reject(errorMsg + " in " + JSON.stringify(obj, null, " "));
108 }
109
110 function rewriteNodes(msg)
111 {
112 function rewriteNodesPromise(resolve, reject)
113 {
114 if (msg.error) {
115 reject(msg.error.message);
116 return;
117 }
118
119 if (msg.result.accessibilityNode.ignored) {
120 checkExists("result.accessibilityNode.ignoredReasons", msg);
121 var properties = msg.result.accessibilityNode.ignoredReasons;
122 } else {
123 checkExists("result.accessibilityNode.properties", msg);
124 var properties = msg.result.accessibilityNode.properties;
125 }
126 var promises = [];
127 for (var property of properties) {
128 if (property.value.type === "idrefList") {
129 if (!checkExists("value.relatedNodeArrayValue", property, re ject))
130 return;
131 var relatedNodeArray = property.value.relatedNodeArrayValue;
132 check(Array.isArray(relatedNodeArray), "value.relatedNodeArr ayValue should be an array", JSON.stringify(property), reject);
133 for (var relatedNode of relatedNodeArray) {
134 promises.push(rewriteNode(relatedNode));
135 }
136 } else if (property.value.type === "idref") {
137 if (!checkExists("value.relatedNodeValue", property, reject) )
138 return;
139 var relatedNode = property.value.relatedNodeValue;
140 promises.push(rewriteNode(relatedNode));
141 }
142 }
143
144 Promise.all(promises).then(resolve(msg));
145 }
146 return new Promise(rewriteNodesPromise);
147 }
148
149 function dumpNode(selector, msg)
150 {
151 function stripIds(key, value)
152 {
153 if (key == "id")
154 return "<int>"
155 if (key == "backendNodeId")
156 return "<string>"
157 if (key == "nodeId")
158 return "<string>"
159 return value;
160 }
161 InspectorTest.log(selector + ": " + JSON.stringify(msg, stripIds, " ")) ;
162 }
163 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698