1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5// IPC messages for accessibility.
6// Multiply-included message file, hence no include guard.
7
8#include "base/basictypes.h"
9#include "content/common/content_export.h"
10#include "content/common/view_message_enums.h"
11#include "content/public/common/common_param_traits.h"
12#include "ipc/ipc_message_macros.h"
13#include "ipc/ipc_message_utils.h"
14#include "ipc/ipc_param_traits.h"
15#include "ipc/param_traits_macros.h"
16#include "third_party/WebKit/public/web/WebAXEnums.h"
17#include "ui/accessibility/ax_node_data.h"
18#include "ui/accessibility/ax_tree_update.h"
19
20// Singly-included section for custom types.
21#ifndef CONTENT_COMMON_ACCESSIBILITY_MESSAGES_H_
22#define CONTENT_COMMON_ACCESSIBILITY_MESSAGES_H_
23
24typedef std::map<int32, int> FrameIDMap;
25
26#endif  // CONTENT_COMMON_ACCESSIBILITY_MESSAGES_H_
27
28#undef IPC_MESSAGE_EXPORT
29#define IPC_MESSAGE_EXPORT CONTENT_EXPORT
30
31#define IPC_MESSAGE_START AccessibilityMsgStart
32
33IPC_ENUM_TRAITS_MAX_VALUE(ui::AXEvent, ui::AX_EVENT_LAST)
34IPC_ENUM_TRAITS_MAX_VALUE(ui::AXRole, ui::AX_ROLE_LAST)
35
36IPC_ENUM_TRAITS_MAX_VALUE(ui::AXBoolAttribute, ui::AX_BOOL_ATTRIBUTE_LAST)
37IPC_ENUM_TRAITS_MAX_VALUE(ui::AXFloatAttribute, ui::AX_FLOAT_ATTRIBUTE_LAST)
38IPC_ENUM_TRAITS_MAX_VALUE(ui::AXIntAttribute, ui::AX_INT_ATTRIBUTE_LAST)
39IPC_ENUM_TRAITS_MAX_VALUE(ui::AXIntListAttribute,
40                          ui::AX_INT_LIST_ATTRIBUTE_LAST)
41IPC_ENUM_TRAITS_MAX_VALUE(ui::AXStringAttribute, ui::AX_STRING_ATTRIBUTE_LAST)
42
43IPC_STRUCT_TRAITS_BEGIN(ui::AXNodeData)
44  IPC_STRUCT_TRAITS_MEMBER(id)
45  IPC_STRUCT_TRAITS_MEMBER(role)
46  IPC_STRUCT_TRAITS_MEMBER(state)
47  IPC_STRUCT_TRAITS_MEMBER(location)
48  IPC_STRUCT_TRAITS_MEMBER(string_attributes)
49  IPC_STRUCT_TRAITS_MEMBER(int_attributes)
50  IPC_STRUCT_TRAITS_MEMBER(float_attributes)
51  IPC_STRUCT_TRAITS_MEMBER(bool_attributes)
52  IPC_STRUCT_TRAITS_MEMBER(intlist_attributes)
53  IPC_STRUCT_TRAITS_MEMBER(html_attributes)
54  IPC_STRUCT_TRAITS_MEMBER(child_ids)
55IPC_STRUCT_TRAITS_END()
56
57IPC_STRUCT_TRAITS_BEGIN(ui::AXTreeUpdate)
58  IPC_STRUCT_TRAITS_MEMBER(node_id_to_clear)
59  IPC_STRUCT_TRAITS_MEMBER(nodes)
60IPC_STRUCT_TRAITS_END()
61
62IPC_STRUCT_BEGIN(AccessibilityHostMsg_EventParams)
63  // The tree update.
64  IPC_STRUCT_MEMBER(ui::AXTreeUpdate, update)
65
66  // Mapping from node id to routing id of its child frame - either the
67  // routing id of a RenderFrame or a RenderFrameProxy for an out-of-process
68  // iframe.
69  IPC_STRUCT_MEMBER(FrameIDMap, node_to_frame_routing_id_map)
70
71  // Mapping from node id to the browser plugin instance id of a child
72  // browser plugin.
73  IPC_STRUCT_MEMBER(FrameIDMap, node_to_browser_plugin_instance_id_map)
74
75  // Type of event.
76  IPC_STRUCT_MEMBER(ui::AXEvent, event_type)
77
78  // ID of the node that the event applies to.
79  IPC_STRUCT_MEMBER(int, id)
80IPC_STRUCT_END()
81
82IPC_STRUCT_BEGIN(AccessibilityHostMsg_LocationChangeParams)
83  // ID of the object whose location is changing.
84  IPC_STRUCT_MEMBER(int, id)
85
86  // The object's new location, in frame-relative coordinates (same
87  // as the coordinates in AccessibilityNodeData).
88  IPC_STRUCT_MEMBER(gfx::Rect, new_location)
89IPC_STRUCT_END()
90
91// Messages sent from the browser to the renderer.
92
93// Relay a request from assistive technology to set focus to a given node.
94IPC_MESSAGE_ROUTED1(AccessibilityMsg_SetFocus,
95                    int /* object id */)
96
97// Relay a request from assistive technology to perform the default action
98// on a given node.
99IPC_MESSAGE_ROUTED1(AccessibilityMsg_DoDefaultAction,
100                    int /* object id */)
101
102// Relay a request from assistive technology to make a given object
103// visible by scrolling as many scrollable containers as possible.
104// In addition, if it's not possible to make the entire object visible,
105// scroll so that the |subfocus| rect is visible at least. The subfocus
106// rect is in local coordinates of the object itself.
107IPC_MESSAGE_ROUTED2(AccessibilityMsg_ScrollToMakeVisible,
108                    int /* object id */,
109                    gfx::Rect /* subfocus */)
110
111// Relay a request from assistive technology to move a given object
112// to a specific location, in the WebContents area coordinate space, i.e.
113// (0, 0) is the top-left corner of the WebContents.
114IPC_MESSAGE_ROUTED2(AccessibilityMsg_ScrollToPoint,
115                    int /* object id */,
116                    gfx::Point /* new location */)
117
118// Relay a request from assistive technology to set the cursor or
119// selection within an editable text element.
120IPC_MESSAGE_ROUTED3(AccessibilityMsg_SetTextSelection,
121                    int /* object id */,
122                    int /* New start offset */,
123                    int /* New end offset */)
124
125// Determine the accessibility object under a given point and reply with
126// a AccessibilityHostMsg_HitTestResult with the same id.
127IPC_MESSAGE_ROUTED1(AccessibilityMsg_HitTest,
128                    gfx::Point /* location to test */)
129
130// Tells the render view that a AccessibilityHostMsg_Events
131// message was processed and it can send addition events.
132IPC_MESSAGE_ROUTED0(AccessibilityMsg_Events_ACK)
133
134// Tell the renderer to reset and send a new accessibility tree from
135// scratch because the browser is out of sync. It passes a sequential
136// reset token. This should be rare, and if we need reset the same renderer
137// too many times we just kill it. After sending a reset, the browser ignores
138// incoming accessibility IPCs until it receives one with the matching reset
139// token. Conversely, it ignores IPCs with a reset token if it was not
140// expecting a reset.
141IPC_MESSAGE_ROUTED1(AccessibilityMsg_Reset,
142                    int /* reset token */);
143
144// Kill the renderer because we got a fatal error in the accessibility tree
145// and we've already reset too many times.
146IPC_MESSAGE_ROUTED0(AccessibilityMsg_FatalError)
147
148// Messages sent from the renderer to the browser.
149
150// Sent to notify the browser about renderer accessibility events.
151// The browser responds with a AccessibilityMsg_Events_ACK.
152// The second parameter, reset_token, is set if this IPC was sent in response
153// to a reset request from the browser. When the browser requests a reset,
154// it ignores incoming IPCs until it sees one with the correct reset token.
155// Any other time, it ignores IPCs with a reset token.
156IPC_MESSAGE_ROUTED2(
157    AccessibilityHostMsg_Events,
158    std::vector<AccessibilityHostMsg_EventParams> /* events */,
159    int /* reset_token */)
160
161// Sent to update the browser of the location of accessibility objects.
162IPC_MESSAGE_ROUTED1(
163    AccessibilityHostMsg_LocationChanges,
164    std::vector<AccessibilityHostMsg_LocationChangeParams>)
165