naiveproxy/components/arc/common/accessibility_helper.mojom
2018-01-28 13:32:06 -05:00

322 lines
8.7 KiB
Plaintext

// 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: 10
module arc.mojom;
import "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.
};
// 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
};
// 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
};
// 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
};
// These fields are taken from List<String> instance members of
// AccessibilityNodeInfo.
[Extensible]
enum AccessibilityStringListProperty {
CUSTOM_ACTION_DESCRIPTIONS
};
// 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;
};
// 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;
};
// 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
};
// 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. While this window_id matches
// with AccessibilityNodeInfo.getWindowId now, do not expect that it always
// matches with it.
[MinVersion=6] int32 window_id;
// Task associated with this event (usually the front task when this event
// gets dispatched).
[MinVersion=8] int32 task_id;
};
// 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;
};
// Next method ID: 2
interface AccessibilityHelperHost {
OnAccessibilityEventDeprecated@0(AccessibilityEventType event_type,
AccessibilityNodeInfoData? event_source);
// OnAccessibilityEvent is called when a converted Android accessibility event
// is sent from Android.
OnAccessibilityEvent@1(AccessibilityEventData event_data);
};
// Next method ID: 8
interface AccessibilityHelperInstance {
// DEPRECATED: Please use Init@7 instead.
InitDeprecated@0(AccessibilityHelperHost host);
// Establishes full-duplex communication with the host.
[MinVersion=9] Init@7(AccessibilityHelperHost host) => ();
PerformActionDeprecated@1(int32 id, AccessibilityActionType action);
// Set a filter on the event types received.
SetFilter@2(AccessibilityFilterType filter_type);
[MinVersion=3] PerformActionDeprecated2@3(AccessibilityActionData action_data);
// Perform an action on a node requested by a Chrome client.
[MinVersion=4] PerformAction@4(AccessibilityActionData action_data)
=> (bool result);
// Sets the package to use ChromeVox (true) or TalkBack (false). Returns true
// if the request was processed.
[MinVersion=7] SetNativeChromeVoxArcSupportDeprecated@5(
string package_name, bool enabled) => (bool processed);
// Sets the focused window's package to use ChromeVox (true) or TalkBack
// (false).
[MinVersion=8] SetNativeChromeVoxArcSupportForFocusedWindow@6(
bool enabled) => (bool processed);
};