| 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 f049a6d8fe2610f0392fbf6622a45668bdebad79..b2dbd612750de40d84b80df6fe3d2bbdb3289214 100644
|
| --- a/chrome/browser/resources/chromeos/chromevox/cvox2/background/output.js
|
| +++ b/chrome/browser/resources/chromeos/chromevox/cvox2/background/output.js
|
| @@ -9,6 +9,7 @@
|
| goog.provide('Output');
|
| goog.provide('Output.EventType');
|
|
|
| +goog.require('AutomationTreeWalker');
|
| goog.require('EarconEngine');
|
| goog.require('Spannable');
|
| goog.require('Stubs');
|
| @@ -447,7 +448,7 @@ Output.RULES = {
|
| },
|
| div: {
|
| enter: '$nameFromNode',
|
| - speak: '$name $description $descendants'
|
| + speak: '$nameOrTextContent $description'
|
| },
|
| embeddedObject: {
|
| speak: '$name'
|
| @@ -537,7 +538,7 @@ Output.RULES = {
|
| speak: '$if($name, $name, $docUrl)'
|
| },
|
| region: {
|
| - speak: '$descendants'
|
| + speak: '$nameOrTextContent'
|
| },
|
| row: {
|
| enter: '$node(tableRowHeader)'
|
| @@ -1199,6 +1200,20 @@ Output.prototype = {
|
| return;
|
| var related = node[tree.firstChild.value];
|
| this.node_(related, related, Output.EventType.NAVIGATE, buff);
|
| + } else if (token == 'nameOrTextContent') {
|
| + if (node.name) {
|
| + this.format_(node, '$name', buff);
|
| + } else {
|
| + var walker = new AutomationTreeWalker(node,
|
| + Dir.FORWARD,
|
| + {visit: AutomationPredicate.leafOrStaticText,
|
| + leaf: AutomationPredicate.leafOrStaticText});
|
| + while (walker.next().node &&
|
| + walker.phase == AutomationTreeWalkerPhase.DESCENDANT) {
|
| + if (walker.node.name)
|
| + this.append_(buff, walker.node.name, options);
|
| + }
|
| + }
|
| } else if (node[token] !== undefined) {
|
| options.annotation.push(token);
|
| var value = node[token];
|
|
|