LCOV - code coverage report
Current view: top level - accessible/ipc/other - DocAccessibleChild.cpp (source / functions) Hit Total Coverage
Test: output.info Lines: 0 915 0.0 %
Date: 2017-07-14 16:53:18 Functions: 0 139 0.0 %
Legend: Lines: hit not hit

          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             : }

Generated by: LCOV version 1.13