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

Side by Side Diff: chrome/browser/resources/chromeos/chromevox/cvox2/background/background.js

Issue 1705853002: NOT FOR REVIEW. ax tree focus with debugging (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed crash Created 4 years, 10 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 unified diff | Download patch
OLDNEW
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 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
146 * @override 146 * @override
147 */ 147 */
148 getMode: function() { 148 getMode: function() {
149 return this.mode_; 149 return this.mode_;
150 }, 150 },
151 151
152 /** 152 /**
153 * @override 153 * @override
154 */ 154 */
155 setMode: function(mode, opt_injectClassic) { 155 setMode: function(mode, opt_injectClassic) {
156 console.log('setMode ' + mode + ', inject=' + opt_injectClassic);
157
156 // Switching key maps potentially affects the key codes that involve 158 // Switching key maps potentially affects the key codes that involve
157 // sequencing. Without resetting this list, potentially stale key codes 159 // sequencing. Without resetting this list, potentially stale key codes
158 // remain. The key codes themselves get pushed in 160 // remain. The key codes themselves get pushed in
159 // cvox.KeySequence.deserialize which gets called by cvox.KeyMap. 161 // cvox.KeySequence.deserialize which gets called by cvox.KeyMap.
160 cvox.ChromeVox.sequenceSwitchKeyCodes = []; 162 cvox.ChromeVox.sequenceSwitchKeyCodes = [];
161 if (mode === ChromeVoxMode.CLASSIC || mode === ChromeVoxMode.COMPAT) 163 if (mode === ChromeVoxMode.CLASSIC || mode === ChromeVoxMode.COMPAT)
162 cvox.ChromeVoxKbHandler.handlerKeyMap = cvox.KeyMap.fromDefaults(); 164 cvox.ChromeVoxKbHandler.handlerKeyMap = cvox.KeyMap.fromDefaults();
163 else 165 else
164 cvox.ChromeVoxKbHandler.handlerKeyMap = cvox.KeyMap.fromNext(); 166 cvox.ChromeVoxKbHandler.handlerKeyMap = cvox.KeyMap.fromNext();
165 167
168 console.log('setMode b');
169
166 if (mode == ChromeVoxMode.CLASSIC) { 170 if (mode == ChromeVoxMode.CLASSIC) {
167 if (chrome.commands && 171 if (chrome.commands &&
168 chrome.commands.onCommand.hasListener(this.onGotCommand)) 172 chrome.commands.onCommand.hasListener(this.onGotCommand))
169 chrome.commands.onCommand.removeListener(this.onGotCommand); 173 chrome.commands.onCommand.removeListener(this.onGotCommand);
170 chrome.accessibilityPrivate.setKeyboardListener(false, false); 174 chrome.accessibilityPrivate.setKeyboardListener(false, false);
171 } else { 175 } else {
172 if (chrome.commands && 176 if (chrome.commands &&
173 !chrome.commands.onCommand.hasListener(this.onGotCommand)) 177 !chrome.commands.onCommand.hasListener(this.onGotCommand))
174 chrome.commands.onCommand.addListener(this.onGotCommand); 178 chrome.commands.onCommand.addListener(this.onGotCommand);
175 chrome.accessibilityPrivate.setKeyboardListener( 179 chrome.accessibilityPrivate.setKeyboardListener(
176 true, cvox.ChromeVox.isStickyPrefOn); 180 true, cvox.ChromeVox.isStickyPrefOn);
177 } 181 }
178 182
183 console.log('setMode c');
184
179 chrome.tabs.query({active: true}, function(tabs) { 185 chrome.tabs.query({active: true}, function(tabs) {
180 if (mode === ChromeVoxMode.CLASSIC) { 186 if (mode === ChromeVoxMode.CLASSIC) {
181 // Generally, we don't want to inject classic content scripts as it is 187 // Generally, we don't want to inject classic content scripts as it is
182 // done by the extension system at document load. The exception is when 188 // done by the extension system at document load. The exception is when
183 // we toggle classic on manually as part of a user command. 189 // we toggle classic on manually as part of a user command.
184 if (opt_injectClassic) 190 if (opt_injectClassic)
185 cvox.ChromeVox.injectChromeVoxIntoTabs(tabs); 191 cvox.ChromeVox.injectChromeVoxIntoTabs(tabs);
186 } else { 192 } else {
187 // When in compat mode, if the focus is within the desktop tree proper, 193 // When in compat mode, if the focus is within the desktop tree proper,
188 // then do not disable content scripts. 194 // then do not disable content scripts.
189 if (this.currentRange_ && !this.currentRange_.isWebRange()) 195 if (this.currentRange_ && !this.currentRange_.isWebRange())
190 return; 196 return;
191 197
192 this.disableClassicChromeVox_(); 198 this.disableClassicChromeVox_();
193 } 199 }
194 }.bind(this)); 200 }.bind(this));
195 201
202 console.log('setMode d');
203
196 // If switching out of a ChromeVox Next mode, make sure we cancel 204 // If switching out of a ChromeVox Next mode, make sure we cancel
197 // the progress loading sound just in case. 205 // the progress loading sound just in case.
198 if ((this.mode_ === ChromeVoxMode.NEXT || 206 if ((this.mode_ === ChromeVoxMode.NEXT ||
199 this.mode_ === ChromeVoxMode.FORCE_NEXT) && 207 this.mode_ === ChromeVoxMode.FORCE_NEXT) &&
200 this.mode_ != mode) { 208 this.mode_ != mode) {
201 cvox.ChromeVox.earcons.cancelEarcon(cvox.Earcon.PAGE_START_LOADING); 209 cvox.ChromeVox.earcons.cancelEarcon(cvox.Earcon.PAGE_START_LOADING);
202 } 210 }
203 211
212 console.log('setMode e');
213
204 if (mode === ChromeVoxMode.NEXT || 214 if (mode === ChromeVoxMode.NEXT ||
205 mode === ChromeVoxMode.FORCE_NEXT) { 215 mode === ChromeVoxMode.FORCE_NEXT) {
206 (new PanelCommand(PanelCommandType.ENABLE_MENUS)).send(); 216 (new PanelCommand(PanelCommandType.ENABLE_MENUS)).send();
207 } else { 217 } else {
208 (new PanelCommand(PanelCommandType.DISABLE_MENUS)).send(); 218 (new PanelCommand(PanelCommandType.DISABLE_MENUS)).send();
209 } 219 }
210 220
221 console.log('setMode f');
222
223 // If switching to Classic from any automation-API-based mode,
224 // clear the focus ring.
225 if (mode === ChromeVoxMode.CLASSIC && mode != this.mode_) {
226 if (cvox.ChromeVox.isChromeOS)
227 chrome.accessibilityPrivate.setFocusRing([]);
228 }
229
230 console.log('setMode g');
231
232 // If switching away from Classic to any automation-API-based mode,
233 // update the range based on what's focused.
234 if (this.mode_ === ChromeVoxMode.CLASSIC && mode != this.mode_) {
235 var focus = chrome.automation.getFocus();
236 if (focus) {
237 console.log('setMode h calling setCurrentRange');
238 this.setCurrentRange(cursors.Range.fromNode(focus));
239 }
240 }
241
242 console.log('setMode h');
243
211 this.mode_ = mode; 244 this.mode_ = mode;
212 }, 245 },
213 246
214 /** 247 /**
215 * Mode refreshes takes into account both |url| and the current ChromeVox 248 * Mode refreshes takes into account both |url| and the current ChromeVox
216 * range. The latter gets used to decide if the user is or isn't in web 249 * range. The latter gets used to decide if the user is or isn't in web
217 * content. The focused state also needs to be set for this info to be 250 * content. The focused state also needs to be set for this info to be
218 * reliable. 251 * reliable.
219 * @override 252 * @override
220 */ 253 */
221 refreshMode: function(url) { 254 refreshMode: function(url) {
255 console.log('refreshMode ' + url);
256
222 var mode = this.mode_; 257 var mode = this.mode_;
223 if (mode != ChromeVoxMode.FORCE_NEXT) { 258 if (mode != ChromeVoxMode.FORCE_NEXT) {
224 if (this.isWhitelistedForNext_(url)) { 259 if (this.isWhitelistedForNext_(url)) {
225 mode = ChromeVoxMode.NEXT; 260 mode = ChromeVoxMode.NEXT;
226 } else if (this.isBlacklistedForClassic_(url) || (this.currentRange_ && 261 } else if (this.isBlacklistedForClassic_(url) || (this.currentRange_ &&
227 !this.currentRange_.isWebRange() && 262 !this.currentRange_.isWebRange() &&
228 this.currentRange_.start.node.state.focused)) { 263 this.currentRange_.start.node.state.focused)) {
229 mode = ChromeVoxMode.COMPAT; 264 mode = ChromeVoxMode.COMPAT;
230 } else { 265 } else {
231 mode = ChromeVoxMode.CLASSIC; 266 mode = ChromeVoxMode.CLASSIC;
(...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after
492 newMode = ChromeVoxMode.FORCE_NEXT; 527 newMode = ChromeVoxMode.FORCE_NEXT;
493 } 528 }
494 this.setMode(newMode, true); 529 this.setMode(newMode, true);
495 530
496 var isClassic = 531 var isClassic =
497 newMode == ChromeVoxMode.CLASSIC || newMode == ChromeVoxMode.COMPAT; 532 newMode == ChromeVoxMode.CLASSIC || newMode == ChromeVoxMode.COMPAT;
498 533
499 // Leaving unlocalized as 'next' isn't an official name. 534 // Leaving unlocalized as 'next' isn't an official name.
500 cvox.ChromeVox.tts.speak(isClassic ? 535 cvox.ChromeVox.tts.speak(isClassic ?
501 'classic' : 'next', cvox.QueueMode.FLUSH, {doNotInterrupt: true}); 536 'classic' : 'next', cvox.QueueMode.FLUSH, {doNotInterrupt: true});
537
538 // If the new mode is Classic, return now so we don't announce
539 // anything more.
540 if (newMode == ChromeVoxMode.CLASSIC)
541 return false;
502 break; 542 break;
503 case 'toggleStickyMode': 543 case 'toggleStickyMode':
504 cvox.ChromeVoxBackground.setPref('sticky', 544 cvox.ChromeVoxBackground.setPref('sticky',
505 !cvox.ChromeVox.isStickyPrefOn, 545 !cvox.ChromeVox.isStickyPrefOn,
506 true); 546 true);
507 547
508 if (cvox.ChromeVox.isStickyPrefOn) 548 if (cvox.ChromeVox.isStickyPrefOn)
509 chrome.accessibilityPrivate.setKeyboardListener(true, true); 549 chrome.accessibilityPrivate.setKeyboardListener(true, true);
510 else 550 else
511 chrome.accessibilityPrivate.setKeyboardListener(true, false); 551 chrome.accessibilityPrivate.setKeyboardListener(true, false);
(...skipping 328 matching lines...) Expand 10 before | Expand all | Expand 10 after
840 return glob.replace(/[.+^$(){}|[\]\\]/g, '\\$&') 880 return glob.replace(/[.+^$(){}|[\]\\]/g, '\\$&')
841 .replace(/\*/g, '.*') 881 .replace(/\*/g, '.*')
842 .replace(/\?/g, '.'); 882 .replace(/\?/g, '.');
843 }).join('|') + ')$'); 883 }).join('|') + ')$');
844 }; 884 };
845 885
846 /** @type {Background} */ 886 /** @type {Background} */
847 global.backgroundObj = new Background(); 887 global.backgroundObj = new Background();
848 888
849 }); // goog.scope 889 }); // goog.scope
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698