summaryrefslogtreecommitdiffstats
path: root/accessible/ipc/other/PDocAccessible.ipdl
blob: 9745ddbd6d99bff597047ed5ed0776c033b96514 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

include protocol PBrowser;
include protocol PDocAccessiblePlatformExt;

include DocAccessibleTypes;

include "mozilla/GfxMessageUtils.h";

using mozilla::LayoutDeviceIntRect from "Units.h";
using mozilla::LayoutDeviceIntPoint from "Units.h";
using mozilla::LayoutDeviceIntSize from "Units.h";
using mozilla::a11y::role from "mozilla/a11y/IPCTypes.h";
using mozilla::a11y::AccType from "mozilla/a11y/IPCTypes.h";
using mozilla::a11y::AccGenericType from "mozilla/a11y/IPCTypes.h";
[RefCounted] using mozilla::a11y::AccAttributes from "mozilla/a11y/IPCTypes.h";
using mozilla::a11y::CacheUpdateType from "mozilla/a11y/IPCTypes.h";
using mozilla::gfx::Matrix4x4 from "mozilla/gfx/Matrix.h";

namespace mozilla {
namespace a11y {

struct AccessibleData
{
  uint64_t ID;
  role Role;
  uint64_t ParentID;
  uint32_t IndexInParent;
  AccType Type;
  AccGenericType GenericTypes;
  uint8_t RoleMapEntryIndex;
  nullable AccAttributes CacheFields;
};

union OriginDocument
{
  PDocAccessible;
};

struct RelationTargets
{
  uint32_t Type;
  uint64_t[] Targets;
};

struct TextRangeData
{
  uint64_t StartID;
  uint64_t EndID;
  int32_t StartOffset;
  int32_t EndOffset;
};

[ManualDealloc, NestedUpTo=inside_sync, ChildImpl=virtual, ParentImpl=virtual]
sync protocol PDocAccessible
{
  manager PBrowser;
  manages PDocAccessiblePlatformExt;

parent:
  async PDocAccessiblePlatformExt();
  async Shutdown();

  /*
   * Notify the parent process the document in the child process is firing an
   * event.
   */
  async Event(uint64_t aID, uint32_t type);
  async ShowEvent(AccessibleData[] aNewTree, bool aEventSuppressed,
                  bool aComplete, bool aFromuser);
  async HideEvent(uint64_t aRootID, bool aFromUser);
  async StateChangeEvent(uint64_t aID, uint64_t aState, bool aEnabled);
  async CaretMoveEvent(uint64_t aID, int32_t aOffset,
                       bool aIsSelectionCollapsed, bool aIsAtEndOfLine,
                       int32_t aGranularity);
  async TextChangeEvent(uint64_t aID, nsString aStr, int32_t aStart, uint32_t aLen,
                        bool aIsInsert, bool aFromUser);
  async SelectionEvent(uint64_t aID, uint64_t aWidgetID, uint32_t aType);
  async RoleChangedEvent(role aRole, uint8_t aRoleMapEntryIndex);
  async VirtualCursorChangeEvent(uint64_t aID,
                                 uint64_t aOldPosition,
                                 int32_t aOldStartOffset, int32_t aOldEndOffset,
                                 uint64_t aPosition,
                                 int32_t aStartOffset, int32_t aEndOffset,
                                 int16_t aReason, int16_t aBoundaryType,
                                 bool aFromUservcEvent);
  async ScrollingEvent(uint64_t aID, uint64_t aType,
                       uint32_t aScrollX, uint32_t aScrollY,
                       uint32_t aMaxScrollX, uint32_t aMaxScrollY);
  async AnnouncementEvent(uint64_t aID,
                          nsString aAnnouncement,
                          uint16_t aPriority);
  async TextSelectionChangeEvent(uint64_t aID, TextRangeData[] aSelection);

  /*
   * Tell the parent document to bind the existing document as a new child
   * document.
   */
  async BindChildDoc(PDocAccessible aChildDoc, uint64_t aID);

  /*
   * Cache The World
   */
  async Cache(CacheUpdateType aUpdateType, CacheData[] aData);

  /*
   * Lists of accessibles that either gained or lost a selected state.
   */
  async SelectedAccessiblesChanged(uint64_t[] aSelectedIDs, uint64_t[] aUnselectedIDs);

  /*
   * Tell the parent process that the given Accessibles are about to be moved
   * via subsequent hide and show events.
   */
  async AccessiblesWillMove(uint64_t[] aIDs);

child:
  async __delete__();

  /*
   * Called as a result of focus shifting from chrome to content
   * elements through keyboard navigation.
   */
  async RestoreFocus();

  // LocalAccessible
  async ScrollTo(uint64_t aID, uint32_t aScrollType);
  async ScrollToPoint(uint64_t aID, uint32_t aScrollType, int32_t aX,
                      int32_t aY);
  async Announce(uint64_t aID, nsString aAnnouncement, uint16_t aPriority);

  // AccessibleText

  async SetCaretOffset(uint64_t aID, int32_t aOffset);

   /*
   * Text selection setters. The sync ones will be ultimately replaced
   * with the async ones below.
   */
  [Nested=inside_sync] sync AddToSelection(uint64_t aID, int32_t aStartOffset, int32_t aEndOffset)
    returns(bool aSucceeded);

  async SetTextSelection(uint64_t aStartID, int32_t aStartOffset,
                     uint64_t aEndID, int32_t aEndOffset,
                     int32_t aSelectionNum);
  async RemoveTextSelection(uint64_t aID, int32_t aSelectionNum);

  async ScrollTextLeafRangeIntoView(uint64_t aStartID, int32_t aStartOffset,
                                    uint64_t aEndID, int32_t aEndOffset,
                                    uint32_t aScrollType);
  async ScrollSubstringToPoint(uint64_t aID,
                               int32_t aStartOffset,
                               int32_t aEndOffset,
                               uint32_t aCoordinateType,
                               int32_t aX, int32_t aY);

  async ReplaceText(uint64_t aID, nsString aText);
  async InsertText(uint64_t aID, nsString aText, int32_t aPosition);
  async CopyText(uint64_t aID, int32_t aStartPos, int32_t aEndPos);
  async CutText(uint64_t aID, int32_t aStartPos, int32_t aEndPos);
  async DeleteText(uint64_t aID, int32_t aStartPos, int32_t aEndPos);
  async PasteText(uint64_t aID, int32_t aPosition);

  async TakeSelection(uint64_t aID);
  async SetSelected(uint64_t aID, bool aSelected);

  async DoActionAsync(uint64_t aID, uint8_t aIndex);

  async SetCurValue(uint64_t aID, double aValue);

  async TakeFocus(uint64_t aID);

  /*
   * Verify the cache. Used for testing purposes.
   */
  async VerifyCache(uint64_t aID, uint64_t aCacheDomain, nullable AccAttributes aFields);

};

}
}