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

Side by Side Diff: LayoutTests/inspector-protocol/accessibility/accessibility-ignoredNodes-common.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: Added test 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 common_onGotDocument(maxId, msg)
pfeldman 2015/04/28 15:49:36 Can this be named in a way that it was clear what
aboxhall 2015/04/28 18:14:20 Done.
2 {
3 if (msg.error) {
4 InspectorTest.log(msg.error.message);
5 InspectorTest.completeTest();
6 return;
7 }
8
9 function sendCommandPromise(command, params) {
pfeldman 2015/04/28 15:49:36 Here and below, poor coding style.
aboxhall 2015/04/28 16:01:16 Could you give some more detail on this? What prob
aboxhall 2015/04/28 18:14:20 Done, I think.
10 return new Promise(function(resolve, reject) {
11 InspectorTest.sendCommand(command, params, function(msg) {
12 if (msg.error) { reject(msg.error); return; }
13 resolve(msg);
14 })
15 });
16 }
17
18
19 function sendQuerySelector(nodeId, selector)
20 {
21 return sendCommandPromise("DOM.querySelector", { "nodeId": nodeId, "sele ctor": selector });
22 }
23
24 function getAXNode(msg) {
25 var node = msg.result;
26 return sendCommandPromise("Accessibility.getAXNode", { "nodeId": node.no deId });
27 }
28
29 function describeNode(nodeData)
30 {
31 var description = nodeData.nodeName.toLowerCase();
32 switch (nodeData.nodeType) {
33 case Node.ELEMENT_NODE:
34 var p = nodeData.attributes.indexOf("id");
35 if (p >= 0)
36 description += "#" + nodeData.attributes[p + 1];
37 }
38 return description;
39 }
40
41 function rewriteNode(relatedNode)
42 {
43 function rewriteNodePromise(resolve, reject) {
44 if (!("backendNodeId" in relatedNode)) {
45 reject("Could not find backendNodeId in " + JSON.stringify(relat edNode));
46 return;
47 }
48 var backendNodeId = relatedNode.backendNodeId;
49
50 function onNodeResolved(backendNodeId, message) {
51 var nodeId = message.result.nodeIds[0];
52 if (!(nodeId in nodeInfo)) {
53 relatedNode.nodeResult = "[NODE NOT FOUND]";
54 resolve();
55 return;
56 }
57 var node = nodeInfo[nodeId];
58 delete relatedNode.backendNodeId;
59 relatedNode.nodeResult = describeNode(node);
60 resolve();
61 }
62 InspectorTest.sendCommand("DOM.pushNodesByBackendIdsToFrontend", { " backendNodeIds": [ backendNodeId ] }, onNodeResolved.bind(null, backendNodeId));
63 }
64 return new Promise(rewriteNodePromise);
65 }
66
67 function checkExists(path, obj, reject)
68 {
69 var pathComponents = path.split(".");
70 var currentPath = [];
71 var currentObject = obj;
72 for (var component of pathComponents) {
73 currentPath.push(component);
74 if (!(component in currentObject)) {
75 reject("Could not find " + currentPath.join(".") + " in " + JSON .stringify(obj, null, " "));
76 return false;
77 }
78 currentObject = currentObject[component];
79 }
80 return true;
81 }
82
83 function check(condition, errorMsg, obj, reject)
84 {
85 if (condition)
86 return true;
87 reject(errorMsg + " in " + JSON.stringify(obj, null, " "));
88 }
89
90 function rewriteNodes(msg)
91 {
92 function rewriteNodesPromise(resolve, reject) {
93 if (msg.error) {
94 reject(msg.error.message);
95 return;
96 }
97
98 if (msg.result.accessibilityNode.ignored) {
99 checkExists("result.accessibilityNode.ignoredReasons", msg);
100 var properties = msg.result.accessibilityNode.ignoredReasons;
101 } else {
102 checkExists("result.accessibilityNode.properties", msg);
103 var properties = msg.result.accessibilityNode.properties;
104 }
105 var promises = [];
106 for (var property of properties) {
107 if (property.value.type === "idrefList") {
108 if (!checkExists("value.relatedNodeArrayValue", property, re ject))
109 return;
110 var relatedNodeArray = property.value.relatedNodeArrayValue;
111 check(Array.isArray(relatedNodeArray), "value.relatedNodeArr ayValue should be an array", JSON.stringify(property), reject);
112 for (var relatedNode of relatedNodeArray) {
113 promises.push(rewriteNode(relatedNode));
114 }
115 } else if (property.value.type === "idref") {
116 if (!checkExists("value.relatedNodeValue", property, reject) )
117 return;
118 var relatedNode = property.value.relatedNodeValue;
119 promises.push(rewriteNode(relatedNode));
120 }
121 }
122
123 Promise.all(promises).then(resolve(msg));
124 }
125 return new Promise(rewriteNodesPromise);
126 }
127
128 function dumpNode(selector, msg)
129 {
130 function stripIds(key, value) {
131 if (key == "id")
132 return "<int>"
133 if (key == "backendNodeId")
134 return "<string>"
135 if (key == "nodeId")
136 return "<string>"
137 return value;
138 }
139 InspectorTest.log(selector + ": " + JSON.stringify(msg, stripIds, " ")) ;
140 }
141
142 var rootNode = msg.result.root;
143 var promises = [];
144 for (var i = 1; i <= maxId; i++) {
145 var selector = "#_" + i;
146 var promise = sendQuerySelector(rootNode.nodeId, selector)
147 .then(getAXNode)
148 .then(rewriteNodes)
149 .then(dumpNode.bind(null, selector))
150 .catch(function(msg) { InspectorTest.log("Error: " + JSON.stringify( msg)); })
151 promises.push(promise);
152 }
153
154 Promise.all(promises).then(function() { InspectorTest.completeTest(); });
155 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698