Bug 1414230 - Part 2 - Simplify XUL markup map creation. r=surkov draft
authorPaolo Amadini <paolo.mozmail@amadzone.org>
Mon, 05 Feb 2018 14:56:30 +0000
changeset 751148 953e110e43fc6aeb065859d890fd022d80689d1c
parent 751147 9e511cf91f409d65adc0ce39b82edceccc613662
push id97876
push userpaolo.mozmail@amadzone.org
push dateMon, 05 Feb 2018 14:57:38 +0000
reviewerssurkov
bugs1414230
milestone60.0a1
Bug 1414230 - Part 2 - Simplify XUL markup map creation. r=surkov MozReview-Commit-ID: 3Wf3zQ3TezR
accessible/base/XULMap.h
accessible/base/nsAccessibilityService.cpp
accessible/base/nsAccessibilityService.h
--- 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);