diff options
author | Gaming4JC <g4jc@hyperbola.info> | 2020-01-19 09:57:36 -0500 |
---|---|---|
committer | Gaming4JC <g4jc@hyperbola.info> | 2020-01-26 15:50:42 -0500 |
commit | d163c367d9ee5f13769b8580b97bcc511fdd13cd (patch) | |
tree | d8fba280f76b3ff92d5bf1c4d574731ab956f662 /dom/svg | |
parent | 9bf83c6a785ba7463822a159cdaf9eb06ece3690 (diff) | |
download | UXP-d163c367d9ee5f13769b8580b97bcc511fdd13cd.tar UXP-d163c367d9ee5f13769b8580b97bcc511fdd13cd.tar.gz UXP-d163c367d9ee5f13769b8580b97bcc511fdd13cd.tar.lz UXP-d163c367d9ee5f13769b8580b97bcc511fdd13cd.tar.xz UXP-d163c367d9ee5f13769b8580b97bcc511fdd13cd.zip |
Bug 483155 - Put content creator function pointers onto nsHtml5ElementName.
This is all the manual work for Bug 483155, minus the added functionality to disable SVG and MathML which can be done at any time and are out of scope.
Tag UXP Issue #1344
Diffstat (limited to 'dom/svg')
-rw-r--r-- | dom/svg/SVGElementFactory.cpp | 56 | ||||
-rw-r--r-- | dom/svg/SVGElementFactory.h | 25 | ||||
-rw-r--r-- | dom/svg/SVGTagList.h | 9 | ||||
-rw-r--r-- | dom/svg/moz.build | 2 |
4 files changed, 65 insertions, 27 deletions
diff --git a/dom/svg/SVGElementFactory.cpp b/dom/svg/SVGElementFactory.cpp index abbb0a865..d3e922ee5 100644 --- a/dom/svg/SVGElementFactory.cpp +++ b/dom/svg/SVGElementFactory.cpp @@ -15,31 +15,28 @@ using namespace mozilla; using namespace mozilla::dom; // Hash table that maps nsIAtom* SVG tags to an offset index -// within the array sContentCreatorCallbacks (offset by TABLE_VALUE_OFFSET) +// within the array sSVGContentCreatorFunctions (offset by TABLE_VALUE_OFFSET) static PLHashTable* sTagAtomTable = nullptr; // We don't want to store 0 in the hash table as a return value of 0 from // PL_HashTableLookupConst indicates that the value is not found #define TABLE_VALUE_OFFSET 1 -#define SVG_TAG(_tag, _classname) \ -nsresult \ -NS_NewSVG##_classname##Element(nsIContent** aResult, \ - already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo); \ -\ -static inline nsresult \ -Create##_classname##Element(nsIContent** aResult, \ - already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo, \ - FromParser aFromParser) \ -{ \ - return NS_NewSVG##_classname##Element(aResult, mozilla::Move(aNodeInfo)); \ -} +#define SVG_TAG(_tag, _classname) \ + nsresult NS_NewSVG##_classname##Element( \ + nsIContent** aResult, \ + already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo); \ + \ + nsresult NS_NewSVG##_classname##Element( \ + nsIContent** aResult, \ + already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo, \ + FromParser aFromParser) \ + { \ + return NS_NewSVG##_classname##Element(aResult, mozilla::Move(aNodeInfo)); \ + } + +#define SVG_FROM_PARSER_TAG(_tag, _classname) -#define SVG_FROM_PARSER_TAG(_tag, _classname) \ -nsresult \ -NS_NewSVG##_classname##Element(nsIContent** aResult, \ - already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo, \ - FromParser aFromParser); #include "SVGTagList.h" #undef SVG_TAG #undef SVG_FROM_PARSER_TAG @@ -48,13 +45,8 @@ nsresult NS_NewSVGElement(Element** aResult, already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo); -typedef nsresult - (*contentCreatorCallback)(nsIContent** aResult, - already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo, - FromParser aFromParser); - -static const contentCreatorCallback sContentCreatorCallbacks[] = { -#define SVG_TAG(_tag, _classname) Create##_classname##Element, +static const SVGContentCreatorFunction sSVGContentCreatorFunctions[] = { +#define SVG_TAG(_tag, _classname) NS_NewSVG##_classname##Element, #define SVG_FROM_PARSER_TAG(_tag, _classname) NS_NewSVG##_classname##Element, #include "SVGTagList.h" #undef SVG_TAG @@ -124,7 +116,7 @@ NS_NewSVGElement(Element** aResult, already_AddRefed<mozilla::dom::NodeInfo>&& a MOZ_CRASH(); } - contentCreatorCallback cb = sContentCreatorCallbacks[index]; + SVGContentCreatorFunction cb = sSVGContentCreatorFunctions[index]; nsCOMPtr<nsIContent> content; nsresult rv = cb(getter_AddRefs(content), ni.forget(), aFromParser); @@ -135,3 +127,15 @@ NS_NewSVGElement(Element** aResult, already_AddRefed<mozilla::dom::NodeInfo>&& a // if we don't know what to create, just create a standard svg element: return NS_NewSVGElement(aResult, ni.forget()); } + +nsresult +NS_NewSVGUnknownElement(nsIContent** aResult, + already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo, + FromParser aFromParser) +{ + RefPtr<mozilla::dom::NodeInfo> ni = aNodeInfo; + nsCOMPtr<Element> element; + nsresult rv = NS_NewSVGElement(getter_AddRefs(element), ni.forget()); + element.forget(aResult); + return rv; +} diff --git a/dom/svg/SVGElementFactory.h b/dom/svg/SVGElementFactory.h index 3a75ef750..6d6fa1ca9 100644 --- a/dom/svg/SVGElementFactory.h +++ b/dom/svg/SVGElementFactory.h @@ -18,7 +18,32 @@ public: static void Shutdown(); }; +typedef nsresult (*SVGContentCreatorFunction)( + nsIContent** aResult, + already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo, + mozilla::dom::FromParser aFromParser); + } // namespace dom } // namespace mozilla +#define SVG_TAG(_tag, _classname) \ + nsresult NS_NewSVG##_classname##Element( \ + nsIContent** aResult, \ + already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo, \ + mozilla::dom::FromParser aFromParser); + +#define SVG_FROM_PARSER_TAG(_tag, _classname) \ + nsresult NS_NewSVG##_classname##Element( \ + nsIContent** aResult, \ + already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo, \ + mozilla::dom::FromParser aFromParser); +#include "SVGTagList.h" +#undef SVG_TAG +#undef SVG_FROM_PARSER_TAG + +nsresult +NS_NewSVGUnknownElement(nsIContent** aResult, + already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo, + mozilla::dom::FromParser aFromParser); + #endif /* mozilla_dom_SVGElementFactory_h */ diff --git a/dom/svg/SVGTagList.h b/dom/svg/SVGTagList.h index 219cafc43..6fb5c0bef 100644 --- a/dom/svg/SVGTagList.h +++ b/dom/svg/SVGTagList.h @@ -9,7 +9,14 @@ This file contains the list of all SVG tags. It is designed to be used as inline input to SVGElementFactory.cpp - *only* through the magic of C preprocessing. + through the magic of C preprocessing. + + Additionally, it is consumed by the self-regeneration code in + ElementName.java from which nsHtml5ElementName.cpp/h is translated. + See parser/html/java/README.txt. + + If you edit this list, you need to re-run ElementName.java + self-regeneration and the HTML parser Java to C++ translation. All entries must be enclosed in the macro SVG_TAG or SVG_FROM_PARSER_TAG which will have cruel and unusual things done to them. diff --git a/dom/svg/moz.build b/dom/svg/moz.build index 298a7293d..08cf1d78d 100644 --- a/dom/svg/moz.build +++ b/dom/svg/moz.build @@ -14,6 +14,7 @@ EXPORTS += [ 'SVGContentUtils.h', 'SVGPreserveAspectRatio.h', 'SVGStringList.h', + 'SVGTagList.h', ] EXPORTS.mozilla.dom += [ @@ -39,6 +40,7 @@ EXPORTS.mozilla.dom += [ 'SVGDefsElement.h', 'SVGDescElement.h', 'SVGDocument.h', + 'SVGElementFactory.h', 'SVGEllipseElement.h', 'SVGFEBlendElement.h', 'SVGFEColorMatrixElement.h', |