diff options
Diffstat (limited to 'chromium/chrome/browser/resources/chromeos/chromevox/chromevox/background/background.js')
-rw-r--r-- | chromium/chrome/browser/resources/chromeos/chromevox/chromevox/background/background.js | 472 |
1 files changed, 0 insertions, 472 deletions
diff --git a/chromium/chrome/browser/resources/chromeos/chromevox/chromevox/background/background.js b/chromium/chrome/browser/resources/chromeos/chromevox/chromevox/background/background.js deleted file mode 100644 index 9393c4ad33b..00000000000 --- a/chromium/chrome/browser/resources/chromeos/chromevox/chromevox/background/background.js +++ /dev/null @@ -1,472 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -/** - * @fileoverview Script that runs on the background page. - */ - -goog.provide('cvox.ChromeVoxBackground'); - -goog.require('Msgs'); -goog.require('cvox.AbstractEarcons'); -goog.require('cvox.BrailleBackground'); -goog.require('cvox.BrailleCaptionsBackground'); -goog.require('cvox.ChromeVox'); -goog.require('cvox.ChromeVoxEditableTextBase'); -goog.require('cvox.ChromeVoxPrefs'); -goog.require('cvox.CompositeTts'); -goog.require('cvox.ConsoleTts'); -goog.require('cvox.EarconsBackground'); -goog.require('cvox.ExtensionBridge'); -goog.require('cvox.HostFactory'); -goog.require('cvox.InjectedScriptLoader'); -goog.require('cvox.NavBraille'); -// TODO(dtseng): This is required to prevent Closure from stripping our export -// prefs on window. -goog.require('cvox.OptionsPage'); -goog.require('cvox.PlatformFilter'); -goog.require('cvox.PlatformUtil'); -goog.require('cvox.QueueMode'); -goog.require('cvox.TabsApiHandler'); -goog.require('cvox.TtsBackground'); - - -/** - * This object manages the global and persistent state for ChromeVox. - * It listens for messages from the content scripts on pages and - * interprets them. - * @constructor - */ -cvox.ChromeVoxBackground = function() { -}; - - -/** - * Initialize the background page: set up TTS and bridge listeners. - */ -cvox.ChromeVoxBackground.prototype.init = function() { - // In the case of ChromeOS, only continue initialization if this instance of - // ChromeVox is as we expect. This prevents ChromeVox from the webstore from - // running. - if (cvox.ChromeVox.isChromeOS && - chrome.i18n.getMessage('@@extension_id') != - 'mndnfokpggljbaajbnioimlmbfngpief') { - return; - } - - this.prefs = new cvox.ChromeVoxPrefs(); - this.readPrefs(); - - var consoleTts = cvox.ConsoleTts.getInstance(); - consoleTts.setEnabled(true); - - /** - * Chrome's actual TTS which knows and cares about pitch, volume, etc. - * @type {cvox.TtsBackground} - * @private - */ - this.backgroundTts_ = new cvox.TtsBackground(); - - /** - * @type {cvox.TtsInterface} - */ - this.tts = new cvox.CompositeTts() - .add(this.backgroundTts_) - .add(consoleTts); - - this.earcons = new cvox.EarconsBackground(); - this.addBridgeListener(); - - /** - * The actual Braille service. - * @type {cvox.BrailleBackground} - * @private - */ - this.backgroundBraille_ = new cvox.BrailleBackground(); - - this.tabsApiHandler_ = new cvox.TabsApiHandler( - this.tts, this.backgroundBraille_, this.earcons); - - // Export globals on cvox.ChromeVox. - cvox.ChromeVox.tts = this.tts; - cvox.ChromeVox.braille = this.backgroundBraille_; - cvox.ChromeVox.earcons = this.earcons; - - if (cvox.ChromeVox.isChromeOS && - chrome.accessibilityPrivate.onIntroduceChromeVox) { - chrome.accessibilityPrivate.onIntroduceChromeVox.addListener( - this.onIntroduceChromeVox); - } - - // Set up a message passing system for goog.provide() calls from - // within the content scripts. - chrome.extension.onMessage.addListener( - function(request, sender, callback) { - if (request['srcFile']) { - var srcFile = request['srcFile']; - cvox.InjectedScriptLoader.fetchCode( - [srcFile], - function(code) { - callback({'code': code[srcFile]}); - }); - } - return true; - }); - - var self = this; - - // Inject the content script into all running tabs. - chrome.windows.getAll({'populate': true}, function(windows) { - for (var i = 0; i < windows.length; i++) { - var tabs = windows[i].tabs; - self.injectChromeVoxIntoTabs(tabs); - } - }); - - if (localStorage['active'] == 'false') { - // Warn the user when the browser first starts if ChromeVox is inactive. - this.tts.speak(Msgs.getMsg('chromevox_inactive'), - cvox.QueueMode.QUEUE); - } else if (cvox.PlatformUtil.matchesPlatform(cvox.PlatformFilter.WML)) { - // Introductory message. - this.tts.speak(Msgs.getMsg('chromevox_intro'), - cvox.QueueMode.QUEUE); - cvox.ChromeVox.braille.write(cvox.NavBraille.fromText( - Msgs.getMsg('intro_brl'))); - } -}; - - -/** - * Inject ChromeVox into a tab. - * @param {Array<Tab>} tabs The tab where ChromeVox scripts should be injected. - */ -cvox.ChromeVoxBackground.prototype.injectChromeVoxIntoTabs = function(tabs) { - var listOfFiles; - - // These lists of files must match the content_scripts section in - // the manifest files. - if (COMPILED) { - listOfFiles = ['chromeVoxChromePageScript.js']; - } else { - listOfFiles = [ - 'closure/closure_preinit.js', - 'closure/base.js', - 'deps.js', - 'chromevox/injected/loader.js']; - } - - var stageTwo = function(code) { - for (var i = 0, tab; tab = tabs[i]; i++) { - window.console.log('Injecting into ' + tab.id, tab); - var sawError = false; - - /** - * A helper function which executes code. - * @param {string} code The code to execute. - */ - var executeScript = goog.bind(function(code) { - chrome.tabs.executeScript( - tab.id, - {'code': code, - 'allFrames': true}, - goog.bind(function() { - if (!chrome.extension.lastError) { - return; - } - if (sawError) { - return; - } - sawError = true; - console.error('Could not inject into tab', tab); - this.tts.speak('Error starting ChromeVox for ' + - tab.title + ', ' + tab.url, cvox.QueueMode.QUEUE); - }, this)); - }, this); - - // There is a scenario where two copies of the content script can get - // loaded into the same tab on browser startup - one automatically and one - // because the background page injects the content script into every tab - // on startup. To work around potential bugs resulting from this, - // ChromeVox exports a global function called disableChromeVox() that can - // be used here to disable any existing running instance before we inject - // a new instance of the content script into this tab. - // - // It's harmless if there wasn't a copy of ChromeVox already running. - // - // Also, set some variables so that Closure deps work correctly and so - // that ChromeVox knows not to announce feedback as if a page just loaded. - executeScript('try { window.disableChromeVox(); } catch(e) { }\n' + - 'window.INJECTED_AFTER_LOAD = true;\n' + - 'window.CLOSURE_NO_DEPS = true\n'); - - // Now inject the ChromeVox content script code into the tab. - listOfFiles.forEach(function(file) { executeScript(code[file]); }); - } - }; - - // We use fetchCode instead of chrome.extensions.executeFile because - // executeFile doesn't propagate the file name to the content script - // which means that script is not visible in Dev Tools. - cvox.InjectedScriptLoader.fetchCode(listOfFiles, stageTwo); -}; - - -/** - * Called when a TTS message is received from a page content script. - * @param {Object} msg The TTS message. - */ -cvox.ChromeVoxBackground.prototype.onTtsMessage = function(msg) { - if (msg['action'] == 'speak') { - this.tts.speak(msg['text'], - /** cvox.QueueMode */msg['queueMode'], - msg['properties']); - } else if (msg['action'] == 'stop') { - this.tts.stop(); - } else if (msg['action'] == 'increaseOrDecrease') { - this.tts.increaseOrDecreaseProperty(msg['property'], msg['increase']); - var property = msg['property']; - var engine = this.backgroundTts_; - var valueAsPercent = Math.round( - this.backgroundTts_.propertyToPercentage(property) * 100); - var announcement; - switch (msg['property']) { - case cvox.AbstractTts.RATE: - announcement = Msgs.getMsg('announce_rate', - [valueAsPercent]); - break; - case cvox.AbstractTts.PITCH: - announcement = Msgs.getMsg('announce_pitch', - [valueAsPercent]); - break; - case cvox.AbstractTts.VOLUME: - announcement = Msgs.getMsg('announce_volume', - [valueAsPercent]); - break; - } - if (announcement) { - this.tts.speak(announcement, - cvox.QueueMode.FLUSH, - cvox.AbstractTts.PERSONALITY_ANNOTATION); - } - } else if (msg['action'] == 'cyclePunctuationEcho') { - this.tts.speak(Msgs.getMsg( - this.backgroundTts_.cyclePunctuationEcho()), - cvox.QueueMode.FLUSH); - } -}; - - -/** - * Called when an earcon message is received from a page content script. - * @param {Object} msg The earcon message. - */ -cvox.ChromeVoxBackground.prototype.onEarconMessage = function(msg) { - if (msg.action == 'play') { - this.earcons.playEarcon(msg.earcon); - } -}; - - -/** - * Listen for connections from our content script bridges, and dispatch the - * messages to the proper destination. - */ -cvox.ChromeVoxBackground.prototype.addBridgeListener = function() { - cvox.ExtensionBridge.addMessageListener(goog.bind(function(msg, port) { - var target = msg['target']; - var action = msg['action']; - - switch (target) { - case 'OpenTab': - var destination = {url: msg['url']}; - chrome.tabs.create(destination); - break; - case 'KbExplorer': - var explorerPage = {url: 'chromevox/background/kbexplorer.html'}; - chrome.tabs.create(explorerPage); - break; - case 'HelpDocs': - var helpPage = {url: 'http://chromevox.com/tutorial/index.html'}; - chrome.tabs.create(helpPage); - break; - case 'Options': - if (action == 'open') { - var optionsPage = {url: 'chromevox/background/options.html'}; - chrome.tabs.create(optionsPage); - } - break; - case 'Data': - if (action == 'getHistory') { - var results = {}; - chrome.history.search({text: '', maxResults: 25}, function(items) { - items.forEach(function(item) { - if (item.url) { - results[item.url] = true; - } - }); - port.postMessage({ - 'history': results - }); - }); - } - break; - case 'Prefs': - if (action == 'getPrefs') { - this.prefs.sendPrefsToPort(port); - } else if (action == 'setPref') { - if (msg['pref'] == 'active' && - msg['value'] != cvox.ChromeVox.isActive) { - if (cvox.ChromeVox.isActive) { - this.tts.speak(Msgs.getMsg('chromevox_inactive'), - cvox.QueueMode.FLUSH); - chrome.accessibilityPrivate.setNativeAccessibilityEnabled( - true); - } else { - chrome.accessibilityPrivate.setNativeAccessibilityEnabled( - false); - } - } else if (msg['pref'] == 'earcons') { - this.earcons.enabled = msg['value']; - } else if (msg['pref'] == 'sticky' && msg['announce']) { - if (msg['value']) { - this.tts.speak(Msgs.getMsg('sticky_mode_enabled'), - cvox.QueueMode.QUEUE); - } else { - this.tts.speak( - Msgs.getMsg('sticky_mode_disabled'), - cvox.QueueMode.QUEUE); - } - } else if (msg['pref'] == 'typingEcho' && msg['announce']) { - var announce = ''; - switch (msg['value']) { - case cvox.TypingEcho.CHARACTER: - announce = Msgs.getMsg('character_echo'); - break; - case cvox.TypingEcho.WORD: - announce = Msgs.getMsg('word_echo'); - break; - case cvox.TypingEcho.CHARACTER_AND_WORD: - announce = Msgs.getMsg('character_and_word_echo'); - break; - case cvox.TypingEcho.NONE: - announce = Msgs.getMsg('none_echo'); - break; - default: - break; - } - if (announce) { - this.tts.speak(announce, cvox.QueueMode.QUEUE); - } - } else if (msg['pref'] == 'brailleCaptions') { - cvox.BrailleCaptionsBackground.setActive(msg['value']); - } - this.prefs.setPref(msg['pref'], msg['value']); - this.readPrefs(); - } - break; - case 'Math': - // TODO (sorge): Put the change of styles etc. here! - if (msg['action'] == 'getDomains') { - port.postMessage({'message': 'DOMAINS_STYLES', - 'domains': this.backgroundTts_.mathmap.allDomains, - 'styles': this.backgroundTts_.mathmap.allStyles}); - } - break; - case 'TTS': - if (msg['startCallbackId'] != undefined) { - msg['properties']['startCallback'] = function(opt_cleanupOnly) { - port.postMessage({'message': 'TTS_CALLBACK', - 'cleanupOnly': opt_cleanupOnly, - 'id': msg['startCallbackId']}); - }; - } - if (msg['endCallbackId'] != undefined) { - msg['properties']['endCallback'] = function(opt_cleanupOnly) { - port.postMessage({'message': 'TTS_CALLBACK', - 'cleanupOnly': opt_cleanupOnly, - 'id': msg['endCallbackId']}); - }; - } - try { - this.onTtsMessage(msg); - } catch (err) { - console.log(err); - } - break; - case 'EARCON': - this.onEarconMessage(msg); - break; - case 'BRAILLE': - try { - this.backgroundBraille_.onBrailleMessage(msg); - } catch (err) { - console.log(err); - } - break; - } - }, this)); -}; - - -/** - * Read and apply preferences that affect the background context. - */ -cvox.ChromeVoxBackground.prototype.readPrefs = function() { - var prefs = this.prefs.getPrefs(); - cvox.ChromeVoxEditableTextBase.useIBeamCursor = - (prefs['useIBeamCursor'] == 'true'); - cvox.ChromeVox.isActive = - (prefs['active'] == 'true' || cvox.ChromeVox.isChromeOS); - cvox.ChromeVox.isStickyPrefOn = (prefs['sticky'] == 'true'); -}; - -/** - * Checks if we are currently in an incognito window. - * @return {boolean} True if incognito or not within a tab context, false - * otherwise. - * @private - */ -cvox.ChromeVoxBackground.prototype.isIncognito_ = function() { - var incognito = false; - chrome.tabs.getCurrent(function(tab) { - // Tab is null if not called from a tab context. In that case, also consider - // it incognito. - incognito = tab ? tab.incognito : true; - }); - return incognito; -}; - - -/** - * Handles the onIntroduceChromeVox event. - */ -cvox.ChromeVoxBackground.prototype.onIntroduceChromeVox = function() { - cvox.ChromeVox.tts.speak(Msgs.getMsg('chromevox_intro'), - cvox.QueueMode.QUEUE, - {doNotInterrupt: true}); - cvox.ChromeVox.braille.write(cvox.NavBraille.fromText( - Msgs.getMsg('intro_brl'))); -}; - - -// Create the background page object and export a function window['speak'] -// so that other background pages can access it. Also export the prefs object -// for access by the options page. -(function() { - var background = new cvox.ChromeVoxBackground(); - background.init(); - window['speak'] = goog.bind(background.tts.speak, background.tts); - - // Export the prefs object for access by the options page. - window['prefs'] = background.prefs; - - // Export the braille translator manager for access by the options page. - window['braille_translator_manager'] = - background.backgroundBraille_.getTranslatorManager(); - - // Export injection for ChromeVox Next. - cvox.ChromeVox.injectChromeVoxIntoTabs = - background.injectChromeVoxIntoTabs.bind(background); -})(); |