OLD | NEW |
---|---|
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 Handles automation from a desktop automation node. | 6 * @fileoverview Handles automation from a desktop automation node. |
7 */ | 7 */ |
8 | 8 |
9 goog.provide('DesktopAutomationHandler'); | 9 goog.provide('DesktopAutomationHandler'); |
10 | 10 |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
65 this.addListener_(e.textChanged, this.onTextChanged); | 65 this.addListener_(e.textChanged, this.onTextChanged); |
66 this.addListener_(e.textSelectionChanged, this.onTextSelectionChanged); | 66 this.addListener_(e.textSelectionChanged, this.onTextSelectionChanged); |
67 this.addListener_(e.valueChanged, this.onValueChanged); | 67 this.addListener_(e.valueChanged, this.onValueChanged); |
68 | 68 |
69 AutomationObjectConstructorInstaller.init(node, function() { | 69 AutomationObjectConstructorInstaller.init(node, function() { |
70 chrome.automation.getFocus((function(focus) { | 70 chrome.automation.getFocus((function(focus) { |
71 if (ChromeVoxState.instance.mode != ChromeVoxMode.FORCE_NEXT) | 71 if (ChromeVoxState.instance.mode != ChromeVoxMode.FORCE_NEXT) |
72 return; | 72 return; |
73 | 73 |
74 if (focus) { | 74 if (focus) { |
75 this.onFocus( | 75 » var event = new chrome.automation.AutomationEvent(); |
Devlin
2017/01/04 23:54:21
rietveld thinks there's an illegal character here,
| |
76 new chrome.automation.AutomationEvent( | 76 » event.type = EventType.focus; |
77 EventType.focus, focus, 'page')); | 77 » event.target = focus; |
78 » event.eventFrom = 'page'; | |
79 this.onFocus(event); | |
78 } | 80 } |
79 }).bind(this)); | 81 }).bind(this)); |
80 }.bind(this)); | 82 }.bind(this)); |
81 }; | 83 }; |
82 | 84 |
83 /** | 85 /** |
84 * Time to wait until processing more value changed events. | 86 * Time to wait until processing more value changed events. |
85 * @const {number} | 87 * @const {number} |
86 */ | 88 */ |
87 DesktopAutomationHandler.VMIN_VALUE_CHANGE_DELAY_MS = 500; | 89 DesktopAutomationHandler.VMIN_VALUE_CHANGE_DELAY_MS = 500; |
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
198 this.onEventDefault(evt); | 200 this.onEventDefault(evt); |
199 }, | 201 }, |
200 | 202 |
201 /** | 203 /** |
202 * Makes an announcement without changing focus. | 204 * Makes an announcement without changing focus. |
203 * @param {!AutomationEvent} evt | 205 * @param {!AutomationEvent} evt |
204 */ | 206 */ |
205 onActiveDescendantChanged: function(evt) { | 207 onActiveDescendantChanged: function(evt) { |
206 if (!evt.target.activeDescendant || !evt.target.state.focused) | 208 if (!evt.target.activeDescendant || !evt.target.state.focused) |
207 return; | 209 return; |
208 this.onEventDefault(new chrome.automation.AutomationEvent( | 210 var event = new chrome.automation.AutomationEvent(); |
209 EventType.focus, evt.target.activeDescendant, evt.eventFrom)); | 211 event.type = EventType.focus; |
212 event.target = evt.target.activeDescendant; | |
213 event.eventFrom = evt.eventFrom; | |
214 this.onEventDefault(event); | |
210 }, | 215 }, |
211 | 216 |
212 /** | 217 /** |
213 * Makes an announcement without changing focus. | 218 * Makes an announcement without changing focus. |
214 * @param {!AutomationEvent} evt | 219 * @param {!AutomationEvent} evt |
215 */ | 220 */ |
216 onAlert: function(evt) { | 221 onAlert: function(evt) { |
217 var node = evt.target; | 222 var node = evt.target; |
218 if (!node || !this.shouldOutput_(evt)) | 223 if (!node || !this.shouldOutput_(evt)) |
219 return; | 224 return; |
220 | 225 |
221 var range = cursors.Range.fromNode(node); | 226 var range = cursors.Range.fromNode(node); |
222 | 227 |
223 new Output().withSpeechAndBraille(range, null, evt.type).go(); | 228 new Output().withSpeechAndBraille(range, null, evt.type).go(); |
224 }, | 229 }, |
225 | 230 |
226 /** | 231 /** |
227 * Provides all feedback once a checked state changed event fires. | 232 * Provides all feedback once a checked state changed event fires. |
228 * @param {!AutomationEvent} evt | 233 * @param {!AutomationEvent} evt |
229 */ | 234 */ |
230 onCheckedStateChanged: function(evt) { | 235 onCheckedStateChanged: function(evt) { |
231 if (!AutomationPredicate.checkable(evt.target)) | 236 if (!AutomationPredicate.checkable(evt.target)) |
232 return; | 237 return; |
233 | 238 |
234 Output.forceModeForNextSpeechUtterance(cvox.QueueMode.CATEGORY_FLUSH); | 239 Output.forceModeForNextSpeechUtterance(cvox.QueueMode.CATEGORY_FLUSH); |
235 this.onEventIfInRange( | 240 var event = new chrome.automation.AutomationEvent(); |
236 new chrome.automation.AutomationEvent( | 241 event.type = EventType.checkedStateChanged; |
237 EventType.checkedStateChanged, evt.target, evt.eventFrom)); | 242 event.target = evt.target; |
243 event.eventFrom = evt.eventFrom; | |
244 this.onEventIfInRange(event); | |
238 }, | 245 }, |
239 | 246 |
240 /** | 247 /** |
241 * Provides all feedback once a focus event fires. | 248 * Provides all feedback once a focus event fires. |
242 * @param {!AutomationEvent} evt | 249 * @param {!AutomationEvent} evt |
243 */ | 250 */ |
244 onFocus: function(evt) { | 251 onFocus: function(evt) { |
245 // Invalidate any previous editable text handler state. | 252 // Invalidate any previous editable text handler state. |
246 this.textEditHandler_ = null; | 253 this.textEditHandler_ = null; |
247 | 254 |
(...skipping 24 matching lines...) Expand all Loading... | |
272 } | 279 } |
273 | 280 |
274 // If a previous node was saved for this focus, restore it. | 281 // If a previous node was saved for this focus, restore it. |
275 var savedRange = ChromeVoxState.instance.focusRecoveryMap.get(root); | 282 var savedRange = ChromeVoxState.instance.focusRecoveryMap.get(root); |
276 ChromeVoxState.instance.focusRecoveryMap.delete(root); | 283 ChromeVoxState.instance.focusRecoveryMap.delete(root); |
277 if (savedRange) { | 284 if (savedRange) { |
278 ChromeVoxState.instance.navigateToRange(savedRange, false); | 285 ChromeVoxState.instance.navigateToRange(savedRange, false); |
279 return; | 286 return; |
280 } | 287 } |
281 | 288 |
282 this.onEventDefault(new chrome.automation.AutomationEvent( | 289 var event = new chrome.automation.AutomationEvent(); |
283 EventType.focus, node, evt.eventFrom)); | 290 event.type = EventType.focus; |
291 event.target = node; | |
292 event.eventFrom = evt.eventFrom; | |
293 this.onEventDefault(event); | |
284 }, | 294 }, |
285 | 295 |
286 /** | 296 /** |
287 * Provides all feedback once a load complete event fires. | 297 * Provides all feedback once a load complete event fires. |
288 * @param {!AutomationEvent} evt | 298 * @param {!AutomationEvent} evt |
289 */ | 299 */ |
290 onLoadComplete: function(evt) { | 300 onLoadComplete: function(evt) { |
291 chrome.automation.getFocus(function(focus) { | 301 chrome.automation.getFocus(function(focus) { |
292 if (!focus || !AutomationUtil.isDescendantOf(focus, evt.target)) | 302 if (!focus || !AutomationUtil.isDescendantOf(focus, evt.target)) |
293 return; | 303 return; |
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
480 * Provides all feedback once a menu end event fires. | 490 * Provides all feedback once a menu end event fires. |
481 * @param {!AutomationEvent} evt | 491 * @param {!AutomationEvent} evt |
482 */ | 492 */ |
483 onMenuEnd: function(evt) { | 493 onMenuEnd: function(evt) { |
484 this.onEventDefault(evt); | 494 this.onEventDefault(evt); |
485 | 495 |
486 // This is a work around for Chrome context menus not firing a focus event | 496 // This is a work around for Chrome context menus not firing a focus event |
487 // after you close them. | 497 // after you close them. |
488 chrome.automation.getFocus(function(focus) { | 498 chrome.automation.getFocus(function(focus) { |
489 if (focus) { | 499 if (focus) { |
490 this.onFocus( | 500 » var event = new chrome.automation.AutomationEvent(); |
491 new chrome.automation.AutomationEvent( | 501 » event.type = EventType.focus; |
492 EventType.focus, focus, 'page')); | 502 » event.target = focus; |
503 » event.eventFrom = 'page'; | |
504 this.onFocus(event); | |
493 } | 505 } |
494 }.bind(this)); | 506 }.bind(this)); |
495 }, | 507 }, |
496 | 508 |
497 /** | 509 /** |
498 * Create an editable text handler for the given node if needed. | 510 * Create an editable text handler for the given node if needed. |
499 * @param {!AutomationNode} node | 511 * @param {!AutomationNode} node |
500 */ | 512 */ |
501 createTextEditHandlerIfNeeded_: function(node) { | 513 createTextEditHandlerIfNeeded_: function(node) { |
502 if (!this.textEditHandler_ || | 514 if (!this.textEditHandler_ || |
(...skipping 24 matching lines...) Expand all Loading... | |
527 DesktopAutomationHandler.init_ = function() { | 539 DesktopAutomationHandler.init_ = function() { |
528 chrome.automation.getDesktop(function(desktop) { | 540 chrome.automation.getDesktop(function(desktop) { |
529 ChromeVoxState.desktopAutomationHandler = | 541 ChromeVoxState.desktopAutomationHandler = |
530 new DesktopAutomationHandler(desktop); | 542 new DesktopAutomationHandler(desktop); |
531 }); | 543 }); |
532 }; | 544 }; |
533 | 545 |
534 DesktopAutomationHandler.init_(); | 546 DesktopAutomationHandler.init_(); |
535 | 547 |
536 }); // goog.scope | 548 }); // goog.scope |
OLD | NEW |