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

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

Issue 2367883002: Clean up AutomationPredicate (Closed)
Patch Set: Remove group from landmark predicate (too noisy...e.g. gmail). Created 4 years, 3 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/resources/chromeos/chromevox/cvox2/background/automation_predicate.js
diff --git a/chrome/browser/resources/chromeos/chromevox/cvox2/background/automation_predicate.js b/chrome/browser/resources/chromeos/chromevox/cvox2/background/automation_predicate.js
index c7bc3d2f772897c702de244ce530495c7a045836..f44c602bb0b227d739863e6bef66626ea9ca732e 100644
--- a/chrome/browser/resources/chromeos/chromevox/cvox2/background/automation_predicate.js
+++ b/chrome/browser/resources/chromeos/chromevox/cvox2/background/automation_predicate.js
@@ -15,7 +15,7 @@ goog.require('constants');
goog.scope(function() {
var AutomationNode = chrome.automation.AutomationNode;
var Dir = constants.Dir;
-var RoleType = chrome.automation.RoleType;
+var Role = chrome.automation.RoleType;
/**
* @constructor
@@ -33,31 +33,45 @@ AutomationPredicate.Unary;
AutomationPredicate.Binary;
/**
- * Constructs a predicate given a role.
- * @param {RoleType} role
+ * Constructs a predicate given a list of roles.
+ * @param {!Array<Role>} roles
* @return {AutomationPredicate.Unary}
*/
-AutomationPredicate.withRole = function(role) {
+AutomationPredicate.roles = function(roles) {
+ return AutomationPredicate.match({anyRole: roles });
+};
+
+/**
+ * Constructs a predicate given a list of roles or predicates.
+ * @param {{anyRole: (Array<Role>|undefined),
+ * anyPredicate: (Array<AutomationPredicate.Unary>|undefined)}} params
+ * @return {AutomationPredicate.Unary}
+ */
+AutomationPredicate.match = function(params) {
+ var anyRole = params.anyRole || [];
+ var anyPredicate = params.anyPredicate || [];
return function(node) {
- return node.role == role;
+ return anyRole.some(function(role) { return role == node.role; }) ||
+ anyPredicate.some(function(p) { return p(node); });
};
};
/** @type {AutomationPredicate.Unary} */
-AutomationPredicate.checkBox = AutomationPredicate.withRole(RoleType.checkBox);
+AutomationPredicate.checkBox = AutomationPredicate.roles([Role.checkBox]);
/** @type {AutomationPredicate.Unary} */
-AutomationPredicate.comboBox = AutomationPredicate.withRole(RoleType.comboBox);
+AutomationPredicate.comboBox = AutomationPredicate.roles(
+ [Role.comboBox, Role.popUpButton, Role.menuListPopup]);
/** @type {AutomationPredicate.Unary} */
-AutomationPredicate.heading = AutomationPredicate.withRole(RoleType.heading);
+AutomationPredicate.heading = AutomationPredicate.roles([Role.heading]);
/** @type {AutomationPredicate.Unary} */
AutomationPredicate.inlineTextBox =
- AutomationPredicate.withRole(RoleType.inlineTextBox);
+ AutomationPredicate.roles([Role.inlineTextBox]);
/** @type {AutomationPredicate.Unary} */
-AutomationPredicate.link = AutomationPredicate.withRole(RoleType.link);
+AutomationPredicate.link = AutomationPredicate.roles([Role.link]);
/** @type {AutomationPredicate.Unary} */
-AutomationPredicate.row = AutomationPredicate.withRole(RoleType.row);
+AutomationPredicate.row = AutomationPredicate.roles([Role.row]);
/** @type {AutomationPredicate.Unary} */
-AutomationPredicate.table = AutomationPredicate.withRole(RoleType.table);
+AutomationPredicate.table = AutomationPredicate.roles([Role.table]);
/**
* @param {!AutomationNode} node
@@ -67,7 +81,6 @@ AutomationPredicate.button = function(node) {
return /button/i.test(node.role);
};
-
/**
* @param {!AutomationNode} node
* @return {boolean}
@@ -78,57 +91,33 @@ AutomationPredicate.editText = function(node) {
!node.parent.state.editable;
};
-/**
- * @param {!AutomationNode} node
- * @return {boolean}
- */
-AutomationPredicate.formField = function(node) {
- switch (node.role) {
- case 'button':
- case 'buttonDropDown':
- case 'checkBox':
- case 'comboBox':
- case 'date':
- case 'dateTime':
- case 'details':
- case 'disclosureTriangle':
- case 'form':
- case 'menuButton':
- case 'menuListPopup':
- case 'popUpButton':
- case 'radioButton':
- case 'searchBox':
- case 'slider':
- case 'spinButton':
- case 'switch':
- case 'tab':
- case 'textField':
- case 'time':
- case 'toggleButton':
- case 'tree':
- return true;
- }
- return false;
-};
+/** @type {AutomationPredicate.Unary} */
+AutomationPredicate.formField = AutomationPredicate.match({
+ anyPredicate: [
+ AutomationPredicate.button,
+ AutomationPredicate.comboBox,
+ AutomationPredicate.editText
+ ],
+ anyRole: [
+ Role.checkBox,
+ Role.listBox,
+ Role.slider,
+ Role.tab,
+ Role.tree
+ ]
+});
-/**
- * @param {!AutomationNode} node
- * @return {boolean}
- */
-AutomationPredicate.landmark = function(node) {
- switch (node.role) {
- case 'application':
- case 'banner':
- case 'complementary':
- case 'contentInfo':
- case 'form':
- case 'main':
- case 'navigation':
- case 'search':
- return true;
- }
- return false;
-};
+/** @type {AutomationPredicate.Unary} */
+AutomationPredicate.landmark = AutomationPredicate.roles([
+ Role.application,
+ Role.banner,
+ Role.complementary,
+ Role.contentInfo,
+ Role.form,
+ Role.main,
+ Role.navigation,
+ Role.region,
+ Role.search]);
/**
* @param {!AutomationNode} node
@@ -152,11 +141,11 @@ AutomationPredicate.focused = function(node) {
*/
AutomationPredicate.leaf = function(node) {
return !node.firstChild ||
- node.role == RoleType.button ||
- node.role == RoleType.buttonDropDown ||
- node.role == RoleType.popUpButton ||
- node.role == RoleType.slider ||
- node.role == RoleType.textField ||
+ node.role == Role.button ||
+ node.role == Role.buttonDropDown ||
+ node.role == Role.popUpButton ||
+ node.role == Role.slider ||
+ node.role == Role.textField ||
node.state.invisible ||
node.children.every(function(n) {
return n.state.invisible;
@@ -181,7 +170,7 @@ AutomationPredicate.leafWithText = function(node) {
*/
AutomationPredicate.leafOrStaticText = function(node) {
return AutomationPredicate.leaf(node) ||
- node.role == RoleType.staticText;
+ node.role == Role.staticText;
};
/**
@@ -202,9 +191,9 @@ AutomationPredicate.object = function(node) {
return node.state.focusable ||
(AutomationPredicate.leafOrStaticText(node) &&
(/\S+/.test(node.name) ||
- (node.role != RoleType.lineBreak &&
- node.role != RoleType.staticText &&
- node.role != RoleType.inlineTextBox)));
+ (node.role != Role.lineBreak &&
+ node.role != Role.staticText &&
+ node.role != Role.inlineTextBox)));
};
/**
@@ -228,14 +217,14 @@ AutomationPredicate.linebreak = function(first, second) {
*/
AutomationPredicate.container = function(node) {
return AutomationPredicate.structuralContainer(node) ||
- node.role == RoleType.div ||
- node.role == RoleType.document ||
- node.role == RoleType.group ||
- node.role == RoleType.listItem ||
- node.role == RoleType.toolbar ||
- node.role == RoleType.window ||
+ node.role == Role.div ||
+ node.role == Role.document ||
+ node.role == Role.group ||
+ node.role == Role.listItem ||
+ node.role == Role.toolbar ||
+ node.role == Role.window ||
// For example, crosh.
- (node.role == RoleType.textField && node.state.readOnly) ||
+ (node.role == Role.textField && node.state.readOnly) ||
(node.state.editable && node.parent && !node.parent.state.editable);
};
@@ -246,10 +235,10 @@ AutomationPredicate.container = function(node) {
* @return {boolean}
*/
AutomationPredicate.structuralContainer = function(node) {
- return node.role == RoleType.rootWebArea ||
- node.role == RoleType.embeddedObject ||
- node.role == RoleType.iframe ||
- node.role == RoleType.iframePresentational;
+ return node.role == Role.rootWebArea ||
+ node.role == Role.embeddedObject ||
+ node.role == Role.iframe ||
+ node.role == Role.iframePresentational;
};
/**
@@ -260,13 +249,13 @@ AutomationPredicate.structuralContainer = function(node) {
*/
AutomationPredicate.root = function(node) {
switch (node.role) {
- case RoleType.dialog:
- case RoleType.window:
+ case Role.dialog:
+ case Role.window:
return true;
- case RoleType.toolbar:
- return node.root.role == RoleType.desktop;
- case RoleType.rootWebArea:
- return !node.parent || node.parent.root.role == RoleType.desktop;
+ case Role.toolbar:
+ return node.root.role == Role.desktop;
+ case Role.rootWebArea:
+ return !node.parent || node.parent.root.role == Role.desktop;
default:
return false;
}
@@ -289,7 +278,7 @@ AutomationPredicate.shouldIgnoreNode = function(node) {
return true;
// Ignore list markers since we already announce listitem role.
- if (node.role == RoleType.listMarker)
+ if (node.role == Role.listMarker)
return true;
// Don't ignore nodes with names.
@@ -298,28 +287,26 @@ AutomationPredicate.shouldIgnoreNode = function(node) {
// Ignore some roles.
return AutomationPredicate.leaf(node) &&
- (node.role == RoleType.client ||
- node.role == RoleType.column ||
- node.role == RoleType.div ||
- node.role == RoleType.group ||
- node.role == RoleType.image ||
- node.role == RoleType.staticText ||
- node.role == RoleType.tableHeaderContainer);
+ (AutomationPredicate.roles([Role.client,
+ Role.column,
+ Role.div,
+ Role.group,
+ Role.image,
+ Role.staticText,
+ Role.tableHeaderContainer])(node));
};
-
/**
* Returns if the node has a meaningful checked state.
* @param {!AutomationNode} node
* @return {boolean}
*/
-AutomationPredicate.checkable = function(node) {
- return node.role == RoleType.checkBox ||
- node.role == RoleType.radioButton ||
- node.role == RoleType.menuItemCheckBox ||
- node.role == RoleType.menuItemRadio ||
- node.role == RoleType.treeItem;
-};
+AutomationPredicate.checkable = AutomationPredicate.roles([
+ Role.checkBox,
+ Role.radioButton,
+ Role.menuItemCheckBox,
+ Role.menuItemRadio,
+ Role.treeItem]);
// Table related predicates.
/**
@@ -327,11 +314,10 @@ AutomationPredicate.checkable = function(node) {
* @param {!AutomationNode} node
* @return {boolean}
*/
-AutomationPredicate.cellLike = function(node) {
- return node.role == RoleType.cell ||
- node.role == RoleType.rowHeader ||
- node.role == RoleType.columnHeader;
-};
+AutomationPredicate.cellLike = AutomationPredicate.roles([
+ Role.cell,
+ Role.rowHeader,
+ Role.columnHeader]);
/**
* Returns a predicate that will match against the directed next cell taking
@@ -411,7 +397,7 @@ AutomationPredicate.makeTableCellPredicate = function(start, opts) {
*/
AutomationPredicate.makeHeadingPredicate = function(level) {
return function(node) {
- return node.role == RoleType.heading && node.hierarchicalLevel == level;
+ return node.role == Role.heading && node.hierarchicalLevel == level;
};
};
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698