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 24 typedef 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 33 IPC_ENUM_TRAITS_MAX_VALUE(ui::AXEvent, ui::AX_EVENT_LAST) 34 IPC_ENUM_TRAITS_MAX_VALUE(ui::AXRole, ui::AX_ROLE_LAST) 35 36 IPC_ENUM_TRAITS_MAX_VALUE(ui::AXBoolAttribute, ui::AX_BOOL_ATTRIBUTE_LAST) 37 IPC_ENUM_TRAITS_MAX_VALUE(ui::AXFloatAttribute, ui::AX_FLOAT_ATTRIBUTE_LAST) 38 IPC_ENUM_TRAITS_MAX_VALUE(ui::AXIntAttribute, ui::AX_INT_ATTRIBUTE_LAST) 39 IPC_ENUM_TRAITS_MAX_VALUE(ui::AXIntListAttribute, 40 ui::AX_INT_LIST_ATTRIBUTE_LAST) 41 IPC_ENUM_TRAITS_MAX_VALUE(ui::AXStringAttribute, ui::AX_STRING_ATTRIBUTE_LAST) 42 43 IPC_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) 55 IPC_STRUCT_TRAITS_END() 56 57 IPC_STRUCT_TRAITS_BEGIN(ui::AXTreeUpdate) 58 IPC_STRUCT_TRAITS_MEMBER(node_id_to_clear) 59 IPC_STRUCT_TRAITS_MEMBER(nodes) 60 IPC_STRUCT_TRAITS_END() 61 62 IPC_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) 80 IPC_STRUCT_END() 81 82 IPC_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) 89 IPC_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. 94 IPC_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. 99 IPC_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. 107 IPC_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. 114 IPC_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. 120 IPC_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. 127 IPC_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. 132 IPC_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. 141 IPC_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. 146 IPC_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. 156 IPC_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. 162 IPC_MESSAGE_ROUTED1( 163 AccessibilityHostMsg_LocationChanges, 164 std::vector<AccessibilityHostMsg_LocationChangeParams>) 165