XULMap.h (5043B)
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/. */ 4 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(menuseparator, XULMenuSeparatorAccessible) 19 XULMAP_TYPE(notification, XULAlertAccessible) 20 XULMAP_TYPE(radio, XULRadioButtonAccessible) 21 XULMAP_TYPE(radiogroup, XULRadioGroupAccessible) 22 XULMAP_TYPE(richlistbox, XULListboxAccessible) 23 XULMAP_TYPE(richlistitem, XULListitemAccessible) 24 XULMAP_TYPE(statusbar, XULStatusBarAccessible) 25 XULMAP_TYPE(tab, XULTabAccessible) 26 XULMAP_TYPE(tabpanels, XULTabpanelsAccessible) 27 XULMAP_TYPE(tabs, XULTabsAccessible) 28 XULMAP_TYPE(toolbarseparator, XULToolbarSeparatorAccessible) 29 XULMAP_TYPE(toolbarspacer, XULToolbarSeparatorAccessible) 30 XULMAP_TYPE(toolbarspring, XULToolbarSeparatorAccessible) 31 XULMAP_TYPE(treecol, XULColumnItemAccessible) 32 XULMAP_TYPE(treecols, XULTreeColumAccessible) 33 XULMAP_TYPE(toolbar, XULToolbarAccessible) 34 XULMAP_TYPE(toolbarbutton, XULToolbarButtonAccessible) 35 36 XULMAP(description, 37 [](Element* aElement, LocalAccessible* aContext) -> LocalAccessible* { 38 if (aElement->ClassList()->Contains(u"tooltip-label"_ns)) { 39 // FIXME(emilio): Why this special case? 40 return nullptr; 41 } 42 43 return new XULLabelAccessible(aElement, aContext->Document()); 44 }) 45 46 XULMAP(tooltip, 47 [](Element* aElement, LocalAccessible* aContext) -> LocalAccessible* { 48 return new XULTooltipAccessible(aElement, aContext->Document()); 49 }) 50 51 XULMAP(label, 52 [](Element* aElement, LocalAccessible* aContext) -> LocalAccessible* { 53 if (aElement->ClassList()->Contains(u"text-link"_ns)) { 54 return new XULLinkAccessible(aElement, aContext->Document()); 55 } 56 return new XULLabelAccessible(aElement, aContext->Document()); 57 }) 58 59 XULMAP(image, 60 [](Element* aElement, LocalAccessible* aContext) -> LocalAccessible* { 61 // Don't include nameless images in accessible tree. 62 if (!aElement->HasAttr(nsGkAtoms::tooltiptext)) { 63 return nullptr; 64 } 65 66 return new ImageAccessible(aElement, aContext->Document()); 67 }) 68 69 XULMAP(menulist, 70 [](Element* aElement, LocalAccessible* aContext) -> LocalAccessible* { 71 nsAutoString domID; 72 if (nsCoreUtils::GetID(aElement, domID)) { 73 if (domID.Equals(u"ContentSelectDropdown"_ns)) { 74 return new XULContentSelectDropdownAccessible( 75 aElement, aContext->Document()); 76 } 77 } 78 79 return new XULComboboxAccessible(aElement, aContext->Document()); 80 }) 81 82 XULMAP(menupopup, [](Element* aElement, LocalAccessible* aContext) { 83 return CreateMenupopupAccessible(aElement, aContext); 84 }) 85 86 XULMAP(panel, 87 [](Element* aElement, LocalAccessible* aContext) -> LocalAccessible* { 88 static const Element::AttrValuesArray sIgnoreTypeVals[] = { 89 nsGkAtoms::autocomplete_richlistbox, nsGkAtoms::autocomplete, 90 nullptr}; 91 92 if (aElement->FindAttrValueIn(kNameSpaceID_None, nsGkAtoms::type, 93 sIgnoreTypeVals, eIgnoreCase) >= 0) { 94 return nullptr; 95 } 96 97 if (aElement->AttrValueIs(kNameSpaceID_None, nsGkAtoms::noautofocus, 98 nsGkAtoms::_true, eCaseMatters)) { 99 return new XULAlertAccessible(aElement, aContext->Document()); 100 } 101 102 return new EnumRoleAccessible<roles::PANE>(aElement, 103 aContext->Document()); 104 }) 105 106 XULMAP(tree, 107 [](Element* aElement, LocalAccessible* aContext) -> LocalAccessible* { 108 nsIContent* child = 109 nsTreeUtils::GetDescendantChild(aElement, nsGkAtoms::treechildren); 110 if (!child) return nullptr; 111 112 nsTreeBodyFrame* treeFrame = do_QueryFrame(child->GetPrimaryFrame()); 113 if (!treeFrame) return nullptr; 114 115 RefPtr<nsTreeColumns> treeCols = treeFrame->Columns(); 116 uint32_t count = treeCols->Count(); 117 118 // Outline of list accessible. 119 if (count == 1) { 120 return new XULTreeAccessible(aElement, aContext->Document(), 121 treeFrame); 122 } 123 124 // Table or tree table accessible. 125 return new XULTreeGridAccessible(aElement, aContext->Document(), 126 treeFrame); 127 })