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

Unified Diff: chrome/browser/resources/chromeos/chromevox/cvox2/background/background.extjs

Issue 586103004: Implement ChromeVox next/previous line, link, and heading. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@lkcr
Patch Set: Address comments. Created 6 years, 3 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/resources/chromeos/chromevox/cvox2/background/background.extjs
diff --git a/chrome/browser/resources/chromeos/chromevox/cvox2/background/background.extjs b/chrome/browser/resources/chromeos/chromevox/cvox2/background/background.extjs
index 207d70732f405a2234804763e1e61a6ed1adc7bb..7db6e21d7676bbeddd3959bb0fc38c894622e6dd 100644
--- a/chrome/browser/resources/chromeos/chromevox/cvox2/background/background.extjs
+++ b/chrome/browser/resources/chromeos/chromevox/cvox2/background/background.extjs
@@ -49,25 +49,62 @@ var MockTts = function() {
};
MockTts.prototype = {
- /** Tracks all spoken text. @type {!Array.<string>} */
- utterances: [],
+ /**
+ * A list of predicate callbacks.
+ * @type {!Array.<function(string) : boolean>}
+ * @private
+ */
+ callbacks_: [],
+
+ /**
+ * A list of strings stored whenever there are no expectations.
+ * @type {!Array.<string}
+ * @private
+ */
+ idleUtterances_: [],
/** @override */
speak: function(textString, queueMode, properties) {
- this.utterances.push(textString);
+ this.process_(textString);
},
/**
- * Checks to see if a string was spoken.
- * @param {string} textString The string to check.
- * @return {boolean} True if the string was spoken (possibly as part of a
- * larger utterance).
+ * Adds an expectation for the given string to be spoken. If satisfied,
+ * |opt_callback| is called.
+ * @param {string} expected
+ * @param {function() : void=} opt_callback
*/
- checkIfSubstringWasSpoken: function(textString) {
- return this.utterances.some(function(t) {
- return t.indexOf(textString) != -1;
+ expectSpeech: function(expected, opt_callback) {
+ this.callbacks_.push(function(actual) {
+ var match = actual.indexOf(expected) != -1;
+ if (opt_callback && match)
+ opt_callback();
+ return match;
});
- }
+
+ // Process any idleUtterances.
+ this.idleUtterances_.forEach(this.process_, true);
+ },
+
+ /**
+ * @param {string} textString Utterance to match against callbacks.
+ * @param {boolean=} opt_manual True if called outside of tts.speak.
+ * @private
+ */
+ process_: function(textString, opt_manual) {
+ if (this.callbacks_.length == 0) {
+ if (!opt_manual)
+ this.idleUtterances_.push(textString);
+ return;
+ }
+
+ var allUtterances = this.idleUtterances_.concat([textString]);
+ var targetCallback = this.callbacks_.shift();
+ if (allUtterances.some(targetCallback))
+ this.idleUtterances_.length = 0;
+ else
+ this.callbacks_.unshift(targetCallback);
+ },
};
/** Tests that ChromeVox classic is in this context. */
@@ -100,13 +137,21 @@ TEST_F('BackgroundTest', 'DesktopFocus', function() {
chrome.automation.getDesktop(function(root) {
var testButton = findStatusTray(root);
- testButton.addEventListener(chrome.automation.EventType.focus,
- function(e) {
- var result =
- cvox.ChromeVox.tts.checkIfSubstringWasSpoken('Status tray');
- testDone([result, '']);
- },
- true);
+ cvox.ChromeVox.tts.expectSpeech('Status tray', testDone);
testButton.focus();
});
});
+
+/** Tests feedback once a page loads. */
+TEST_F('BackgroundTest', 'InitialFeedback', function() {
+ this.runWithDocument(function() {/*!
+ <p>start
+ <p>end
+ */},
+ function() {
+ cvox.ChromeVox.tts.expectSpeech('start', function() {
+ cvox2.global.backgroundObj.onGotCommand('nextLine');
+ });
+ cvox.ChromeVox.tts.expectSpeech('end', testDone);
+ }.bind(this));
+});

Powered by Google App Engine
This is Rietveld 408576698