Merge Chromium + Blink git repositories
[chromium-blink-merge.git] / chrome / browser / resources / chromeos / chromevox / host / interface / abstract_host.js
blobc4e1e2fcf1ff8993368fcc8c0a98b51c86cb5193
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 /**
6  * @fileoverview Abstract interface to methods that differ depending on the
7  * host platform.
8  *
9  */
11 goog.provide('cvox.AbstractHost');
14 /**
15  * @constructor
16  */
17 cvox.AbstractHost = function() {
21 /**
22  * @enum {number}
23  */
24 cvox.AbstractHost.State = {
25   ACTIVE: 0,
26   INACTIVE: 1,
27   KILLED: 2
31 /**
32  * Do all host-platform-specific initialization.
33  */
34 cvox.AbstractHost.prototype.init = function() {
38 /**
39  * Used to reinitialize ChromeVox if initialization fails.
40  */
41 cvox.AbstractHost.prototype.reinit = function() {
45 /**
46  * Executed on page load.
47  */
48 cvox.AbstractHost.prototype.onPageLoad = function() {
52 /**
53  * Sends a message to the background page (if it exists) for this host.
54  * @param {Object} message The message to pass to the background page.
55  */
56 cvox.AbstractHost.prototype.sendToBackgroundPage = function(message) {
60 /**
61  * Returns the absolute URL to the API source.
62  * @return {string} The URL.
63  */
64 cvox.AbstractHost.prototype.getApiSrc = function() {
65   return '';
69 /**
70  * Return the absolute URL to the given file.
71  * @param {string} path The URL suffix.
72  * @return {string} The full URL.
73  */
74 cvox.AbstractHost.prototype.getFileSrc = function(path) {
75   return '';
79 /**
80  * @return {boolean} True if the host has a Tts callback.
81  */
82 cvox.AbstractHost.prototype.hasTtsCallback = function() {
83   return true;
87 /**
88  * @return {boolean} True if the TTS has been loaded.
89  */
90 cvox.AbstractHost.prototype.ttsLoaded = function() {
91   return true;
95 /**
96  * @return {boolean} True if the ChromeVox is supposed to intercept and handle
97  * mouse clicks for the platform, instead of just letting the clicks fall
98  * through.
99  *
100  * Note: This behavior is only needed for Android because of the way touch
101  * exploration and double-tap to click is implemented by the platform.
102  */
103 cvox.AbstractHost.prototype.mustRedispatchClickEvent = function() {
104   return false;
108  * Activate or deactivate ChromeVox on this host.
109  * @param {boolean} active The desired state; true for active, false for
110  * inactive.
111  */
112 cvox.AbstractHost.prototype.activateOrDeactivateChromeVox = function(active) {
113   this.onStateChanged_(active ? cvox.AbstractHost.State.ACTIVE :
114       cvox.AbstractHost.State.INACTIVE);
119  * Kills ChromeVox on this host.
120  */
121 cvox.AbstractHost.prototype.killChromeVox = function() {
122   this.onStateChanged_(cvox.AbstractHost.State.KILLED);
127  * Helper managing the three states of ChromeVox --
128  * active: all event listeners registered
129  * inactive: only key down listener registered
130  * killed: no listeners registered
131  * @param {cvox.AbstractHost.State} state The new state.
132  * @private
133  */
134 cvox.AbstractHost.prototype.onStateChanged_ = function(state) {
135   var active = state == cvox.AbstractHost.State.ACTIVE;
136   if (active == cvox.ChromeVox.isActive) {
137     return;
138   }
139   cvox.ChromeVoxEventWatcher.cleanup(window);
140   switch (state) {
141     case cvox.AbstractHost.State.ACTIVE:
142       cvox.ChromeVox.isActive = true;
143       cvox.ChromeVox.navigationManager.showOrHideIndicator(true);
144       cvox.ChromeVoxEventWatcher.init(window);
145       if (document.activeElement) {
146         var speakNodeAlso = cvox.ChromeVox.documentHasFocus();
147         cvox.ApiImplementation.syncToNode(
148             document.activeElement, speakNodeAlso);
149       } else {
150         cvox.ChromeVox.navigationManager.updateIndicator();
151       }
152       break;
153     case cvox.AbstractHost.State.INACTIVE:
154       cvox.ChromeVox.isActive = false;
155       cvox.ChromeVox.navigationManager.showOrHideIndicator(false);
156       // If ChromeVox is inactive, the event watcher will only listen for key
157       // down events.
158       cvox.ChromeVoxEventWatcher.init(window);
159       break;
160     case cvox.AbstractHost.State.KILLED:
161       cvox.ChromeVox.isActive = false;
162       cvox.ChromeVox.navigationManager.showOrHideIndicator(false);
163       break;
164   }