summaryrefslogtreecommitdiffstats
path: root/accessible/ipc/win/PDocAccessible.ipdl
blob: 15a25a6000568673a567364fb8c6382b3f63dbaf (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
/* -*- 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 DocAccessibleTypes;

include "mozilla/GfxMessageUtils.h";

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

namespace mozilla {
namespace a11y {

struct AccessibleData
{
  uint64_t ID;
  int32_t MsaaID;
  role Role;
  uint32_t ChildrenCount;
  AccType Type;
  AccGenericType GenericTypes;
  uint8_t RoleMapEntryIndex;
};

struct ShowEventData
{
  uint64_t ID;
  uint32_t Idx;
  AccessibleData[] NewTree;
  bool EventSuppressed;
};

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

[ManualDealloc, ChildImpl=virtual, ParentImpl=virtual]
sync protocol PDocAccessible
{
  manager PBrowser;

parent:
  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(ShowEventData data, bool aFromUser);
  async HideEvent(uint64_t aRootID, bool aFromUser);
  async StateChangeEvent(uint64_t aID, uint64_t aState, bool aEnabled);
  async CaretMoveEvent(uint64_t aID, LayoutDeviceIntRect aCaretRect,
                       int32_t aOffset, bool aIsAtEndOfLine,
                       bool aIsSelectionCollapsed, int32_t aGranularity);
  async TextChangeEvent(uint64_t aID, nsString aStr, int32_t aStart, uint32_t aLen,
                        bool aIsInsert, bool aFromUser);
  sync SyncTextChangeEvent(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 FocusEvent(uint64_t aID, LayoutDeviceIntRect aCaretRect);
  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 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
   * aDispatchShowEvent is true when a show event with the first accessible in
   * the cache list as the target should be dispatched after the cache is
   * populated. The show event will have a from-user flag value of false.
   */
  async Cache(CacheUpdateType aUpdateType, CacheData[] aData, bool aDispatchShowEvent);

  /*
   * 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:
  /**
   * We use IDispatchHolder instead of IAccessibleHolder for the following two
   * methods because of sandboxing. IAccessible::get_accParent returns the parent
   * as an IDispatch. COM is not smart enough to understand that IAccessible is
   * derived from IDispatch, so during marshaling it attempts to QueryInterface
   * on the parent's proxy for IDispatch. This will fail with E_ACCESSDENIED
   * thanks to the sandbox. We can avoid this entirely by just giving content
   * the correct interface to begin with: IDispatch.
   */
  async ParentCOMProxy(IDispatchHolder aParentCOMProxy);
  async EmulatedWindow(WindowsHandle aEmulatedWindowHandle,
                       IDispatchHolder aEmulatedWindowCOMProxy);
  async TopLevelDocCOMProxy(IAccessibleHolder aCOMProxy);
  /*
   * Called as a result of focus shifting from chrome to content
   * elements through keyboard navigation.
   */
  async RestoreFocus();

  async TakeFocus(uint64_t aID);
  async TakeSelection(uint64_t aID);
  async SetSelected(uint64_t aID, bool aSelected);
  async ScrollTo(uint64_t aID, uint32_t aScrollType);

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

  async DoActionAsync(uint64_t aID, uint8_t aIndex);

  async SetCaretOffset(uint64_t aID, int32_t aOffset);

  async __delete__();
};

}
}