Coverage Report

Created: 2018-09-25 14:53

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