Line data Source code
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 :
7 : #include "DocAccessibleChild.h"
8 :
9 : #include "nsAccessibilityService.h"
10 : #include "Accessible-inl.h"
11 : #include "ProxyAccessible.h"
12 : #include "Relation.h"
13 : #include "HyperTextAccessible-inl.h"
14 : #include "TextLeafAccessible.h"
15 : #include "ImageAccessible.h"
16 : #include "TableAccessible.h"
17 : #include "TableCellAccessible.h"
18 : #include "nsIPersistentProperties2.h"
19 : #include "nsISimpleEnumerator.h"
20 : #include "nsAccUtils.h"
21 : #ifdef MOZ_ACCESSIBILITY_ATK
22 : #include "AccessibleWrap.h"
23 : #endif
24 :
25 : namespace mozilla {
26 : namespace a11y {
27 :
28 : Accessible*
29 0 : DocAccessibleChild::IdToAccessible(const uint64_t& aID) const
30 : {
31 0 : if (!aID)
32 0 : return mDoc;
33 :
34 0 : if (!mDoc)
35 0 : return nullptr;
36 :
37 0 : return mDoc->GetAccessibleByUniqueID(reinterpret_cast<void*>(aID));
38 : }
39 :
40 : Accessible*
41 0 : DocAccessibleChild::IdToAccessibleLink(const uint64_t& aID) const
42 : {
43 0 : Accessible* acc = IdToAccessible(aID);
44 0 : return acc && acc->IsLink() ? acc : nullptr;
45 : }
46 :
47 : Accessible*
48 0 : DocAccessibleChild::IdToAccessibleSelect(const uint64_t& aID) const
49 : {
50 0 : Accessible* acc = IdToAccessible(aID);
51 0 : return acc && acc->IsSelect() ? acc : nullptr;
52 : }
53 :
54 : HyperTextAccessible*
55 0 : DocAccessibleChild::IdToHyperTextAccessible(const uint64_t& aID) const
56 : {
57 0 : Accessible* acc = IdToAccessible(aID);
58 0 : return acc && acc->IsHyperText() ? acc->AsHyperText() : nullptr;
59 : }
60 :
61 : TextLeafAccessible*
62 0 : DocAccessibleChild::IdToTextLeafAccessible(const uint64_t& aID) const
63 : {
64 0 : Accessible* acc = IdToAccessible(aID);
65 0 : return acc && acc->IsTextLeaf() ? acc->AsTextLeaf() : nullptr;
66 : }
67 :
68 : ImageAccessible*
69 0 : DocAccessibleChild::IdToImageAccessible(const uint64_t& aID) const
70 : {
71 0 : Accessible* acc = IdToAccessible(aID);
72 0 : return (acc && acc->IsImage()) ? acc->AsImage() : nullptr;
73 : }
74 :
75 : TableCellAccessible*
76 0 : DocAccessibleChild::IdToTableCellAccessible(const uint64_t& aID) const
77 : {
78 0 : Accessible* acc = IdToAccessible(aID);
79 0 : return (acc && acc->IsTableCell()) ? acc->AsTableCell() : nullptr;
80 : }
81 :
82 : TableAccessible*
83 0 : DocAccessibleChild::IdToTableAccessible(const uint64_t& aID) const
84 : {
85 0 : Accessible* acc = IdToAccessible(aID);
86 0 : return (acc && acc->IsTable()) ? acc->AsTable() : nullptr;
87 : }
88 :
89 : mozilla::ipc::IPCResult
90 0 : DocAccessibleChild::RecvState(const uint64_t& aID, uint64_t* aState)
91 : {
92 0 : Accessible* acc = IdToAccessible(aID);
93 0 : if (!acc) {
94 0 : *aState = states::DEFUNCT;
95 0 : return IPC_OK();
96 : }
97 :
98 0 : *aState = acc->State();
99 :
100 0 : return IPC_OK();
101 : }
102 :
103 : mozilla::ipc::IPCResult
104 0 : DocAccessibleChild::RecvNativeState(const uint64_t& aID, uint64_t* aState)
105 : {
106 0 : Accessible* acc = IdToAccessible(aID);
107 0 : if (!acc) {
108 0 : *aState = states::DEFUNCT;
109 0 : return IPC_OK();
110 : }
111 :
112 0 : *aState = acc->NativeState();
113 :
114 0 : return IPC_OK();
115 : }
116 :
117 : mozilla::ipc::IPCResult
118 0 : DocAccessibleChild::RecvName(const uint64_t& aID, nsString* aName)
119 : {
120 0 : Accessible* acc = IdToAccessible(aID);
121 0 : if (!acc)
122 0 : return IPC_OK();
123 :
124 0 : acc->Name(*aName);
125 0 : return IPC_OK();
126 : }
127 :
128 : mozilla::ipc::IPCResult
129 0 : DocAccessibleChild::RecvValue(const uint64_t& aID, nsString* aValue)
130 : {
131 0 : Accessible* acc = IdToAccessible(aID);
132 0 : if (!acc) {
133 0 : return IPC_OK();
134 : }
135 :
136 0 : acc->Value(*aValue);
137 0 : return IPC_OK();
138 : }
139 :
140 : mozilla::ipc::IPCResult
141 0 : DocAccessibleChild::RecvHelp(const uint64_t& aID, nsString* aHelp)
142 : {
143 0 : Accessible* acc = IdToAccessible(aID);
144 0 : if (!acc) {
145 0 : return IPC_OK();
146 : }
147 :
148 0 : acc->Help(*aHelp);
149 0 : return IPC_OK();
150 : }
151 :
152 : mozilla::ipc::IPCResult
153 0 : DocAccessibleChild::RecvDescription(const uint64_t& aID, nsString* aDesc)
154 : {
155 0 : Accessible* acc = IdToAccessible(aID);
156 0 : if (!acc)
157 0 : return IPC_OK();
158 :
159 0 : acc->Description(*aDesc);
160 0 : return IPC_OK();
161 : }
162 :
163 : mozilla::ipc::IPCResult
164 0 : DocAccessibleChild::RecvAttributes(const uint64_t& aID, nsTArray<Attribute>* aAttributes)
165 : {
166 0 : Accessible* acc = IdToAccessible(aID);
167 0 : if (!acc)
168 0 : return IPC_OK();
169 :
170 0 : nsCOMPtr<nsIPersistentProperties> props = acc->Attributes();
171 0 : if (!PersistentPropertiesToArray(props, aAttributes)) {
172 0 : return IPC_FAIL_NO_REASON(this);
173 : }
174 0 : return IPC_OK();
175 : }
176 :
177 : bool
178 0 : DocAccessibleChild::PersistentPropertiesToArray(nsIPersistentProperties* aProps,
179 : nsTArray<Attribute>* aAttributes)
180 : {
181 0 : if (!aProps) {
182 0 : return true;
183 : }
184 0 : nsCOMPtr<nsISimpleEnumerator> propEnum;
185 0 : nsresult rv = aProps->Enumerate(getter_AddRefs(propEnum));
186 0 : NS_ENSURE_SUCCESS(rv, false);
187 :
188 : bool hasMore;
189 0 : while (NS_SUCCEEDED(propEnum->HasMoreElements(&hasMore)) && hasMore) {
190 0 : nsCOMPtr<nsISupports> sup;
191 0 : rv = propEnum->GetNext(getter_AddRefs(sup));
192 0 : NS_ENSURE_SUCCESS(rv, false);
193 :
194 0 : nsCOMPtr<nsIPropertyElement> propElem(do_QueryInterface(sup));
195 0 : NS_ENSURE_TRUE(propElem, false);
196 :
197 0 : nsAutoCString name;
198 0 : rv = propElem->GetKey(name);
199 0 : NS_ENSURE_SUCCESS(rv, false);
200 :
201 0 : nsAutoString value;
202 0 : rv = propElem->GetValue(value);
203 0 : NS_ENSURE_SUCCESS(rv, false);
204 :
205 0 : aAttributes->AppendElement(Attribute(name, value));
206 : }
207 :
208 0 : return true;
209 : }
210 :
211 : mozilla::ipc::IPCResult
212 0 : DocAccessibleChild::RecvRelationByType(const uint64_t& aID,
213 : const uint32_t& aType,
214 : nsTArray<uint64_t>* aTargets)
215 : {
216 0 : Accessible* acc = IdToAccessible(aID);
217 0 : if (!acc)
218 0 : return IPC_OK();
219 :
220 0 : auto type = static_cast<RelationType>(aType);
221 0 : Relation rel = acc->RelationByType(type);
222 0 : while (Accessible* target = rel.Next())
223 0 : aTargets->AppendElement(reinterpret_cast<uintptr_t>(target));
224 :
225 0 : return IPC_OK();
226 : }
227 :
228 : static void
229 0 : AddRelation(Accessible* aAcc, RelationType aType,
230 : nsTArray<RelationTargets>* aTargets)
231 : {
232 0 : Relation rel = aAcc->RelationByType(aType);
233 0 : nsTArray<uint64_t> targets;
234 0 : while (Accessible* target = rel.Next())
235 0 : targets.AppendElement(reinterpret_cast<uintptr_t>(target));
236 :
237 0 : if (!targets.IsEmpty()) {
238 : RelationTargets* newRelation =
239 0 : aTargets->AppendElement(RelationTargets(static_cast<uint32_t>(aType),
240 0 : nsTArray<uint64_t>()));
241 0 : newRelation->Targets().SwapElements(targets);
242 : }
243 0 : }
244 :
245 : mozilla::ipc::IPCResult
246 0 : DocAccessibleChild::RecvRelations(const uint64_t& aID,
247 : nsTArray<RelationTargets>* aRelations)
248 : {
249 0 : Accessible* acc = IdToAccessible(aID);
250 0 : if (!acc)
251 0 : return IPC_OK();
252 :
253 : #define RELATIONTYPE(gecko, s, a, m, i) AddRelation(acc, RelationType::gecko, aRelations);
254 :
255 : #include "RelationTypeMap.h"
256 : #undef RELATIONTYPE
257 :
258 0 : return IPC_OK();
259 : }
260 :
261 : mozilla::ipc::IPCResult
262 0 : DocAccessibleChild::RecvIsSearchbox(const uint64_t& aID, bool* aRetVal)
263 : {
264 0 : Accessible* acc = IdToAccessible(aID);
265 0 : if (!acc)
266 0 : return IPC_OK();
267 :
268 0 : *aRetVal = acc->IsSearchbox();
269 0 : return IPC_OK();
270 : }
271 :
272 : mozilla::ipc::IPCResult
273 0 : DocAccessibleChild::RecvLandmarkRole(const uint64_t& aID, nsString* aLandmark)
274 : {
275 0 : Accessible* acc = IdToAccessible(aID);
276 0 : if (!acc) {
277 0 : return IPC_OK();
278 : }
279 :
280 0 : if (nsIAtom* roleAtom = acc->LandmarkRole()) {
281 0 : roleAtom->ToString(*aLandmark);
282 : }
283 :
284 0 : return IPC_OK();
285 : }
286 :
287 : mozilla::ipc::IPCResult
288 0 : DocAccessibleChild::RecvARIARoleAtom(const uint64_t& aID, nsString* aRole)
289 : {
290 0 : Accessible* acc = IdToAccessible(aID);
291 0 : if (!acc) {
292 0 : return IPC_OK();
293 : }
294 :
295 0 : if (const nsRoleMapEntry* roleMap = acc->ARIARoleMap()) {
296 0 : if (nsIAtom* roleAtom = *(roleMap->roleAtom)) {
297 0 : roleAtom->ToString(*aRole);
298 : }
299 : }
300 :
301 0 : return IPC_OK();
302 : }
303 :
304 : mozilla::ipc::IPCResult
305 0 : DocAccessibleChild::RecvGetLevelInternal(const uint64_t& aID, int32_t* aLevel)
306 : {
307 0 : Accessible* acc = IdToAccessible(aID);
308 0 : if (acc) {
309 0 : *aLevel = acc->GetLevelInternal();
310 : }
311 0 : return IPC_OK();
312 : }
313 :
314 : mozilla::ipc::IPCResult
315 0 : DocAccessibleChild::RecvScrollTo(const uint64_t& aID,
316 : const uint32_t& aScrollType)
317 : {
318 0 : Accessible* acc = IdToAccessible(aID);
319 0 : if (acc) {
320 0 : nsCoreUtils::ScrollTo(acc->Document()->PresShell(), acc->GetContent(),
321 0 : aScrollType);
322 : }
323 :
324 0 : return IPC_OK();
325 : }
326 :
327 : mozilla::ipc::IPCResult
328 0 : DocAccessibleChild::RecvScrollToPoint(const uint64_t& aID, const uint32_t& aScrollType, const int32_t& aX, const int32_t& aY)
329 : {
330 0 : Accessible* acc = IdToAccessible(aID);
331 0 : if (acc) {
332 0 : acc->ScrollToPoint(aScrollType, aX, aY);
333 : }
334 :
335 0 : return IPC_OK();
336 : }
337 :
338 : mozilla::ipc::IPCResult
339 0 : DocAccessibleChild::RecvCaretLineNumber(const uint64_t& aID, int32_t* aLineNumber)
340 : {
341 0 : HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
342 0 : *aLineNumber = acc && acc->IsTextRole() ? acc->CaretLineNumber() : 0;
343 0 : return IPC_OK();
344 : }
345 :
346 : mozilla::ipc::IPCResult
347 0 : DocAccessibleChild::RecvCaretOffset(const uint64_t& aID, int32_t* aOffset)
348 : {
349 0 : HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
350 0 : *aOffset = acc && acc->IsTextRole() ? acc->CaretOffset() : 0;
351 0 : return IPC_OK();
352 : }
353 :
354 : mozilla::ipc::IPCResult
355 0 : DocAccessibleChild::RecvSetCaretOffset(const uint64_t& aID,
356 : const int32_t& aOffset)
357 : {
358 0 : HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
359 0 : if (acc && acc->IsTextRole() && acc->IsValidOffset(aOffset)) {
360 0 : acc->SetCaretOffset(aOffset);
361 : }
362 0 : return IPC_OK();
363 : }
364 :
365 : mozilla::ipc::IPCResult
366 0 : DocAccessibleChild::RecvCharacterCount(const uint64_t& aID, int32_t* aCount)
367 : {
368 0 : HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
369 0 : *aCount = acc ? acc->CharacterCount() : 0;
370 0 : return IPC_OK();
371 : }
372 :
373 : mozilla::ipc::IPCResult
374 0 : DocAccessibleChild::RecvSelectionCount(const uint64_t& aID, int32_t* aCount)
375 : {
376 0 : HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
377 0 : *aCount = acc ? acc->SelectionCount() : 0;
378 0 : return IPC_OK();
379 : }
380 :
381 : mozilla::ipc::IPCResult
382 0 : DocAccessibleChild::RecvTextSubstring(const uint64_t& aID,
383 : const int32_t& aStartOffset,
384 : const int32_t& aEndOffset,
385 : nsString* aText, bool* aValid)
386 : {
387 0 : HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
388 0 : if (!acc) {
389 0 : return IPC_OK();
390 : }
391 :
392 0 : *aValid = acc->IsValidRange(aStartOffset, aEndOffset);
393 0 : acc->TextSubstring(aStartOffset, aEndOffset, *aText);
394 0 : return IPC_OK();
395 : }
396 :
397 : mozilla::ipc::IPCResult
398 0 : DocAccessibleChild::RecvGetTextAfterOffset(const uint64_t& aID,
399 : const int32_t& aOffset,
400 : const int32_t& aBoundaryType,
401 : nsString* aText,
402 : int32_t* aStartOffset,
403 : int32_t* aEndOffset)
404 : {
405 0 : *aStartOffset = 0;
406 0 : *aEndOffset = 0;
407 0 : HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
408 0 : if (acc) {
409 0 : acc->TextAfterOffset(aOffset, aBoundaryType,
410 0 : aStartOffset, aEndOffset, *aText);
411 : }
412 0 : return IPC_OK();
413 : }
414 :
415 : mozilla::ipc::IPCResult
416 0 : DocAccessibleChild::RecvGetTextAtOffset(const uint64_t& aID,
417 : const int32_t& aOffset,
418 : const int32_t& aBoundaryType,
419 : nsString* aText,
420 : int32_t* aStartOffset,
421 : int32_t* aEndOffset)
422 : {
423 0 : *aStartOffset = 0;
424 0 : *aEndOffset = 0;
425 0 : HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
426 0 : if (acc) {
427 0 : acc->TextAtOffset(aOffset, aBoundaryType,
428 0 : aStartOffset, aEndOffset, *aText);
429 : }
430 0 : return IPC_OK();
431 : }
432 :
433 : mozilla::ipc::IPCResult
434 0 : DocAccessibleChild::RecvGetTextBeforeOffset(const uint64_t& aID,
435 : const int32_t& aOffset,
436 : const int32_t& aBoundaryType,
437 : nsString* aText,
438 : int32_t* aStartOffset,
439 : int32_t* aEndOffset)
440 : {
441 0 : *aStartOffset = 0;
442 0 : *aEndOffset = 0;
443 0 : HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
444 0 : if (acc) {
445 0 : acc->TextBeforeOffset(aOffset, aBoundaryType,
446 0 : aStartOffset, aEndOffset, *aText);
447 : }
448 0 : return IPC_OK();
449 : }
450 :
451 : mozilla::ipc::IPCResult
452 0 : DocAccessibleChild::RecvCharAt(const uint64_t& aID,
453 : const int32_t& aOffset,
454 : uint16_t* aChar)
455 : {
456 0 : HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
457 0 : *aChar = acc && acc->IsTextRole() ?
458 0 : static_cast<uint16_t>(acc->CharAt(aOffset)) : 0;
459 0 : return IPC_OK();
460 : }
461 :
462 : mozilla::ipc::IPCResult
463 0 : DocAccessibleChild::RecvTextAttributes(const uint64_t& aID,
464 : const bool& aIncludeDefAttrs,
465 : const int32_t& aOffset,
466 : nsTArray<Attribute>* aAttributes,
467 : int32_t* aStartOffset,
468 : int32_t* aEndOffset)
469 : {
470 0 : HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
471 0 : if (!acc || !acc->IsTextRole()) {
472 0 : return IPC_OK();
473 : }
474 :
475 : nsCOMPtr<nsIPersistentProperties> props =
476 0 : acc->TextAttributes(aIncludeDefAttrs, aOffset, aStartOffset, aEndOffset);
477 0 : if (!PersistentPropertiesToArray(props, aAttributes)) {
478 0 : return IPC_FAIL_NO_REASON(this);
479 : }
480 0 : return IPC_OK();
481 : }
482 :
483 : mozilla::ipc::IPCResult
484 0 : DocAccessibleChild::RecvDefaultTextAttributes(const uint64_t& aID,
485 : nsTArray<Attribute> *aAttributes)
486 : {
487 0 : HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
488 0 : if (!acc || !acc->IsTextRole()) {
489 0 : return IPC_OK();
490 : }
491 :
492 0 : nsCOMPtr<nsIPersistentProperties> props = acc->DefaultTextAttributes();
493 0 : if (!PersistentPropertiesToArray(props, aAttributes)) {
494 0 : return IPC_FAIL_NO_REASON(this);
495 : }
496 0 : return IPC_OK();
497 : }
498 :
499 : mozilla::ipc::IPCResult
500 0 : DocAccessibleChild::RecvTextBounds(const uint64_t& aID,
501 : const int32_t& aStartOffset,
502 : const int32_t& aEndOffset,
503 : const uint32_t& aCoordType,
504 : nsIntRect* aRetVal)
505 : {
506 0 : HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
507 0 : if (acc && acc->IsTextRole()) {
508 0 : *aRetVal = acc->TextBounds(aStartOffset, aEndOffset, aCoordType);
509 : }
510 :
511 0 : return IPC_OK();
512 : }
513 :
514 : mozilla::ipc::IPCResult
515 0 : DocAccessibleChild::RecvCharBounds(const uint64_t& aID,
516 : const int32_t& aOffset,
517 : const uint32_t& aCoordType,
518 : nsIntRect* aRetVal)
519 : {
520 0 : HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
521 0 : if (acc && acc->IsTextRole()) {
522 0 : *aRetVal = acc->CharBounds(aOffset, aCoordType);
523 : }
524 :
525 0 : return IPC_OK();
526 : }
527 :
528 : mozilla::ipc::IPCResult
529 0 : DocAccessibleChild::RecvOffsetAtPoint(const uint64_t& aID,
530 : const int32_t& aX,
531 : const int32_t& aY,
532 : const uint32_t& aCoordType,
533 : int32_t* aRetVal)
534 : {
535 0 : *aRetVal = -1;
536 0 : HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
537 0 : if (acc && acc->IsTextRole()) {
538 0 : *aRetVal = acc->OffsetAtPoint(aX, aY, aCoordType);
539 : }
540 0 : return IPC_OK();
541 : }
542 :
543 : mozilla::ipc::IPCResult
544 0 : DocAccessibleChild::RecvSelectionBoundsAt(const uint64_t& aID,
545 : const int32_t& aSelectionNum,
546 : bool* aSucceeded,
547 : nsString* aData,
548 : int32_t* aStartOffset,
549 : int32_t* aEndOffset)
550 : {
551 0 : *aSucceeded = false;
552 0 : *aStartOffset = 0;
553 0 : *aEndOffset = 0;
554 0 : HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
555 0 : if (acc && acc->IsTextRole()) {
556 0 : *aSucceeded =
557 0 : acc->SelectionBoundsAt(aSelectionNum, aStartOffset, aEndOffset);
558 0 : if (*aSucceeded) {
559 0 : acc->TextSubstring(*aStartOffset, *aEndOffset, *aData);
560 : }
561 : }
562 :
563 0 : return IPC_OK();
564 : }
565 :
566 : mozilla::ipc::IPCResult
567 0 : DocAccessibleChild::RecvSetSelectionBoundsAt(const uint64_t& aID,
568 : const int32_t& aSelectionNum,
569 : const int32_t& aStartOffset,
570 : const int32_t& aEndOffset,
571 : bool* aSucceeded)
572 : {
573 0 : *aSucceeded = false;
574 0 : HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
575 0 : if (acc && acc->IsTextRole()) {
576 0 : *aSucceeded =
577 0 : acc->SetSelectionBoundsAt(aSelectionNum, aStartOffset, aEndOffset);
578 : }
579 :
580 0 : return IPC_OK();
581 : }
582 :
583 : mozilla::ipc::IPCResult
584 0 : DocAccessibleChild::RecvAddToSelection(const uint64_t& aID,
585 : const int32_t& aStartOffset,
586 : const int32_t& aEndOffset,
587 : bool* aSucceeded)
588 : {
589 0 : *aSucceeded = false;
590 0 : HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
591 0 : if (acc && acc->IsTextRole()) {
592 0 : *aSucceeded = acc->AddToSelection(aStartOffset, aEndOffset);
593 : }
594 :
595 0 : return IPC_OK();
596 : }
597 :
598 : mozilla::ipc::IPCResult
599 0 : DocAccessibleChild::RecvRemoveFromSelection(const uint64_t& aID,
600 : const int32_t& aSelectionNum,
601 : bool* aSucceeded)
602 : {
603 0 : *aSucceeded = false;
604 0 : HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
605 0 : if (acc && acc->IsTextRole()) {
606 0 : *aSucceeded = acc->RemoveFromSelection(aSelectionNum);
607 : }
608 :
609 0 : return IPC_OK();
610 : }
611 :
612 : mozilla::ipc::IPCResult
613 0 : DocAccessibleChild::RecvScrollSubstringTo(const uint64_t& aID,
614 : const int32_t& aStartOffset,
615 : const int32_t& aEndOffset,
616 : const uint32_t& aScrollType)
617 : {
618 0 : HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
619 0 : if (acc) {
620 0 : acc->ScrollSubstringTo(aStartOffset, aEndOffset, aScrollType);
621 : }
622 :
623 0 : return IPC_OK();
624 : }
625 :
626 : mozilla::ipc::IPCResult
627 0 : DocAccessibleChild::RecvScrollSubstringToPoint(const uint64_t& aID,
628 : const int32_t& aStartOffset,
629 : const int32_t& aEndOffset,
630 : const uint32_t& aCoordinateType,
631 : const int32_t& aX,
632 : const int32_t& aY)
633 : {
634 0 : HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
635 0 : if (acc) {
636 0 : acc->ScrollSubstringToPoint(aStartOffset, aEndOffset, aCoordinateType,
637 0 : aX, aY);
638 : }
639 :
640 0 : return IPC_OK();
641 : }
642 :
643 : mozilla::ipc::IPCResult
644 0 : DocAccessibleChild::RecvText(const uint64_t& aID,
645 : nsString* aText)
646 : {
647 0 : TextLeafAccessible* acc = IdToTextLeafAccessible(aID);
648 0 : if (acc) {
649 0 : *aText = acc->Text();
650 : }
651 :
652 0 : return IPC_OK();
653 : }
654 :
655 : mozilla::ipc::IPCResult
656 0 : DocAccessibleChild::RecvReplaceText(const uint64_t& aID,
657 : const nsString& aText)
658 : {
659 0 : HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
660 0 : if (acc && acc->IsTextRole()) {
661 0 : acc->ReplaceText(aText);
662 : }
663 :
664 0 : return IPC_OK();
665 : }
666 :
667 : mozilla::ipc::IPCResult
668 0 : DocAccessibleChild::RecvInsertText(const uint64_t& aID,
669 : const nsString& aText,
670 : const int32_t& aPosition, bool* aValid)
671 : {
672 0 : HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
673 0 : if (acc && acc->IsTextRole()) {
674 0 : *aValid = acc->IsValidOffset(aPosition);
675 0 : acc->InsertText(aText, aPosition);
676 : }
677 :
678 0 : return IPC_OK();
679 : }
680 :
681 : mozilla::ipc::IPCResult
682 0 : DocAccessibleChild::RecvCopyText(const uint64_t& aID,
683 : const int32_t& aStartPos,
684 : const int32_t& aEndPos, bool* aValid)
685 : {
686 0 : HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
687 0 : if (acc && acc->IsTextRole()) {
688 0 : acc->CopyText(aStartPos, aEndPos);
689 : }
690 :
691 0 : return IPC_OK();
692 : }
693 :
694 : mozilla::ipc::IPCResult
695 0 : DocAccessibleChild::RecvCutText(const uint64_t& aID,
696 : const int32_t& aStartPos,
697 : const int32_t& aEndPos, bool* aValid)
698 : {
699 0 : HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
700 0 : if (acc && acc->IsTextRole()) {
701 0 : *aValid = acc->IsValidRange(aStartPos, aEndPos);
702 0 : acc->CutText(aStartPos, aEndPos);
703 : }
704 :
705 0 : return IPC_OK();
706 : }
707 :
708 : mozilla::ipc::IPCResult
709 0 : DocAccessibleChild::RecvDeleteText(const uint64_t& aID,
710 : const int32_t& aStartPos,
711 : const int32_t& aEndPos, bool* aValid)
712 : {
713 0 : HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
714 0 : if (acc && acc->IsTextRole()) {
715 0 : *aValid = acc->IsValidRange(aStartPos, aEndPos);
716 0 : acc->DeleteText(aStartPos, aEndPos);
717 : }
718 :
719 0 : return IPC_OK();
720 : }
721 :
722 : mozilla::ipc::IPCResult
723 0 : DocAccessibleChild::RecvPasteText(const uint64_t& aID,
724 : const int32_t& aPosition, bool* aValid)
725 : {
726 0 : HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
727 0 : if (acc && acc->IsTextRole()) {
728 0 : *aValid = acc->IsValidOffset(aPosition);
729 0 : acc->PasteText(aPosition);
730 : }
731 :
732 0 : return IPC_OK();
733 : }
734 :
735 : mozilla::ipc::IPCResult
736 0 : DocAccessibleChild::RecvImagePosition(const uint64_t& aID,
737 : const uint32_t& aCoordType,
738 : nsIntPoint* aRetVal)
739 : {
740 0 : ImageAccessible* acc = IdToImageAccessible(aID);
741 0 : if (acc) {
742 0 : *aRetVal = acc->Position(aCoordType);
743 : }
744 :
745 0 : return IPC_OK();
746 : }
747 :
748 : mozilla::ipc::IPCResult
749 0 : DocAccessibleChild::RecvImageSize(const uint64_t& aID,
750 : nsIntSize* aRetVal)
751 : {
752 :
753 0 : ImageAccessible* acc = IdToImageAccessible(aID);
754 0 : if (acc) {
755 0 : *aRetVal = acc->Size();
756 : }
757 :
758 0 : return IPC_OK();
759 : }
760 :
761 : mozilla::ipc::IPCResult
762 0 : DocAccessibleChild::RecvStartOffset(const uint64_t& aID,
763 : uint32_t* aRetVal,
764 : bool* aOk)
765 : {
766 0 : Accessible* acc = IdToAccessibleLink(aID);
767 0 : if (acc) {
768 0 : *aRetVal = acc->StartOffset();
769 0 : *aOk = true;
770 : } else {
771 0 : *aRetVal = 0;
772 0 : *aOk = false;
773 : }
774 :
775 0 : return IPC_OK();
776 : }
777 :
778 : mozilla::ipc::IPCResult
779 0 : DocAccessibleChild::RecvEndOffset(const uint64_t& aID,
780 : uint32_t* aRetVal,
781 : bool* aOk)
782 : {
783 0 : Accessible* acc = IdToAccessibleLink(aID);
784 0 : if (acc) {
785 0 : *aRetVal = acc->EndOffset();
786 0 : *aOk = true;
787 : } else {
788 0 : *aRetVal = 0;
789 0 : *aOk = false;
790 : }
791 :
792 0 : return IPC_OK();
793 : }
794 :
795 : mozilla::ipc::IPCResult
796 0 : DocAccessibleChild::RecvIsLinkValid(const uint64_t& aID,
797 : bool* aRetVal)
798 : {
799 0 : Accessible* acc = IdToAccessibleLink(aID);
800 0 : if (acc) {
801 0 : *aRetVal = acc->IsLinkValid();
802 : } else {
803 0 : *aRetVal = false;
804 : }
805 :
806 0 : return IPC_OK();
807 : }
808 :
809 : mozilla::ipc::IPCResult
810 0 : DocAccessibleChild::RecvAnchorCount(const uint64_t& aID,
811 : uint32_t* aRetVal,
812 : bool* aOk)
813 : {
814 0 : Accessible* acc = IdToAccessibleLink(aID);
815 0 : if (acc) {
816 0 : *aRetVal = acc->AnchorCount();
817 0 : *aOk = true;
818 : } else {
819 0 : *aRetVal = 0;
820 0 : *aOk = false;
821 : }
822 :
823 0 : return IPC_OK();
824 : }
825 :
826 : mozilla::ipc::IPCResult
827 0 : DocAccessibleChild::RecvAnchorURIAt(const uint64_t& aID,
828 : const uint32_t& aIndex,
829 : nsCString* aURI,
830 : bool* aOk)
831 : {
832 0 : Accessible* acc = IdToAccessibleLink(aID);
833 0 : *aOk = false;
834 0 : if (acc) {
835 0 : nsCOMPtr<nsIURI> uri = acc->AnchorURIAt(aIndex);
836 0 : if (uri) {
837 0 : uri->GetSpec(*aURI);
838 0 : *aOk = true;
839 : }
840 : }
841 :
842 0 : return IPC_OK();
843 : }
844 :
845 : mozilla::ipc::IPCResult
846 0 : DocAccessibleChild::RecvAnchorAt(const uint64_t& aID,
847 : const uint32_t& aIndex,
848 : uint64_t* aIDOfAnchor,
849 : bool* aOk)
850 : {
851 0 : *aIDOfAnchor = 0;
852 0 : *aOk = false;
853 0 : Accessible* acc = IdToAccessibleLink(aID);
854 0 : if (acc) {
855 0 : Accessible* anchor = acc->AnchorAt(aIndex);
856 0 : if (anchor) {
857 0 : *aIDOfAnchor = reinterpret_cast<uint64_t>(anchor->UniqueID());
858 0 : *aOk = true;
859 : }
860 : }
861 :
862 0 : return IPC_OK();
863 : }
864 :
865 : mozilla::ipc::IPCResult
866 0 : DocAccessibleChild::RecvLinkCount(const uint64_t& aID,
867 : uint32_t* aCount)
868 : {
869 0 : HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
870 0 : *aCount = acc ? acc->LinkCount() : 0;
871 0 : return IPC_OK();
872 : }
873 :
874 : mozilla::ipc::IPCResult
875 0 : DocAccessibleChild::RecvLinkAt(const uint64_t& aID,
876 : const uint32_t& aIndex,
877 : uint64_t* aIDOfLink,
878 : bool* aOk)
879 : {
880 0 : *aIDOfLink = 0;
881 0 : *aOk = false;
882 0 : HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
883 0 : if (acc) {
884 0 : Accessible* link = acc->LinkAt(aIndex);
885 0 : if (link) {
886 0 : *aIDOfLink = reinterpret_cast<uint64_t>(link->UniqueID());
887 0 : *aOk = true;
888 : }
889 : }
890 :
891 0 : return IPC_OK();
892 : }
893 :
894 : mozilla::ipc::IPCResult
895 0 : DocAccessibleChild::RecvLinkIndexOf(const uint64_t& aID,
896 : const uint64_t& aLinkID,
897 : int32_t* aIndex)
898 : {
899 0 : HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
900 0 : Accessible* link = IdToAccessible(aLinkID);
901 0 : *aIndex = -1;
902 0 : if (acc && link) {
903 0 : *aIndex = acc->LinkIndexOf(link);
904 : }
905 :
906 0 : return IPC_OK();
907 : }
908 :
909 : mozilla::ipc::IPCResult
910 0 : DocAccessibleChild::RecvLinkIndexAtOffset(const uint64_t& aID,
911 : const uint32_t& aOffset,
912 : int32_t* aIndex)
913 : {
914 0 : HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
915 0 : *aIndex = acc ? acc->LinkIndexAtOffset(aOffset) : -1;
916 0 : return IPC_OK();
917 : }
918 :
919 : mozilla::ipc::IPCResult
920 0 : DocAccessibleChild::RecvTableOfACell(const uint64_t& aID,
921 : uint64_t* aTableID,
922 : bool* aOk)
923 : {
924 0 : *aTableID = 0;
925 0 : *aOk = false;
926 0 : TableCellAccessible* acc = IdToTableCellAccessible(aID);
927 0 : if (acc) {
928 0 : TableAccessible* table = acc->Table();
929 0 : if (table) {
930 0 : *aTableID = reinterpret_cast<uint64_t>(table->AsAccessible()->UniqueID());
931 0 : *aOk = true;
932 : }
933 : }
934 :
935 0 : return IPC_OK();
936 : }
937 :
938 : mozilla::ipc::IPCResult
939 0 : DocAccessibleChild::RecvColIdx(const uint64_t& aID,
940 : uint32_t* aIndex)
941 : {
942 0 : *aIndex = 0;
943 0 : TableCellAccessible* acc = IdToTableCellAccessible(aID);
944 0 : if (acc) {
945 0 : *aIndex = acc->ColIdx();
946 : }
947 :
948 0 : return IPC_OK();
949 : }
950 :
951 : mozilla::ipc::IPCResult
952 0 : DocAccessibleChild::RecvRowIdx(const uint64_t& aID,
953 : uint32_t* aIndex)
954 : {
955 0 : *aIndex = 0;
956 0 : TableCellAccessible* acc = IdToTableCellAccessible(aID);
957 0 : if (acc) {
958 0 : *aIndex = acc->RowIdx();
959 : }
960 :
961 0 : return IPC_OK();
962 : }
963 :
964 : mozilla::ipc::IPCResult
965 0 : DocAccessibleChild::RecvGetPosition(const uint64_t& aID,
966 : uint32_t* aColIdx, uint32_t* aRowIdx)
967 : {
968 0 : *aColIdx = 0;
969 0 : *aRowIdx = 0;
970 0 : TableCellAccessible* acc = IdToTableCellAccessible(aID);
971 0 : if (acc) {
972 0 : *aColIdx = acc->ColIdx();
973 0 : *aRowIdx = acc->RowIdx();
974 : }
975 :
976 0 : return IPC_OK();
977 : }
978 :
979 : mozilla::ipc::IPCResult
980 0 : DocAccessibleChild::RecvGetColRowExtents(const uint64_t& aID,
981 : uint32_t* aColIdx, uint32_t* aRowIdx,
982 : uint32_t* aColExtent, uint32_t* aRowExtent)
983 : {
984 0 : *aColIdx = 0;
985 0 : *aRowIdx = 0;
986 0 : *aColExtent = 0;
987 0 : *aRowExtent = 0;
988 0 : TableCellAccessible* acc = IdToTableCellAccessible(aID);
989 0 : if (acc) {
990 0 : *aColIdx = acc->ColIdx();
991 0 : *aRowIdx = acc->RowIdx();
992 0 : *aColExtent = acc->ColExtent();
993 0 : *aRowExtent = acc->RowExtent();
994 : }
995 :
996 0 : return IPC_OK();
997 : }
998 :
999 : mozilla::ipc::IPCResult
1000 0 : DocAccessibleChild::RecvColExtent(const uint64_t& aID,
1001 : uint32_t* aExtent)
1002 : {
1003 0 : *aExtent = 0;
1004 0 : TableCellAccessible* acc = IdToTableCellAccessible(aID);
1005 0 : if (acc) {
1006 0 : *aExtent = acc->ColExtent();
1007 : }
1008 :
1009 0 : return IPC_OK();
1010 : }
1011 :
1012 : mozilla::ipc::IPCResult
1013 0 : DocAccessibleChild::RecvRowExtent(const uint64_t& aID,
1014 : uint32_t* aExtent)
1015 : {
1016 0 : *aExtent = 0;
1017 0 : TableCellAccessible* acc = IdToTableCellAccessible(aID);
1018 0 : if (acc) {
1019 0 : *aExtent = acc->RowExtent();
1020 : }
1021 :
1022 0 : return IPC_OK();
1023 : }
1024 :
1025 : mozilla::ipc::IPCResult
1026 0 : DocAccessibleChild::RecvColHeaderCells(const uint64_t& aID,
1027 : nsTArray<uint64_t>* aCells)
1028 : {
1029 0 : TableCellAccessible* acc = IdToTableCellAccessible(aID);
1030 0 : if (acc) {
1031 0 : AutoTArray<Accessible*, 10> headerCells;
1032 0 : acc->ColHeaderCells(&headerCells);
1033 0 : aCells->SetCapacity(headerCells.Length());
1034 0 : for (uint32_t i = 0; i < headerCells.Length(); ++i) {
1035 0 : aCells->AppendElement(
1036 0 : reinterpret_cast<uint64_t>(headerCells[i]->UniqueID()));
1037 : }
1038 : }
1039 :
1040 0 : return IPC_OK();
1041 : }
1042 :
1043 : mozilla::ipc::IPCResult
1044 0 : DocAccessibleChild::RecvRowHeaderCells(const uint64_t& aID,
1045 : nsTArray<uint64_t>* aCells)
1046 : {
1047 0 : TableCellAccessible* acc = IdToTableCellAccessible(aID);
1048 0 : if (acc) {
1049 0 : AutoTArray<Accessible*, 10> headerCells;
1050 0 : acc->RowHeaderCells(&headerCells);
1051 0 : aCells->SetCapacity(headerCells.Length());
1052 0 : for (uint32_t i = 0; i < headerCells.Length(); ++i) {
1053 0 : aCells->AppendElement(
1054 0 : reinterpret_cast<uint64_t>(headerCells[i]->UniqueID()));
1055 : }
1056 : }
1057 :
1058 0 : return IPC_OK();
1059 : }
1060 :
1061 : mozilla::ipc::IPCResult
1062 0 : DocAccessibleChild::RecvIsCellSelected(const uint64_t& aID,
1063 : bool* aSelected)
1064 : {
1065 0 : TableCellAccessible* acc = IdToTableCellAccessible(aID);
1066 0 : *aSelected = acc && acc->Selected();
1067 0 : return IPC_OK();
1068 : }
1069 :
1070 : mozilla::ipc::IPCResult
1071 0 : DocAccessibleChild::RecvTableCaption(const uint64_t& aID,
1072 : uint64_t* aCaptionID,
1073 : bool* aOk)
1074 : {
1075 0 : *aCaptionID = 0;
1076 0 : *aOk = false;
1077 0 : TableAccessible* acc = IdToTableAccessible(aID);
1078 0 : if (acc) {
1079 0 : Accessible* caption = acc->Caption();
1080 0 : if (caption) {
1081 0 : *aCaptionID = reinterpret_cast<uint64_t>(caption->UniqueID());
1082 0 : *aOk = true;
1083 : }
1084 : }
1085 :
1086 0 : return IPC_OK();
1087 : }
1088 :
1089 : mozilla::ipc::IPCResult
1090 0 : DocAccessibleChild::RecvTableSummary(const uint64_t& aID,
1091 : nsString* aSummary)
1092 : {
1093 0 : TableAccessible* acc = IdToTableAccessible(aID);
1094 0 : if (acc) {
1095 0 : acc->Summary(*aSummary);
1096 : }
1097 :
1098 0 : return IPC_OK();
1099 : }
1100 :
1101 : mozilla::ipc::IPCResult
1102 0 : DocAccessibleChild::RecvTableColumnCount(const uint64_t& aID,
1103 : uint32_t* aColCount)
1104 : {
1105 0 : *aColCount = 0;
1106 0 : TableAccessible* acc = IdToTableAccessible(aID);
1107 0 : if (acc) {
1108 0 : *aColCount = acc->ColCount();
1109 : }
1110 :
1111 0 : return IPC_OK();
1112 : }
1113 :
1114 : mozilla::ipc::IPCResult
1115 0 : DocAccessibleChild::RecvTableRowCount(const uint64_t& aID,
1116 : uint32_t* aRowCount)
1117 : {
1118 0 : *aRowCount = 0;
1119 0 : TableAccessible* acc = IdToTableAccessible(aID);
1120 0 : if (acc) {
1121 0 : *aRowCount = acc->RowCount();
1122 : }
1123 :
1124 0 : return IPC_OK();
1125 : }
1126 :
1127 : mozilla::ipc::IPCResult
1128 0 : DocAccessibleChild::RecvTableCellAt(const uint64_t& aID,
1129 : const uint32_t& aRow,
1130 : const uint32_t& aCol,
1131 : uint64_t* aCellID,
1132 : bool* aOk)
1133 : {
1134 0 : *aCellID = 0;
1135 0 : *aOk = false;
1136 0 : TableAccessible* acc = IdToTableAccessible(aID);
1137 0 : if (acc) {
1138 0 : Accessible* cell = acc->CellAt(aRow, aCol);
1139 0 : if (cell) {
1140 0 : *aCellID = reinterpret_cast<uint64_t>(cell->UniqueID());
1141 0 : *aOk = true;
1142 : }
1143 : }
1144 :
1145 0 : return IPC_OK();
1146 : }
1147 :
1148 : mozilla::ipc::IPCResult
1149 0 : DocAccessibleChild::RecvTableCellIndexAt(const uint64_t& aID,
1150 : const uint32_t& aRow,
1151 : const uint32_t& aCol,
1152 : int32_t* aIndex)
1153 : {
1154 0 : *aIndex = -1;
1155 0 : TableAccessible* acc = IdToTableAccessible(aID);
1156 0 : if (acc) {
1157 0 : *aIndex = acc->CellIndexAt(aRow, aCol);
1158 : }
1159 :
1160 0 : return IPC_OK();
1161 : }
1162 :
1163 : mozilla::ipc::IPCResult
1164 0 : DocAccessibleChild::RecvTableColumnIndexAt(const uint64_t& aID,
1165 : const uint32_t& aCellIndex,
1166 : int32_t* aCol)
1167 : {
1168 0 : *aCol = -1;
1169 0 : TableAccessible* acc = IdToTableAccessible(aID);
1170 0 : if (acc) {
1171 0 : *aCol = acc->ColIndexAt(aCellIndex);
1172 : }
1173 :
1174 0 : return IPC_OK();
1175 : }
1176 :
1177 : mozilla::ipc::IPCResult
1178 0 : DocAccessibleChild::RecvTableRowIndexAt(const uint64_t& aID,
1179 : const uint32_t& aCellIndex,
1180 : int32_t* aRow)
1181 : {
1182 0 : *aRow = -1;
1183 0 : TableAccessible* acc = IdToTableAccessible(aID);
1184 0 : if (acc) {
1185 0 : *aRow = acc->RowIndexAt(aCellIndex);
1186 : }
1187 :
1188 0 : return IPC_OK();
1189 : }
1190 :
1191 : mozilla::ipc::IPCResult
1192 0 : DocAccessibleChild::RecvTableRowAndColumnIndicesAt(const uint64_t& aID,
1193 : const uint32_t& aCellIndex,
1194 : int32_t* aRow,
1195 : int32_t* aCol)
1196 : {
1197 0 : *aRow = -1;
1198 0 : *aCol = -1;
1199 0 : TableAccessible* acc = IdToTableAccessible(aID);
1200 0 : if (acc) {
1201 0 : acc->RowAndColIndicesAt(aCellIndex, aRow, aCol);
1202 : }
1203 :
1204 0 : return IPC_OK();
1205 : }
1206 :
1207 : mozilla::ipc::IPCResult
1208 0 : DocAccessibleChild::RecvTableColumnExtentAt(const uint64_t& aID,
1209 : const uint32_t& aRow,
1210 : const uint32_t& aCol,
1211 : uint32_t* aExtent)
1212 : {
1213 0 : *aExtent = 0;
1214 0 : TableAccessible* acc = IdToTableAccessible(aID);
1215 0 : if (acc) {
1216 0 : *aExtent = acc->ColExtentAt(aRow, aCol);
1217 : }
1218 :
1219 0 : return IPC_OK();
1220 : }
1221 :
1222 : mozilla::ipc::IPCResult
1223 0 : DocAccessibleChild::RecvTableRowExtentAt(const uint64_t& aID,
1224 : const uint32_t& aRow,
1225 : const uint32_t& aCol,
1226 : uint32_t* aExtent)
1227 : {
1228 0 : *aExtent = 0;
1229 0 : TableAccessible* acc = IdToTableAccessible(aID);
1230 0 : if (acc) {
1231 0 : *aExtent = acc->RowExtentAt(aRow, aCol);
1232 : }
1233 :
1234 0 : return IPC_OK();
1235 : }
1236 :
1237 : mozilla::ipc::IPCResult
1238 0 : DocAccessibleChild::RecvTableColumnDescription(const uint64_t& aID,
1239 : const uint32_t& aCol,
1240 : nsString* aDescription)
1241 : {
1242 0 : TableAccessible* acc = IdToTableAccessible(aID);
1243 0 : if (acc) {
1244 0 : acc->ColDescription(aCol, *aDescription);
1245 : }
1246 :
1247 0 : return IPC_OK();
1248 : }
1249 :
1250 : mozilla::ipc::IPCResult
1251 0 : DocAccessibleChild::RecvTableRowDescription(const uint64_t& aID,
1252 : const uint32_t& aRow,
1253 : nsString* aDescription)
1254 : {
1255 0 : TableAccessible* acc = IdToTableAccessible(aID);
1256 0 : if (acc) {
1257 0 : acc->RowDescription(aRow, *aDescription);
1258 : }
1259 :
1260 0 : return IPC_OK();
1261 : }
1262 :
1263 : mozilla::ipc::IPCResult
1264 0 : DocAccessibleChild::RecvTableColumnSelected(const uint64_t& aID,
1265 : const uint32_t& aCol,
1266 : bool* aSelected)
1267 : {
1268 0 : *aSelected = false;
1269 0 : TableAccessible* acc = IdToTableAccessible(aID);
1270 0 : if (acc) {
1271 0 : *aSelected = acc->IsColSelected(aCol);
1272 : }
1273 :
1274 0 : return IPC_OK();
1275 : }
1276 :
1277 : mozilla::ipc::IPCResult
1278 0 : DocAccessibleChild::RecvTableRowSelected(const uint64_t& aID,
1279 : const uint32_t& aRow,
1280 : bool* aSelected)
1281 : {
1282 0 : *aSelected = false;
1283 0 : TableAccessible* acc = IdToTableAccessible(aID);
1284 0 : if (acc) {
1285 0 : *aSelected = acc->IsRowSelected(aRow);
1286 : }
1287 :
1288 0 : return IPC_OK();
1289 : }
1290 :
1291 : mozilla::ipc::IPCResult
1292 0 : DocAccessibleChild::RecvTableCellSelected(const uint64_t& aID,
1293 : const uint32_t& aRow,
1294 : const uint32_t& aCol,
1295 : bool* aSelected)
1296 : {
1297 0 : *aSelected = false;
1298 0 : TableAccessible* acc = IdToTableAccessible(aID);
1299 0 : if (acc) {
1300 0 : *aSelected = acc->IsCellSelected(aRow, aCol);
1301 : }
1302 :
1303 0 : return IPC_OK();
1304 : }
1305 :
1306 : mozilla::ipc::IPCResult
1307 0 : DocAccessibleChild::RecvTableSelectedCellCount(const uint64_t& aID,
1308 : uint32_t* aSelectedCells)
1309 : {
1310 0 : *aSelectedCells = 0;
1311 0 : TableAccessible* acc = IdToTableAccessible(aID);
1312 0 : if (acc) {
1313 0 : *aSelectedCells = acc->SelectedCellCount();
1314 : }
1315 :
1316 0 : return IPC_OK();
1317 : }
1318 :
1319 : mozilla::ipc::IPCResult
1320 0 : DocAccessibleChild::RecvTableSelectedColumnCount(const uint64_t& aID,
1321 : uint32_t* aSelectedColumns)
1322 : {
1323 0 : *aSelectedColumns = 0;
1324 0 : TableAccessible* acc = IdToTableAccessible(aID);
1325 0 : if (acc) {
1326 0 : *aSelectedColumns = acc->SelectedColCount();
1327 : }
1328 :
1329 0 : return IPC_OK();
1330 : }
1331 :
1332 : mozilla::ipc::IPCResult
1333 0 : DocAccessibleChild::RecvTableSelectedRowCount(const uint64_t& aID,
1334 : uint32_t* aSelectedRows)
1335 : {
1336 0 : *aSelectedRows = 0;
1337 0 : TableAccessible* acc = IdToTableAccessible(aID);
1338 0 : if (acc) {
1339 0 : *aSelectedRows = acc->SelectedRowCount();
1340 : }
1341 :
1342 0 : return IPC_OK();
1343 : }
1344 :
1345 : mozilla::ipc::IPCResult
1346 0 : DocAccessibleChild::RecvTableSelectedCells(const uint64_t& aID,
1347 : nsTArray<uint64_t>* aCellIDs)
1348 : {
1349 0 : TableAccessible* acc = IdToTableAccessible(aID);
1350 0 : if (acc) {
1351 0 : AutoTArray<Accessible*, 30> cells;
1352 0 : acc->SelectedCells(&cells);
1353 0 : aCellIDs->SetCapacity(cells.Length());
1354 0 : for (uint32_t i = 0; i < cells.Length(); ++i) {
1355 0 : aCellIDs->AppendElement(
1356 0 : reinterpret_cast<uint64_t>(cells[i]->UniqueID()));
1357 : }
1358 : }
1359 :
1360 0 : return IPC_OK();
1361 : }
1362 :
1363 : mozilla::ipc::IPCResult
1364 0 : DocAccessibleChild::RecvTableSelectedCellIndices(const uint64_t& aID,
1365 : nsTArray<uint32_t>* aCellIndices)
1366 : {
1367 0 : TableAccessible* acc = IdToTableAccessible(aID);
1368 0 : if (acc) {
1369 0 : acc->SelectedCellIndices(aCellIndices);
1370 : }
1371 :
1372 0 : return IPC_OK();
1373 : }
1374 :
1375 : mozilla::ipc::IPCResult
1376 0 : DocAccessibleChild::RecvTableSelectedColumnIndices(const uint64_t& aID,
1377 : nsTArray<uint32_t>* aColumnIndices)
1378 : {
1379 0 : TableAccessible* acc = IdToTableAccessible(aID);
1380 0 : if (acc) {
1381 0 : acc->SelectedColIndices(aColumnIndices);
1382 : }
1383 :
1384 0 : return IPC_OK();
1385 : }
1386 :
1387 : mozilla::ipc::IPCResult
1388 0 : DocAccessibleChild::RecvTableSelectedRowIndices(const uint64_t& aID,
1389 : nsTArray<uint32_t>* aRowIndices)
1390 : {
1391 0 : TableAccessible* acc = IdToTableAccessible(aID);
1392 0 : if (acc) {
1393 0 : acc->SelectedRowIndices(aRowIndices);
1394 : }
1395 :
1396 0 : return IPC_OK();
1397 : }
1398 :
1399 : mozilla::ipc::IPCResult
1400 0 : DocAccessibleChild::RecvTableSelectColumn(const uint64_t& aID,
1401 : const uint32_t& aCol)
1402 : {
1403 0 : TableAccessible* acc = IdToTableAccessible(aID);
1404 0 : if (acc) {
1405 0 : acc->SelectCol(aCol);
1406 : }
1407 :
1408 0 : return IPC_OK();
1409 : }
1410 :
1411 : mozilla::ipc::IPCResult
1412 0 : DocAccessibleChild::RecvTableSelectRow(const uint64_t& aID,
1413 : const uint32_t& aRow)
1414 : {
1415 0 : TableAccessible* acc = IdToTableAccessible(aID);
1416 0 : if (acc) {
1417 0 : acc->SelectRow(aRow);
1418 : }
1419 :
1420 0 : return IPC_OK();
1421 : }
1422 :
1423 : mozilla::ipc::IPCResult
1424 0 : DocAccessibleChild::RecvTableUnselectColumn(const uint64_t& aID,
1425 : const uint32_t& aCol)
1426 : {
1427 0 : TableAccessible* acc = IdToTableAccessible(aID);
1428 0 : if (acc) {
1429 0 : acc->UnselectCol(aCol);
1430 : }
1431 :
1432 0 : return IPC_OK();
1433 : }
1434 :
1435 : mozilla::ipc::IPCResult
1436 0 : DocAccessibleChild::RecvTableUnselectRow(const uint64_t& aID,
1437 : const uint32_t& aRow)
1438 : {
1439 0 : TableAccessible* acc = IdToTableAccessible(aID);
1440 0 : if (acc) {
1441 0 : acc->UnselectRow(aRow);
1442 : }
1443 :
1444 0 : return IPC_OK();
1445 : }
1446 :
1447 : mozilla::ipc::IPCResult
1448 0 : DocAccessibleChild::RecvTableIsProbablyForLayout(const uint64_t& aID,
1449 : bool* aForLayout)
1450 : {
1451 0 : *aForLayout = false;
1452 0 : TableAccessible* acc = IdToTableAccessible(aID);
1453 0 : if (acc) {
1454 0 : *aForLayout = acc->IsProbablyLayoutTable();
1455 : }
1456 :
1457 0 : return IPC_OK();
1458 : }
1459 :
1460 : mozilla::ipc::IPCResult
1461 0 : DocAccessibleChild::RecvAtkTableColumnHeader(const uint64_t& aID,
1462 : const int32_t& aCol,
1463 : uint64_t* aHeader,
1464 : bool* aOk)
1465 : {
1466 0 : *aHeader = 0;
1467 0 : *aOk = false;
1468 :
1469 : #ifdef MOZ_ACCESSIBILITY_ATK
1470 0 : TableAccessible* acc = IdToTableAccessible(aID);
1471 0 : if (acc) {
1472 0 : Accessible* header = AccessibleWrap::GetColumnHeader(acc, aCol);
1473 0 : if (header) {
1474 0 : *aHeader = reinterpret_cast<uint64_t>(header->UniqueID());
1475 0 : *aOk = true;
1476 : }
1477 : }
1478 : #endif
1479 :
1480 0 : return IPC_OK();
1481 : }
1482 :
1483 : mozilla::ipc::IPCResult
1484 0 : DocAccessibleChild::RecvAtkTableRowHeader(const uint64_t& aID,
1485 : const int32_t& aRow,
1486 : uint64_t* aHeader,
1487 : bool* aOk)
1488 : {
1489 0 : *aHeader = 0;
1490 0 : *aOk = false;
1491 :
1492 : #ifdef MOZ_ACCESSIBILITY_ATK
1493 0 : TableAccessible* acc = IdToTableAccessible(aID);
1494 0 : if (acc) {
1495 0 : Accessible* header = AccessibleWrap::GetRowHeader(acc, aRow);
1496 0 : if (header) {
1497 0 : *aHeader = reinterpret_cast<uint64_t>(header->UniqueID());
1498 0 : *aOk = true;
1499 : }
1500 : }
1501 : #endif
1502 :
1503 0 : return IPC_OK();
1504 : }
1505 :
1506 : mozilla::ipc::IPCResult
1507 0 : DocAccessibleChild::RecvSelectedItems(const uint64_t& aID,
1508 : nsTArray<uint64_t>* aSelectedItemIDs)
1509 : {
1510 0 : Accessible* acc = IdToAccessibleSelect(aID);
1511 0 : if (acc) {
1512 0 : AutoTArray<Accessible*, 10> selectedItems;
1513 0 : acc->SelectedItems(&selectedItems);
1514 0 : aSelectedItemIDs->SetCapacity(selectedItems.Length());
1515 0 : for (size_t i = 0; i < selectedItems.Length(); ++i) {
1516 0 : aSelectedItemIDs->AppendElement(
1517 0 : reinterpret_cast<uint64_t>(selectedItems[i]->UniqueID()));
1518 : }
1519 : }
1520 :
1521 0 : return IPC_OK();
1522 : }
1523 :
1524 : mozilla::ipc::IPCResult
1525 0 : DocAccessibleChild::RecvSelectedItemCount(const uint64_t& aID,
1526 : uint32_t* aCount)
1527 : {
1528 0 : *aCount = 0;
1529 0 : Accessible* acc = IdToAccessibleSelect(aID);
1530 0 : if (acc) {
1531 0 : *aCount = acc->SelectedItemCount();
1532 : }
1533 :
1534 0 : return IPC_OK();
1535 : }
1536 :
1537 : mozilla::ipc::IPCResult
1538 0 : DocAccessibleChild::RecvGetSelectedItem(const uint64_t& aID,
1539 : const uint32_t& aIndex,
1540 : uint64_t* aSelected,
1541 : bool* aOk)
1542 : {
1543 0 : *aSelected = 0;
1544 0 : *aOk = false;
1545 0 : Accessible* acc = IdToAccessibleSelect(aID);
1546 0 : if (acc) {
1547 0 : Accessible* item = acc->GetSelectedItem(aIndex);
1548 0 : if (item) {
1549 0 : *aSelected = reinterpret_cast<uint64_t>(item->UniqueID());
1550 0 : *aOk = true;
1551 : }
1552 : }
1553 :
1554 0 : return IPC_OK();
1555 : }
1556 :
1557 : mozilla::ipc::IPCResult
1558 0 : DocAccessibleChild::RecvIsItemSelected(const uint64_t& aID,
1559 : const uint32_t& aIndex,
1560 : bool* aSelected)
1561 : {
1562 0 : *aSelected = false;
1563 0 : Accessible* acc = IdToAccessibleSelect(aID);
1564 0 : if (acc) {
1565 0 : *aSelected = acc->IsItemSelected(aIndex);
1566 : }
1567 :
1568 0 : return IPC_OK();
1569 : }
1570 :
1571 : mozilla::ipc::IPCResult
1572 0 : DocAccessibleChild::RecvAddItemToSelection(const uint64_t& aID,
1573 : const uint32_t& aIndex,
1574 : bool* aSuccess)
1575 : {
1576 0 : *aSuccess = false;
1577 0 : Accessible* acc = IdToAccessibleSelect(aID);
1578 0 : if (acc) {
1579 0 : *aSuccess = acc->AddItemToSelection(aIndex);
1580 : }
1581 :
1582 0 : return IPC_OK();
1583 : }
1584 :
1585 : mozilla::ipc::IPCResult
1586 0 : DocAccessibleChild::RecvRemoveItemFromSelection(const uint64_t& aID,
1587 : const uint32_t& aIndex,
1588 : bool* aSuccess)
1589 : {
1590 0 : *aSuccess = false;
1591 0 : Accessible* acc = IdToAccessibleSelect(aID);
1592 0 : if (acc) {
1593 0 : *aSuccess = acc->RemoveItemFromSelection(aIndex);
1594 : }
1595 :
1596 0 : return IPC_OK();
1597 : }
1598 :
1599 : mozilla::ipc::IPCResult
1600 0 : DocAccessibleChild::RecvSelectAll(const uint64_t& aID,
1601 : bool* aSuccess)
1602 : {
1603 0 : *aSuccess = false;
1604 0 : Accessible* acc = IdToAccessibleSelect(aID);
1605 0 : if (acc) {
1606 0 : *aSuccess = acc->SelectAll();
1607 : }
1608 :
1609 0 : return IPC_OK();
1610 : }
1611 :
1612 : mozilla::ipc::IPCResult
1613 0 : DocAccessibleChild::RecvUnselectAll(const uint64_t& aID,
1614 : bool* aSuccess)
1615 : {
1616 0 : *aSuccess = false;
1617 0 : Accessible* acc = IdToAccessibleSelect(aID);
1618 0 : if (acc) {
1619 0 : *aSuccess = acc->UnselectAll();
1620 : }
1621 :
1622 0 : return IPC_OK();
1623 : }
1624 :
1625 : mozilla::ipc::IPCResult
1626 0 : DocAccessibleChild::RecvTakeSelection(const uint64_t& aID)
1627 : {
1628 0 : Accessible* acc = IdToAccessible(aID);
1629 0 : if (acc) {
1630 0 : acc->TakeSelection();
1631 : }
1632 :
1633 0 : return IPC_OK();
1634 : }
1635 :
1636 : mozilla::ipc::IPCResult
1637 0 : DocAccessibleChild::RecvSetSelected(const uint64_t& aID, const bool& aSelect)
1638 : {
1639 0 : Accessible* acc = IdToAccessible(aID);
1640 0 : if (acc) {
1641 0 : acc->SetSelected(aSelect);
1642 : }
1643 :
1644 0 : return IPC_OK();
1645 : }
1646 :
1647 : mozilla::ipc::IPCResult
1648 0 : DocAccessibleChild::RecvDoAction(const uint64_t& aID,
1649 : const uint8_t& aIndex,
1650 : bool* aSuccess)
1651 : {
1652 0 : *aSuccess = false;
1653 0 : Accessible* acc = IdToAccessible(aID);
1654 0 : if (acc) {
1655 0 : *aSuccess = acc->DoAction(aIndex);
1656 : }
1657 :
1658 0 : return IPC_OK();
1659 : }
1660 :
1661 : mozilla::ipc::IPCResult
1662 0 : DocAccessibleChild::RecvActionCount(const uint64_t& aID,
1663 : uint8_t* aCount)
1664 : {
1665 0 : *aCount = 0;
1666 0 : Accessible* acc = IdToAccessible(aID);
1667 0 : if (acc) {
1668 0 : *aCount = acc->ActionCount();
1669 : }
1670 :
1671 0 : return IPC_OK();
1672 : }
1673 :
1674 : mozilla::ipc::IPCResult
1675 0 : DocAccessibleChild::RecvActionDescriptionAt(const uint64_t& aID,
1676 : const uint8_t& aIndex,
1677 : nsString* aDescription)
1678 : {
1679 0 : Accessible* acc = IdToAccessible(aID);
1680 0 : if (acc) {
1681 0 : acc->ActionDescriptionAt(aIndex, *aDescription);
1682 : }
1683 :
1684 0 : return IPC_OK();
1685 : }
1686 :
1687 : mozilla::ipc::IPCResult
1688 0 : DocAccessibleChild::RecvActionNameAt(const uint64_t& aID,
1689 : const uint8_t& aIndex,
1690 : nsString* aName)
1691 : {
1692 0 : Accessible* acc = IdToAccessible(aID);
1693 0 : if (acc) {
1694 0 : acc->ActionNameAt(aIndex, *aName);
1695 : }
1696 :
1697 0 : return IPC_OK();
1698 : }
1699 :
1700 : mozilla::ipc::IPCResult
1701 0 : DocAccessibleChild::RecvAccessKey(const uint64_t& aID,
1702 : uint32_t* aKey,
1703 : uint32_t* aModifierMask)
1704 : {
1705 0 : *aKey = 0;
1706 0 : *aModifierMask = 0;
1707 0 : Accessible* acc = IdToAccessible(aID);
1708 0 : if (acc) {
1709 0 : KeyBinding kb = acc->AccessKey();
1710 0 : *aKey = kb.Key();
1711 0 : *aModifierMask = kb.ModifierMask();
1712 : }
1713 :
1714 0 : return IPC_OK();
1715 : }
1716 :
1717 : mozilla::ipc::IPCResult
1718 0 : DocAccessibleChild::RecvKeyboardShortcut(const uint64_t& aID,
1719 : uint32_t* aKey,
1720 : uint32_t* aModifierMask)
1721 : {
1722 0 : *aKey = 0;
1723 0 : *aModifierMask = 0;
1724 0 : Accessible* acc = IdToAccessible(aID);
1725 0 : if (acc) {
1726 0 : KeyBinding kb = acc->KeyboardShortcut();
1727 0 : *aKey = kb.Key();
1728 0 : *aModifierMask = kb.ModifierMask();
1729 : }
1730 :
1731 0 : return IPC_OK();
1732 : }
1733 :
1734 : mozilla::ipc::IPCResult
1735 0 : DocAccessibleChild::RecvAtkKeyBinding(const uint64_t& aID,
1736 : nsString* aResult)
1737 : {
1738 : #ifdef MOZ_ACCESSIBILITY_ATK
1739 0 : Accessible* acc = IdToAccessible(aID);
1740 0 : if (acc) {
1741 0 : AccessibleWrap::GetKeyBinding(acc, *aResult);
1742 : }
1743 : #endif
1744 0 : return IPC_OK();
1745 : }
1746 :
1747 : mozilla::ipc::IPCResult
1748 0 : DocAccessibleChild::RecvCurValue(const uint64_t& aID,
1749 : double* aValue)
1750 : {
1751 0 : *aValue = UnspecifiedNaN<double>();
1752 0 : Accessible* acc = IdToAccessible(aID);
1753 0 : if (acc) {
1754 0 : *aValue = acc->CurValue();
1755 : }
1756 :
1757 0 : return IPC_OK();
1758 : }
1759 :
1760 : mozilla::ipc::IPCResult
1761 0 : DocAccessibleChild::RecvSetCurValue(const uint64_t& aID,
1762 : const double& aValue,
1763 : bool* aRetVal)
1764 : {
1765 0 : *aRetVal = false;
1766 0 : Accessible* acc = IdToAccessible(aID);
1767 0 : if (acc) {
1768 0 : *aRetVal = acc->SetCurValue(aValue);
1769 : }
1770 :
1771 0 : return IPC_OK();
1772 : }
1773 :
1774 : mozilla::ipc::IPCResult
1775 0 : DocAccessibleChild::RecvMinValue(const uint64_t& aID,
1776 : double* aValue)
1777 : {
1778 0 : *aValue = UnspecifiedNaN<double>();
1779 0 : Accessible* acc = IdToAccessible(aID);
1780 0 : if (acc) {
1781 0 : *aValue = acc->MinValue();
1782 : }
1783 :
1784 0 : return IPC_OK();
1785 : }
1786 :
1787 : mozilla::ipc::IPCResult
1788 0 : DocAccessibleChild::RecvMaxValue(const uint64_t& aID,
1789 : double* aValue)
1790 : {
1791 0 : *aValue = UnspecifiedNaN<double>();
1792 0 : Accessible* acc = IdToAccessible(aID);
1793 0 : if (acc) {
1794 0 : *aValue = acc->MaxValue();
1795 : }
1796 :
1797 0 : return IPC_OK();
1798 : }
1799 :
1800 : mozilla::ipc::IPCResult
1801 0 : DocAccessibleChild::RecvStep(const uint64_t& aID,
1802 : double* aStep)
1803 : {
1804 0 : *aStep = UnspecifiedNaN<double>();
1805 0 : Accessible* acc = IdToAccessible(aID);
1806 0 : if (acc) {
1807 0 : *aStep = acc->Step();
1808 : }
1809 :
1810 0 : return IPC_OK();
1811 : }
1812 :
1813 : mozilla::ipc::IPCResult
1814 0 : DocAccessibleChild::RecvTakeFocus(const uint64_t& aID)
1815 : {
1816 0 : Accessible* acc = IdToAccessible(aID);
1817 0 : if (acc) {
1818 0 : acc->TakeFocus();
1819 : }
1820 :
1821 0 : return IPC_OK();
1822 : }
1823 :
1824 : mozilla::ipc::IPCResult
1825 0 : DocAccessibleChild::RecvFocusedChild(const uint64_t& aID,
1826 : uint64_t* aChild,
1827 : bool* aOk)
1828 : {
1829 0 : *aChild = 0;
1830 0 : *aOk = false;
1831 0 : Accessible* acc = IdToAccessible(aID);
1832 0 : if (acc) {
1833 0 : Accessible* child = acc->FocusedChild();
1834 0 : if (child) {
1835 0 : *aChild = reinterpret_cast<uint64_t>(child->UniqueID());
1836 0 : *aOk = true;
1837 : }
1838 : }
1839 0 : return IPC_OK();
1840 : }
1841 :
1842 : mozilla::ipc::IPCResult
1843 0 : DocAccessibleChild::RecvLanguage(const uint64_t& aID,
1844 : nsString* aLocale)
1845 : {
1846 0 : Accessible* acc = IdToAccessible(aID);
1847 0 : if (acc) {
1848 0 : acc->Language(*aLocale);
1849 : }
1850 :
1851 0 : return IPC_OK();
1852 : }
1853 :
1854 : mozilla::ipc::IPCResult
1855 0 : DocAccessibleChild::RecvDocType(const uint64_t& aID,
1856 : nsString* aType)
1857 : {
1858 0 : Accessible* acc = IdToAccessible(aID);
1859 0 : if (acc && acc->IsDoc()) {
1860 0 : acc->AsDoc()->DocType(*aType);
1861 : }
1862 :
1863 0 : return IPC_OK();
1864 : }
1865 :
1866 : mozilla::ipc::IPCResult
1867 0 : DocAccessibleChild::RecvTitle(const uint64_t& aID,
1868 : nsString* aTitle)
1869 : {
1870 0 : Accessible* acc = IdToAccessible(aID);
1871 0 : if (acc) {
1872 0 : mozilla::ErrorResult rv;
1873 0 : acc->GetContent()->GetTextContent(*aTitle, rv);
1874 : }
1875 :
1876 0 : return IPC_OK();
1877 : }
1878 :
1879 : mozilla::ipc::IPCResult
1880 0 : DocAccessibleChild::RecvURL(const uint64_t& aID,
1881 : nsString* aURL)
1882 : {
1883 0 : Accessible* acc = IdToAccessible(aID);
1884 0 : if (acc && acc->IsDoc()) {
1885 0 : acc->AsDoc()->URL(*aURL);
1886 : }
1887 :
1888 0 : return IPC_OK();
1889 : }
1890 :
1891 : mozilla::ipc::IPCResult
1892 0 : DocAccessibleChild::RecvMimeType(const uint64_t& aID,
1893 : nsString* aMime)
1894 : {
1895 0 : Accessible* acc = IdToAccessible(aID);
1896 0 : if (acc && acc->IsDoc()) {
1897 0 : acc->AsDoc()->MimeType(*aMime);
1898 : }
1899 :
1900 0 : return IPC_OK();
1901 : }
1902 :
1903 : mozilla::ipc::IPCResult
1904 0 : DocAccessibleChild::RecvURLDocTypeMimeType(const uint64_t& aID,
1905 : nsString* aURL,
1906 : nsString* aDocType,
1907 : nsString* aMimeType)
1908 : {
1909 0 : Accessible* acc = IdToAccessible(aID);
1910 0 : if (acc && acc->IsDoc()) {
1911 0 : DocAccessible* doc = acc->AsDoc();
1912 0 : doc->URL(*aURL);
1913 0 : doc->DocType(*aDocType);
1914 0 : doc->MimeType(*aMimeType);
1915 : }
1916 :
1917 0 : return IPC_OK();
1918 : }
1919 :
1920 : mozilla::ipc::IPCResult
1921 0 : DocAccessibleChild::RecvAccessibleAtPoint(const uint64_t& aID,
1922 : const int32_t& aX,
1923 : const int32_t& aY,
1924 : const bool& aNeedsScreenCoords,
1925 : const uint32_t& aWhich,
1926 : uint64_t* aResult,
1927 : bool* aOk)
1928 : {
1929 0 : *aResult = 0;
1930 0 : *aOk = false;
1931 0 : Accessible* acc = IdToAccessible(aID);
1932 0 : if (acc && !acc->IsDefunct() && !nsAccUtils::MustPrune(acc)) {
1933 0 : int32_t x = aX;
1934 0 : int32_t y = aY;
1935 0 : if (aNeedsScreenCoords) {
1936 : nsIntPoint winCoords =
1937 0 : nsCoreUtils::GetScreenCoordsForWindow(acc->GetNode());
1938 0 : x += winCoords.x;
1939 0 : y += winCoords.y;
1940 : }
1941 :
1942 : Accessible* result =
1943 0 : acc->ChildAtPoint(x, y,
1944 0 : static_cast<Accessible::EWhichChildAtPoint>(aWhich));
1945 0 : if (result) {
1946 0 : *aResult = reinterpret_cast<uint64_t>(result->UniqueID());
1947 0 : *aOk = true;
1948 : }
1949 : }
1950 :
1951 0 : return IPC_OK();
1952 : }
1953 :
1954 : mozilla::ipc::IPCResult
1955 0 : DocAccessibleChild::RecvExtents(const uint64_t& aID,
1956 : const bool& aNeedsScreenCoords,
1957 : int32_t* aX,
1958 : int32_t* aY,
1959 : int32_t* aWidth,
1960 : int32_t* aHeight)
1961 : {
1962 0 : *aX = 0;
1963 0 : *aY = 0;
1964 0 : *aWidth = 0;
1965 0 : *aHeight = 0;
1966 0 : Accessible* acc = IdToAccessible(aID);
1967 0 : if (acc && !acc->IsDefunct()) {
1968 0 : nsIntRect screenRect = acc->Bounds();
1969 0 : if (!screenRect.IsEmpty()) {
1970 0 : if (aNeedsScreenCoords) {
1971 : nsIntPoint winCoords =
1972 0 : nsCoreUtils::GetScreenCoordsForWindow(acc->GetNode());
1973 0 : screenRect.x -= winCoords.x;
1974 0 : screenRect.y -= winCoords.y;
1975 : }
1976 :
1977 0 : *aX = screenRect.x;
1978 0 : *aY = screenRect.y;
1979 0 : *aWidth = screenRect.width;
1980 0 : *aHeight = screenRect.height;
1981 : }
1982 : }
1983 0 : return IPC_OK();
1984 : }
1985 :
1986 : mozilla::ipc::IPCResult
1987 0 : DocAccessibleChild::RecvDOMNodeID(const uint64_t& aID, nsString* aDOMNodeID)
1988 : {
1989 0 : Accessible* acc = IdToAccessible(aID);
1990 0 : if (!acc) {
1991 0 : return IPC_OK();
1992 : }
1993 :
1994 0 : nsIContent* content = acc->GetContent();
1995 0 : if (!content) {
1996 0 : return IPC_OK();
1997 : }
1998 :
1999 0 : nsIAtom* id = content->GetID();
2000 0 : if (id) {
2001 0 : id->ToString(*aDOMNodeID);
2002 : }
2003 :
2004 0 : return IPC_OK();
2005 : }
2006 :
2007 : mozilla::ipc::IPCResult
2008 0 : DocAccessibleChild::RecvRestoreFocus()
2009 : {
2010 0 : FocusMgr()->ForceFocusEvent();
2011 0 : return IPC_OK();
2012 : }
2013 :
2014 : }
2015 : }
|