1/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2/* vim: set ts=2 et sw=2 tw=80: */
3/* This Source Code Form is subject to the terms of the Mozilla Public
4 * License, v. 2.0. If a copy of the MPL was not distributed with this
5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6
7include protocol PFileDescriptorSet;
8include protocol PBrowser;
9include protocol PDocAccessiblePlatformExt;
10
11include "mozilla/GfxMessageUtils.h";
12
13using nsIntRect from "nsRect.h";
14using mozilla::a11y::role from "mozilla/a11y/IPCTypes.h";
15using mozilla::a11y::AccType from "mozilla/a11y/IPCTypes.h";
16using mozilla::a11y::AccGenericType from "mozilla/a11y/IPCTypes.h";
17[RefCounted] using mozilla::a11y::AccAttributes from "mozilla/a11y/IPCTypes.h";
18using mozilla::gfx::IntSize from "mozilla/gfx/Point.h";
19using mozilla::gfx::IntPoint from "mozilla/gfx/Point.h";
20
21namespace mozilla {
22namespace a11y {
23
24struct AccessibleData
25{
26  uint64_t ID;
27  role Role;
28  uint32_t ChildrenCount;
29  AccType Type;
30  AccGenericType GenericTypes;
31  uint8_t RoleMapEntryIndex;
32};
33
34union OriginDocument
35{
36  PDocAccessible;
37};
38
39struct BatchData
40{
41  OriginDocument Document;
42  uint64_t ID;
43  uint64_t State;
44  nsIntRect Bounds;
45  uint8_t ActionCount;
46  nsString Name;
47  nsString TextValue;
48  nsString DOMNodeID;
49  nsString Description;
50  double CurValue;
51  double MinValue;
52  double MaxValue;
53  double Step;
54  AccAttributes Attributes;
55};
56
57struct ShowEventData
58{
59  uint64_t ID;
60  uint32_t Idx;
61  AccessibleData[] NewTree;
62  bool EventSuppressed;
63};
64
65struct RelationTargets
66{
67  uint32_t Type;
68  uint64_t[] Targets;
69};
70
71struct TextRangeData
72{
73  uint64_t StartID;
74  uint64_t EndID;
75  int32_t StartOffset;
76  int32_t EndOffset;
77};
78
79nested(upto inside_sync) sync protocol PDocAccessible
80{
81  manager PBrowser;
82  manages PDocAccessiblePlatformExt;
83
84parent:
85  async PDocAccessiblePlatformExt();
86  async Shutdown();
87
88  /*
89   * Notify the parent process the document in the child process is firing an
90   * event.
91   */
92  async Event(uint64_t aID, uint32_t type);
93  async ShowEvent(ShowEventData data, bool aFromuser);
94  async HideEvent(uint64_t aRootID, bool aFromUser);
95  async StateChangeEvent(uint64_t aID, uint64_t aState, bool aEnabled);
96  async CaretMoveEvent(uint64_t aID, int32_t aOffset, bool aIsSelectionCollapsed);
97  async TextChangeEvent(uint64_t aID, nsString aStr, int32_t aStart, uint32_t aLen,
98                        bool aIsInsert, bool aFromUser);
99  async SelectionEvent(uint64_t aID, uint64_t aWidgetID, uint32_t aType);
100  async RoleChangedEvent(role aRole);
101  async VirtualCursorChangeEvent(uint64_t aID,
102                                 uint64_t aOldPosition,
103                                 int32_t aOldStartOffset, int32_t aOldEndOffset,
104                                 uint64_t aPosition,
105                                 int32_t aStartOffset, int32_t aEndOffset,
106                                 int16_t aReason, int16_t aBoundaryType,
107                                 bool aFromUservcEvent);
108  async ScrollingEvent(uint64_t aID, uint64_t aType,
109                       uint32_t aScrollX, uint32_t aScrollY,
110                       uint32_t aMaxScrollX, uint32_t aMaxScrollY);
111  async AnnouncementEvent(uint64_t aID,
112                          nsString aAnnouncement,
113                          uint16_t aPriority);
114  async TextSelectionChangeEvent(uint64_t aID, TextRangeData[] aSelection);
115
116  /*
117   * Tell the parent document to bind the existing document as a new child
118   * document.
119   */
120  async BindChildDoc(PDocAccessible aChildDoc, uint64_t aID);
121
122  // Android
123  async Batch(uint64_t aBatchType, BatchData[] aData);
124
125child:
126  /*
127   * Notify the content process that the PDocAccessible has finished being
128   * constructed in the parent process.
129   */
130  async ConstructedInParentProcess();
131
132  async __delete__();
133
134  /*
135   * Called as a result of focus shifting from chrome to content
136   * elements through keyboard navigation.
137   */
138  async RestoreFocus();
139
140  // LocalAccessible
141  [Nested=inside_sync] sync State(uint64_t aID) returns(uint64_t states);
142  [Nested=inside_sync] sync NativeState(uint64_t aID) returns(uint64_t states);
143  [Nested=inside_sync] sync Name(uint64_t aID) returns(nsString name, uint32_t flag);
144  [Nested=inside_sync] sync Value(uint64_t aID) returns(nsString value);
145  [Nested=inside_sync] sync Help(uint64_t aID) returns(nsString help);
146  [Nested=inside_sync] sync Description(uint64_t aID) returns(nsString desc);
147  [Nested=inside_sync] sync Attributes(uint64_t aID) returns(AccAttributes attributes);
148  [Nested=inside_sync] sync RelationByType(uint64_t aID, uint32_t aRelationType)
149    returns(uint64_t[] targets);
150  [Nested=inside_sync] sync Relations(uint64_t aID) returns(RelationTargets[] relations);
151  [Nested=inside_sync] sync IsSearchbox(uint64_t aID) returns(bool retval);
152  [Nested=inside_sync] sync LandmarkRole(uint64_t aID) returns(nsString landmark);
153  [Nested=inside_sync] sync ARIARoleAtom(uint64_t aID) returns(nsString ariaRole);
154  [Nested=inside_sync] sync GroupPosition(uint64_t aID)
155    returns(int32_t groupLevel, int32_t similarItemsInGroup, int32_t positionInGroup);
156  async ScrollTo(uint64_t aID, uint32_t aScrollType);
157  async ScrollToPoint(uint64_t aID, uint32_t aScrollType, int32_t aX,
158                      int32_t aY);
159  async Announce(uint64_t aID, nsString aAnnouncement, uint16_t aPriority);
160
161  // AccessibleText
162
163  // TextSubstring is getText in IDL.
164  [Nested=inside_sync] sync CaretLineNumber(uint64_t aID) returns(int32_t aLineNumber);
165  [Nested=inside_sync] sync CaretOffset(uint64_t aID) returns(int32_t aOffset);
166   async SetCaretOffset(uint64_t aID, int32_t aOffset);
167  [Nested=inside_sync] sync CharacterCount(uint64_t aID) returns(int32_t aCount);
168  [Nested=inside_sync] sync SelectionCount(uint64_t aID) returns(int32_t aCount);
169  [Nested=inside_sync] sync TextSubstring(uint64_t aID, int32_t aStartOffset, int32_t
170                                         aEndOffset) returns(nsString aText, bool aValid);
171  [Nested=inside_sync] sync GetTextAfterOffset(uint64_t aID, int32_t aOffset, int32_t aBoundaryType)
172    returns(nsString aText, int32_t aStartOffset, int32_t aEndOffset);
173  [Nested=inside_sync] sync GetTextAtOffset(uint64_t aID, int32_t aOffset, int32_t aBoundaryType)
174    returns(nsString aText, int32_t aStartOffset, int32_t aEndOffset);
175
176  [Nested=inside_sync] sync GetTextBeforeOffset(uint64_t aID, int32_t aOffset, int32_t aBoundaryType)
177    returns(nsString aText, int32_t aStartOffset, int32_t aEndOffset);
178  [Nested=inside_sync] sync CharAt(uint64_t aID, int32_t aOffset) returns(uint16_t aChar);
179
180  [Nested=inside_sync] sync TextAttributes(uint64_t aID, bool aIncludeDefAttrs, int32_t aOffset)
181    returns(AccAttributes aAttributes, int32_t aStartOffset, int32_t aEndOffset);
182  [Nested=inside_sync] sync DefaultTextAttributes(uint64_t aID) returns(AccAttributes aAttributes);
183
184  [Nested=inside_sync] sync TextBounds(uint64_t aID, int32_t aStartOffset, int32_t aEndOffset,
185                             uint32_t aCoordType)
186    returns(nsIntRect aRetVal);
187  [Nested=inside_sync] sync CharBounds(uint64_t aID, int32_t aOffset, uint32_t aCoordType)
188    returns(nsIntRect aRetVal);
189
190  [Nested=inside_sync] sync OffsetAtPoint(uint64_t aID, int32_t aX, int32_t aY, uint32_t aCoordType)
191    returns(int32_t aRetVal);
192
193  [Nested=inside_sync] sync SelectionBoundsAt(uint64_t aID, int32_t aSelectionNum)
194    returns(bool aSucceeded, nsString aData, int32_t aStartOffset, int32_t aEndOffset);
195  [Nested=inside_sync] sync SetSelectionBoundsAt(uint64_t aID, int32_t aSelectionNum,
196                                       int32_t aStartOffset, int32_t aEndOffset)
197    returns(bool aSucceeded);
198  [Nested=inside_sync] sync AddToSelection(uint64_t aID, int32_t aStartOffset, int32_t aEndOffset)
199    returns(bool aSucceeded);
200  [Nested=inside_sync] sync RemoveFromSelection(uint64_t aID, int32_t aSelectionNum)
201    returns(bool aSucceeded);
202
203  async ScrollSubstringTo(uint64_t aID, int32_t aStartOffset, int32_t aEndOffset,
204                          uint32_t aScrollType);
205  async ScrollSubstringToPoint(uint64_t aID,
206                               int32_t aStartOffset,
207                               int32_t aEndOffset,
208                               uint32_t aCoordinateType,
209                               int32_t aX, int32_t aY);
210
211  [Nested=inside_sync] sync Text(uint64_t aID) returns(nsString aText);
212  [Nested=inside_sync] sync ReplaceText(uint64_t aID, nsString aText);
213  [Nested=inside_sync] sync InsertText(uint64_t aID, nsString aText, int32_t aPosition)
214    returns(bool aValid);
215  [Nested=inside_sync] sync CopyText(uint64_t aID, int32_t aStartPos, int32_t aEndPos)
216    returns(bool aValid);
217  [Nested=inside_sync] sync CutText(uint64_t aID, int32_t aStartPos, int32_t aEndPos)
218    returns(bool aValid);
219  [Nested=inside_sync] sync DeleteText(uint64_t aID, int32_t aStartPos, int32_t aEndPos)
220    returns(bool aValid);
221  [Nested=inside_sync] sync PasteText(uint64_t aID, int32_t aPosition)
222    returns(bool aValid);
223
224  [Nested=inside_sync] sync ImagePosition(uint64_t aID, uint32_t aCoordType) returns(IntPoint aRetVal);
225  [Nested=inside_sync] sync ImageSize(uint64_t aID) returns(IntSize aRetVal);
226
227  [Nested=inside_sync] sync StartOffset(uint64_t aID) returns(uint32_t aRetVal, bool aOk);
228  [Nested=inside_sync] sync EndOffset(uint64_t aID) returns(uint32_t aRetVal, bool aOk);
229  [Nested=inside_sync] sync IsLinkValid(uint64_t aID) returns(bool aRetVal);
230  [Nested=inside_sync] sync AnchorCount(uint64_t aID) returns(uint32_t aRetVal, bool aOk);
231  [Nested=inside_sync] sync AnchorURIAt(uint64_t aID, uint32_t aIndex) returns(nsCString aURI, bool aOk);
232  [Nested=inside_sync] sync AnchorAt(uint64_t aID, uint32_t aIndex) returns(uint64_t aIDOfAnchor, bool aOk);
233
234  [Nested=inside_sync] sync LinkCount(uint64_t aID) returns(uint32_t aCount);
235  [Nested=inside_sync] sync LinkAt(uint64_t aID, uint32_t aIndex) returns(uint64_t aIDOfLink, bool aOk);
236  [Nested=inside_sync] sync LinkIndexOf(uint64_t aID, uint64_t aLinkID) returns(int32_t aIndex);
237  [Nested=inside_sync] sync LinkIndexAtOffset(uint64_t aID, uint32_t aOffset) returns(int32_t aIndex);
238
239  [Nested=inside_sync] sync TableOfACell(uint64_t aID) returns(uint64_t aTableID, bool aOk);
240  [Nested=inside_sync] sync ColIdx(uint64_t aID) returns(uint32_t aIndex);
241  [Nested=inside_sync] sync RowIdx(uint64_t aID) returns(uint32_t aIndex);
242  [Nested=inside_sync] sync GetPosition(uint64_t aID) returns(uint32_t aRow, uint32_t aCol);
243  [Nested=inside_sync] sync ColExtent(uint64_t aID) returns(uint32_t aExtent);
244  [Nested=inside_sync] sync RowExtent(uint64_t aID) returns(uint32_t aExtent);
245  [Nested=inside_sync] sync GetColRowExtents(uint64_t aID)
246    returns(uint32_t aCol, uint32_t aRow, uint32_t aColExtent, uint32_t aRowExtent);
247  [Nested=inside_sync] sync ColHeaderCells(uint64_t aID) returns(uint64_t[] aCells);
248  [Nested=inside_sync] sync RowHeaderCells(uint64_t aID) returns(uint64_t[] aCells);
249  [Nested=inside_sync] sync IsCellSelected(uint64_t aID) returns(bool aSelected);
250
251  [Nested=inside_sync] sync TableCaption(uint64_t aID) returns(uint64_t aCaptionID, bool aOk);
252  [Nested=inside_sync] sync TableSummary(uint64_t aID) returns(nsString aSummary);
253  [Nested=inside_sync] sync TableColumnCount(uint64_t aID) returns(uint32_t aColCount);
254  [Nested=inside_sync] sync TableRowCount(uint64_t aID) returns(uint32_t aRowCount);
255  [Nested=inside_sync] sync TableCellAt(uint64_t aID, uint32_t aRow, uint32_t aCol) returns(uint64_t aCellID, bool aOk);
256  [Nested=inside_sync] sync TableCellIndexAt(uint64_t aID, uint32_t aRow, uint32_t aCol) returns(int32_t aIndex);
257  [Nested=inside_sync] sync TableColumnIndexAt(uint64_t aID, uint32_t aCellIndex) returns(int32_t aCol);
258  [Nested=inside_sync] sync TableRowIndexAt(uint64_t aID, uint32_t aCellIndex) returns(int32_t aRow);
259  [Nested=inside_sync] sync TableRowAndColumnIndicesAt(uint64_t aID, uint32_t aCellIndex) returns(int32_t aRow, int32_t aCol);
260  [Nested=inside_sync] sync TableColumnExtentAt(uint64_t aID, uint32_t aRow, uint32_t aCol) returns(uint32_t aExtent);
261  [Nested=inside_sync] sync TableRowExtentAt(uint64_t aID, uint32_t aRow, uint32_t aCol) returns(uint32_t aExtent);
262  [Nested=inside_sync] sync TableColumnDescription(uint64_t aID, uint32_t aCol) returns(nsString aDescription);
263  [Nested=inside_sync] sync TableRowDescription(uint64_t aID, uint32_t aRow) returns(nsString aDescription);
264  [Nested=inside_sync] sync TableColumnSelected(uint64_t aID, uint32_t aCol) returns(bool aSelected);
265  [Nested=inside_sync] sync TableRowSelected(uint64_t aID, uint32_t aRow) returns(bool aSelected);
266  [Nested=inside_sync] sync TableCellSelected(uint64_t aID, uint32_t aRow, uint32_t aCol) returns(bool aSelected);
267  [Nested=inside_sync] sync TableSelectedCellCount(uint64_t aID) returns(uint32_t aSelectedCells);
268  [Nested=inside_sync] sync TableSelectedColumnCount(uint64_t aID) returns(uint32_t aSelectedColumns);
269  [Nested=inside_sync] sync TableSelectedRowCount(uint64_t aID) returns(uint32_t aSelectedRows);
270  [Nested=inside_sync] sync TableSelectedCells(uint64_t aID) returns(uint64_t[] aCellIDs);
271  [Nested=inside_sync] sync TableSelectedCellIndices(uint64_t aID) returns(uint32_t[] aCellIndeces);
272  [Nested=inside_sync] sync TableSelectedColumnIndices(uint64_t aID) returns(uint32_t[] aColumnIndeces);
273  [Nested=inside_sync] sync TableSelectedRowIndices(uint64_t aID) returns(uint32_t[] aRowIndeces);
274  [Nested=inside_sync] sync TableSelectColumn(uint64_t aID, uint32_t aCol);
275  [Nested=inside_sync] sync TableSelectRow(uint64_t aID, uint32_t aRow);
276  [Nested=inside_sync] sync TableUnselectColumn(uint64_t aID, uint32_t aCol);
277  [Nested=inside_sync] sync TableUnselectRow(uint64_t aID, uint32_t aRow);
278  [Nested=inside_sync] sync TableIsProbablyForLayout(uint64_t aID) returns(bool aForLayout);
279  [Nested=inside_sync] sync AtkTableColumnHeader(uint64_t aID, int32_t aCol)
280    returns(uint64_t aHeaderID, bool aOk);
281  [Nested=inside_sync] sync AtkTableRowHeader(uint64_t aID, int32_t aRow)
282    returns(uint64_t aHeaderID, bool aOk);
283
284  [Nested=inside_sync] sync SelectedItems(uint64_t aID) returns(uint64_t[] aSelectedItemIDs);
285  [Nested=inside_sync] sync SelectedItemCount(uint64_t aID) returns(uint32_t aCount);
286  [Nested=inside_sync] sync GetSelectedItem(uint64_t aID, uint32_t aIndex) returns(uint64_t aSelected, bool aOk);
287  [Nested=inside_sync] sync IsItemSelected(uint64_t aID, uint32_t aIndex) returns(bool aSelected);
288  [Nested=inside_sync] sync AddItemToSelection(uint64_t aID, uint32_t aIndex) returns(bool aSuccess);
289  [Nested=inside_sync] sync RemoveItemFromSelection(uint64_t aID, uint32_t aIndex) returns(bool aSuccess);
290  [Nested=inside_sync] sync SelectAll(uint64_t aID) returns(bool aSuccess);
291  [Nested=inside_sync] sync UnselectAll(uint64_t aID) returns(bool aSuccess);
292
293  async TakeSelection(uint64_t aID);
294  async SetSelected(uint64_t aID, bool aSelected);
295
296  [Nested=inside_sync] sync DoAction(uint64_t aID, uint8_t aIndex) returns(bool aSuccess);
297  [Nested=inside_sync] sync ActionCount(uint64_t aID) returns(uint8_t aCount);
298  [Nested=inside_sync] sync ActionDescriptionAt(uint64_t aID, uint8_t aIndex) returns(nsString aDescription);
299  [Nested=inside_sync] sync ActionNameAt(uint64_t aID, uint8_t aIndex) returns(nsString aName);
300  [Nested=inside_sync] sync AccessKey(uint64_t aID) returns(uint32_t aKey, uint32_t aModifierMask);
301  [Nested=inside_sync] sync KeyboardShortcut(uint64_t aID) returns(uint32_t aKey, uint32_t aModifierMask);
302  [Nested=inside_sync] sync AtkKeyBinding(uint64_t aID) returns(nsString aResult);
303
304  [Nested=inside_sync] sync CurValue(uint64_t aID) returns(double aValue);
305  [Nested=inside_sync] sync SetCurValue(uint64_t aID, double aValue) returns(bool aRetVal);
306  [Nested=inside_sync] sync MinValue(uint64_t aID) returns(double aValue);
307  [Nested=inside_sync] sync MaxValue(uint64_t aID) returns(double aValue);
308  [Nested=inside_sync] sync Step(uint64_t aID) returns(double aStep);
309
310  async TakeFocus(uint64_t aID);
311  [Nested=inside_sync] sync FocusedChild(uint64_t aID)
312    returns(nullable PDocAccessible aResultDoc, uint64_t aResultID);
313
314  [Nested=inside_sync] sync Language(uint64_t aID) returns(nsString aLocale);
315  [Nested=inside_sync] sync DocType(uint64_t aID) returns(nsString aType);
316  [Nested=inside_sync] sync Title(uint64_t aID) returns(nsString aTitle);
317  [Nested=inside_sync] sync URL(uint64_t aID) returns(nsString aURL);
318  [Nested=inside_sync] sync MimeType(uint64_t aID) returns(nsString aMime);
319  [Nested=inside_sync] sync URLDocTypeMimeType(uint64_t aID) returns(nsString aURL, nsString aDocType, nsString aMimeType);
320
321  [Nested=inside_sync] sync ChildAtPoint(uint64_t aID, int32_t aX, int32_t aY, uint32_t aWhich)
322    returns(nullable PDocAccessible aResultDoc, uint64_t aResultID);
323
324  [Nested=inside_sync] sync Extents(uint64_t aID, bool aNeedsScreenCoords)
325    returns(int32_t aX, int32_t aY, int32_t aWidth, int32_t aHeight);
326  [Nested=inside_sync] sync ExtentsInCSSPixels(uint64_t aID)
327    returns(int32_t aX, int32_t aY, int32_t aWidth, int32_t aHeight);
328  [Nested=inside_sync] sync DOMNodeID(uint64_t aID) returns(nsString aDOMNodeID);
329};
330
331}
332}
333