Bug 1414230 - Part 2 - Simplify XUL markup map creation. r=surkov
MozReview-Commit-ID: 3Wf3zQ3TezR
--- a/accessible/base/XULMap.h
+++ b/accessible/base/XULMap.h
@@ -1,7 +1,24 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-XULMAP(image, New_MaybeImageOrToolbarButtonAccessible)
-XULMAP(statusbar, New_StatusBarAccessible)
-XULMAP(menuseparator, New_MenuSeparator)
+XULMAP_TYPE(menuseparator, XULMenuSeparatorAccessible)
+XULMAP_TYPE(statusbar, XULStatusBarAccessible)
+
+XULMAP(
+ image,
+ [](nsIContent* aContent, Accessible* aContext) -> Accessible* {
+ if (aContent->IsElement() &&
+ aContent->AsElement()->HasAttr(kNameSpaceID_None, nsGkAtoms::onclick)) {
+ return new XULToolbarButtonAccessible(aContent, aContext->Document());
+ }
+
+ // Don't include nameless images in accessible tree.
+ if (!aContent->IsElement() ||
+ !aContent->AsElement()->HasAttr(kNameSpaceID_None, nsGkAtoms::tooltiptext)) {
+ return nullptr;
+ }
+
+ return new ImageAccessibleWrap(aContent, aContext->Document());
+ }
+)
--- a/accessible/base/nsAccessibilityService.cpp
+++ b/accessible/base/nsAccessibilityService.cpp
@@ -267,43 +267,16 @@ New_HTMLTableHeaderCellIfScope(nsIConten
{
if (aContext->IsTableRow() && aContext->GetContent() == aContent->GetParent() &&
aContent->IsElement() &&
aContent->AsElement()->HasAttr(kNameSpaceID_None, nsGkAtoms::scope))
return new HTMLTableHeaderCellAccessibleWrap(aContent, aContext->Document());
return nullptr;
}
-#ifdef MOZ_XUL
-static Accessible*
-New_MaybeImageOrToolbarButtonAccessible(nsIContent* aContent,
- Accessible* aContext)
-{
- if (aContent->IsElement() &&
- aContent->AsElement()->HasAttr(kNameSpaceID_None, nsGkAtoms::onclick)) {
- return new XULToolbarButtonAccessible(aContent, aContext->Document());
- }
-
- // Don't include nameless images in accessible tree.
- if (!aContent->IsElement() ||
- !aContent->AsElement()->HasAttr(kNameSpaceID_None, nsGkAtoms::tooltiptext)) {
- return nullptr;
- }
-
- return new ImageAccessibleWrap(aContent, aContext->Document());
-}
-static Accessible*
-New_MenuSeparator(nsIContent* aContent, Accessible* aContext)
- { return new XULMenuSeparatorAccessible(aContent, aContext->Document()); }
-
-static Accessible*
-New_StatusBarAccessible(nsIContent* aContent, Accessible* aContext)
- { return new XULStatusBarAccessible(aContent, aContext->Document()); }
-#endif
-
/**
* Cached value of the PREF_ACCESSIBILITY_FORCE_DISABLED preference.
*/
static int32_t sPlatformDisabledState = 0;
////////////////////////////////////////////////////////////////////////////////
// Markup maps array.
@@ -318,32 +291,41 @@ static int32_t sPlatformDisabledState =
#define MARKUPMAP(atom, new_func, r, ... ) \
{ &nsGkAtoms::atom, new_func, static_cast<a11y::role>(r), { __VA_ARGS__ } },
static const HTMLMarkupMapInfo sHTMLMarkupMapList[] = {
#include "MarkupMap.h"
};
+#undef MARKUPMAP
+
#ifdef MOZ_XUL
#define XULMAP(atom, new_func) \
{ &nsGkAtoms::atom, new_func },
+#define XULMAP_TYPE(atom, new_type) \
+XULMAP( \
+ atom, \
+ [](nsIContent* aContent, Accessible* aContext) -> Accessible* { \
+ return new new_type(aContent, aContext->Document()); \
+ } \
+)
+
static const XULMarkupMapInfo sXULMarkupMapList[] = {
#include "XULMap.h"
};
+
+#undef XULMAP_TYPE
+#undef XULMAP
#endif
#undef Attr
#undef AttrFromDOM
#undef AttrFromDOMIf
-#undef MARKUPMAP
-#ifdef MOZ_XUL
-#undef XULMAP
-#endif
////////////////////////////////////////////////////////////////////////////////
// nsAccessibilityService
////////////////////////////////////////////////////////////////////////////////
nsAccessibilityService *nsAccessibilityService::gAccessibilityService = nullptr;
ApplicationAccessible* nsAccessibilityService::gApplicationAccessible = nullptr;
xpcAccessibleApplication* nsAccessibilityService::gXPCApplicationAccessible = nullptr;
--- a/accessible/base/nsAccessibilityService.h
+++ b/accessible/base/nsAccessibilityService.h
@@ -66,17 +66,18 @@ struct HTMLMarkupMapInfo {
New_Accessible* new_func;
a11y::role role;
MarkupAttrInfo attrs[4];
};
#ifdef MOZ_XUL
struct XULMarkupMapInfo {
nsStaticAtom** tag;
- New_Accessible* new_func;
+ std::function<Accessible*(nsIContent* aContent,
+ Accessible* aContext)> new_func;
};
#endif
/**
* PREF_ACCESSIBILITY_FORCE_DISABLED preference change callback.
*/
void PrefChanged(const char* aPref, void* aClosure);