1 /* -*- Mode: c++; c-basic-offset: 2; tab-width: 20; indent-tabs-mode: nil; -*-
2 * This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 #include "RootAccessibleWrap.h"
8 #include "LocalAccessible-inl.h"
10 #include "DocAccessibleParent.h"
11 #include "DocAccessible-inl.h"
12 #include "RemoteAccessibleWrap.h"
13 #include "SessionAccessibility.h"
14 #include "mozilla/PresShell.h"
16 using namespace mozilla
;
17 using namespace mozilla::a11y
;
19 RootAccessibleWrap::RootAccessibleWrap(dom::Document
* aDoc
,
20 PresShell
* aPresShell
)
21 : RootAccessible(aDoc
, aPresShell
) {}
23 RootAccessibleWrap::~RootAccessibleWrap() {}
25 AccessibleWrap
* RootAccessibleWrap::GetContentAccessible() {
26 if (RemoteAccessible
* proxy
= GetPrimaryRemoteTopLevelContentDoc()) {
27 return WrapperFor(proxy
);
30 // Find first document that is not defunct or hidden.
31 // This is exclusively for Fennec which has a deck of browser elements.
32 // Otherwise, standard GeckoView will only have one browser element.
33 for (size_t i
= 0; i
< ChildDocumentCount(); i
++) {
34 DocAccessible
* childDoc
= GetChildDocumentAt(i
);
35 if (childDoc
&& !childDoc
->IsDefunct() && !childDoc
->IsHidden()) {
43 AccessibleWrap
* RootAccessibleWrap::FindAccessibleById(int32_t aID
) {
44 AccessibleWrap
* contentAcc
= GetContentAccessible();
50 if (aID
== AccessibleWrap::kNoID
) {
54 if (contentAcc
->IsProxy()) {
55 return FindAccessibleById(static_cast<DocRemoteAccessibleWrap
*>(contentAcc
),
59 return FindAccessibleById(
60 static_cast<DocAccessibleWrap
*>(contentAcc
->AsDoc()), aID
);
63 AccessibleWrap
* RootAccessibleWrap::FindAccessibleById(
64 DocRemoteAccessibleWrap
* aDoc
, int32_t aID
) {
65 AccessibleWrap
* acc
= aDoc
->GetAccessibleByID(aID
);
68 auto child
= static_cast<DocRemoteAccessibleWrap
*>(
69 aDoc
->GetChildDocumentAt(index
++));
73 // A child document's id is not in its parent document's hash table.
74 if (child
->VirtualViewID() == aID
) {
77 acc
= FindAccessibleById(child
, aID
);
84 AccessibleWrap
* RootAccessibleWrap::FindAccessibleById(DocAccessibleWrap
* aDoc
,
86 AccessibleWrap
* acc
= aDoc
->GetAccessibleByID(aID
);
90 static_cast<DocAccessibleWrap
*>(aDoc
->GetChildDocumentAt(index
++));
94 acc
= FindAccessibleById(child
, aID
);