| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 /** | 5 /** |
| 6 * @fileoverview The entry point for all ChromeVox2 related code for the | 6 * @fileoverview The entry point for all ChromeVox2 related code for the |
| 7 * background page. | 7 * background page. |
| 8 */ | 8 */ |
| 9 | 9 |
| 10 goog.provide('Background'); | 10 goog.provide('Background'); |
| (...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 133 this.liveRegions_ = new LiveRegions(this); | 133 this.liveRegions_ = new LiveRegions(this); |
| 134 | 134 |
| 135 /** @type {number} @private */ | 135 /** @type {number} @private */ |
| 136 this.passThroughKeyUpCount_ = 0; | 136 this.passThroughKeyUpCount_ = 0; |
| 137 | 137 |
| 138 /** @type {boolean} @private */ | 138 /** @type {boolean} @private */ |
| 139 this.inExcursion_ = false; | 139 this.inExcursion_ = false; |
| 140 | 140 |
| 141 if (!chrome.accessibilityPrivate.setKeyboardListener) | 141 if (!chrome.accessibilityPrivate.setKeyboardListener) |
| 142 chrome.accessibilityPrivate.setKeyboardListener = function() {}; | 142 chrome.accessibilityPrivate.setKeyboardListener = function() {}; |
| 143 |
| 144 if (cvox.ChromeVox.isChromeOS) { |
| 145 chrome.accessibilityPrivate.onAccessibilityGesture.addListener( |
| 146 this.onAccessibilityGesture_); |
| 147 } |
| 143 }; | 148 }; |
| 144 | 149 |
| 145 /** | 150 /** |
| 146 * @const {string} | 151 * @const {string} |
| 147 */ | 152 */ |
| 148 Background.ISSUE_URL = 'https://code.google.com/p/chromium/issues/entry?' + | 153 Background.ISSUE_URL = 'https://code.google.com/p/chromium/issues/entry?' + |
| 149 'labels=Type-Bug,Pri-2,cvox2,OS-Chrome&' + | 154 'labels=Type-Bug,Pri-2,cvox2,OS-Chrome&' + |
| 150 'components=UI>accessibility&' + | 155 'components=UI>accessibility&' + |
| 151 'description='; | 156 'description='; |
| 152 | 157 |
| 158 /** |
| 159 * Map from gesture names (AXGesture defined in ui/accessibility/ax_enums.idl) |
| 160 * to commands when in Classic mode. |
| 161 * @type {Object<string, string>} |
| 162 * @const |
| 163 */ |
| 164 Background.GESTURE_CLASSIC_COMMAND_MAP = { |
| 165 'swipeUp1': 'backward', |
| 166 'swipeDown1': 'forward', |
| 167 'swipeLeft1': 'left', |
| 168 'swipeRight1': 'right', |
| 169 'swipeUp2': 'jumpToTop', |
| 170 'swipeDown2': 'readFromhere', |
| 171 }; |
| 172 |
| 173 /** |
| 174 * Map from gesture names (AXGesture defined in ui/accessibility/ax_enums.idl) |
| 175 * to commands when in Classic mode. |
| 176 * @type {Object<string, string>} |
| 177 * @const |
| 178 */ |
| 179 Background.GESTURE_NEXT_COMMAND_MAP = { |
| 180 'swipeUp1': 'previousLine', |
| 181 'swipeDown1': 'nextLine', |
| 182 'swipeLeft1': 'previousObject', |
| 183 'swipeRight1': 'nextObject', |
| 184 'swipeUp2': 'jumpToTop', |
| 185 'swipeDown2': 'readFromHere', |
| 186 }; |
| 187 |
| 153 Background.prototype = { | 188 Background.prototype = { |
| 154 __proto__: ChromeVoxState.prototype, | 189 __proto__: ChromeVoxState.prototype, |
| 155 | 190 |
| 156 /** | 191 /** |
| 157 * @override | 192 * @override |
| 158 */ | 193 */ |
| 159 getMode: function() { | 194 getMode: function() { |
| 160 return this.mode_; | 195 return this.mode_; |
| 161 }, | 196 }, |
| 162 | 197 |
| (...skipping 845 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1008 this.restoreCurrentRange_(); | 1043 this.restoreCurrentRange_(); |
| 1009 }, | 1044 }, |
| 1010 | 1045 |
| 1011 /** | 1046 /** |
| 1012 * Move ChromeVox back to the last saved range. | 1047 * Move ChromeVox back to the last saved range. |
| 1013 */ | 1048 */ |
| 1014 saveExcursion: function() { | 1049 saveExcursion: function() { |
| 1015 this.savedRange_ = | 1050 this.savedRange_ = |
| 1016 new cursors.Range(this.currentRange_.start, this.currentRange_.end); | 1051 new cursors.Range(this.currentRange_.start, this.currentRange_.end); |
| 1017 }, | 1052 }, |
| 1053 |
| 1054 /** |
| 1055 * Handles accessibility gestures from the touch screen. |
| 1056 * @param {string} gesture The gesture to handle, based on the AXGesture enum |
| 1057 * defined in ui/accessibility/ax_enums.idl |
| 1058 * @private |
| 1059 */ |
| 1060 onAccessibilityGesture_: function(gesture) { |
| 1061 // If we're in classic mode, some gestures need to be handled by the |
| 1062 // content script. Other gestures are universal and will be handled in |
| 1063 // this function. |
| 1064 if (this.mode_ == ChromeVoxMode.CLASSIC) { |
| 1065 if (this.handleClassicGesture_(gesture)) |
| 1066 return; |
| 1067 } |
| 1068 |
| 1069 var command = Background.GESTURE_NEXT_COMMAND_MAP[gesture]; |
| 1070 if (command) |
| 1071 this.onGotCommand(command); |
| 1072 }, |
| 1073 |
| 1074 /** |
| 1075 * Handles accessibility gestures from the touch screen when in CLASSIC |
| 1076 * mode, by forwarding a command to the content script. |
| 1077 * @param {string} gesture The gesture to handle, based on the AXGesture enum |
| 1078 * defined in ui/accessibility/ax_enums.idl |
| 1079 * @return {boolean} True if this gesture was handled. |
| 1080 * @private |
| 1081 */ |
| 1082 handleClassicGesture_: function(gesture) { |
| 1083 var command = Background.GESTURE_CLASSIC_COMMAND_MAP[gesture]; |
| 1084 if (!command) |
| 1085 return false; |
| 1086 |
| 1087 var msg = { |
| 1088 'message': 'USER_COMMAND', |
| 1089 'command': command |
| 1090 }; |
| 1091 cvox.ExtensionBridge.send(msg); |
| 1092 return true; |
| 1093 }, |
| 1018 }; | 1094 }; |
| 1019 | 1095 |
| 1020 /** | 1096 /** |
| 1021 * Converts a list of globs, as used in the extension manifest, to a regular | 1097 * Converts a list of globs, as used in the extension manifest, to a regular |
| 1022 * expression that matches if and only if any of the globs in the list matches. | 1098 * expression that matches if and only if any of the globs in the list matches. |
| 1023 * @param {!Array<string>} globs | 1099 * @param {!Array<string>} globs |
| 1024 * @return {!RegExp} | 1100 * @return {!RegExp} |
| 1025 * @private | 1101 * @private |
| 1026 */ | 1102 */ |
| 1027 Background.globsToRegExp_ = function(globs) { | 1103 Background.globsToRegExp_ = function(globs) { |
| 1028 return new RegExp('^(' + globs.map(function(glob) { | 1104 return new RegExp('^(' + globs.map(function(glob) { |
| 1029 return glob.replace(/[.+^$(){}|[\]\\]/g, '\\$&') | 1105 return glob.replace(/[.+^$(){}|[\]\\]/g, '\\$&') |
| 1030 .replace(/\*/g, '.*') | 1106 .replace(/\*/g, '.*') |
| 1031 .replace(/\?/g, '.'); | 1107 .replace(/\?/g, '.'); |
| 1032 }).join('|') + ')$'); | 1108 }).join('|') + ')$'); |
| 1033 }; | 1109 }; |
| 1034 | 1110 |
| 1035 /** @type {Background} */ | 1111 /** @type {Background} */ |
| 1036 global.backgroundObj = new Background(); | 1112 global.backgroundObj = new Background(); |
| 1037 | 1113 |
| 1038 }); // goog.scope | 1114 }); // goog.scope |
| OLD | NEW |