blob: e17e44c4b5ea4b03fc482d9e6b48deec7eddb75a [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Next MinVersion: 16
module arc.mojom;
import "components/arc/common/gfx.mojom";
// For future maintainers, each of the below enums were hand picked
// from their equivalents in the Android source. Keep them in the
// order given below and add as needed. The initial order matches the
// order they appear in source files.
//
// If not explicitly called out, the structs and enums below come from:
// https://developer.android.com/reference/android/view/accessibility/AccessibilityNodeInfo.html
// AccessibilityEventType lists the possible accessibility events on Android.
// https://developer.android.com/reference/android/view/accessibility/AccessibilityEvent.html
[Extensible]
enum AccessibilityEventType {
VIEW_FOCUSED,
VIEW_CLICKED,
VIEW_LONG_CLICKED,
VIEW_SELECTED,
VIEW_TEXT_CHANGED,
WINDOW_STATE_CHANGED,
NOTIFICATION_STATE_CHANGED,
VIEW_HOVER_ENTER,
VIEW_HOVER_EXIT,
TOUCH_EXPLORATION_GESTURE_START,
TOUCH_EXPLORATION_GESTURE_END,
WINDOW_CONTENT_CHANGED,
VIEW_SCROLLED,
VIEW_TEXT_SELECTION_CHANGED,
ANNOUNCEMENT,
VIEW_ACCESSIBILITY_FOCUSED,
VIEW_ACCESSIBILITY_FOCUS_CLEARED,
VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY,
GESTURE_DETECTION_START,
GESTURE_DETECTION_END,
TOUCH_INTERACTION_START,
TOUCH_INTERACTION_END,
WINDOWS_CHANGED,
VIEW_CONTEXT_CLICKED,
ASSIST_READING_CONTEXT,
};
// Possible actions that can be performed on an AccessibilityNodeInfo.
[Extensible]
enum AccessibilityActionType {
FOCUS,
CLEAR_FOCUS,
SELECT,
CLEAR_SELECTION,
CLICK,
LONG_CLICK,
ACCESSIBILITY_FOCUS,
CLEAR_ACCESSIBILITY_FOCUS,
NEXT_AT_MOVEMENT_GRANULARITY, // unused
PREVIOUS_AT_MOVEMENT_GRANULARITY, // unused
NEXT_HTML_ELEMENT, // unused
PREVIOUS_HTML_ELEMENT, // unused
SCROLL_FORWARD,
SCROLL_BACKWARD,
COPY,
PASTE,
CUT,
SET_SELECTION,
EXPAND,
COLLAPSE,
DISMISS,
SET_TEXT,
CONTEXT_CLICK,
SCROLL_DOWN,
SCROLL_LEFT,
SCROLL_RIGHT,
SCROLL_TO_POSITION,
SCROLL_UP,
SET_PROGRESS,
SHOW_ON_SCREEN,
CUSTOM_ACTION, // Not a standard action.
GET_TEXT_LOCATION, // Not a standard action.
};
// Possible boolean properties set on an AccessibilityNodeInfo.
// The enum values appear in the same order as they do within
// AccessibilityNodeInfo.java.
[Extensible]
enum AccessibilityBooleanProperty {
CHECKABLE,
CHECKED,
FOCUSABLE,
FOCUSED,
SELECTED,
CLICKABLE,
LONG_CLICKABLE,
ENABLED,
PASSWORD,
SCROLLABLE,
ACCESSIBILITY_FOCUSED,
VISIBLE_TO_USER,
EDITABLE,
OPENS_POPUP,
DISMISSABLE,
MULTI_LINE,
CONTENT_INVALID,
CONTEXT_CLICKABLE,
IMPORTANCE,
SCREEN_READER_FOCUSABLE,
SHOWING_HINT_TEXT,
HEADING,
SUPPORTS_TEXT_LOCATION,
};
// These fields are taken from string instance members of
// AccessibilityNodeInfo.
[Extensible]
enum AccessibilityStringProperty {
PACKAGE_NAME,
CLASS_NAME,
TEXT,
CONTENT_DESCRIPTION,
VIEW_ID_RESOURCE_NAME,
CHROME_ROLE, // Chrome only
ROLE_DESCRIPTION, // Chrome only
TOOLTIP,
PANE_TITLE,
HINT_TEXT
};
// These fields are taken from int instance members of
// AccessibilityNodeInfo.
[Extensible]
enum AccessibilityIntProperty {
LABEL_FOR,
LABELED_BY,
TRAVERSAL_BEFORE,
TRAVERSAL_AFTER,
MAX_TEXT_LENGTH,
TEXT_SELECTION_START,
TEXT_SELECTION_END,
INPUT_TYPE,
LIVE_REGION
};
// These fields are taken from List<int> instance members of
// AccessibilityNodeInfo.
[Extensible]
enum AccessibilityIntListProperty {
CHILD_NODE_IDS,
CUSTOM_ACTION_IDS,
STANDARD_ACTION_IDS
};
// These fields are taken from List<String> instance members of
// AccessibilityNodeInfo.
[Extensible]
enum AccessibilityStringListProperty {
CUSTOM_ACTION_DESCRIPTIONS
};
// These fields are taken from boolean properties of
// AccessibilityWindowInfo.
[Extensible]
enum AccessibilityWindowBooleanProperty {
ACCESSIBILITY_FOCUSED,
FOCUSED,
IN_PICTURE_IN_PICTURE_MODE,
WINDOW_ACTIVE,
};
// These fields are taken from int attributes of
// AccessibilityWindowInfo.
[Extensible]
enum AccessibilityWindowIntProperty {
ANCHOR_NODE_ID,
LAYER_ORDER,
PARENT_WINDOW_ID,
};
// These fields are taken from String attributes of
// AccessibilityWindowInfo.
[Extensible]
enum AccessibilityWindowStringProperty {
TITLE,
};
// These fields are taken from List<Integer> instance members of
// AccessibilityWindowInfo.
[Extensible]
enum AccessibilityWindowIntListProperty {
CHILD_WINDOW_IDS,
};
// This type is a subset of spans available under android.text.style.
[Extensible]
enum SpanType {
URL,
CLICKABLE
};
// Groups data about a Spannable.
struct SpanEntry {
int32 start;
int32 end;
SpanType span_type;
};
// These fields are taken from AccessibilityNodeInfo.CollectionItemInfo.
[Extensible]
enum AccessibilitySelectionMode {
NONE,
SINGLE,
MULTIPLE
};
// These fields are taken from AccessibilityNodeInfo.CollectionInfo.
struct AccessibilityCollectionInfoData {
int32 row_count;
int32 column_count;
bool is_hierarchical;
AccessibilitySelectionMode selection_mode;
};
// These fields are taken from AccessibilityNodeInfo.CollectionItemInfo.
struct AccessibilityCollectionItemInfoData {
int32 row_index;
int32 column_index;
int32 row_span;
int32 column_span;
bool is_heading;
bool is_selected;
};
// These fields are taken from AccessibilityNodeInfo.RangeInfo.
[Extensible]
enum AccessibilityRangeType {
INT,
FLOAT,
PERCENT
};
// These fields are taken from AccessibilityNodeInfo.RangeInfo.
struct AccessibilityRangeInfoData {
AccessibilityRangeType range_type;
float min;
float max;
float current;
};
// These fields are taken from AccessibilityWindowInfo's window types.
[Extensible]
enum AccessibilityWindowType {
TYPE_ACCESSIBILITY_OVERLAY,
TYPE_APPLICATION,
TYPE_INPUT_METHOD,
TYPE_SPLIT_SCREEN_DIVIDER,
TYPE_SYSTEM,
};
// AccessibilityNodeInfoData is a struct to contain info of
// AccessibilityNodeInfo in Android.
struct AccessibilityNodeInfoData {
Rect bounds_in_screen;
[MinVersion=1] int32 id;
[MinVersion=1] map<AccessibilityBooleanProperty, bool>? boolean_properties;
[MinVersion=1] map<AccessibilityStringProperty, string>? string_properties;
[MinVersion=1] map<AccessibilityIntProperty, int32>? int_properties;
[MinVersion=1]
map<AccessibilityIntListProperty, array<int32>>? int_list_properties;
[MinVersion=3] map<AccessibilityStringListProperty, array<string>>?
string_list_properties;
[MinVersion=5] map<AccessibilityStringProperty, array<SpanEntry>>?
spannable_string_properties;
[MinVersion=5] AccessibilityCollectionInfoData? collection_info;
[MinVersion=5] AccessibilityCollectionItemInfoData? collection_item_info;
[MinVersion=5] AccessibilityRangeInfoData? range_info;
[MinVersion=12] int32 window_id;
};
// AccessibilityWindowInfoData is a struct to contain info about
// AccessibilityWindowInfo in Android.
struct AccessibilityWindowInfoData {
int32 window_id;
int32 root_node_id;
Rect bounds_in_screen;
AccessibilityWindowType window_type;
map<AccessibilityWindowBooleanProperty, bool>? boolean_properties;
map<AccessibilityWindowStringProperty, string>? string_properties;
map<AccessibilityWindowIntProperty, int32>? int_properties;
map<AccessibilityWindowIntListProperty, array<int32>>? int_list_properties;
};
// Filters the event type (and implicitly the data) sent by the ARC
// accessibility service.
[Extensible]
enum AccessibilityFilterType {
// No events will be sent.
OFF,
// Only send focus events along with the source focus node.
FOCUS,
// Send a complete tree from the event source's root for every event.
ALL,
// Send complete subtrees for root nodes with whitelisted package names.
[MinVersion=2] WHITELISTED_PACKAGE_NAME_DEPRECATED
};
[Extensible]
enum AccessibilityNotificationStateType {
// Surface for a notification is created. OnNotificationStateChanged of
// SURFACE_CREATED for a notification must be called before
// OnAccessibilityEvent of WINDOW_STATE_CHANGED for it is called.
SURFACE_CREATED,
// Surface for a notification is removed.
SURFACE_REMOVED,
};
// AccessibilityEventData is a struct to contain info of
// AccessibilityEvent in Android.
// https://developer.android.com/reference/android/view/accessibility/AccessibilityEvent.html
struct AccessibilityEventData {
AccessibilityEventType event_type;
int32 source_id;
array<AccessibilityNodeInfoData> node_data;
// notification_key is set only for an event on an Android notification.
[MinVersion=6] string? notification_key;
// window_id where this event is dispatched for. This does not match
// AccessibilityWindowInfo window ids, instead it is a mapping to from
// unique IDs in an Android task to nodes in Chrome.
[MinVersion=6] int32 window_id;
// Task associated with this event (usually the front task when this event
// gets dispatched).
[MinVersion=8] int32 task_id;
// The window data for the tree. This may not be populated if
// only one node needs to be returned, for example if the event
// filter type is AccessibilityFilterType.FOCUS.
[MinVersion=12] array<AccessibilityWindowInfoData>? window_data;
// True if this event has happened on
// AccessibilityWindowInfo.TYPE_INPUT_METHOD.
[MinVersion=14] bool is_input_method_window;
// Retrieved from AccessibilityRecord.getText().
[MinVersion=15] array<string>? eventText;
};
// AccessibilityActionData is a struct to contain info of AccessibilityAction in
// Android.
// https://developer.android.com/reference/android/view/accessibility/AccessibilityNodeInfo.AccessibilityAction.html
struct AccessibilityActionData {
int32 node_id;
AccessibilityActionType action_type;
// custom_action_id must be set if action_type is CUSTOM_ACTION.
int32 custom_action_id;
// window_id where the action is performed on.
[MinVersion=6] int32 window_id;
// Parameters specifying indicies to get text location of node
// in Android.
[MinVersion=13] int32 start_index;
[MinVersion=13] int32 end_index;
};
// Interface for Android communicating to Chrome.
// Deprecated method IDs: 0
// Next method ID: 3
interface AccessibilityHelperHost {
// OnAccessibilityEvent is called when a converted Android accessibility event
// is sent from Android.
OnAccessibilityEvent@1(AccessibilityEventData event_data);
// OnNotificationStateChanged is called when state of a notification is
// changed, e.g. surface for a notification is created.
[MinVersion=10] OnNotificationStateChanged@2(
string notification_key, AccessibilityNotificationStateType state);
};
// Interface for communicating to Android.
// Deprecated method IDs: 0, 1, 3, 5
// Next method ID: 10
interface AccessibilityHelperInstance {
// Establishes full-duplex communication with the host.
[MinVersion=9] Init@7(AccessibilityHelperHost host) => ();
// Set a filter on the event types received.
SetFilter@2(AccessibilityFilterType filter_type);
// Perform an action on a node requested by a Chrome client.
[MinVersion=4] PerformAction@4(AccessibilityActionData action_data)
=> (bool result);
// Sets the focused window's package to use ChromeVox (true) or TalkBack
// (false).
[MinVersion=8] SetNativeChromeVoxArcSupportForFocusedWindow@6(
bool enabled) => (bool processed);
// Requests the service to enable or disable Explore By Touch.
[MinVersion=11] SetExploreByTouchEnabled@8(bool enabled);
// Refresh the current node with extra data.
// Returns Rect specifying location, or null if textLocation is not available.
[MinVersion=13] RefreshWithExtraData@9(AccessibilityActionData refresh_data)
=> (Rect? text_location);
};