1 /* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5 XULMAP_TYPE(browser
, OuterDocAccessible
)
6 XULMAP_TYPE(button
, XULButtonAccessible
)
7 XULMAP_TYPE(checkbox
, CheckboxAccessible
)
8 XULMAP_TYPE(dropMarker
, XULDropmarkerAccessible
)
9 XULMAP_TYPE(editor
, OuterDocAccessible
)
10 XULMAP_TYPE(findbar
, XULToolbarAccessible
)
11 XULMAP_TYPE(groupbox
, XULGroupboxAccessible
)
12 XULMAP_TYPE(iframe
, OuterDocAccessible
)
13 XULMAP_TYPE(listheader
, XULColumAccessible
)
14 XULMAP_TYPE(menu
, XULMenuitemAccessible
)
15 XULMAP_TYPE(menubar
, XULMenubarAccessible
)
16 XULMAP_TYPE(menucaption
, XULMenuitemAccessible
)
17 XULMAP_TYPE(menuitem
, XULMenuitemAccessible
)
18 XULMAP_TYPE(menulist
, XULComboboxAccessible
)
19 XULMAP_TYPE(menuseparator
, XULMenuSeparatorAccessible
)
20 XULMAP_TYPE(notification
, XULAlertAccessible
)
21 XULMAP_TYPE(radio
, XULRadioButtonAccessible
)
22 XULMAP_TYPE(radiogroup
, XULRadioGroupAccessible
)
23 XULMAP_TYPE(richlistbox
, XULListboxAccessible
)
24 XULMAP_TYPE(richlistitem
, XULListitemAccessible
)
25 XULMAP_TYPE(statusbar
, XULStatusBarAccessible
)
26 XULMAP_TYPE(tab
, XULTabAccessible
)
27 XULMAP_TYPE(tabpanels
, XULTabpanelsAccessible
)
28 XULMAP_TYPE(tabs
, XULTabsAccessible
)
29 XULMAP_TYPE(toolbarseparator
, XULToolbarSeparatorAccessible
)
30 XULMAP_TYPE(toolbarspacer
, XULToolbarSeparatorAccessible
)
31 XULMAP_TYPE(toolbarspring
, XULToolbarSeparatorAccessible
)
32 XULMAP_TYPE(treecol
, XULColumnItemAccessible
)
33 XULMAP_TYPE(treecols
, XULTreeColumAccessible
)
34 XULMAP_TYPE(toolbar
, XULToolbarAccessible
)
35 XULMAP_TYPE(toolbarbutton
, XULToolbarButtonAccessible
)
38 [](Element
* aElement
, LocalAccessible
* aContext
) -> LocalAccessible
* {
39 if (aElement
->ClassList()->Contains(u
"tooltip-label"_ns
)) {
40 // FIXME(emilio): Why this special case?
44 return new XULLabelAccessible(aElement
, aContext
->Document());
48 [](Element
* aElement
, LocalAccessible
* aContext
) -> LocalAccessible
* {
49 return new XULTooltipAccessible(aElement
, aContext
->Document());
53 [](Element
* aElement
, LocalAccessible
* aContext
) -> LocalAccessible
* {
54 if (aElement
->ClassList()->Contains(u
"text-link"_ns
)) {
55 return new XULLinkAccessible(aElement
, aContext
->Document());
57 return new XULLabelAccessible(aElement
, aContext
->Document());
61 [](Element
* aElement
, LocalAccessible
* aContext
) -> LocalAccessible
* {
62 // Don't include nameless images in accessible tree.
63 if (!aElement
->HasAttr(nsGkAtoms::tooltiptext
)) {
67 return new ImageAccessible(aElement
, aContext
->Document());
70 XULMAP(menupopup
, [](Element
* aElement
, LocalAccessible
* aContext
) {
71 return CreateMenupopupAccessible(aElement
, aContext
);
75 [](Element
* aElement
, LocalAccessible
* aContext
) -> LocalAccessible
* {
76 static const Element::AttrValuesArray sIgnoreTypeVals
[] = {
77 nsGkAtoms::autocomplete_richlistbox
, nsGkAtoms::autocomplete
,
80 if (aElement
->FindAttrValueIn(kNameSpaceID_None
, nsGkAtoms::type
,
81 sIgnoreTypeVals
, eIgnoreCase
) >= 0) {
85 if (aElement
->AttrValueIs(kNameSpaceID_None
, nsGkAtoms::noautofocus
,
86 nsGkAtoms::_true
, eCaseMatters
)) {
87 return new XULAlertAccessible(aElement
, aContext
->Document());
90 return new EnumRoleAccessible
<roles::PANE
>(aElement
,
91 aContext
->Document());
95 [](Element
* aElement
, LocalAccessible
* aContext
) -> LocalAccessible
* {
97 nsTreeUtils::GetDescendantChild(aElement
, nsGkAtoms::treechildren
);
98 if (!child
) return nullptr;
100 nsTreeBodyFrame
* treeFrame
= do_QueryFrame(child
->GetPrimaryFrame());
101 if (!treeFrame
) return nullptr;
103 RefPtr
<nsTreeColumns
> treeCols
= treeFrame
->Columns();
104 uint32_t count
= treeCols
->Count();
106 // Outline of list accessible.
108 return new XULTreeAccessible(aElement
, aContext
->Document(),
112 // Table or tree table accessible.
113 return new XULTreeGridAccessible(aElement
, aContext
->Document(),