Home | History | Annotate | Download | only in common
      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