Add ax action internalInvalidateTree
This change allows a target process or anything outside of the context of a
source tree to request that its source tree be invalidated.
We make use of this new action in the Automation Internal browser side api, when
a client extension's automation bindings requests an enable frame. Typically,
chrome.automationInternal.enableFrame gets called whenever the extension process
encounters a new child tree. This, in turn, resets state within the tree source
and triggers a re-send of all tree data and node data on the next event.
The action is hooked up to one tree source (ARC++).
TBR=dominickn
Bug: 929522
Test: toggle on ChromeVox, interact with Play Store. Toggle off and then back on
ChromeVox, interact with Play Store. Repeat this several times. ChromeVox should
work throughout.
Change-Id: I8e2a729f079f932d06a615bb5fcca9ebbe7365f2
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1573859
Commit-Queue: David Tseng <dtseng@chromium.org>
Reviewed-by: Katie Dektar <katie@chromium.org>
Reviewed-by: Dominic Mazzoni <dmazzoni@chromium.org>
Cr-Commit-Position: refs/heads/master@{#652629}
diff --git a/chrome/browser/chromeos/arc/accessibility/arc_accessibility_helper_bridge.cc b/chrome/browser/chromeos/arc/accessibility/arc_accessibility_helper_bridge.cc
index f844390..22cd2278 100644
--- a/chrome/browser/chromeos/arc/accessibility/arc_accessibility_helper_bridge.cc
+++ b/chrome/browser/chromeos/arc/accessibility/arc_accessibility_helper_bridge.cc
@@ -544,6 +544,9 @@
arc::mojom::AccessibilityActionType::HIDE_TOOLTIP;
break;
}
+ case ax::mojom::Action::kInternalInvalidateTree:
+ tree_source->InvalidateTree();
+ break;
default:
return;
}
diff --git a/chrome/browser/chromeos/arc/accessibility/ax_tree_source_arc.cc b/chrome/browser/chromeos/arc/accessibility/ax_tree_source_arc.cc
index 62c32ff1..4bcd8cc 100644
--- a/chrome/browser/chromeos/arc/accessibility/ax_tree_source_arc.cc
+++ b/chrome/browser/chromeos/arc/accessibility/ax_tree_source_arc.cc
@@ -385,6 +385,10 @@
return info_data_bounds;
}
+void AXTreeSourceArc::InvalidateTree() {
+ current_tree_serializer_->Reset();
+}
+
gfx::Rect AXTreeSourceArc::ComputeEnclosingBounds(
ArcAccessibilityInfoData* info_data) const {
gfx::Rect computed_bounds;
diff --git a/chrome/browser/chromeos/arc/accessibility/ax_tree_source_arc.h b/chrome/browser/chromeos/arc/accessibility/ax_tree_source_arc.h
index fc4aed3..e85531f 100644
--- a/chrome/browser/chromeos/arc/accessibility/ax_tree_source_arc.h
+++ b/chrome/browser/chromeos/arc/accessibility/ax_tree_source_arc.h
@@ -81,6 +81,9 @@
const gfx::Rect GetBounds(ArcAccessibilityInfoData* info_data,
aura::Window* focused_window) const;
+ // Invalidates the tree serializer.
+ void InvalidateTree();
+
bool is_notification() { return is_notification_; }
bool is_input_method_window() { return is_input_method_window_; }
diff --git a/chrome/browser/extensions/api/automation_internal/automation_internal_api.cc b/chrome/browser/extensions/api/automation_internal/automation_internal_api.cc
index c2f0210..e7970e2 100644
--- a/chrome/browser/extensions/api/automation_internal/automation_internal_api.cc
+++ b/chrome/browser/extensions/api/automation_internal/automation_internal_api.cc
@@ -328,8 +328,22 @@
std::unique_ptr<Params> params(Params::Create(*args_));
EXTENSION_FUNCTION_VALIDATE(params.get());
- content::RenderFrameHost* rfh = content::RenderFrameHost::FromAXTreeID(
- ui::AXTreeID::FromString(params->tree_id));
+ ui::AXTreeID ax_tree_id = ui::AXTreeID::FromString(params->tree_id);
+ ui::AXTreeIDRegistry* registry = ui::AXTreeIDRegistry::GetInstance();
+ ui::AXActionHandler* action_handler = registry->GetActionHandler(ax_tree_id);
+ if (action_handler) {
+ // Explicitly invalidate the pre-existing source tree first. This ensures
+ // the source tree sends a complete tree when the next event occurs. This
+ // is required whenever the client extension is reloaded.
+ ui::AXActionData action;
+ action.target_tree_id = ax_tree_id;
+ action.source_extension_id = extension_id();
+ action.action = ax::mojom::Action::kInternalInvalidateTree;
+ action_handler->PerformAction(action);
+ }
+
+ content::RenderFrameHost* rfh =
+ content::RenderFrameHost::FromAXTreeID(ax_tree_id);
if (!rfh)
return RespondNow(Error("unable to load tab"));
@@ -506,6 +520,7 @@
break;
case api::automation::ACTION_TYPE_ANNOTATEPAGEIMAGES:
case api::automation::ACTION_TYPE_SIGNALENDOFTEST:
+ case api::automation::ACTION_TYPE_INTERNALINVALIDATETREE:
case api::automation::ACTION_TYPE_NONE:
break;
}
diff --git a/chrome/common/extensions/api/automation.idl b/chrome/common/extensions/api/automation.idl
index 3f167a4..781f944 100644
--- a/chrome/common/extensions/api/automation.idl
+++ b/chrome/common/extensions/api/automation.idl
@@ -298,6 +298,7 @@
hideTooltip,
hitTest,
increment,
+ internalInvalidateTree,
loadInlineTextBoxes,
replaceSelectedText,
scrollBackward,
diff --git a/content/renderer/accessibility/render_accessibility_impl.cc b/content/renderer/accessibility/render_accessibility_impl.cc
index 3b77665..ffec479 100644
--- a/content/renderer/accessibility/render_accessibility_impl.cc
+++ b/content/renderer/accessibility/render_accessibility_impl.cc
@@ -792,15 +792,16 @@
MarkAllAXObjectsDirty(ax::mojom::Role::kImage);
}
break;
- case ax::mojom::Action::kShowTooltip:
- case ax::mojom::Action::kHideTooltip:
- break;
case ax::mojom::Action::kSignalEndOfTest:
// Wait for 100ms to allow pending events to come in
base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(100));
HandleAXEvent(root, ax::mojom::Event::kEndOfTest);
break;
+ case ax::mojom::Action::kShowTooltip:
+ case ax::mojom::Action::kHideTooltip:
+ case ax::mojom::Action::kInternalInvalidateTree:
+ break;
}
}
diff --git a/third_party/closure_compiler/externs/automation.js b/third_party/closure_compiler/externs/automation.js
index aafce1c..4c3d029 100644
--- a/third_party/closure_compiler/externs/automation.js
+++ b/third_party/closure_compiler/externs/automation.js
@@ -305,6 +305,7 @@
HIDE_TOOLTIP: 'hideTooltip',
HIT_TEST: 'hitTest',
INCREMENT: 'increment',
+ INTERNAL_INVALIDATE_TREE: 'internalInvalidateTree',
LOAD_INLINE_TEXT_BOXES: 'loadInlineTextBoxes',
REPLACE_SELECTED_TEXT: 'replaceSelectedText',
SCROLL_BACKWARD: 'scrollBackward',
diff --git a/ui/accessibility/ax_enum_util.cc b/ui/accessibility/ax_enum_util.cc
index 6e16d54..fbf9f5c 100644
--- a/ui/accessibility/ax_enum_util.cc
+++ b/ui/accessibility/ax_enum_util.cc
@@ -1111,6 +1111,8 @@
return "showTooltip";
case ax::mojom::Action::kHideTooltip:
return "hideTooltip";
+ case ax::mojom::Action::kInternalInvalidateTree:
+ return "internalInvalidateTree";
}
return "";
@@ -1179,6 +1181,8 @@
return ax::mojom::Action::kShowTooltip;
if (0 == strcmp(action, "hideTooltip"))
return ax::mojom::Action::kHideTooltip;
+ if (0 == strcmp(action, "internalInvalidateTree"))
+ return ax::mojom::Action::kInternalInvalidateTree;
return ax::mojom::Action::kNone;
}
diff --git a/ui/accessibility/ax_enums.mojom b/ui/accessibility/ax_enums.mojom
index 83756d2..152999b7 100644
--- a/ui/accessibility/ax_enums.mojom
+++ b/ui/accessibility/ax_enums.mojom
@@ -5,85 +5,85 @@
// Must also be kept in sync with chrome/common/extensions/api/automation.idl.
module ax.mojom;
- // For new entries to the following four enums, also add to
- // chrome/common/extensions/api/automation.idl. This is enforced
- // by a PRESUBMIT check.
- //
- // Explanation of in-lined comments next to some enum values/attributes:
- //
- // Web: this attribute is only used in web content.
- //
- // Native: this attribute is only used in native UI.
- //
- // Implicit: for events, it would be cleaner if we just updated the AX node and
- // each platform fired the appropriate events to indicate which
- // platform-specific attributes changed.
- //
- // if Native / [Platform1, ...] is specified, the attribute is only used
- // on those platforms.
- //
- // If unspecified, the atribute is used across web and native on multiple
- // platforms.
+// For new entries to the following four enums, also add to
+// chrome/common/extensions/api/automation.idl. This is enforced
+// by a PRESUBMIT check.
+//
+// Explanation of in-lined comments next to some enum values/attributes:
+//
+// Web: this attribute is only used in web content.
+//
+// Native: this attribute is only used in native UI.
+//
+// Implicit: for events, it would be cleaner if we just updated the AX node and
+// each platform fired the appropriate events to indicate which
+// platform-specific attributes changed.
+//
+// if Native / [Platform1, ...] is specified, the attribute is only used
+// on those platforms.
+//
+// If unspecified, the attribute is used across web and native on multiple
+// platforms.
enum Event {
kNone,
- kActiveDescendantChanged, // Web
+ kActiveDescendantChanged, // Web
kAlert,
- kAriaAttributeChanged, // Implicit
- kAutocorrectionOccured, // Unknown: http://crbug.com/392498
- kBlur, // Remove: http://crbug.com/392502
- kCheckedStateChanged, // Implicit
+ kAriaAttributeChanged, // Implicit
+ kAutocorrectionOccured, // Unknown: http://crbug.com/392498
+ kBlur, // Remove: http://crbug.com/392502
+ kCheckedStateChanged, // Implicit
kChildrenChanged,
kClicked,
kDocumentSelectionChanged,
kDocumentTitleChanged,
- kEndOfTest, // Sentinel value indicating the end of a test
- kExpandedChanged, // Web
+ kEndOfTest, // Sentinel value indicating the end of a test
+ kExpandedChanged, // Web
kFocus,
- kFocusContext, // Contextual focus event that must delay the next focus event
- kHide, // Remove: http://crbug.com/392502
+ kFocusContext, // Contextual focus event that must delay the next focus event
+ kHide, // Remove: http://crbug.com/392502
kHitTestResult,
kHover,
- kImageFrameUpdated, // Web
- kInvalidStatusChanged, // Implicit
- kLayoutComplete, // Web
- kLiveRegionCreated, // Implicit
- kLiveRegionChanged, // Web
- kLoadComplete, // Web
- kLoadStart, // Web / AuraLinux
- kLocationChanged, // Web
- kMediaStartedPlaying, // Native / Automation
- kMediaStoppedPlaying, // Native / Automation
- kMenuEnd, // Native / Win
- kMenuListItemSelected, // Web
- kMenuListValueChanged, // Web
- kMenuPopupEnd, // Native
- kMenuPopupHide, // Native / AuraLinux
- kMenuPopupStart, // Native
- kMenuStart, // Native / Win
+ kImageFrameUpdated, // Web
+ kInvalidStatusChanged, // Implicit
+ kLayoutComplete, // Web
+ kLiveRegionCreated, // Implicit
+ kLiveRegionChanged, // Web
+ kLoadComplete, // Web
+ kLoadStart, // Web / AuraLinux
+ kLocationChanged, // Web
+ kMediaStartedPlaying, // Native / Automation
+ kMediaStoppedPlaying, // Native / Automation
+ kMenuEnd, // Native / Win
+ kMenuListItemSelected, // Web
+ kMenuListValueChanged, // Web
+ kMenuPopupEnd, // Native
+ kMenuPopupHide, // Native / AuraLinux
+ kMenuPopupStart, // Native
+ kMenuStart, // Native / Win
kMouseCanceled,
kMouseDragged,
kMouseMoved,
kMousePressed,
kMouseReleased,
- kRowCollapsed, // Web / Mac
- kRowCountChanged, // Web / Mac
- kRowExpanded, // Web / Mac
- kScrollPositionChanged, // Web
- kScrolledToAnchor, // Web
- kSelectedChildrenChanged, // Web
- kSelection, // Native
- kSelectionAdd, // Native
- kSelectionRemove, // Native
- kShow, // Remove: http://crbug.com/392502
- kStateChanged, // Native / Automation
+ kRowCollapsed, // Web / Mac
+ kRowCountChanged, // Web / Mac
+ kRowExpanded, // Web / Mac
+ kScrollPositionChanged, // Web
+ kScrolledToAnchor, // Web
+ kSelectedChildrenChanged, // Web
+ kSelection, // Native
+ kSelectionAdd, // Native
+ kSelectionRemove, // Native
+ kShow, // Remove: http://crbug.com/392502
+ kStateChanged, // Native / Automation
kTextChanged,
- kWindowActivated, // Native
- kWindowDeactivated, // Native
+ kWindowActivated, // Native
+ kWindowDeactivated, // Native
kTextSelectionChanged,
- kTreeChanged, // Accessibility tree changed. Don't
- // explicitly fire an accessibility event,
- // only implicitly due to the change.
+ kTreeChanged, // Accessibility tree changed. Don't
+ // explicitly fire an accessibility event,
+ // only implicitly due to the change.
kValueChanged,
};
@@ -95,10 +95,10 @@
// internal roles used by the accessibility infrastructure.
//
// Explanation of in-lined comments next to some enum values.
- //
- // Web: this attribute is only used in web content.
- //
- // Native: this attribute is only used in native UI.
+//
+// Web: this attribute is only used in web content.
+//
+// Native: this attribute is only used in native UI.
enum Role {
kNone,
kAbbr,
@@ -299,7 +299,7 @@
kEditable,
kExpanded,
kFocusable,
- // Grows horizontally, e.g. most toolbars and separators.
+ // Grows horizontally, e.g. most toolbars and separators.
kHorizontal,
kHovered,
// Skip over this node in the accessibility tree, but keep its subtree.
@@ -311,14 +311,14 @@
kProtected,
kRequired,
kRichlyEditable,
- // Grows vertically, e.g. menu or combo box.
+ // Grows vertically, e.g. menu or combo box.
kVertical,
kVisited,
};
- // An action to be taken on an accessibility node.
- // In contrast to |AXDefaultActionVerb|, these describe what happens to the
- // object, e.g. "FOCUS".
+// An action to be taken on an accessibility node.
+// In contrast to |AXDefaultActionVerb|, these describe what happens to the
+// object, e.g. "FOCUS".
enum Action {
kNone,
@@ -334,15 +334,15 @@
kCustomAction,
- // Decrement a slider or range control by one step value.
+ // Decrement a slider or range control by one step value.
kDecrement,
- // Do the default action for an object, typically this means "click".
+ // Do the default action for an object, typically this means "click".
kDoDefault,
kFocus,
- // Return the content of this image object in the image_data attribute.
+ // Return the content of this image object in the image_data attribute.
kGetImageData,
// Gets the bounding rect for a range of text.
@@ -350,24 +350,28 @@
kHideTooltip,
- // Given a point, find the object it corresponds to and fire a
- // |AXActionData.hit_test_event_to_fire| event on it in response.
+ // Given a point, find the object it corresponds to and fire a
+ // |AXActionData.hit_test_event_to_fire| event on it in response.
kHitTest,
- // Increment a slider or range control by one step value.
+ // Increment a slider or range control by one step value.
kIncrement,
- // Load inline text boxes for this subtree, providing information
- // about word boundaries, line layout, and individual character
- // bounding boxes.
+ // For internal use only; signals to tree sources to invalidate an entire
+ // tree.
+ kInternalInvalidateTree,
+
+ // Load inline text boxes for this subtree, providing information
+ // about word boundaries, line layout, and individual character
+ // bounding boxes.
kLoadInlineTextBoxes,
- // Delete any selected text in the control's text value and
- // insert |AXActionData::value| in its place, like when typing or pasting.
+ // Delete any selected text in the control's text value and
+ // insert |AXActionData::value| in its place, like when typing or pasting.
kReplaceSelectedText,
- // Scrolls by approximately one screen in a specific direction. Should be
- // called on a node that has scrollable boolean set to true.
+ // Scrolls by approximately one screen in a specific direction. Should be
+ // called on a node that has scrollable boolean set to true.
kScrollBackward,
kScrollDown,
kScrollForward,
@@ -375,13 +379,13 @@
kScrollRight,
kScrollUp,
- // Scroll any scrollable containers to make the target object visible
- // on the screen. Optionally pass a subfocus rect in
- // AXActionData.target_rect, in node-local coordinates.
+ // Scroll any scrollable containers to make the target object visible
+ // on the screen. Optionally pass a subfocus rect in
+ // AXActionData.target_rect, in node-local coordinates.
kScrollToMakeVisible,
- // Scroll the given object to a specified point on the screen in
- // global screen coordinates. Pass a point in AXActionData.target_point.
+ // Scroll the given object to a specified point on the screen in
+ // global screen coordinates. Pass a point in AXActionData.target_point.
kScrollToPoint,
// Notifies a node that it has accessibility focus.
@@ -392,17 +396,17 @@
kSetScrollOffset,
kSetSelection,
- // Don't focus this node, but set it as the sequential focus navigation
- // starting point, so that pressing Tab moves to the next element
- // following this one, for example.
+ // Don't focus this node, but set it as the sequential focus navigation
+ // starting point, so that pressing Tab moves to the next element
+ // following this one, for example.
kSetSequentialFocusNavigationStartingPoint,
- // Replace the value of the control with AXActionData::value and
- // reset the selection, if applicable.
+ // Replace the value of the control with AXActionData::value and
+ // reset the selection, if applicable.
kSetValue,
kShowContextMenu,
- // Send an event signaling the end of a test.
+ // Send an event signaling the end of a test.
kSignalEndOfTest,
kShowTooltip,
};
@@ -413,22 +417,22 @@
kRequestInlineTextBoxes,
};
- // A list of valid values for the |AXIntAttribute| |default_action_verb|.
- // These will describe the action that will be performed on a given node when
- // executing the default action, which is a click.
- // In contrast to |AXAction|, these describe what the user can do on the
- // object, e.g. "PRESS", not what happens to the object as a result.
- // Only one verb can be used at a time to describe the default action.
+// A list of valid values for the |AXIntAttribute| |default_action_verb|.
+// These will describe the action that will be performed on a given node when
+// executing the default action, which is a click.
+// In contrast to |AXAction|, these describe what the user can do on the
+// object, e.g. "PRESS", not what happens to the object as a result.
+// Only one verb can be used at a time to describe the default action.
enum DefaultActionVerb {
kNone,
kActivate,
kCheck,
kClick,
- // A click will be performed on one of the node's ancestors.
- // This happens when the node itself is not clickable, but one of its
- // ancestors has click handlers attached which are able to capture the click
- // as it bubbles up.
+ // A click will be performed on one of the node's ancestors.
+ // This happens when the node itself is not clickable, but one of its
+ // ancestors has click handlers attached which are able to capture the click
+ // as it bubbles up.
kClickAncestor,
kJump,
@@ -438,7 +442,7 @@
kUncheck,
};
- // A change to the accessibility tree.
+// A change to the accessibility tree.
enum Mutation {
kNone,
kNodeCreated,
@@ -450,16 +454,16 @@
enum StringAttribute {
kNone,
kAccessKey,
- // Only used when invalid_state == invalid_state_other.
+ // Only used when invalid_state == invalid_state_other.
kAriaInvalidValue,
kAutoComplete,
kChildTreeId,
- kClassName, // Native / Android
+ kClassName, // Native / Android
kContainerLiveRelevant,
kContainerLiveStatus,
kDescription,
kDisplay,
- // Only present when different from parent.
+ // Only present when different from parent.
kFontFamily,
kHtmlTag,
// Stores an automatic image annotation if one is available. Only valid on
@@ -468,7 +472,7 @@
kImageDataUrl,
kInnerHtml,
kKeyShortcuts,
- // Only present when different from parent.
+ // Only present when different from parent.
kLanguage,
kName,
kLiveRelevant,
@@ -486,7 +490,7 @@
enum IntAttribute {
kNone,
kDefaultActionVerb,
- // Scrollable container attributes.
+ // Scrollable container attributes.
kScrollX,
kScrollXMin,
kScrollXMax,
@@ -494,48 +498,48 @@
kScrollYMin,
kScrollYMax,
- // Attributes for retrieving the endpoints of a selection.
+ // Attributes for retrieving the endpoints of a selection.
kTextSelStart,
kTextSelEnd,
- // aria_col* and aria_row* attributes
+ // aria_col* and aria_row* attributes
kAriaColumnCount,
kAriaCellColumnIndex,
kAriaRowCount,
kAriaCellRowIndex,
- // Table attributes.
+ // Table attributes.
kTableRowCount,
kTableColumnCount,
kTableHeaderId,
- // Table row attributes.
+ // Table row attributes.
kTableRowIndex,
kTableRowHeaderId,
- // Table column attributes.
+ // Table column attributes.
kTableColumnIndex,
kTableColumnHeaderId,
- // Table cell attributes.
+ // Table cell attributes.
kTableCellColumnIndex,
kTableCellColumnSpan,
kTableCellRowIndex,
kTableCellRowSpan,
kSortDirection,
- // Tree control attributes.
+ // Tree control attributes.
kHierarchicalLevel,
- // What information was used to compute the object's name
- // (of type AXNameFrom).
+ // What information was used to compute the object's name
+ // (of type AXNameFrom).
kNameFrom,
- // What information was used to compute the object's description
- // (of type AXDescriptionFrom).
+ // What information was used to compute the object's description
+ // (of type AXDescriptionFrom).
kDescriptionFrom,
- // Relationships between this element and other elements.
+ // Relationships between this element and other elements.
kActivedescendantId,
kDetailsId,
kErrormessageId,
@@ -545,25 +549,25 @@
kPopupForId,
kPreviousOnLineId,
- // Input restriction, if any, such as readonly or disabled.
- // Of type AXRestriction, see below.
- // No value or enabled control or other object that is not disabled.
+ // Input restriction, if any, such as readonly or disabled.
+ // Of type AXRestriction, see below.
+ // No value or enabled control or other object that is not disabled.
kRestriction,
- // Position or Number of items in current set of listitems or treeitems
+ // Position or Number of items in current set of listitems or treeitems
kSetSize,
kPosInSet,
- // In the case of Role::kColorWell, specifies the selected color.
+ // In the case of Role::kColorWell, specifies the selected color.
kColorValue,
- // Indicates the element that represents the current item within a container
- // or set of related elements.
+ // Indicates the element that represents the current item within a container
+ // or set of related elements.
kAriaCurrentState,
- // Text attributes.
+ // Text attributes.
- // Foreground and background color in RGBA.
+ // Foreground and background color in RGBA.
kBackgroundColor,
kColor,
@@ -572,23 +576,23 @@
// Image annotation status, of type ImageAnnotationStatus.
kImageAnnotationStatus,
- // Indicates if a form control has invalid input or
- // if an element has an aria-invalid attribute.
+ // Indicates if a form control has invalid input or
+ // if an element has an aria-invalid attribute.
kInvalidState,
- // Of type AXCheckedState
+ // Of type AXCheckedState
kCheckedState,
// The list style type. Only available on list items.
kListStyle,
- // Specifies the direction of the text, e.g., right-to-left.
+ // Specifies the direction of the text, e.g., right-to-left.
kTextDirection,
- // Specifies the position of the text, e.g., subscript.
+ // Specifies the position of the text, e.g., subscript.
kTextPosition,
- // Bold, italic, underline, etc.
+ // Bold, italic, underline, etc.
kTextStyle,
// The overline text decoration style.
@@ -600,26 +604,26 @@
// The underline text decoration style.
kTextUnderlineStyle,
- // Focus traversal in views and Android.
+ // Focus traversal in views and Android.
kPreviousFocusId,
kNextFocusId,
};
enum FloatAttribute {
kNone,
- // Range attributes.
+ // Range attributes.
kValueForRange,
kMinValueForRange,
kMaxValueForRange,
kStepValueForRange,
- // Text attributes.
- // Font size is in pixels.
+ // Text attributes.
+ // Font size is in pixels.
kFontSize,
- // Font weight can take on any arbitrary numeric value. Increments of 100 in
- // range [0, 900] represent keywords such as light, normal, bold, etc. 0 is
- // the default.
+ // Font weight can take on any arbitrary numeric value. Increments of 100 in
+ // range [0, 900] represent keywords such as light, normal, bold, etc. 0 is
+ // the default.
kFontWeight,
};
@@ -633,35 +637,35 @@
// given attribute, while another tree source only uses two.
enum BoolAttribute {
kNone,
- // Generic busy state, does not have to be on a live region.
+ // Generic busy state, does not have to be on a live region.
kBusy,
- // The object is at the root of an editable field, such as a content
- // editable.
+ // The object is at the root of an editable field, such as a content
+ // editable.
kEditableRoot,
- // Live region attributes.
+ // Live region attributes.
kContainerLiveAtomic,
kContainerLiveBusy,
kLiveAtomic,
- // If a dialog box is marked as explicitly modal
+ // If a dialog box is marked as explicitly modal
kModal,
- // If this is set, all of the other fields in this struct should
- // be ignored and only the locations should change.
+ // If this is set, all of the other fields in this struct should
+ // be ignored and only the locations should change.
kUpdateLocationOnly,
- // Set on a canvas element if it has fallback content.
+ // Set on a canvas element if it has fallback content.
kCanvasHasFallback,
- // Indicates this node is scrollable (Android only).
+ // Indicates this node is scrollable (Android only).
kScrollable,
- // A hint to clients that the node is clickable.
+ // A hint to clients that the node is clickable.
kClickable,
- // Indicates that this node clips its children, i.e. may have
- // overflow: hidden or clip children by default.
+ // Indicates that this node clips its children, i.e. may have
+ // overflow: hidden or clip children by default.
kClipsChildren,
// Indicates whether this node is selected or unselected.
@@ -673,64 +677,64 @@
enum IntListAttribute {
kNone,
- // Ids of nodes that are children of this node logically, but are
- // not children of this node in the tree structure. As an example,
- // a table cell is a child of a row, and an 'indirect' child of a
- // column.
+ // Ids of nodes that are children of this node logically, but are
+ // not children of this node in the tree structure. As an example,
+ // a table cell is a child of a row, and an 'indirect' child of a
+ // column.
kIndirectChildIds,
- // Relationships between this element and other elements.
+ // Relationships between this element and other elements.
kControlsIds,
kDescribedbyIds,
kFlowtoIds,
kLabelledbyIds,
kRadioGroupIds,
- // For static text. These int lists must be the same size; they represent
- // the start and end character offset of each marker. Examples of markers
- // include spelling and grammar errors, and find-in-page matches.
+ // For static text. These int lists must be the same size; they represent
+ // the start and end character offset of each marker. Examples of markers
+ // include spelling and grammar errors, and find-in-page matches.
kMarkerTypes,
kMarkerStarts,
kMarkerEnds,
- // For inline text. This is the pixel position of the end of this
- // character within the bounding rectangle of this object, in the
- // direction given by StringAttribute::kTextDirection. For example,
- // for left-to-right text, the first offset is the right coordinate of
- // the first character within the object's bounds, the second offset
- // is the right coordinate of the second character, and so on.
+ // For inline text. This is the pixel position of the end of this
+ // character within the bounding rectangle of this object, in the
+ // direction given by StringAttribute::kTextDirection. For example,
+ // for left-to-right text, the first offset is the right coordinate of
+ // the first character within the object's bounds, the second offset
+ // is the right coordinate of the second character, and so on.
kCharacterOffsets,
- // Used for caching. Do not read directly. Use
- // |AXNode::GetOrComputeLineStartOffsets|
- // For all text fields and content editable roots: A list of the start
- // offsets of each line inside this object.
+ // Used for caching. Do not read directly. Use
+ // |AXNode::GetOrComputeLineStartOffsets|
+ // For all text fields and content editable roots: A list of the start
+ // offsets of each line inside this object.
kCachedLineStarts,
- // For inline text. These int lists must be the same size; they represent
- // the start and end character offset of each word within this text.
+ // For inline text. These int lists must be the same size; they represent
+ // the start and end character offset of each word within this text.
kWordStarts,
kWordEnds,
- // Used for an UI element to define custom actions for it. For example, a
- // list UI will allow a user to reorder items in the list by dragging the
- // items. Developer can expose those actions as custom actions. Currently
- // custom actions are used only in Android window.
+ // Used for an UI element to define custom actions for it. For example, a
+ // list UI will allow a user to reorder items in the list by dragging the
+ // items. Developer can expose those actions as custom actions. Currently
+ // custom actions are used only in Android window.
kCustomActionIds,
};
enum StringListAttribute {
kNone,
- // Descriptions for custom actions. This must be aligned with
- // custom_action_ids.
+ // Descriptions for custom actions. This must be aligned with
+ // custom_action_ids.
kCustomActionDescriptions,
};
- // TODO(dmazzoni, nektar): make this list not grow exponentially as new
- // MarkerTypes are added
+// TODO(dmazzoni, nektar): make this list not grow exponentially as new
+// MarkerTypes are added
enum MarkerType {
kNone,
- // Assignments are ignored by the parser, but are kept here for clarity.
+ // Assignments are ignored by the parser, but are kept here for clarity.
kSpelling = 1,
kGrammar = 2,
kSpellingGrammar = 3,
@@ -738,8 +742,8 @@
kSpellingTextMatch = 5,
kGrammarTextMatch = 6,
kSpellingGrammarTextMatch = 7,
- // DocumentMarker::MarkerType::Composition = 8 is ignored for accessibility
- // purposes
+ // DocumentMarker::MarkerType::Composition = 8 is ignored for accessibility
+ // purposes
kActiveSuggestion = 16,
kSpellingActiveSuggestion = 17,
kGrammarActiveSuggestion = 18,
@@ -756,7 +760,7 @@
kSpellingTextMatchSuggestion = 37,
kGrammarTextMatchSuggestion = 38,
kSpellingGrammarTextMatchSuggestion = 39,
- // We again skip over DocumentMarker::MarkerType::Composition = 8 here
+ // We again skip over DocumentMarker::MarkerType::Composition = 8 here
kActiveSuggestionSuggestion = 48,
kSpellingActiveSuggestionSuggestion = 49,
kGrammarActiveSuggestionSuggestion = 50,
@@ -791,8 +795,8 @@
kSuperscript,
};
- // A Java counterpart will be generated for this enum.
- // GENERATED_JAVA_ENUM_PACKAGE: org.chromium.ui.accessibility
+// A Java counterpart will be generated for this enum.
+// GENERATED_JAVA_ENUM_PACKAGE: org.chromium.ui.accessibility
enum TextStyle {
kBold,
kItalic,
@@ -843,10 +847,10 @@
kOther,
};
- // Input restriction associated with an object.
- // No value for a control means it is enabled.
- // Use read_only for a textbox that allows focus/selection but not input.
- // Use disabled for a control or group of controls that disallows input.
+// Input restriction associated with an object.
+// No value for a control means it is enabled.
+// Use read_only for a textbox that allows focus/selection but not input.
+// Use disabled for a control or group of controls that disallows input.
enum Restriction {
kNone,
kReadOnly,
@@ -896,7 +900,7 @@
kAction,
};
- // Touch gestures on Chrome OS.
+// Touch gestures on Chrome OS.
enum Gesture {
kNone,
kClick,
@@ -927,19 +931,19 @@
kUpstream,
};
- // Compares two nodes in an accessibility tree in pre-order traversal.
+// Compares two nodes in an accessibility tree in pre-order traversal.
enum TreeOrder {
kNone,
- // Not in the same tree, or other error.
+ // Not in the same tree, or other error.
kUndefined,
- // First node is before the second one.
+ // First node is before the second one.
kBefore,
- // Nodes are the same.
+ // Nodes are the same.
kEqual,
- // First node is after the second one.
+ // First node is after the second one.
kAfter,
};
@@ -950,32 +954,32 @@
};
enum ImageAnnotationStatus {
- // Not an image, or image annotation feature not enabled.
+ // Not an image, or image annotation feature not enabled.
kNone,
- // Not loaded yet, already labeled by the author, or not eligible
- // due to size, type, etc.
+ // Not loaded yet, already labeled by the author, or not eligible
+ // due to size, type, etc.
kIneligibleForAnnotation,
- // Eligible to be automatically annotated if the user requests it.
+ // Eligible to be automatically annotated if the user requests it.
kEligibleForAnnotation,
- // An annotation has been requested but has not been received yet.
+ // An annotation has been requested but has not been received yet.
kAnnotationPending,
- // An annotation has been provided and kImageAnnotation contains the
- // annotation text.
+ // An annotation has been provided and kImageAnnotation contains the
+ // annotation text.
kAnnotationSucceeded,
- // The annotation request was processed successfully, but it was not
- // possible to come up with an annotation for this image.
+ // The annotation request was processed successfully, but it was not
+ // possible to come up with an annotation for this image.
kAnnotationEmpty,
- // The image is classified as adult content and no annotation will
- // be generated.
+ // The image is classified as adult content and no annotation will
+ // be generated.
kAnnotationAdult,
- // The annotation process failed, e.g. unable to contact the server,
- // request timed out, etc.
+ // The annotation process failed, e.g. unable to contact the server,
+ // request timed out, etc.
kAnnotationProcessFailed,
};
diff --git a/ui/accessibility/ax_node_data.cc b/ui/accessibility/ax_node_data.cc
index 6c9e513..05395c0 100644
--- a/ui/accessibility/ax_node_data.cc
+++ b/ui/accessibility/ax_node_data.cc
@@ -638,6 +638,7 @@
case ax::mojom::Action::kGetImageData:
case ax::mojom::Action::kHitTest:
case ax::mojom::Action::kIncrement:
+ case ax::mojom::Action::kInternalInvalidateTree:
case ax::mojom::Action::kLoadInlineTextBoxes:
case ax::mojom::Action::kReplaceSelectedText:
case ax::mojom::Action::kScrollToMakeVisible: