Index: chrome/browser/resources/chromeos/chromevox/cvox2/background/output.js |
diff --git a/chrome/browser/resources/chromeos/chromevox/cvox2/background/output.js b/chrome/browser/resources/chromeos/chromevox/cvox2/background/output.js |
index d3fd9de3d1c930613dafdfa71934ab8cd54a431e..3ce0930b59b0a7558d0b8cf2483950d7b42c6c20 100644 |
--- a/chrome/browser/resources/chromeos/chromevox/cvox2/background/output.js |
+++ b/chrome/browser/resources/chromeos/chromevox/cvox2/background/output.js |
@@ -724,6 +724,21 @@ Output.forceModeForNextSpeechUtterance = function(mode) { |
Output.forceModeForNextSpeechUtterance_ = mode; |
}; |
+/** |
+ * For a given automation property, return true if the value |
+ * represents something 'truthy', e.g.: for checked: |
+ * 'true'|'mixed' -> true |
+ * 'false'|undefined -> false |
+ */ |
+Output.isTruthy = function(node, attrib) { |
+ switch(attrib) { |
+ case 'checked': |
+ return node.checked && node.checked !== 'false'; |
+ default: |
+ return node[attrib] !== undefined || node.state[attrib]; |
+ } |
+}; |
+ |
Output.prototype = { |
/** |
* @return {boolean} True if there's any speech that will be output. |
@@ -1156,20 +1171,16 @@ Output.prototype = { |
} |
} else if (token == 'checked') { |
var msg; |
- var ariaChecked = node.htmlAttributes['aria-checked']; |
- switch (ariaChecked) { |
+ switch (node.checked) { |
case 'mixed': |
- msg = 'aria_checked_mixed'; |
+ msg = 'checked_mixed'; |
break; |
case 'true': |
- msg = 'aria_checked_true'; |
- break; |
- case 'false': |
- msg = 'aria_checked_false'; |
+ msg = 'checked_true'; |
break; |
default: |
- msg = node.state[StateType.CHECKED] ? |
- 'aria_checked_true' : 'aria_checked_false'; |
+ msg = 'checked_false'; |
+ break; |
} |
this.format_(node, '@' + msg, buff); |
} else if (token == 'state') { |
@@ -1301,7 +1312,7 @@ Output.prototype = { |
if (token == 'if') { |
var cond = tree.firstChild; |
var attrib = cond.value.slice(1); |
- if (node[attrib] !== undefined || node.state[attrib]) |
+ if (Output.isTruthy(node, attrib)) |
this.format_(node, cond.nextSibling, buff); |
else |
this.format_(node, cond.nextSibling.nextSibling, buff); |