Bug 1788251 [wpt PR 35638] - Prerender2: allow referrer policy mismatches, a=testonly
[gecko.git] / accessible / base / XULMap.h
blob2b1a79c7c5a8b46d90bc2917fbd26e5a9600bf1c
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, XULMenuitemAccessibleWrap)
15 XULMAP_TYPE(menubar, XULMenubarAccessible)
16 XULMAP_TYPE(menucaption, XULMenuitemAccessibleWrap)
17 XULMAP_TYPE(menuitem, XULMenuitemAccessibleWrap)
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, XULListboxAccessibleWrap)
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(treecolpicker, XULButtonAccessible)
34 XULMAP_TYPE(treecols, XULTreeColumAccessible)
35 XULMAP_TYPE(toolbar, XULToolbarAccessible)
36 XULMAP_TYPE(toolbarbutton, XULToolbarButtonAccessible)
38 XULMAP(description,
39 [](Element* aElement, LocalAccessible* aContext) -> LocalAccessible* {
40 if (aElement->ClassList()->Contains(u"tooltip-label"_ns)) {
41 return nullptr;
44 return new XULLabelAccessible(aElement, aContext->Document());
47 XULMAP(tooltip,
48 [](Element* aElement, LocalAccessible* aContext) -> LocalAccessible* {
49 nsIFrame* frame = aElement->GetPrimaryFrame();
50 if (!frame) {
51 return nullptr;
54 nsMenuPopupFrame* popupFrame = do_QueryFrame(frame);
55 if (!popupFrame) {
56 return nullptr;
59 nsPopupState popupState = popupFrame->PopupState();
60 if (popupState == ePopupHiding || popupState == ePopupInvisible ||
61 popupState == ePopupClosed) {
62 return nullptr;
65 return new XULTooltipAccessible(aElement, aContext->Document());
68 XULMAP(label,
69 [](Element* aElement, LocalAccessible* aContext) -> LocalAccessible* {
70 if (aElement->ClassList()->Contains(u"text-link"_ns)) {
71 return new XULLinkAccessible(aElement, aContext->Document());
73 return new XULLabelAccessible(aElement, aContext->Document());
76 XULMAP(image,
77 [](Element* aElement, LocalAccessible* aContext) -> LocalAccessible* {
78 // Don't include nameless images in accessible tree.
79 if (!aElement->HasAttr(kNameSpaceID_None, nsGkAtoms::tooltiptext)) {
80 return nullptr;
83 return new ImageAccessibleWrap(aElement, aContext->Document());
86 XULMAP(menupopup, [](Element* aElement, LocalAccessible* aContext) {
87 return CreateMenupopupAccessible(aElement, aContext);
90 XULMAP(panel,
91 [](Element* aElement, LocalAccessible* aContext) -> LocalAccessible* {
92 static const Element::AttrValuesArray sIgnoreTypeVals[] = {
93 nsGkAtoms::autocomplete_richlistbox, nsGkAtoms::autocomplete,
94 nullptr};
96 if (aElement->FindAttrValueIn(kNameSpaceID_None, nsGkAtoms::type,
97 sIgnoreTypeVals, eIgnoreCase) >= 0) {
98 return nullptr;
101 if (aElement->AttrValueIs(kNameSpaceID_None, nsGkAtoms::noautofocus,
102 nsGkAtoms::_true, eCaseMatters)) {
103 return new XULAlertAccessible(aElement, aContext->Document());
106 return new EnumRoleAccessible<roles::PANE>(aElement,
107 aContext->Document());
110 XULMAP(popup, [](Element* aElement, LocalAccessible* aContext) {
111 return CreateMenupopupAccessible(aElement, aContext);
114 XULMAP(tree,
115 [](Element* aElement, LocalAccessible* aContext) -> LocalAccessible* {
116 nsIContent* child =
117 nsTreeUtils::GetDescendantChild(aElement, nsGkAtoms::treechildren);
118 if (!child) return nullptr;
120 nsTreeBodyFrame* treeFrame = do_QueryFrame(child->GetPrimaryFrame());
121 if (!treeFrame) return nullptr;
123 RefPtr<nsTreeColumns> treeCols = treeFrame->Columns();
124 uint32_t count = treeCols->Count();
126 // Outline of list accessible.
127 if (count == 1) {
128 return new XULTreeAccessible(aElement, aContext->Document(),
129 treeFrame);
132 // Table or tree table accessible.
133 return new XULTreeGridAccessibleWrap(aElement, aContext->Document(),
134 treeFrame);