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

Unified Diff: chrome/browser/resources/chromeos/chromevox/cvox2/background/desktop_automation_handler.js

Issue 1942683005: Refactor event handler classes to make it easier to add new event type listeners. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/resources/chromeos/chromevox/cvox2/background/desktop_automation_handler.js
diff --git a/chrome/browser/resources/chromeos/chromevox/cvox2/background/desktop_automation_handler.js b/chrome/browser/resources/chromeos/chromevox/cvox2/background/desktop_automation_handler.js
index 266ff6a7ac2cef43a289e809b7e473e6043757d2..f7c5a73a3482f922976e638fdc1cdbcf028c4bae 100644
--- a/chrome/browser/resources/chromeos/chromevox/cvox2/background/desktop_automation_handler.js
+++ b/chrome/browser/resources/chromeos/chromevox/cvox2/background/desktop_automation_handler.js
@@ -8,6 +8,7 @@
goog.provide('DesktopAutomationHandler');
+goog.require('AutomationObjectConstructorInstaller');
goog.require('BaseAutomationHandler');
goog.require('ChromeVoxState');
goog.require('editing.TextEditHandler');
@@ -16,6 +17,7 @@ goog.scope(function() {
var AutomationEvent = chrome.automation.AutomationEvent;
var AutomationNode = chrome.automation.AutomationNode;
var Dir = constants.Dir;
+var EventType = chrome.automation.EventType;
var RoleType = chrome.automation.RoleType;
/**
@@ -39,21 +41,34 @@ DesktopAutomationHandler = function(node) {
*/
this.lastValueChanged_ = new Date(0);
- // The focused state gets set on the containing webView node.
- var webView = node.find({role: RoleType.webView, state: {focused: true}});
- if (webView) {
- var root = webView.find({role: RoleType.rootWebArea});
- if (root) {
- this.onLoadComplete(
- {target: root,
- type: chrome.automation.EventType.loadComplete});
- }
- }
+ var e = EventType;
+ this.addListener_(e.activedescendantchanged, this.onActiveDescendantChanged);
+ this.addListener_(e.alert, this.onAlert);
+ this.addListener_(e.ariaAttributeChanged, this.onEventIfInRange);
+ this.addListener_(e.checkedStateChanged, this.onEventIfInRange);
+ this.addListener_(e.focus, this.onFocus);
+ this.addListener_(e.hover, this.onEventWithFlushedOutput);
+ this.addListener_(e.loadComplete, this.onLoadComplete);
+ this.addListener_(e.menuEnd, this.onMenuEnd);
+ this.addListener_(e.menuListItemSelected, this.onEventDefault);
+ this.addListener_(e.menuStart, this.onMenuStart);
+ this.addListener_(e.scrollPositionChanged, this.onScrollPositionChanged);
+ this.addListener_(e.selection, this.onEventWithFlushedOutput);
+ this.addListener_(e.textChanged, this.onTextChanged);
+ this.addListener_(e.textSelectionChanged, this.onTextSelectionChanged);
+ this.addListener_(e.valueChanged, this.onValueChanged);
+
+ AutomationObjectConstructorInstaller.init(node, function() {
+ chrome.automation.getFocus((function(focus) {
+ if (ChromeVoxState.instance.mode != ChromeVoxMode.FORCE_NEXT)
+ return;
- chrome.automation.getFocus((function(focus) {
- if (focus)
- this.onFocus({target: focus, type: 'focus'});
- }).bind(this));
+ if (focus) {
+ this.onFocus(
+ new chrome.automation.AutomationEvent(EventType.focus, focus));
+ }
+ }).bind(this));
+ }.bind(this));
};
/**
@@ -118,8 +133,38 @@ DesktopAutomationHandler.prototype = {
},
/**
+ * @param {!AutomationEvent} evt
+ */
+ onEventIfInRange: function(evt) {
+ // TODO(dtseng): Consider the end of the current range as well.
+ if (AutomationUtil.isDescendantOf(
+ global.backgroundObj.currentRange.start.node, evt.target) ||
+ evt.target.state.focused)
+ this.onEventDefault(evt);
+ },
+
+ /**
+ * @param {!AutomationEvent} evt
+ */
+ onEventWithFlushedOutput: function(evt) {
+ Output.flushNextSpeechUtterance();
+ this.onEventDefault(evt);
+ },
+
+ /**
+ * Makes an announcement without changing focus.
+ * @param {!AutomationEvent} evt
+ */
+ onActiveDescendantChanged: function(evt) {
+ if (!evt.target.activeDescendant)
+ return;
+ this.onEventDefault(new chrome.automation.AutomationEvent(
+ EventType.focus, evt.target.activeDescendant));
+ },
+
+ /**
* Makes an announcement without changing focus.
- * @param {Object} evt
+ * @param {!AutomationEvent} evt
*/
onAlert: function(evt) {
var node = evt.target;
@@ -139,7 +184,7 @@ DesktopAutomationHandler.prototype = {
/**
* Provides all feedback once a focus event fires.
- * @param {Object} evt
+ * @param {!AutomationEvent} evt
*/
onFocus: function(evt) {
// Invalidate any previous editable text handler state.
@@ -160,13 +205,12 @@ DesktopAutomationHandler.prototype = {
Output.flushNextSpeechUtterance();
this.onEventDefault(
- /** @type {!AutomationEvent} */
- ({target: node, type: chrome.automation.EventType.focus}));
+ new chrome.automation.AutomationEvent(EventType.focus, node));
},
/**
* Provides all feedback once a load complete event fires.
- * @param {Object} evt
+ * @param {!AutomationEvent} evt
*/
onLoadComplete: function(evt) {
ChromeVoxState.instance.refreshMode(evt.target.docUrl);
@@ -193,13 +237,20 @@ DesktopAutomationHandler.prototype = {
}).bind(this));
},
- /** @override */
+
+ /**
+ * Provides all feedback once a text changed event fires.
+ * @param {!AutomationEvent} evt
+ */
onTextChanged: function(evt) {
if (evt.target.state.editable)
this.onEditableChanged_(evt);
},
- /** @override */
+ /**
+ * Provides all feedback once a text selection changed event fires.
+ * @param {!AutomationEvent} evt
+ */
onTextSelectionChanged: function(evt) {
if (evt.target.state.editable)
this.onEditableChanged_(evt);
@@ -266,7 +317,7 @@ DesktopAutomationHandler.prototype = {
/**
* Handle updating the active indicator when the document scrolls.
- * @override
+ * @param {!AutomationEvent} evt
*/
onScrollPositionChanged: function(evt) {
if (ChromeVoxState.instance.mode === ChromeVoxMode.CLASSIC)
@@ -277,13 +328,19 @@ DesktopAutomationHandler.prototype = {
new Output().withLocation(currentRange, null, evt.type).go();
},
- /** @override */
+ /**
+ * Provides all feedback once a menu start event fires.
+ * @param {!AutomationEvent} evt
+ */
onMenuStart: function(evt) {
global.backgroundObj.startExcursion();
this.onEventDefault(evt);
},
- /** @override */
+ /**
+ * Provides all feedback once a menu end event fires.
+ * @param {!AutomationEvent} evt
+ */
onMenuEnd: function(evt) {
this.onEventDefault(evt);
global.backgroundObj.endExcursion();

Powered by Google App Engine
This is Rietveld 408576698