Backed out 8 changesets (bug 1483121, bug 1482782) for build bustages on nsDirectoryService.cpp. CLOSED TREE
authorNarcis Beleuzu <nbeleuzu@mozilla.com>
Wed, 15 Aug 2018 09:14:41 +0300
changeset 486709 f3f6f10edab261d55866ee45f12827d65b6a10c6
parent 486708 0a8334bbcf4594d5bc1195d31f15d550ac8e9a4a
child 486710 c7d7fe60813267d51474afc6c401ce51df2796b3
push id9719
push userffxbld-merge
push dateFri, 24 Aug 2018 17:49:46 +0000
treeherdermozilla-beta@719ec98fba77 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
bugs1483121, 1482782
milestone63.0a1
backs out0a8334bbcf4594d5bc1195d31f15d550ac8e9a4a
cb2dcb8590711584e1689583a75f66d7195bb550
c834d4ca2eef0a7ace7aa7e480bba0ad76bbb8fb
887de0efbb67f436a241a60fea0fc4a001656cdd
018fdb50a6bec77b3022b2431334bae21339c4cb
33a8aa8096c94e9be06d4aec7a8ad274f5dcf9de
e3632354f16ec80028cf3004fcc1322f7c0ff405
46f8319bee824fe669df21ee6023c9ea55349ac3
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Backed out 8 changesets (bug 1483121, bug 1482782) for build bustages on nsDirectoryService.cpp. CLOSED TREE Backed out changeset 0a8334bbcf45 (bug 1483121) Backed out changeset cb2dcb859071 (bug 1482782) Backed out changeset c834d4ca2eef (bug 1482782) Backed out changeset 887de0efbb67 (bug 1482782) Backed out changeset 018fdb50a6be (bug 1482782) Backed out changeset 33a8aa8096c9 (bug 1482782) Backed out changeset e3632354f16e (bug 1482782) Backed out changeset 46f8319bee82 (bug 1482782)
layout/base/RestyleManager.cpp
layout/base/nsCSSFrameConstructor.cpp
layout/base/nsGenConList.cpp
layout/base/nsGenConList.h
layout/base/nsLayoutUtils.cpp
layout/build/nsLayoutStatics.cpp
layout/forms/nsComboboxControlFrame.cpp
layout/forms/nsFieldSetFrame.cpp
layout/forms/nsFieldSetFrame.h
layout/forms/nsHTMLButtonControlFrame.cpp
layout/generic/ReflowInput.cpp
layout/generic/RubyUtils.h
layout/generic/TextOverflow.cpp
layout/generic/nsBlockFrame.cpp
layout/generic/nsColumnSetFrame.cpp
layout/generic/nsFirstLetterFrame.cpp
layout/generic/nsFlexContainerFrame.cpp
layout/generic/nsFrame.cpp
layout/generic/nsFrameSetFrame.cpp
layout/generic/nsIFrameInlines.h
layout/generic/nsImageFrame.cpp
layout/generic/nsInlineFrame.cpp
layout/generic/nsRubyContentFrame.cpp
layout/generic/nsTextFrame.cpp
layout/style/ComputedStyle.h
layout/style/ServoStyleSet.cpp
layout/style/ServoStyleSet.h
layout/style/nsCSSAnonBoxes.cpp
layout/style/nsCSSAnonBoxes.h
layout/style/nsCSSPseudoElementList.h
layout/style/nsCSSPseudoElements.cpp
layout/style/nsCSSPseudoElements.h
layout/style/nsComputedDOMStyle.cpp
layout/tables/nsTableFrame.cpp
layout/xul/tree/nsTreeBodyFrame.cpp
servo/components/style/gecko/pseudo_element_definition.mako.rs
servo/components/style/gecko/regen_atoms.py
xpcom/ds/Atom.py
xpcom/ds/HTMLAtoms.py
xpcom/ds/StaticAtoms.py
xpcom/ds/moz.build
xpcom/ds/nsAtom.h
xpcom/ds/nsAtomTable.cpp
xpcom/ds/nsGkAtomList.h
xpcom/ds/nsGkAtoms.cpp
xpcom/ds/nsGkAtoms.h
xpcom/ds/nsStaticAtom.h
xpcom/ds/nsStaticAtomUtils.h
xpcom/io/moz.build
xpcom/io/nsDirectoryService.cpp
xpcom/io/nsDirectoryService.h
xpcom/io/nsDirectoryServiceAtomList.h
xpcom/io/nsDirectoryServiceDefs.h
--- a/layout/base/RestyleManager.cpp
+++ b/layout/base/RestyleManager.cpp
@@ -1984,17 +1984,17 @@ ExpectedOwnerForChild(const nsIFrame& aF
 
   parent = FirstContinuationOrPartOfIBSplit(parent);
 
   // We've handled already anon boxes and bullet frames, so now we're looking at
   // a frame of a DOM element or pseudo. Hop through anon and line-boxes
   // generated by our DOM parent, and go find the owner frame for it.
   while (parent && (IsAnonBox(*parent) || parent->IsLineFrame())) {
     auto* pseudo = parent->Style()->GetPseudo();
-    if (pseudo == nsCSSAnonBoxes::tableWrapper()) {
+    if (pseudo == nsCSSAnonBoxes::tableWrapper) {
       const nsIFrame* tableFrame = parent->PrincipalChildList().FirstChild();
       MOZ_ASSERT(tableFrame->IsTableFrame());
       // Handle :-moz-table and :-moz-inline-table.
       parent = IsAnonBox(*tableFrame) ? parent->GetParent() : tableFrame;
     } else {
       // We get the in-flow parent here so that we can handle the OOF anonymous
       // boxed to get the correct parent.
       parent = parent->GetInFlowParent();
@@ -2052,20 +2052,20 @@ ServoRestyleState::AddPendingWrapperRest
 {
   MOZ_ASSERT(aWrapperFrame->Style()->IsWrapperAnonBox(),
              "All our wrappers are anon boxes, and why would we restyle "
              "non-inheriting ones?");
   MOZ_ASSERT(aWrapperFrame->Style()->IsInheritingAnonBox(),
              "All our wrappers are anon boxes, and why would we restyle "
              "non-inheriting ones?");
   MOZ_ASSERT(aWrapperFrame->Style()->GetPseudo() !=
-             nsCSSAnonBoxes::cellContent(),
+             nsCSSAnonBoxes::cellContent,
              "Someone should be using TableAwareParentFor");
   MOZ_ASSERT(aWrapperFrame->Style()->GetPseudo() !=
-             nsCSSAnonBoxes::tableWrapper(),
+             nsCSSAnonBoxes::tableWrapper,
              "Someone should be using TableAwareParentFor");
   // Make sure we only add first continuations.
   aWrapperFrame = aWrapperFrame->FirstContinuation();
   nsIFrame* last = mPendingWrapperRestyles.SafeLastElement(nullptr);
   if (last == aWrapperFrame) {
     // Already queued up, nothing to do.
     return;
   }
@@ -2183,17 +2183,17 @@ ServoRestyleState::TableAwareParentFor(c
   // its table wrapper.
   if (aChild->IsTableFrame()) {
     aChild = aChild->GetParent();
     MOZ_ASSERT(aChild->IsTableWrapperFrame());
   }
 
   nsIFrame* parent = aChild->GetParent();
   // Now if parent is a cell-content frame, we actually want the cellframe.
-  if (parent->Style()->GetPseudo() == nsCSSAnonBoxes::cellContent()) {
+  if (parent->Style()->GetPseudo() == nsCSSAnonBoxes::cellContent) {
     parent = parent->GetParent();
   } else if (parent->IsTableWrapperFrame()) {
     // Must be a caption.  In that case we want the table here.
     MOZ_ASSERT(aChild->StyleDisplay()->mDisplay == StyleDisplay::TableCaption);
     parent = parent->PrincipalChildList().FirstChild();
   }
   return parent;
 }
@@ -2375,24 +2375,24 @@ public:
     return *mStyle;
   }
 
   void ComputeHintIfNeeded(nsIContent* aContent,
                            nsIFrame* aTextFrame,
                            ComputedStyle& aNewStyle)
   {
     MOZ_ASSERT(aTextFrame);
-    MOZ_ASSERT(aNewStyle.GetPseudo() == nsCSSAnonBoxes::mozText());
+    MOZ_ASSERT(aNewStyle.GetPseudo() == nsCSSAnonBoxes::mozText);
 
     if (MOZ_LIKELY(!mShouldPostHints)) {
       return;
     }
 
     ComputedStyle* oldStyle = aTextFrame->Style();
-    MOZ_ASSERT(oldStyle->GetPseudo() == nsCSSAnonBoxes::mozText());
+    MOZ_ASSERT(oldStyle->GetPseudo() == nsCSSAnonBoxes::mozText);
 
     // We rely on the fact that all the text children for the same element share
     // style to avoid recomputing style differences for all of them.
     //
     // TODO(emilio): The above may not be true for ::first-{line,letter}, but
     // we'll cross that bridge when we support those in stylo.
     if (mShouldComputeHints) {
       mShouldComputeHints = false;
--- a/layout/base/nsCSSFrameConstructor.cpp
+++ b/layout/base/nsCSSFrameConstructor.cpp
@@ -334,18 +334,18 @@ static int32_t FFWC_recursions=0;
 static int32_t FFWC_nextInFlows=0;
 #endif
 
 // Returns true if aFrame is an anonymous flex/grid item.
 static inline bool
 IsAnonymousFlexOrGridItem(const nsIFrame* aFrame)
 {
   const nsAtom* pseudoType = aFrame->Style()->GetPseudo();
-  return pseudoType == nsCSSAnonBoxes::anonymousFlexItem() ||
-         pseudoType == nsCSSAnonBoxes::anonymousGridItem();
+  return pseudoType == nsCSSAnonBoxes::anonymousFlexItem ||
+         pseudoType == nsCSSAnonBoxes::anonymousGridItem;
 }
 
 // Returns true if aFrame is a flex/grid container.
 static inline bool
 IsFlexOrGridContainer(const nsIFrame* aFrame)
 {
   const LayoutFrameType t = aFrame->Type();
   return t == LayoutFrameType::FlexContainer ||
@@ -365,17 +365,17 @@ IsFlexContainerForLegacyBox(const nsIFra
 static void
 AssertAnonymousFlexOrGridItemParent(const nsIFrame* aChild,
                                     const nsIFrame* aParent)
 {
   MOZ_ASSERT(IsAnonymousFlexOrGridItem(aChild),
              "expected an anonymous flex or grid item child frame");
   MOZ_ASSERT(aParent, "expected a parent frame");
   const nsAtom* pseudoType = aChild->Style()->GetPseudo();
-  if (pseudoType == nsCSSAnonBoxes::anonymousFlexItem()) {
+  if (pseudoType == nsCSSAnonBoxes::anonymousFlexItem) {
     MOZ_ASSERT(aParent->IsFlexContainerFrame(),
                "anonymous flex items should only exist as children "
                "of flex container frames");
   } else {
     MOZ_ASSERT(aParent->IsGridContainerFrame(),
                "anonymous grid items should only exist as children "
                "of grid container frames");
   }
@@ -613,17 +613,17 @@ GetIBContainingBlockFor(nsIFrame* aFrame
 }
 
 // This is a bit slow, but sometimes we need it.
 static bool
 ParentIsWrapperAnonBox(nsIFrame* aParent)
 {
   nsIFrame* maybeAnonBox = aParent;
   if (maybeAnonBox->Style()->GetPseudo() ==
-        nsCSSAnonBoxes::cellContent()) {
+        nsCSSAnonBoxes::cellContent) {
     // The thing that would maybe be a wrapper anon box is the cell.
     maybeAnonBox = maybeAnonBox->GetParent();
   }
   return maybeAnonBox->Style()->IsWrapperAnonBox();
 }
 
 //----------------------------------------------------------------------
 
@@ -1940,30 +1940,30 @@ nsCSSFrameConstructor::CreateGeneratedCo
 // frame. In particular, a lone table caption will have a table wrapper as its
 // parent, but will also trigger construction of an empty inner table, which
 // will be the one we can examine to see whether the wrapper was a pseudo-frame.
 static bool
 IsTablePseudo(nsIFrame* aFrame)
 {
   nsAtom* pseudoType = aFrame->Style()->GetPseudo();
   return pseudoType &&
-    (pseudoType == nsCSSAnonBoxes::table() ||
-     pseudoType == nsCSSAnonBoxes::inlineTable() ||
-     pseudoType == nsCSSAnonBoxes::tableColGroup() ||
-     pseudoType == nsCSSAnonBoxes::tableRowGroup() ||
-     pseudoType == nsCSSAnonBoxes::tableRow() ||
-     pseudoType == nsCSSAnonBoxes::tableCell() ||
-     (pseudoType == nsCSSAnonBoxes::cellContent() &&
+    (pseudoType == nsCSSAnonBoxes::table ||
+     pseudoType == nsCSSAnonBoxes::inlineTable ||
+     pseudoType == nsCSSAnonBoxes::tableColGroup ||
+     pseudoType == nsCSSAnonBoxes::tableRowGroup ||
+     pseudoType == nsCSSAnonBoxes::tableRow ||
+     pseudoType == nsCSSAnonBoxes::tableCell ||
+     (pseudoType == nsCSSAnonBoxes::cellContent &&
       aFrame->GetParent()->Style()->GetPseudo() ==
-        nsCSSAnonBoxes::tableCell()) ||
-     (pseudoType == nsCSSAnonBoxes::tableWrapper() &&
+        nsCSSAnonBoxes::tableCell) ||
+     (pseudoType == nsCSSAnonBoxes::tableWrapper &&
       (aFrame->PrincipalChildList().FirstChild()->Style()->GetPseudo() ==
-         nsCSSAnonBoxes::table() ||
+         nsCSSAnonBoxes::table ||
        aFrame->PrincipalChildList().FirstChild()->Style()->GetPseudo() ==
-         nsCSSAnonBoxes::inlineTable())));
+         nsCSSAnonBoxes::inlineTable)));
 }
 
 static bool
 IsRubyPseudo(nsIFrame* aFrame)
 {
   return RubyUtils::IsRubyPseudo(aFrame->Style()->GetPseudo());
 }
 
@@ -2081,17 +2081,17 @@ nsCSSFrameConstructor::ConstructTable(ns
 
   nsIContent* const content = aItem.mContent;
   ComputedStyle* const computedStyle = aItem.mComputedStyle;
   const bool isMathMLContent = content->IsMathMLElement();
 
   // create the pseudo SC for the table wrapper as a child of the inner SC
   RefPtr<ComputedStyle> outerComputedStyle;
   outerComputedStyle = mPresShell->StyleSet()->
-    ResolveInheritingAnonymousBoxStyle(nsCSSAnonBoxes::tableWrapper(),
+    ResolveInheritingAnonymousBoxStyle(nsCSSAnonBoxes::tableWrapper,
                                        computedStyle);
 
   // Create the table wrapper frame which holds the caption and inner table frame
   nsContainerFrame* newFrame;
   if (isMathMLContent)
     newFrame = NS_NewMathMLmtableOuterFrame(mPresShell, outerComputedStyle);
   else
     newFrame = NS_NewTableWrapperFrame(mPresShell, outerComputedStyle);
@@ -2295,17 +2295,17 @@ nsCSSFrameConstructor::ConstructTableCel
 
   // Initialize the table cell frame
   InitAndRestoreFrame(aState, content, aParentFrame, newFrame);
   newFrame->AddStateBits(NS_FRAME_OWNS_ANON_BOXES);
 
   // Resolve pseudo style and initialize the body cell frame
   RefPtr<ComputedStyle> innerPseudoStyle;
   innerPseudoStyle = mPresShell->StyleSet()->
-    ResolveInheritingAnonymousBoxStyle(nsCSSAnonBoxes::cellContent(),
+    ResolveInheritingAnonymousBoxStyle(nsCSSAnonBoxes::cellContent,
                                        computedStyle);
 
   // Create a block frame that will format the cell's content
   bool isBlock;
   nsContainerFrame* cellInnerFrame;
   if (isMathMLContent) {
     cellInnerFrame = NS_NewMathMLmtdInnerFrame(mPresShell, innerPseudoStyle);
     isBlock = false;
@@ -2400,17 +2400,17 @@ nsCSSFrameConstructor::ConstructDocEleme
              "Shouldn't have a doc element containing block here");
 
   // Resolve a new style for the viewport since it may be affected by a new root
   // element style (e.g. a propagated 'direction').
   //
   // @see ComputedStyle::ApplyStyleFixups
   {
     RefPtr<ComputedStyle> sc = mPresShell->StyleSet()->
-      ResolveInheritingAnonymousBoxStyle(nsCSSAnonBoxes::viewport(), nullptr);
+      ResolveInheritingAnonymousBoxStyle(nsCSSAnonBoxes::viewport, nullptr);
     GetRootFrame()->SetComputedStyleWithoutNotification(sc);
   }
 
   // Make sure to call UpdateViewportScrollStylesOverride before
   // SetUpDocElementContainingBlock, since it sets up our scrollbar state
   // properly.
   DebugOnly<nsIContent*> propagatedScrollFrom;
   if (nsPresContext* presContext = mPresShell->GetPresContext()) {
@@ -2678,17 +2678,17 @@ nsCSSFrameConstructor::ConstructRootFram
   AUTO_PROFILER_LABEL("nsCSSFrameConstructor::ConstructRootFrame", LAYOUT);
   AUTO_PROFILER_TRACING("Frame Construction", "ConstructRootFrame");
   AUTO_LAYOUT_PHASE_ENTRY_POINT(mPresShell->GetPresContext(), FrameC);
 
   ServoStyleSet* styleSet = mPresShell->StyleSet();
 
   // --------- BUILD VIEWPORT -----------
   RefPtr<ComputedStyle> viewportPseudoStyle =
-    styleSet->ResolveInheritingAnonymousBoxStyle(nsCSSAnonBoxes::viewport(),
+    styleSet->ResolveInheritingAnonymousBoxStyle(nsCSSAnonBoxes::viewport,
                                                  nullptr);
   ViewportFrame* viewportFrame =
     NS_NewViewportFrame(mPresShell, viewportPseudoStyle);
 
   // XXXbz do we _have_ to pass a null content pointer to that frame?
   // Would it really kill us to pass in the root element or something?
   // What would that break?
   viewportFrame->Init(nullptr, nullptr, nullptr);
@@ -2798,23 +2798,23 @@ nsCSSFrameConstructor::SetUpDocElementCo
     } else
 #endif
     {
       // pass a temporary stylecontext, the correct one will be set later
       rootFrame = NS_NewCanvasFrame(mPresShell, viewportPseudoStyle);
       mHasRootAbsPosContainingBlock = true;
     }
 
-    rootPseudo = nsCSSAnonBoxes::canvas();
+    rootPseudo = nsCSSAnonBoxes::canvas;
     mDocElementContainingBlock = rootFrame;
   } else {
     // Create a page sequence frame
     rootFrame = NS_NewSimplePageSequenceFrame(mPresShell, viewportPseudoStyle);
     mPageSequenceFrame = rootFrame;
-    rootPseudo = nsCSSAnonBoxes::pageSequence();
+    rootPseudo = nsCSSAnonBoxes::pageSequence;
     rootFrame->AddStateBits(NS_FRAME_OWNS_ANON_BOXES);
   }
 
 
   // --------- IF SCROLLABLE WRAP IN SCROLLFRAME --------
 
   // If the device supports scrolling (e.g., in galley mode on the screen and
   // for print-preview, but not when printing), then create a scroll frame that
@@ -2848,32 +2848,32 @@ nsCSSFrameConstructor::SetUpDocElementCo
 
   ServoStyleSet* styleSet = mPresShell->StyleSet();
   // If paginated, make sure we don't put scrollbars in
   if (!isScrollable) {
     rootPseudoStyle =
       styleSet->ResolveInheritingAnonymousBoxStyle(rootPseudo,
                                                    viewportPseudoStyle);
   } else {
-      if (rootPseudo == nsCSSAnonBoxes::canvas()) {
-        rootPseudo = nsCSSAnonBoxes::scrolledCanvas();
+      if (rootPseudo == nsCSSAnonBoxes::canvas) {
+        rootPseudo = nsCSSAnonBoxes::scrolledCanvas;
       } else {
-        NS_ASSERTION(rootPseudo == nsCSSAnonBoxes::pageSequence(),
+        NS_ASSERTION(rootPseudo == nsCSSAnonBoxes::pageSequence,
                      "Unknown root pseudo");
-        rootPseudo = nsCSSAnonBoxes::scrolledPageSequence();
+        rootPseudo = nsCSSAnonBoxes::scrolledPageSequence;
       }
 
       // Build the frame. We give it the content we are wrapping which is the
       // document element, the root frame, the parent view port frame, and we
       // should get back the new frame and the scrollable view if one was
       // created.
 
       // resolve a context for the scrollframe
       RefPtr<ComputedStyle>  computedStyle =
-        styleSet->ResolveInheritingAnonymousBoxStyle(nsCSSAnonBoxes::viewportScroll(),
+        styleSet->ResolveInheritingAnonymousBoxStyle(nsCSSAnonBoxes::viewportScroll,
                                                      viewportPseudoStyle);
 
       // Note that the viewport scrollframe is always built with
       // overflow:auto style. This forces the scroll frame to create
       // anonymous content for both scrollbars. This is necessary even
       // if the HTML or BODY elements are overriding the viewport
       // scroll style to 'hidden' --- dynamic style changes might put
       // scrollbars back on the viewport and we don't want to have to
@@ -2949,28 +2949,28 @@ nsCSSFrameConstructor::ConstructPageFram
                                           nsIFrame*      aPrevPageFrame,
                                           nsContainerFrame*& aCanvasFrame)
 {
   ComputedStyle* parentComputedStyle = aParentFrame->Style();
   ServoStyleSet* styleSet = aPresShell->StyleSet();
 
   RefPtr<ComputedStyle> pagePseudoStyle;
   pagePseudoStyle =
-    styleSet->ResolveInheritingAnonymousBoxStyle(nsCSSAnonBoxes::page(),
+    styleSet->ResolveInheritingAnonymousBoxStyle(nsCSSAnonBoxes::page,
                                                  parentComputedStyle);
 
   nsContainerFrame* pageFrame = NS_NewPageFrame(aPresShell, pagePseudoStyle);
 
   // Initialize the page frame and force it to have a view. This makes printing of
   // the pages easier and faster.
   pageFrame->Init(nullptr, aParentFrame, aPrevPageFrame);
 
   RefPtr<ComputedStyle> pageContentPseudoStyle;
   pageContentPseudoStyle =
-    styleSet->ResolveInheritingAnonymousBoxStyle(nsCSSAnonBoxes::pageContent(),
+    styleSet->ResolveInheritingAnonymousBoxStyle(nsCSSAnonBoxes::pageContent,
                                                  pagePseudoStyle);
 
   nsContainerFrame* pageContentFrame =
     NS_NewPageContentFrame(aPresShell, pageContentPseudoStyle);
 
   // Initialize the page content frame and force it to have a view. Also make it the
   // containing block for fixed elements which are repeated on every page.
   nsIFrame* prevPageContentFrame = nullptr;
@@ -2984,17 +2984,17 @@ nsCSSFrameConstructor::ConstructPageFram
   }
   SetInitialSingleChild(pageFrame, pageContentFrame);
   // Make it an absolute container for fixed-pos elements
   pageContentFrame->AddStateBits(NS_FRAME_CAN_HAVE_ABSPOS_CHILDREN);
   pageContentFrame->MarkAsAbsoluteContainingBlock();
 
   RefPtr<ComputedStyle> canvasPseudoStyle;
   canvasPseudoStyle =
-    styleSet->ResolveInheritingAnonymousBoxStyle(nsCSSAnonBoxes::canvas(),
+    styleSet->ResolveInheritingAnonymousBoxStyle(nsCSSAnonBoxes::canvas,
                                                  pageContentPseudoStyle);
 
   aCanvasFrame = NS_NewCanvasFrame(aPresShell, canvasPseudoStyle);
 
   nsIFrame* prevCanvasFrame = nullptr;
   if (prevPageContentFrame) {
     prevCanvasFrame = prevPageContentFrame->PrincipalChildList().FirstChild();
     NS_ASSERTION(prevCanvasFrame, "missing canvas frame");
@@ -3084,17 +3084,17 @@ nsCSSFrameConstructor::ConstructSelectFr
 
     comboboxFrame->AddStateBits(NS_FRAME_OWNS_ANON_BOXES);
 
     aState.AddChild(comboboxFrame, aFrameItems, content, aParentFrame);
 
     // Resolve pseudo element style for the dropdown list
     RefPtr<ComputedStyle> listStyle;
     listStyle = mPresShell->StyleSet()->
-      ResolveInheritingAnonymousBoxStyle(nsCSSAnonBoxes::dropDownList(),
+      ResolveInheritingAnonymousBoxStyle(nsCSSAnonBoxes::dropDownList,
                                          computedStyle);
 
     // Create a listbox
     nsContainerFrame* listFrame = NS_NewListControlFrame(mPresShell, listStyle);
 
     // Notify the listbox that it is being used as a dropdown list.
     nsIListControlFrame * listControlFrame = do_QueryFrame(listFrame);
     if (listControlFrame) {
@@ -3258,26 +3258,26 @@ nsCSSFrameConstructor::ConstructFieldSet
                       aState.GetGeometricParent(*aStyleDisplay, aParentFrame),
                       fieldsetFrame);
 
   fieldsetFrame->AddStateBits(NS_FRAME_OWNS_ANON_BOXES);
 
   // Resolve style and initialize the frame
   RefPtr<ComputedStyle> fieldsetContentStyle;
   fieldsetContentStyle = mPresShell->StyleSet()->
-    ResolveInheritingAnonymousBoxStyle(nsCSSAnonBoxes::fieldsetContent(),
+    ResolveInheritingAnonymousBoxStyle(nsCSSAnonBoxes::fieldsetContent,
                                        computedStyle);
 
   const nsStyleDisplay* fieldsetContentDisplay = fieldsetContentStyle->StyleDisplay();
   bool isScrollable = fieldsetContentDisplay->IsScrollableOverflow();
   nsContainerFrame* scrollFrame = nullptr;
   if (isScrollable) {
     fieldsetContentStyle =
       BeginBuildingScrollFrame(aState, content, fieldsetContentStyle,
-                               fieldsetFrame, nsCSSAnonBoxes::scrolledContent(),
+                               fieldsetFrame, nsCSSAnonBoxes::scrolledContent,
                                false, scrollFrame);
   }
 
   nsContainerFrame* absPosContainer = nullptr;
   if (fieldsetFrame->IsAbsPosContainingBlock()) {
     absPosContainer = fieldsetFrame;
   }
 
@@ -3387,18 +3387,18 @@ nsCSSFrameConstructor::ConstructDetailsF
 
 static nsIFrame*
 FindAncestorWithGeneratedContentPseudo(nsIFrame* aFrame)
 {
   for (nsIFrame* f = aFrame->GetParent(); f; f = f->GetParent()) {
     NS_ASSERTION(f->IsGeneratedContentFrame(),
                  "should not have exited generated content");
     nsAtom* pseudo = f->Style()->GetPseudo();
-    if (pseudo == nsCSSPseudoElements::before() ||
-        pseudo == nsCSSPseudoElements::after())
+    if (pseudo == nsCSSPseudoElements::before ||
+        pseudo == nsCSSPseudoElements::after)
       return f;
   }
   return nullptr;
 }
 
 #define SIMPLE_FCDATA(_func) FCDATA_DECL(0, _func)
 #define FULL_CTOR_FCDATA(_flags, _func)                             \
   { _flags | FCDATA_FUNC_IS_FULL_CTOR, { nullptr }, _func, nullptr }
@@ -3533,36 +3533,36 @@ nsCSSFrameConstructor::FindDataByTag(nsA
   { &nsGkAtoms::_tag, FCDATA_DECL(FCDATA_FUNC_IS_DATA_GETTER,  _func) }
 #define COMPLEX_TAG_CREATE(_tag, _func)             \
   { &nsGkAtoms::_tag, FULL_CTOR_FCDATA(0, _func) }
 
 static bool
 IsFrameForFieldSet(nsIFrame* aFrame)
 {
   nsAtom* pseudo = aFrame->Style()->GetPseudo();
-  if (pseudo == nsCSSAnonBoxes::fieldsetContent() ||
-      pseudo == nsCSSAnonBoxes::scrolledContent() ||
-      pseudo == nsCSSAnonBoxes::columnContent()) {
+  if (pseudo == nsCSSAnonBoxes::fieldsetContent ||
+      pseudo == nsCSSAnonBoxes::scrolledContent ||
+      pseudo == nsCSSAnonBoxes::columnContent) {
     return IsFrameForFieldSet(aFrame->GetParent());
   }
   return aFrame->IsFieldSetFrame();
 }
 
 /* static */
 const nsCSSFrameConstructor::FrameConstructionData*
 nsCSSFrameConstructor::FindHTMLData(const Element& aElement,
                                     nsIFrame* aParentFrame,
                                     ComputedStyle& aStyle)
 {
   MOZ_ASSERT(aElement.IsHTMLElement());
 
   nsAtom* tag = aElement.NodeInfo()->NameAtom();
   NS_ASSERTION(!aParentFrame ||
                aParentFrame->Style()->GetPseudo() !=
-                 nsCSSAnonBoxes::fieldsetContent() ||
+                 nsCSSAnonBoxes::fieldsetContent ||
                aParentFrame->GetParent()->IsFieldSetFrame(),
                "Unexpected parent for fieldset content anon box");
   if (tag == nsGkAtoms::legend &&
       (!aParentFrame || !IsFrameForFieldSet(aParentFrame) ||
        aStyle.StyleDisplay()->IsFloatingStyle() ||
        aStyle.StyleDisplay()->IsAbsolutelyPositionedStyle())) {
     // <legend> is only special inside fieldset, we only check the frame tree
     // parent because the content tree parent may not be a <fieldset> due to
@@ -3591,17 +3591,17 @@ nsCSSFrameConstructor::FindHTMLData(cons
       FCDATA_DECL(FCDATA_ALLOW_BLOCK_STYLES | FCDATA_MAY_NEED_SCROLLFRAME,
                   NS_NewLegendFrame) },
     SIMPLE_TAG_CREATE(frameset, NS_NewHTMLFramesetFrame),
     SIMPLE_TAG_CREATE(iframe, NS_NewSubDocumentFrame),
     { &nsGkAtoms::button,
       FCDATA_WITH_WRAPPING_BLOCK(FCDATA_ALLOW_BLOCK_STYLES |
                                  FCDATA_ALLOW_GRID_FLEX_COLUMNSET,
                                  NS_NewHTMLButtonControlFrame,
-                                 nsCSSAnonBoxes::buttonContent()) },
+                                 nsCSSAnonBoxes::buttonContent) },
     SIMPLE_TAG_CHAIN(canvas, nsCSSFrameConstructor::FindCanvasData),
     SIMPLE_TAG_CREATE(video, NS_NewHTMLVideoFrame),
     SIMPLE_TAG_CREATE(audio, NS_NewHTMLVideoFrame),
     SIMPLE_TAG_CREATE(progress, NS_NewProgressFrame),
     SIMPLE_TAG_CREATE(meter, NS_NewMeterFrame),
     COMPLEX_TAG_CREATE(details, &nsCSSFrameConstructor::ConstructDetailsFrame)
   };
 
@@ -3664,36 +3664,36 @@ nsCSSFrameConstructor::FindInputData(con
     SIMPLE_INT_CREATE(NS_FORM_INPUT_SEARCH, NS_NewTextControlFrame),
     SIMPLE_INT_CREATE(NS_FORM_INPUT_TEXT, NS_NewTextControlFrame),
     SIMPLE_INT_CREATE(NS_FORM_INPUT_TEL, NS_NewTextControlFrame),
     SIMPLE_INT_CREATE(NS_FORM_INPUT_URL, NS_NewTextControlFrame),
     SIMPLE_INT_CREATE(NS_FORM_INPUT_RANGE, NS_NewRangeFrame),
     SIMPLE_INT_CREATE(NS_FORM_INPUT_PASSWORD, NS_NewTextControlFrame),
     { NS_FORM_INPUT_COLOR,
       FCDATA_WITH_WRAPPING_BLOCK(0, NS_NewColorControlFrame,
-                                 nsCSSAnonBoxes::buttonContent()) },
+                                 nsCSSAnonBoxes::buttonContent) },
     // TODO: this is temporary until a frame is written: bug 635240.
     SIMPLE_INT_CREATE(NS_FORM_INPUT_NUMBER, NS_NewNumberControlFrame),
     SIMPLE_INT_CREATE(NS_FORM_INPUT_TIME, NS_NewDateTimeControlFrame),
     SIMPLE_INT_CREATE(NS_FORM_INPUT_DATE, NS_NewDateTimeControlFrame),
     // TODO: this is temporary until a frame is written: bug 888320
     SIMPLE_INT_CREATE(NS_FORM_INPUT_MONTH, NS_NewTextControlFrame),
     // TODO: this is temporary until a frame is written: bug 888320
     SIMPLE_INT_CREATE(NS_FORM_INPUT_WEEK, NS_NewTextControlFrame),
     // TODO: this is temporary until a frame is written: bug 888320
     SIMPLE_INT_CREATE(NS_FORM_INPUT_DATETIME_LOCAL, NS_NewTextControlFrame),
     { NS_FORM_INPUT_SUBMIT,
       FCDATA_WITH_WRAPPING_BLOCK(0, NS_NewGfxButtonControlFrame,
-                                 nsCSSAnonBoxes::buttonContent()) },
+                                 nsCSSAnonBoxes::buttonContent) },
     { NS_FORM_INPUT_RESET,
       FCDATA_WITH_WRAPPING_BLOCK(0, NS_NewGfxButtonControlFrame,
-                                 nsCSSAnonBoxes::buttonContent()) },
+                                 nsCSSAnonBoxes::buttonContent) },
     { NS_FORM_INPUT_BUTTON,
       FCDATA_WITH_WRAPPING_BLOCK(0, NS_NewGfxButtonControlFrame,
-                                 nsCSSAnonBoxes::buttonContent()) }
+                                 nsCSSAnonBoxes::buttonContent) }
     // Keeping hidden inputs out of here on purpose for so they get frames by
     // display (in practice, none).
   };
 
 
   auto controlType = HTMLInputElement::FromNode(aElement)->ControlType();
 
   // radio and checkbox inputs with appearance:none should be constructed
@@ -3765,17 +3765,17 @@ nsCSSFrameConstructor::FindCanvasData(co
     doc = doc->GetOriginalDocument();
   }
   if (!doc->IsScriptEnabled()) {
     return nullptr;
   }
 
   static const FrameConstructionData sCanvasData =
     FCDATA_WITH_WRAPPING_BLOCK(0, NS_NewHTMLCanvasFrame,
-                               nsCSSAnonBoxes::htmlCanvasContent());
+                               nsCSSAnonBoxes::htmlCanvasContent);
   return &sCanvasData;
 }
 
 void
 nsCSSFrameConstructor::ConstructFrameFromItemInternal(FrameConstructionItem& aItem,
                                                       nsFrameConstructorState& aState,
                                                       nsContainerFrame* aParentFrame,
                                                       nsFrameItems& aFrameItems)
@@ -4481,17 +4481,17 @@ nsCSSFrameConstructor::BuildScrollFrame(
                                         nsIContent*              aContent,
                                         ComputedStyle*           aContentStyle,
                                         nsIFrame*                aScrolledFrame,
                                         nsContainerFrame*        aParentFrame,
                                         nsContainerFrame*&       aNewFrame)
 {
   RefPtr<ComputedStyle> scrolledContentStyle =
     BeginBuildingScrollFrame(aState, aContent, aContentStyle, aParentFrame,
-                             nsCSSAnonBoxes::scrolledContent(),
+                             nsCSSAnonBoxes::scrolledContent,
                              false, aNewFrame);
 
   aScrolledFrame->SetComputedStyleWithoutNotification(scrolledContentStyle);
   InitAndRestoreFrame(aState, aContent, aNewFrame, aScrolledFrame);
 
   FinishBuildingScrollFrame(aNewFrame, aScrolledFrame);
 }
 
@@ -4726,17 +4726,17 @@ nsCSSFrameConstructor::ConstructScrollab
 {
   nsIContent* const content = aItem.mContent;
   ComputedStyle* const computedStyle = aItem.mComputedStyle;
 
   nsContainerFrame* newFrame = nullptr;
   RefPtr<ComputedStyle> scrolledContentStyle
     = BeginBuildingScrollFrame(aState, content, computedStyle,
                                aState.GetGeometricParent(*aDisplay, aParentFrame),
-                               nsCSSAnonBoxes::scrolledContent(),
+                               nsCSSAnonBoxes::scrolledContent,
                                false, newFrame);
 
   // Create our block frame
   // pass a temporary stylecontext, the correct one will be set later
   nsContainerFrame* scrolledFrame = aConstructor(mPresShell, computedStyle);
 
   // Make sure to AddChild before we call ConstructBlock so that we
   // end up before our descendants in fixed-pos lists as needed.
@@ -4871,17 +4871,17 @@ nsCSSFrameConstructor::FlushAccumulatedB
                                              nsFrameItems& aBlockItems,
                                              nsFrameItems& aNewItems)
 {
   if (aBlockItems.IsEmpty()) {
     // Nothing to do
     return;
   }
 
-  nsAtom* anonPseudo = nsCSSAnonBoxes::mozMathMLAnonymousBlock();
+  nsAtom* anonPseudo = nsCSSAnonBoxes::mozMathMLAnonymousBlock;
 
   ComputedStyle* parentContext =
     nsFrame::CorrectStyleParentFrame(aParentFrame,
                                      anonPseudo)->Style();
   ServoStyleSet* styleSet = mPresShell->StyleSet();
   RefPtr<ComputedStyle> blockContext;
   blockContext = styleSet->
     ResolveInheritingAnonymousBoxStyle(anonPseudo, parentContext);
@@ -5053,30 +5053,30 @@ nsCSSFrameConstructor::ConstructOuterSVG
                                          FrameConstructionItem&   aItem,
                                          nsContainerFrame*        aParentFrame,
                                          const nsStyleDisplay*    aDisplay,
                                          nsFrameItems&            aFrameItems)
 {
   return ConstructFrameWithAnonymousChild(
       aState, aItem, aParentFrame, aFrameItems,
       NS_NewSVGOuterSVGFrame, NS_NewSVGOuterSVGAnonChildFrame,
-      nsCSSAnonBoxes::mozSVGOuterSVGAnonChild(), true);
+      nsCSSAnonBoxes::mozSVGOuterSVGAnonChild, true);
 }
 
 nsIFrame*
 nsCSSFrameConstructor::ConstructMarker(nsFrameConstructorState& aState,
                                        FrameConstructionItem&   aItem,
                                        nsContainerFrame*        aParentFrame,
                                        const nsStyleDisplay*    aDisplay,
                                        nsFrameItems&            aFrameItems)
 {
   return ConstructFrameWithAnonymousChild(
       aState, aItem, aParentFrame, aFrameItems,
       NS_NewSVGMarkerFrame, NS_NewSVGMarkerAnonChildFrame,
-      nsCSSAnonBoxes::mozSVGMarkerAnonChild(), false);
+      nsCSSAnonBoxes::mozSVGMarkerAnonChild, false);
 }
 
 // Only outer <svg> elements can be floated or positioned.  All other SVG
 // should be in-flow.
 #define SIMPLE_SVG_FCDATA(_func)                                        \
   FCDATA_DECL(FCDATA_DISALLOW_OUT_OF_FLOW |                             \
               FCDATA_SKIP_ABSPOS_PUSH |                                 \
               FCDATA_DISALLOW_GENERATED_CONTENT,  _func)
@@ -5264,21 +5264,21 @@ nsCSSFrameConstructor::FindSVGData(const
     SIMPLE_SVG_CREATE(rect, NS_NewSVGGeometryFrame),
     SIMPLE_SVG_CREATE(path, NS_NewSVGGeometryFrame),
     SIMPLE_SVG_CREATE(defs, NS_NewSVGContainerFrame),
     SIMPLE_SVG_CREATE(generic_, NS_NewSVGGenericContainerFrame),
     { &nsGkAtoms::text,
       FCDATA_WITH_WRAPPING_BLOCK(FCDATA_DISALLOW_OUT_OF_FLOW |
                                  FCDATA_ALLOW_BLOCK_STYLES,
                                  NS_NewSVGTextFrame,
-                                 nsCSSAnonBoxes::mozSVGText()) },
+                                 nsCSSAnonBoxes::mozSVGText) },
     { &nsGkAtoms::foreignObject,
       FCDATA_WITH_WRAPPING_BLOCK(FCDATA_DISALLOW_OUT_OF_FLOW,
                                  NS_NewSVGForeignObjectFrame,
-                                 nsCSSAnonBoxes::mozSVGForeignContent()) },
+                                 nsCSSAnonBoxes::mozSVGForeignContent) },
     SIMPLE_SVG_CREATE(a, NS_NewSVGAFrame),
     SIMPLE_SVG_CREATE(linearGradient, NS_NewSVGLinearGradientFrame),
     SIMPLE_SVG_CREATE(radialGradient, NS_NewSVGRadialGradientFrame),
     SIMPLE_SVG_CREATE(stop, NS_NewSVGStopFrame),
     SIMPLE_SVG_CREATE(use, NS_NewSVGUseFrame),
     SIMPLE_SVG_CREATE(view, NS_NewSVGViewFrame),
     SIMPLE_SVG_CREATE(image, NS_NewSVGImageFrame),
     SIMPLE_SVG_CREATE(clipPath, NS_NewSVGClipPathFrame),
@@ -5323,17 +5323,17 @@ nsCSSFrameConstructor::FindSVGData(const
 }
 
 void
 nsCSSFrameConstructor::AddPageBreakItem(nsIContent* aContent,
                                         FrameConstructionItemList& aItems)
 {
   RefPtr<ComputedStyle> pseudoStyle =
     mPresShell->StyleSet()->
-      ResolveNonInheritingAnonymousBoxStyle(nsCSSAnonBoxes::pageBreak());
+      ResolveNonInheritingAnonymousBoxStyle(nsCSSAnonBoxes::pageBreak);
 
   MOZ_ASSERT(pseudoStyle->StyleDisplay()->mDisplay == StyleDisplay::Block,
              "Unexpected display");
 
   static const FrameConstructionData sPageBreakData =
     FCDATA_DECL(FCDATA_SKIP_FRAMESET, NS_NewPageBreakFrame);
 
   aItems.AppendItem(this, &sPageBreakData, aContent, nullptr,
@@ -9166,92 +9166,92 @@ nsCSSFrameConstructor::ShouldHaveSpecial
 const nsCSSFrameConstructor::PseudoParentData
 nsCSSFrameConstructor::sPseudoParentData[eParentTypeCount] = {
   { // Cell
     FULL_CTOR_FCDATA(FCDATA_IS_TABLE_PART | FCDATA_SKIP_FRAMESET |
                      FCDATA_USE_CHILD_ITEMS |
                      FCDATA_IS_WRAPPER_ANON_BOX |
                      FCDATA_DESIRED_PARENT_TYPE_TO_BITS(eTypeRow),
                      &nsCSSFrameConstructor::ConstructTableCell),
-    &nsCSSAnonBoxes::tableCell()
+    &nsCSSAnonBoxes::tableCell
   },
   { // Row
     FULL_CTOR_FCDATA(FCDATA_IS_TABLE_PART | FCDATA_SKIP_FRAMESET |
                      FCDATA_USE_CHILD_ITEMS |
                      FCDATA_IS_WRAPPER_ANON_BOX |
                      FCDATA_DESIRED_PARENT_TYPE_TO_BITS(eTypeRowGroup),
                      &nsCSSFrameConstructor::ConstructTableRowOrRowGroup),
-    &nsCSSAnonBoxes::tableRow()
+    &nsCSSAnonBoxes::tableRow
   },
   { // Row group
     FULL_CTOR_FCDATA(FCDATA_IS_TABLE_PART | FCDATA_SKIP_FRAMESET |
                      FCDATA_USE_CHILD_ITEMS |
                      FCDATA_IS_WRAPPER_ANON_BOX |
                      FCDATA_DESIRED_PARENT_TYPE_TO_BITS(eTypeTable),
                      &nsCSSFrameConstructor::ConstructTableRowOrRowGroup),
-    &nsCSSAnonBoxes::tableRowGroup()
+    &nsCSSAnonBoxes::tableRowGroup
   },
   { // Column group
     FCDATA_DECL(FCDATA_IS_TABLE_PART | FCDATA_SKIP_FRAMESET |
                 FCDATA_DISALLOW_OUT_OF_FLOW | FCDATA_USE_CHILD_ITEMS |
                 FCDATA_SKIP_ABSPOS_PUSH |
                 // Not FCDATA_IS_WRAPPER_ANON_BOX, because we don't need to
                 // restyle these: they have non-inheriting styles.
                 FCDATA_DESIRED_PARENT_TYPE_TO_BITS(eTypeTable),
                 NS_NewTableColGroupFrame),
-    &nsCSSAnonBoxes::tableColGroup()
+    &nsCSSAnonBoxes::tableColGroup
   },
   { // Table
     FULL_CTOR_FCDATA(FCDATA_SKIP_FRAMESET | FCDATA_USE_CHILD_ITEMS |
                      FCDATA_IS_WRAPPER_ANON_BOX,
                      &nsCSSFrameConstructor::ConstructTable),
-    &nsCSSAnonBoxes::table()
+    &nsCSSAnonBoxes::table
   },
   { // Ruby
     FCDATA_DECL(FCDATA_IS_LINE_PARTICIPANT |
                 FCDATA_USE_CHILD_ITEMS |
                 FCDATA_IS_WRAPPER_ANON_BOX |
                 FCDATA_SKIP_FRAMESET,
                 NS_NewRubyFrame),
-    &nsCSSAnonBoxes::ruby()
+    &nsCSSAnonBoxes::ruby
   },
   { // Ruby Base
     FCDATA_DECL(FCDATA_USE_CHILD_ITEMS |
                 FCDATA_IS_LINE_PARTICIPANT |
                 FCDATA_IS_WRAPPER_ANON_BOX |
                 FCDATA_DESIRED_PARENT_TYPE_TO_BITS(eTypeRubyBaseContainer) |
                 FCDATA_SKIP_FRAMESET,
                 NS_NewRubyBaseFrame),
-    &nsCSSAnonBoxes::rubyBase()
+    &nsCSSAnonBoxes::rubyBase
   },
   { // Ruby Base Container
     FCDATA_DECL(FCDATA_USE_CHILD_ITEMS |
                 FCDATA_IS_LINE_PARTICIPANT |
                 FCDATA_IS_WRAPPER_ANON_BOX |
                 FCDATA_DESIRED_PARENT_TYPE_TO_BITS(eTypeRuby) |
                 FCDATA_SKIP_FRAMESET,
                 NS_NewRubyBaseContainerFrame),
-    &nsCSSAnonBoxes::rubyBaseContainer()
+    &nsCSSAnonBoxes::rubyBaseContainer
   },
   { // Ruby Text
     FCDATA_DECL(FCDATA_USE_CHILD_ITEMS |
                 FCDATA_IS_LINE_PARTICIPANT |
                 FCDATA_IS_WRAPPER_ANON_BOX |
                 FCDATA_DESIRED_PARENT_TYPE_TO_BITS(eTypeRubyTextContainer) |
                 FCDATA_SKIP_FRAMESET,
                 NS_NewRubyTextFrame),
-    &nsCSSAnonBoxes::rubyText()
+    &nsCSSAnonBoxes::rubyText
   },
   { // Ruby Text Container
     FCDATA_DECL(FCDATA_USE_CHILD_ITEMS |
                 FCDATA_IS_WRAPPER_ANON_BOX |
                 FCDATA_DESIRED_PARENT_TYPE_TO_BITS(eTypeRuby) |
                 FCDATA_SKIP_FRAMESET,
                 NS_NewRubyTextContainerFrame),
-    &nsCSSAnonBoxes::rubyTextContainer()
+    &nsCSSAnonBoxes::rubyTextContainer
   }
 };
 
 void
 nsCSSFrameConstructor::CreateNeededAnonFlexOrGridItems(
   nsFrameConstructorState& aState,
   FrameConstructionItemList& aItems,
   nsIFrame* aParentFrame)
@@ -9314,18 +9314,18 @@ nsCSSFrameConstructor::CreateNeededAnonF
     endIter.SkipItemsThatNeedAnonFlexOrGridItem(aState, isLegacyBox);
 
     NS_ASSERTION(iter != endIter,
                  "Should've had at least one wrappable child to seek past");
 
     // Now, we create the anonymous flex or grid item to contain the children
     // between |iter| and |endIter|.
     nsAtom* pseudoType = (aParentFrame->IsFlexContainerFrame())
-                            ? nsCSSAnonBoxes::anonymousFlexItem()
-                            : nsCSSAnonBoxes::anonymousGridItem();
+                            ? nsCSSAnonBoxes::anonymousFlexItem
+                            : nsCSSAnonBoxes::anonymousGridItem;
     ComputedStyle* parentStyle = aParentFrame->Style();
     nsIContent* parentContent = aParentFrame->GetContent();
     already_AddRefed<ComputedStyle> wrapperStyle =
       mPresShell->StyleSet()->ResolveInheritingAnonymousBoxStyle(pseudoType,
                                                                  parentStyle);
 
     static const FrameConstructionData sBlockFormattingContextFCData =
       FCDATA_DECL(FCDATA_SKIP_FRAMESET |
@@ -9813,21 +9813,21 @@ nsCSSFrameConstructor::WrapItemsInPseudo
                                                ParentType aWrapperType,
                                                FCItemIterator& aIter,
                                                const FCItemIterator& aEndIter)
 {
   const PseudoParentData& pseudoData = sPseudoParentData[aWrapperType];
   nsAtom* pseudoType = *pseudoData.mPseudoType;
   StyleDisplay parentDisplay = aParentStyle->StyleDisplay()->mDisplay;
 
-  if (pseudoType == nsCSSAnonBoxes::table() &&
+  if (pseudoType == nsCSSAnonBoxes::table &&
       (parentDisplay == StyleDisplay::Inline ||
        parentDisplay == StyleDisplay::RubyBase ||
        parentDisplay == StyleDisplay::RubyText)) {
-    pseudoType = nsCSSAnonBoxes::inlineTable();
+    pseudoType = nsCSSAnonBoxes::inlineTable;
   }
 
   already_AddRefed<ComputedStyle> wrapperStyle;
   if (pseudoData.mFCData.mBits & FCDATA_IS_WRAPPER_ANON_BOX) {
     wrapperStyle =
       mPresShell->StyleSet()->ResolveInheritingAnonymousBoxStyle(pseudoType,
                                                                  aParentStyle);
   } else {
@@ -10209,17 +10209,17 @@ nsCSSFrameConstructor::ProcessChildren(n
                                       NS_LITERAL_CSTRING("Layout: FrameConstructor"),
                                       mDocument,
                                       nsContentUtils::eXUL_PROPERTIES,
                                       message,
                                       params, ArrayLength(params));
     }
 
     RefPtr<ComputedStyle> blockSC = mPresShell->StyleSet()->
-      ResolveInheritingAnonymousBoxStyle(nsCSSAnonBoxes::mozXULAnonymousBlock(),
+      ResolveInheritingAnonymousBoxStyle(nsCSSAnonBoxes::mozXULAnonymousBlock,
                                          frameComputedStyle);
     nsBlockFrame* blockFrame = NS_NewBlockFrame(mPresShell, blockSC);
     // We might, in theory, want to set NS_BLOCK_FLOAT_MGR and
     // NS_BLOCK_MARGIN_ROOT, but I think it's a bad idea given that
     // a real block placed here wouldn't get those set on it.
 
     InitAndRestoreFrame(aState, aContent, aFrame, blockFrame, false);
 
@@ -10270,17 +10270,17 @@ nsCSSFrameConstructor::WrapFramesInFirst
     // Nothing is supposed to go into the first-line; nothing to do
     return;
   }
 
   if (!aLineFrame) {
     // Create line frame
     ComputedStyle* parentStyle =
       nsFrame::CorrectStyleParentFrame(aBlockFrame,
-                                       nsCSSPseudoElements::firstLine())->
+                                       nsCSSPseudoElements::firstLine)->
         Style();
     RefPtr<ComputedStyle> firstLineStyle = GetFirstLineStyle(aBlockContent,
                                                                 parentStyle);
 
     aLineFrame = NS_NewFirstLineFrame(mPresShell, firstLineStyle);
 
     // Initialize the line frame
     InitAndRestoreFrame(aState, aBlockContent, aBlockFrame, aLineFrame);
@@ -10534,33 +10534,33 @@ nsCSSFrameConstructor::CreateLetterFrame
   NS_ASSERTION(nsLayoutUtils::GetAsBlock(aBlockFrame),
                  "Not a block frame?");
 
   // Get a ComputedStyle for the first-letter-frame.
   //
   // Keep this in sync with nsBlockFrame::UpdatePseudoElementStyles.
   nsIFrame* parentFrame =
     nsFrame::CorrectStyleParentFrame(aParentFrame,
-                                     nsCSSPseudoElements::firstLetter());
+                                     nsCSSPseudoElements::firstLetter);
 
   ComputedStyle* parentComputedStyle = parentFrame->Style();
 
   // Use content from containing block so that we can actually
   // find a matching style rule.
   nsIContent* blockContent = aBlockFrame->GetContent();
 
   // Create first-letter style rule
   RefPtr<ComputedStyle> sc =
     GetFirstLetterStyle(blockContent, parentComputedStyle);
 
   if (sc) {
     if (parentFrame->IsLineFrame()) {
       nsIFrame* parentIgnoringFirstLine =
         nsFrame::CorrectStyleParentFrame(aBlockFrame,
-                                         nsCSSPseudoElements::firstLetter());
+                                         nsCSSPseudoElements::firstLetter);
 
       sc =
         mPresShell->StyleSet()->ReparentComputedStyle(
           sc,
           parentComputedStyle,
           parentIgnoringFirstLine->Style(),
           parentComputedStyle,
           blockContent->AsElement());
@@ -10978,17 +10978,17 @@ nsCSSFrameConstructor::InitAndWrapInColu
   // Wrap the block frame in a ColumnSetFrame.
   nsContainerFrame* columnSetFrame =
     NS_NewColumnSetFrame(mPresShell, aComputedStyle,
                          nsFrameState(NS_FRAME_OWNS_ANON_BOXES));
   InitAndRestoreFrame(aState, aContent, aParentFrame, columnSetFrame);
   SetInitialSingleChild(columnSetFrame, aBlockFrame);
 
   RefPtr<ComputedStyle> anonBlockStyle = mPresShell->StyleSet()->
-    ResolveInheritingAnonymousBoxStyle(nsCSSAnonBoxes::columnContent(),
+    ResolveInheritingAnonymousBoxStyle(nsCSSAnonBoxes::columnContent,
                                        aComputedStyle);
   aBlockFrame->SetComputedStyleWithoutNotification(anonBlockStyle);
   InitAndRestoreFrame(aState, aContent, columnSetFrame, aBlockFrame);
 
   return columnSetFrame;
 }
 
 void
@@ -11190,17 +11190,17 @@ nsCSSFrameConstructor::CreateIBSiblings(
   //
   // The distinction in styles is needed because of CSS 2.1, section
   // 9.2.1.1, which says:
   //
   //   When such an inline box is affected by relative positioning, any
   //   resulting translation also affects the block-level box contained
   //   in the inline box.
   RefPtr<ComputedStyle> blockSC = mPresShell->StyleSet()->
-    ResolveInheritingAnonymousBoxStyle(nsCSSAnonBoxes::mozBlockInsideInlineWrapper(),
+    ResolveInheritingAnonymousBoxStyle(nsCSSAnonBoxes::mozBlockInsideInlineWrapper,
                                        computedStyle);
 
   nsContainerFrame* lastNewInline =
     static_cast<nsContainerFrame*>(aInitialInline->FirstContinuation());
   do {
     // On entry to this loop aChildItems is not empty and the first frame in it
     // is block-level.
     MOZ_ASSERT(aChildItems.NotEmpty(), "Should have child items");
--- a/layout/base/nsGenConList.cpp
+++ b/layout/base/nsGenConList.cpp
@@ -54,21 +54,21 @@ nsGenConList::DestroyNodesFor(nsIFrame* 
  * @param aContent the content to use is stored here; it's the element
  * that generated the ::before or ::after content, or (if not for generated
  * content), the frame's own element
  * @return -1 for ::before, +1 for ::after, and 0 otherwise.
  */
 inline int32_t PseudoCompareType(nsIFrame* aFrame, nsIContent** aContent)
 {
   nsAtom *pseudo = aFrame->Style()->GetPseudo();
-  if (pseudo == nsCSSPseudoElements::before()) {
+  if (pseudo == nsCSSPseudoElements::before) {
     *aContent = aFrame->GetContent()->GetParent();
     return -1;
   }
-  if (pseudo == nsCSSPseudoElements::after()) {
+  if (pseudo == nsCSSPseudoElements::after) {
     *aContent = aFrame->GetContent()->GetParent();
     return 1;
   }
   *aContent = aFrame->GetContent();
   return 0;
 }
 
 /* static */ bool
--- a/layout/base/nsGenConList.h
+++ b/layout/base/nsGenConList.h
@@ -68,19 +68,19 @@ protected:
     NS_ASSERTION(mContentIndex <
                    int32_t(mPseudoFrame->StyleContent()->ContentCount()),
                  "index out of range");
       // We allow negative values of mContentIndex for 'counter-reset' and
       // 'counter-increment'.
 
     NS_ASSERTION(mContentIndex < 0 ||
                  mPseudoFrame->Style()->GetPseudo() ==
-                   nsCSSPseudoElements::before() ||
+                   nsCSSPseudoElements::before ||
                  mPseudoFrame->Style()->GetPseudo() ==
-                   nsCSSPseudoElements::after(),
+                   nsCSSPseudoElements::after,
                  "not :before/:after generated content and not counter change");
     NS_ASSERTION(mContentIndex < 0 ||
                  mPseudoFrame->GetStateBits() & NS_FRAME_GENERATED_CONTENT,
                  "not generated content and not counter change");
   }
 };
 
 class nsGenConList {
--- a/layout/base/nsLayoutUtils.cpp
+++ b/layout/base/nsLayoutUtils.cpp
@@ -4035,27 +4035,27 @@ nsLayoutUtils::BinarySearchForPosition(D
 }
 
 void
 nsLayoutUtils::AddBoxesForFrame(nsIFrame* aFrame,
                                 nsLayoutUtils::BoxCallback* aCallback)
 {
   nsAtom* pseudoType = aFrame->Style()->GetPseudo();
 
-  if (pseudoType == nsCSSAnonBoxes::tableWrapper()) {
+  if (pseudoType == nsCSSAnonBoxes::tableWrapper) {
     AddBoxesForFrame(aFrame->PrincipalChildList().FirstChild(), aCallback);
     if (aCallback->mIncludeCaptionBoxForTable) {
       nsIFrame* kid = aFrame->GetChildList(nsIFrame::kCaptionList).FirstChild();
       if (kid) {
         AddBoxesForFrame(kid, aCallback);
       }
     }
-  } else if (pseudoType == nsCSSAnonBoxes::mozBlockInsideInlineWrapper() ||
-             pseudoType == nsCSSAnonBoxes::mozMathMLAnonymousBlock() ||
-             pseudoType == nsCSSAnonBoxes::mozXULAnonymousBlock()) {
+  } else if (pseudoType == nsCSSAnonBoxes::mozBlockInsideInlineWrapper ||
+             pseudoType == nsCSSAnonBoxes::mozMathMLAnonymousBlock ||
+             pseudoType == nsCSSAnonBoxes::mozXULAnonymousBlock) {
     for (nsIFrame* kid : aFrame->PrincipalChildList()) {
       AddBoxesForFrame(kid, aCallback);
     }
   } else {
     aCallback->AddBox(aFrame);
   }
 }
 
@@ -4069,31 +4069,31 @@ nsLayoutUtils::GetAllInFlowBoxes(nsIFram
 }
 
 nsIFrame*
 nsLayoutUtils::GetFirstNonAnonymousFrame(nsIFrame* aFrame)
 {
   while (aFrame) {
     nsAtom* pseudoType = aFrame->Style()->GetPseudo();
 
-    if (pseudoType == nsCSSAnonBoxes::tableWrapper()) {
+    if (pseudoType == nsCSSAnonBoxes::tableWrapper) {
       nsIFrame* f = GetFirstNonAnonymousFrame(aFrame->PrincipalChildList().FirstChild());
       if (f) {
         return f;
       }
       nsIFrame* kid = aFrame->GetChildList(nsIFrame::kCaptionList).FirstChild();
       if (kid) {
         f = GetFirstNonAnonymousFrame(kid);
         if (f) {
           return f;
         }
       }
-    } else if (pseudoType == nsCSSAnonBoxes::mozBlockInsideInlineWrapper() ||
-               pseudoType == nsCSSAnonBoxes::mozMathMLAnonymousBlock() ||
-               pseudoType == nsCSSAnonBoxes::mozXULAnonymousBlock()) {
+    } else if (pseudoType == nsCSSAnonBoxes::mozBlockInsideInlineWrapper ||
+               pseudoType == nsCSSAnonBoxes::mozMathMLAnonymousBlock ||
+               pseudoType == nsCSSAnonBoxes::mozXULAnonymousBlock) {
       for (nsIFrame* kid : aFrame->PrincipalChildList()) {
         nsIFrame* f = GetFirstNonAnonymousFrame(kid);
         if (f) {
           return f;
         }
       }
     } else {
       return aFrame;
--- a/layout/build/nsLayoutStatics.cpp
+++ b/layout/build/nsLayoutStatics.cpp
@@ -129,24 +129,25 @@ nsLayoutStatics::Initialize()
   sLayoutStaticRefcnt = 1;
   NS_LOG_ADDREF(&sLayoutStaticRefcnt, sLayoutStaticRefcnt,
                 "nsLayoutStatics", 1);
 
   nsresult rv;
 
   ContentParent::StartUp();
 
+  // Register static atoms. Note that nsGkAtoms must be initialized earlier
+  // than here, so it's done in NS_InitAtomTable() instead.
+  nsCSSAnonBoxes::RegisterStaticAtoms();
+  nsCSSPseudoElements::RegisterStaticAtoms();
   nsCSSKeywords::AddRefTable();
   nsCSSProps::AddRefTable();
   nsColorNames::AddRefTable();
 
-#ifdef DEBUG
-  nsCSSPseudoElements::AssertAtoms();
-  nsCSSAnonBoxes::AssertAtoms();
-#endif
+  NS_SetStaticAtomsDone();
 
   StartupJSEnvironment();
   nsJSContext::EnsureStatics();
 
   nsGlobalWindowInner::Init();
   nsGlobalWindowOuter::Init();
   Navigator::Init();
   nsXBLService::Init();
--- a/layout/forms/nsComboboxControlFrame.cpp
+++ b/layout/forms/nsComboboxControlFrame.cpp
@@ -1389,17 +1389,17 @@ nsComboboxControlFrame::CreateFrameForDi
 
   // Get PresShell
   nsIPresShell *shell = PresShell();
   ServoStyleSet* styleSet = shell->StyleSet();
 
   // create the ComputedStyle for the anonymous block frame and text frame
   RefPtr<ComputedStyle> computedStyle;
   computedStyle = styleSet->
-    ResolveInheritingAnonymousBoxStyle(nsCSSAnonBoxes::mozDisplayComboboxControlFrame(),
+    ResolveInheritingAnonymousBoxStyle(nsCSSAnonBoxes::mozDisplayComboboxControlFrame,
                                        mComputedStyle);
 
   RefPtr<ComputedStyle> textComputedStyle;
   textComputedStyle =
     styleSet->ResolveStyleForText(mDisplayContent, mComputedStyle);
 
   // Start by creating our anonymous block frame
   mDisplayFrame = new (shell) nsComboboxDisplayFrame(computedStyle, this);
--- a/layout/forms/nsFieldSetFrame.cpp
+++ b/layout/forms/nsFieldSetFrame.cpp
@@ -55,17 +55,17 @@ nsFieldSetFrame::VisualBorderRectRelativ
   return r.GetPhysicalRect(wm, containerSize);
 }
 
 nsIFrame*
 nsFieldSetFrame::GetInner() const
 {
   nsIFrame* last = mFrames.LastChild();
   if (last &&
-      last->Style()->GetPseudo() == nsCSSAnonBoxes::fieldsetContent()) {
+      last->Style()->GetPseudo() == nsCSSAnonBoxes::fieldsetContent) {
     return last;
   }
   MOZ_ASSERT(mFrames.LastChild() == mFrames.FirstChild());
   return nullptr;
 }
 
 nsIFrame*
 nsFieldSetFrame::GetLegend() const
--- a/layout/forms/nsFieldSetFrame.h
+++ b/layout/forms/nsFieldSetFrame.h
@@ -84,17 +84,17 @@ public:
   virtual nsresult GetFrameName(nsAString& aResult) const override {
     return MakeFrameName(NS_LITERAL_STRING("FieldSet"), aResult);
   }
 #endif
 
   /**
    * Return the anonymous frame that contains all descendants except
    * the legend frame.  This is currently always a block frame with
-   * pseudo nsCSSAnonBoxes::fieldsetContent() -- this may change in the
+   * pseudo nsCSSAnonBoxes::fieldsetContent -- this may change in the
    * future when we add support for CSS overflow for <fieldset>.  This really
    * can't return null, though callers seem to feel that it can.
    */
   nsIFrame* GetInner() const;
 
   /**
    * Return the frame that represents the legend if any.  This may be
    * a nsLegendFrame or a nsHTMLScrollFrame with the nsLegendFrame as the
--- a/layout/forms/nsHTMLButtonControlFrame.cpp
+++ b/layout/forms/nsHTMLButtonControlFrame.cpp
@@ -190,17 +190,17 @@ nsHTMLButtonControlFrame::Reflow(nsPresC
 
   // Reflow the child
   nsIFrame* firstKid = mFrames.FirstChild();
 
   MOZ_ASSERT(firstKid, "Button should have a child frame for its contents");
   MOZ_ASSERT(!firstKid->GetNextSibling(),
              "Button should have exactly one child frame");
   MOZ_ASSERT(firstKid->Style()->GetPseudo() ==
-             nsCSSAnonBoxes::buttonContent(),
+             nsCSSAnonBoxes::buttonContent,
              "Button's child frame has unexpected pseudo type!");
 
   // XXXbz Eventually we may want to check-and-bail if
   // !aReflowInput.ShouldReflowAllKids() &&
   // !NS_SUBTREE_DIRTY(firstKid).
   // We'd need to cache our ascent for that, of course.
 
   // Reflow the contents of the button.
--- a/layout/generic/ReflowInput.cpp
+++ b/layout/generic/ReflowInput.cpp
@@ -2463,17 +2463,17 @@ ReflowInput::InitConstraints(nsPresConte
             ComputeSizeFlags(computeSizeFlags | ComputeSizeFlags::eShrinkWrap);
         }
       } else {
         // Make sure legend frames with display:block and width:auto still
         // shrink-wrap.
         // Also shrink-wrap blocks that are orthogonal to their container.
         if (isBlock &&
             ((aFrameType == LayoutFrameType::Legend &&
-              mFrame->Style()->GetPseudo() != nsCSSAnonBoxes::scrolledContent()) ||
+              mFrame->Style()->GetPseudo() != nsCSSAnonBoxes::scrolledContent) ||
              (aFrameType == LayoutFrameType::Scroll &&
               mFrame->GetContentInsertionFrame()->IsLegendFrame()) ||
              (mCBReflowInput &&
               mCBReflowInput->GetWritingMode().IsOrthogonalTo(mWritingMode)))) {
           computeSizeFlags =
             ComputeSizeFlags(computeSizeFlags | ComputeSizeFlags::eShrinkWrap);
         }
 
--- a/layout/generic/RubyUtils.h
+++ b/layout/generic/RubyUtils.h
@@ -76,21 +76,21 @@ public:
   static inline bool IsExpandableRubyBox(nsIFrame* aFrame)
   {
     mozilla::LayoutFrameType type = aFrame->Type();
     return IsRubyContentBox(type) || IsRubyContainerBox(type);
   }
 
   static inline bool IsRubyPseudo(nsAtom* aPseudo)
   {
-    return aPseudo == nsCSSAnonBoxes::ruby() ||
-           aPseudo == nsCSSAnonBoxes::rubyBase() ||
-           aPseudo == nsCSSAnonBoxes::rubyText() ||
-           aPseudo == nsCSSAnonBoxes::rubyBaseContainer() ||
-           aPseudo == nsCSSAnonBoxes::rubyTextContainer();
+    return aPseudo == nsCSSAnonBoxes::ruby ||
+           aPseudo == nsCSSAnonBoxes::rubyBase ||
+           aPseudo == nsCSSAnonBoxes::rubyText ||
+           aPseudo == nsCSSAnonBoxes::rubyBaseContainer ||
+           aPseudo == nsCSSAnonBoxes::rubyTextContainer;
   }
 
   static void SetReservedISize(nsIFrame* aFrame, nscoord aISize);
   static void ClearReservedISize(nsIFrame* aFrame);
   static nscoord GetReservedISize(nsIFrame* aFrame);
 };
 
 /**
--- a/layout/generic/TextOverflow.cpp
+++ b/layout/generic/TextOverflow.cpp
@@ -323,17 +323,17 @@ TextOverflow::TextOverflow(nsDisplayList
   , mScrollableFrame(nsLayoutUtils::GetScrollableFrameFor(aBlockFrame))
   , mBlockSize(aBlockFrame->GetSize())
   , mBlockWM(aBlockFrame->GetWritingMode())
   , mAdjustForPixelSnapping(false)
 {
 #ifdef MOZ_XUL
   if (!mScrollableFrame) {
     nsAtom* pseudoType = aBlockFrame->Style()->GetPseudo();
-    if (pseudoType == nsCSSAnonBoxes::mozXULAnonymousBlock()) {
+    if (pseudoType == nsCSSAnonBoxes::mozXULAnonymousBlock) {
       mScrollableFrame =
         nsLayoutUtils::GetScrollableFrameFor(aBlockFrame->GetParent());
       // nsXULScrollFrame::ClampAndSetBounds rounds to nearest pixels
       // for RTL blocks (also for overflow:hidden), so we need to move
       // the edges 1px outward in ExamineLineFrames to avoid triggering
       // a text-overflow marker in this case.
       mAdjustForPixelSnapping = !mBlockWM.IsBidiLTR();
     }
--- a/layout/generic/nsBlockFrame.cpp
+++ b/layout/generic/nsBlockFrame.cpp
@@ -1839,17 +1839,17 @@ nsBlockFrame::ComputeOverflowAreas(const
                                    const nsStyleDisplay* aDisplay,
                                    nscoord               aBEndEdgeOfChildren,
                                    nsOverflowAreas&      aOverflowAreas)
 {
   // Compute the overflow areas of our children
   // XXX_perf: This can be done incrementally.  It is currently one of
   // the things that makes incremental reflow O(N^2).
   nsOverflowAreas areas(aBounds, aBounds);
-  if (mComputedStyle->GetPseudo() == nsCSSAnonBoxes::scrolledContent() &&
+  if (mComputedStyle->GetPseudo() == nsCSSAnonBoxes::scrolledContent &&
       mParent->StyleDisplay()->IsContainLayout()) {
     // If we are a scrollframe's inner anonymous box and our parent
     // has layout containment, we want to pass our parent's style to
     // ConsiderBlockEndEdgeOfChildren to make sure all overflow from the
     // layout contained element is processed as ink (visual) overflow.
     aDisplay = mParent->StyleDisplay();
   }
   if (!ShouldApplyOverflowClipping(this, aDisplay)) {
@@ -5709,17 +5709,17 @@ nsBlockFrame::UpdateFirstLetterStyle(Ser
   // Figure out what the right style parent is.  This needs to match
   // nsCSSFrameConstructor::CreateLetterFrame.
   nsIFrame* inFlowFrame = letterFrame;
   if (inFlowFrame->GetStateBits() & NS_FRAME_OUT_OF_FLOW) {
     inFlowFrame = inFlowFrame->GetPlaceholderFrame();
   }
   nsIFrame* styleParent =
     CorrectStyleParentFrame(inFlowFrame->GetParent(),
-                            nsCSSPseudoElements::firstLetter());
+                            nsCSSPseudoElements::firstLetter);
   ComputedStyle* parentStyle = styleParent->Style();
   RefPtr<ComputedStyle> firstLetterStyle =
     aRestyleState.StyleSet()
                  .ResolvePseudoElementStyle(mContent->AsElement(),
                                             CSSPseudoElementType::firstLetter,
                                             parentStyle,
                                             nullptr);
   // Note that we don't need to worry about changehints for the continuation
@@ -7126,24 +7126,24 @@ nsBlockFrame::SetInitialChildList(ChildL
     // the block inside a fieldset, button or column set, or a scrolled content
     // block, except for <select>.  Note that this means that blocks which are
     // the anonymous block in {ib} splits do NOT get first-letter frames.
     // Note that NS_BLOCK_HAS_FIRST_LETTER_STYLE gets set on all continuations
     // of the block.
     nsAtom *pseudo = Style()->GetPseudo();
     bool haveFirstLetterStyle =
       (!pseudo ||
-       (pseudo == nsCSSAnonBoxes::cellContent() &&
+       (pseudo == nsCSSAnonBoxes::cellContent &&
         GetParent()->Style()->GetPseudo() == nullptr) ||
-       pseudo == nsCSSAnonBoxes::fieldsetContent() ||
-       pseudo == nsCSSAnonBoxes::buttonContent() ||
-       pseudo == nsCSSAnonBoxes::columnContent() ||
-       (pseudo == nsCSSAnonBoxes::scrolledContent() &&
+       pseudo == nsCSSAnonBoxes::fieldsetContent ||
+       pseudo == nsCSSAnonBoxes::buttonContent ||
+       pseudo == nsCSSAnonBoxes::columnContent ||
+       (pseudo == nsCSSAnonBoxes::scrolledContent &&
         !GetParent()->IsListControlFrame()) ||
-       pseudo == nsCSSAnonBoxes::mozSVGText()) &&
+       pseudo == nsCSSAnonBoxes::mozSVGText) &&
       !IsComboboxControlFrame() &&
       !IsFrameOfType(eMathML) &&
       RefPtr<ComputedStyle>(GetFirstLetterStyle(PresContext())) != nullptr;
     NS_ASSERTION(haveFirstLetterStyle ==
                  ((mState & NS_BLOCK_HAS_FIRST_LETTER_STYLE) != 0),
                  "NS_BLOCK_HAS_FIRST_LETTER_STYLE state out of sync");
 #endif
 
@@ -7640,30 +7640,30 @@ nsBlockFrame::UpdatePseudoElementStyles(
     RefPtr<ComputedStyle> newBulletStyle =
       ResolveBulletStyle(type, &aRestyleState.StyleSet());
     UpdateStyleOfOwnedChildFrame(bullet, newBulletStyle, aRestyleState);
   }
 
   if (nsIFrame* firstLineFrame = GetFirstLineFrame()) {
     nsIFrame* styleParent =
       CorrectStyleParentFrame(firstLineFrame->GetParent(),
-                              nsCSSPseudoElements::firstLine());
+                              nsCSSPseudoElements::firstLine);
 
     ComputedStyle* parentStyle = styleParent->Style();
     RefPtr<ComputedStyle> firstLineStyle =
       aRestyleState.StyleSet()
                    .ResolvePseudoElementStyle(mContent->AsElement(),
                                               CSSPseudoElementType::firstLine,
                                               parentStyle,
                                               nullptr);
 
     // FIXME(bz): Can we make first-line continuations be non-inheriting anon
     // boxes?
     RefPtr<ComputedStyle> continuationStyle = aRestyleState.StyleSet().
-      ResolveInheritingAnonymousBoxStyle(nsCSSAnonBoxes::mozLineFrame(),
+      ResolveInheritingAnonymousBoxStyle(nsCSSAnonBoxes::mozLineFrame,
                                          parentStyle);
 
     UpdateStyleOfOwnedChildFrame(firstLineFrame, firstLineStyle, aRestyleState,
                                  Some(continuationStyle.get()));
 
     // We also want to update the styles of the first-line's descendants.  We
     // don't need to compute a changehint for this, though, since any changes to
     // them are handled by the first-line anyway.
--- a/layout/generic/nsColumnSetFrame.cpp
+++ b/layout/generic/nsColumnSetFrame.cpp
@@ -1279,17 +1279,17 @@ nsColumnSetFrame::AppendDirectlyOwnedAno
   nsIFrame* column = mFrames.FirstChild();
 
   // We might not have any columns, apparently?
   if (!column) {
     return;
   }
 
   MOZ_ASSERT(column->Style()->GetPseudo() ==
-               nsCSSAnonBoxes::columnContent(),
+               nsCSSAnonBoxes::columnContent,
              "What sort of child is this?");
   aResult.AppendElement(OwnedAnonBox(column));
 }
 
 #ifdef DEBUG
 void
 nsColumnSetFrame::SetInitialChildList(ChildListID     aListID,
                                       nsFrameList&    aChildList)
--- a/layout/generic/nsFirstLetterFrame.cpp
+++ b/layout/generic/nsFirstLetterFrame.cpp
@@ -54,17 +54,17 @@ nsFirstLetterFrame::Init(nsIContent*    
                          nsIFrame*         aPrevInFlow)
 {
   RefPtr<ComputedStyle> newSC;
   if (aPrevInFlow) {
     // Get proper ComputedStyle for ourselves.  We're creating the frame
     // that represents everything *except* the first letter, so just create
     // a ComputedStyle that inherits from our style parent, with no extra rules.
     nsIFrame* styleParent =
-      CorrectStyleParentFrame(aParent, nsCSSPseudoElements::firstLetter());
+      CorrectStyleParentFrame(aParent, nsCSSPseudoElements::firstLetter);
     ComputedStyle* parentComputedStyle = styleParent->Style();
     newSC = PresContext()->StyleSet()->
       ResolveStyleForFirstLetterContinuation(parentComputedStyle);
     SetComputedStyleWithoutNotification(newSC);
   }
 
   nsContainerFrame::Init(aContent, aParent, aPrevInFlow);
 }
@@ -231,17 +231,17 @@ nsFirstLetterFrame::Reflow(nsPresContext
 
     FinishAndStoreOverflow(&aMetrics, aReflowInput.mStyleDisplay);
   } else {
     // Pretend we are a span and reflow the child frame
     nsLineLayout* ll = aReflowInput.mLineLayout;
     bool          pushedFrame;
 
     ll->SetInFirstLetter(
-      mComputedStyle->GetPseudo() == nsCSSPseudoElements::firstLetter());
+      mComputedStyle->GetPseudo() == nsCSSPseudoElements::firstLetter);
     ll->BeginSpan(this, &aReflowInput, bp.IStart(wm),
                   availSize.ISize(wm), &mBaseline);
     ll->ReflowFrame(kid, aReflowStatus, &kidMetrics, pushedFrame);
     NS_ASSERTION(lineWM.IsVertical() == wm.IsVertical(),
                  "we're assuming we can mix sizes between lineWM and wm "
                  "since we shouldn't have orthogonal writing modes within "
                  "a line.");
     aMetrics.ISize(lineWM) = ll->EndSpan(this) + bp.IStartEnd(wm);
@@ -379,17 +379,17 @@ nsFirstLetterFrame::DrainOverflowFrames(
     if (kidContent) {
       NS_ASSERTION(kidContent->IsText(),
                    "should contain only text nodes");
       ComputedStyle* parentSC;
       if (prevInFlow) {
         // This is for the rest of the content not in the first-letter.
         nsIFrame* styleParent =
           CorrectStyleParentFrame(GetParent(),
-                                  nsCSSPseudoElements::firstLetter());
+                                  nsCSSPseudoElements::firstLetter);
         parentSC = styleParent->Style();
       } else {
         // And this for the first-letter style.
         parentSC = mComputedStyle;
       }
       RefPtr<ComputedStyle> sc =
         aPresContext->StyleSet()->ResolveStyleForText(kidContent, parentSC);
       kid->SetComputedStyle(sc);
--- a/layout/generic/nsFlexContainerFrame.cpp
+++ b/layout/generic/nsFlexContainerFrame.cpp
@@ -2394,18 +2394,18 @@ nsFlexContainerFrame::Init(nsIContent*  
 
   // If this frame is for a scrollable element, then it will actually have
   // "display:block", and its *parent frame* will have the real
   // flex-flavored display value. So in that case, check the parent frame to
   // find out if we're legacy.
   if (!isLegacyBox && styleDisp->mDisplay == mozilla::StyleDisplay::Block) {
     ComputedStyle* parentComputedStyle = GetParent()->Style();
     NS_ASSERTION(parentComputedStyle &&
-                 (mComputedStyle->GetPseudo() == nsCSSAnonBoxes::buttonContent() ||
-                  mComputedStyle->GetPseudo() == nsCSSAnonBoxes::scrolledContent()),
+                 (mComputedStyle->GetPseudo() == nsCSSAnonBoxes::buttonContent ||
+                  mComputedStyle->GetPseudo() == nsCSSAnonBoxes::scrolledContent),
                  "The only way a nsFlexContainerFrame can have 'display:block' "
                  "should be if it's the inner part of a scrollable or button "
                  "element");
     isLegacyBox = IsDisplayValueLegacyBox(parentComputedStyle->StyleDisplay());
   }
 
   if (isLegacyBox) {
     AddStateBits(NS_STATE_FLEX_IS_EMULATING_LEGACY_BOX);
@@ -3823,18 +3823,18 @@ nsFlexContainerFrame::ShouldUseMozBoxCol
   if (aThisStyleDisp->mDisplay == mozilla::StyleDisplay::MozBox ||
       aThisStyleDisp->mDisplay == mozilla::StyleDisplay::MozInlineBox) {
     return true;
   }
 
   // Check our parent's display value, if we're an anonymous box (with a
   // potentially-untrustworthy display value):
   auto pseudoType = Style()->GetPseudo();
-  if (pseudoType == nsCSSAnonBoxes::scrolledContent() ||
-      pseudoType == nsCSSAnonBoxes::buttonContent()) {
+  if (pseudoType == nsCSSAnonBoxes::scrolledContent ||
+      pseudoType == nsCSSAnonBoxes::buttonContent) {
     const nsStyleDisplay* disp = GetParent()->StyleDisplay();
     if (disp->mDisplay == mozilla::StyleDisplay::MozBox ||
         disp->mDisplay == mozilla::StyleDisplay::MozInlineBox) {
       return true;
     }
   }
 
   return false;
--- a/layout/generic/nsFrame.cpp
+++ b/layout/generic/nsFrame.cpp
@@ -7580,19 +7580,19 @@ nsFrame::IsFrameTreeTooDeep(const Reflow
   RemoveStateBits(NS_FRAME_TOO_DEEP_IN_FRAME_TREE);
   return false;
 }
 
 bool
 nsIFrame::IsBlockWrapper() const
 {
   nsAtom *pseudoType = Style()->GetPseudo();
-  return (pseudoType == nsCSSAnonBoxes::mozBlockInsideInlineWrapper() ||
-          pseudoType == nsCSSAnonBoxes::buttonContent() ||
-          pseudoType == nsCSSAnonBoxes::cellContent());
+  return (pseudoType == nsCSSAnonBoxes::mozBlockInsideInlineWrapper ||
+          pseudoType == nsCSSAnonBoxes::buttonContent ||
+          pseudoType == nsCSSAnonBoxes::cellContent);
 }
 
 static nsIFrame*
 GetNearestBlockContainer(nsIFrame* frame)
 {
   // The block wrappers we use to wrap blocks inside inlines aren't
   // described in the CSS spec.  We need to make them not be containing
   // blocks.
@@ -7627,17 +7627,17 @@ nsIFrame::GetContainingBlock(uint32_t aF
   if (IsAbsolutelyPositioned(aStyleDisplay) &&
       (GetStateBits() & NS_FRAME_OUT_OF_FLOW)) {
     f = GetParent(); // the parent is always the containing block
   } else {
     f = GetNearestBlockContainer(GetParent());
   }
 
   if (aFlags & SKIP_SCROLLED_FRAME && f &&
-      f->Style()->GetPseudo() == nsCSSAnonBoxes::scrolledContent()) {
+      f->Style()->GetPseudo() == nsCSSAnonBoxes::scrolledContent) {
     f = f->GetParent();
   }
   return f;
 }
 
 #ifdef DEBUG_FRAME_DUMP
 
 int32_t nsFrame::ContentIndexInContainer(const nsIFrame* aFrame)
@@ -9329,17 +9329,17 @@ ComputeAndIncludeOutlineArea(nsIFrame* a
   // When the outline property is set on a :-moz-block-inside-inline-wrapper
   // pseudo-element, it inherited that outline from the inline that was broken
   // because it contained a block.  In that case, we don't want a really wide
   // outline if the block inside the inline is narrow, so union the actual
   // contents of the anonymous blocks.
   nsIFrame *frameForArea = aFrame;
   do {
     nsAtom *pseudoType = frameForArea->Style()->GetPseudo();
-    if (pseudoType != nsCSSAnonBoxes::mozBlockInsideInlineWrapper())
+    if (pseudoType != nsCSSAnonBoxes::mozBlockInsideInlineWrapper)
       break;
     // If we're done, we really want it and all its later siblings.
     frameForArea = frameForArea->PrincipalChildList().FirstChild();
     NS_ASSERTION(frameForArea, "anonymous block with no children?");
   } while (frameForArea);
 
   // Find the union of the border boxes of all descendants, or in
   // the block-in-inline case, all descendants we care about.
@@ -9674,17 +9674,17 @@ nsIFrame::GetDepthInFrameTree() const
   return result;
 }
 
 void
 nsFrame::ConsiderChildOverflow(nsOverflowAreas& aOverflowAreas,
                                nsIFrame* aChildFrame)
 {
   const nsStyleDisplay* display = StyleDisplay();
-  if (mComputedStyle->GetPseudo() == nsCSSAnonBoxes::scrolledContent()) {
+  if (mComputedStyle->GetPseudo() == nsCSSAnonBoxes::scrolledContent) {
     // If we are a scrollframe's inner anonymous box, we'll want to check if
     // our parent has contain:layout below, so we change the nsStyleDisplay we
     // read from here.
     display = mParent->StyleDisplay();
   }
   if (display->IsContainLayout() && IsFrameOfType(eSupportsContainLayoutAndPaint)) {
     // If we have layout containment and are not a non-atomic, inline-level
     // principal box (or, if we are a scrollframe's inner anonymous box and
@@ -9727,17 +9727,17 @@ nsFrame::ShouldAvoidBreakInside(const Re
 static nsIFrame*
 GetIBSplitSiblingForAnonymousBlock(const nsIFrame* aFrame)
 {
   MOZ_ASSERT(aFrame, "Must have a non-null frame!");
   NS_ASSERTION(aFrame->GetStateBits() & NS_FRAME_PART_OF_IBSPLIT,
                "GetIBSplitSibling should only be called on ib-split frames");
 
   nsAtom* type = aFrame->Style()->GetPseudo();
-  if (type != nsCSSAnonBoxes::mozBlockInsideInlineWrapper()) {
+  if (type != nsCSSAnonBoxes::mozBlockInsideInlineWrapper) {
     // it's not an anonymous block
     return nullptr;
   }
 
   // Find the first continuation of the frame.  (Ugh.  This ends up
   // being O(N^2) when it is called O(N) times.)
   aFrame = aFrame->FirstContinuation();
 
@@ -9779,17 +9779,17 @@ GetCorrectedParent(const nsIFrame* aFram
       return innerTable;
     }
   }
 
   // Table wrappers are always anon boxes; if we're in here for an outer
   // table, that actually means its the _inner_ table that wants to
   // know its parent. So get the pseudo of the inner in that case.
   nsAtom* pseudo = aFrame->Style()->GetPseudo();
-  if (pseudo == nsCSSAnonBoxes::tableWrapper()) {
+  if (pseudo == nsCSSAnonBoxes::tableWrapper) {
     pseudo = aFrame->PrincipalChildList().FirstChild()->Style()->GetPseudo();
   }
 
   // Prevent a NAC pseudo-element from inheriting from its NAC parent, and
   // inherit from the NAC generator element instead.
   if (pseudo) {
     MOZ_ASSERT(aFrame->GetContent());
     Element* element = Element::FromNode(aFrame->GetContent());
@@ -9821,17 +9821,17 @@ nsFrame::CorrectStyleParentFrame(nsIFram
     if (nsCSSAnonBoxes::IsNonInheritingAnonBox(aChildPseudo)) {
       return nullptr;
     }
 
     // Other anon boxes are parented to their actual parent already, except
     // for non-elements.  Those should not be treated as an anon box.
     if (!nsCSSAnonBoxes::IsNonElement(aChildPseudo) &&
         nsCSSAnonBoxes::IsAnonBox(aChildPseudo)) {
-      NS_ASSERTION(aChildPseudo != nsCSSAnonBoxes::mozBlockInsideInlineWrapper(),
+      NS_ASSERTION(aChildPseudo != nsCSSAnonBoxes::mozBlockInsideInlineWrapper,
                    "Should have dealt with kids that have "
                    "NS_FRAME_PART_OF_IBSPLIT elsewhere");
       return aProspectiveParent;
     }
   }
 
   // Otherwise, walk up out of all anon boxes.  For placeholder frames, walk out
   // of all pseudo-elements as well.  Otherwise ReparentComputedStyle could cause
@@ -9858,17 +9858,17 @@ nsFrame::CorrectStyleParentFrame(nsIFram
          aChildPseudo != nsGkAtoms::placeholderFrame)) {
       return parent;
     }
 
     parent = parent->GetInFlowParent();
   } while (parent);
 
   if (aProspectiveParent->Style()->GetPseudo() ==
-      nsCSSAnonBoxes::viewportScroll()) {
+      nsCSSAnonBoxes::viewportScroll) {
     // aProspectiveParent is the scrollframe for a viewport
     // and the kids are the anonymous scrollbars
     return aProspectiveParent;
   }
 
   // We can get here if the root element is absolutely positioned.
   // We can't test for this very accurately, but it can only happen
   // when the prospective parent is a canvas frame.
@@ -9891,17 +9891,17 @@ nsFrame::DoGetParentComputedStyle(nsIFra
       if (!pseudo || !mContent->IsElement() ||
           (!nsCSSAnonBoxes::IsAnonBox(pseudo) &&
            // Ensure that we don't return the display:contents style
            // of the parent content for pseudos that have the same content
            // as their primary frame (like -moz-list-bullets do):
            IsPrimaryFrame()) ||
           /* if next is true then it's really a request for the table frame's
              parent context, see nsTable[Outer]Frame::GetParentComputedStyle. */
-          pseudo == nsCSSAnonBoxes::tableWrapper()) {
+          pseudo == nsCSSAnonBoxes::tableWrapper) {
         if (Servo_Element_IsDisplayContents(parentElement)) {
           RefPtr<ComputedStyle> style =
             PresShell()->StyleSet()->ResolveServoStyle(*parentElement);
           // NOTE(emilio): we return a weak reference because the element also
           // holds the style context alive. This is a bit silly (we could've
           // returned a weak ref directly), but it's probably not worth
           // optimizing, given this function has just one caller which is rare,
           // and this path is rare itself.
@@ -9990,18 +9990,18 @@ nsIFrame::IsFocusable(int32_t *aTabIndex
 {
   int32_t tabIndex = -1;
   if (aTabIndex) {
     *aTabIndex = -1; // Default for early return is not focusable
   }
   bool isFocusable = false;
 
   if (mContent && mContent->IsElement() && IsVisibleConsideringAncestors() &&
-      Style()->GetPseudo() != nsCSSAnonBoxes::anonymousFlexItem() &&
-      Style()->GetPseudo() != nsCSSAnonBoxes::anonymousGridItem()) {
+      Style()->GetPseudo() != nsCSSAnonBoxes::anonymousFlexItem &&
+      Style()->GetPseudo() != nsCSSAnonBoxes::anonymousGridItem) {
     const nsStyleUI* ui = StyleUI();
     if (ui->mUserFocus != StyleUserFocus::Ignore &&
         ui->mUserFocus != StyleUserFocus::None) {
       // Pass in default tabindex of -1 for nonfocusable and 0 for focusable
       tabIndex = 0;
     }
     isFocusable = mContent->IsFocusable(&tabIndex, aWithMouse);
     if (!isFocusable && !aWithMouse && IsScrollFrame() &&
--- a/layout/generic/nsFrameSetFrame.cpp
+++ b/layout/generic/nsFrameSetFrame.cpp
@@ -325,17 +325,17 @@ nsHTMLFramesetFrame::Init(nsIContent*   
     mChildCount++;
   }
 
   mNonBlankChildCount = mChildCount;
   // add blank frames for frameset cells that had no content provided
   for (int blankX = mChildCount; blankX < numCells; blankX++) {
     RefPtr<ComputedStyle> pseudoComputedStyle;
     pseudoComputedStyle = shell->StyleSet()->
-      ResolveNonInheritingAnonymousBoxStyle(nsCSSAnonBoxes::framesetBlank());
+      ResolveNonInheritingAnonymousBoxStyle(nsCSSAnonBoxes::framesetBlank);
 
     // XXX the blank frame is using the content of its parent - at some point it
     // should just have null content, if we support that
     nsHTMLFramesetBlankFrame* blankFrame = new (shell) nsHTMLFramesetBlankFrame(pseudoComputedStyle);
 
     blankFrame->Init(mContent, this, nullptr);
 
     mFrames.AppendFrame(nullptr, blankFrame);
@@ -901,17 +901,17 @@ nsHTMLFramesetFrame::Reflow(nsPresContex
 
     if (lastRow != cellIndex.y) {  // changed to next row
       offset.x = 0;
       offset.y += lastSize.height;
       if (firstTime) { // create horizontal border
 
         RefPtr<ComputedStyle> pseudoComputedStyle;
         pseudoComputedStyle = styleSet->
-          ResolveNonInheritingAnonymousBoxStyle(nsCSSAnonBoxes::horizontalFramesetBorder());
+          ResolveNonInheritingAnonymousBoxStyle(nsCSSAnonBoxes::horizontalFramesetBorder);
 
         borderFrame = new (shell) nsHTMLFramesetBorderFrame(pseudoComputedStyle,
                                                             borderWidth,
                                                             false,
                                                             false);
         borderFrame->Init(mContent, this, nullptr);
         mChildCount++;
         mFrames.AppendFrame(nullptr, borderFrame);
@@ -930,17 +930,17 @@ nsHTMLFramesetFrame::Reflow(nsPresContex
       offset.y += borderWidth;
     } else {
       if (cellIndex.x > 0) {  // moved to next col in same row
         if (0 == cellIndex.y) { // in 1st row
           if (firstTime) { // create vertical border
 
             RefPtr<ComputedStyle> pseudoComputedStyle;
             pseudoComputedStyle = styleSet->
-              ResolveNonInheritingAnonymousBoxStyle(nsCSSAnonBoxes::verticalFramesetBorder());
+              ResolveNonInheritingAnonymousBoxStyle(nsCSSAnonBoxes::verticalFramesetBorder);
 
             borderFrame = new (shell) nsHTMLFramesetBorderFrame(pseudoComputedStyle,
                                                                 borderWidth,
                                                                 true,
                                                                 false);
             borderFrame->Init(mContent, this, nullptr);
             mChildCount++;
             mFrames.AppendFrame(nullptr, borderFrame);
--- a/layout/generic/nsIFrameInlines.h
+++ b/layout/generic/nsIFrameInlines.h
@@ -33,17 +33,17 @@ nsIFrame::IsFlexOrGridItem() const
          GetParent() &&
          GetParent()->IsFlexOrGridContainer();
 }
 
 bool
 nsIFrame::IsTableCaption() const
 {
   return StyleDisplay()->mDisplay == mozilla::StyleDisplay::TableCaption &&
-    GetParent()->Style()->GetPseudo() == nsCSSAnonBoxes::tableWrapper();
+    GetParent()->Style()->GetPseudo() == nsCSSAnonBoxes::tableWrapper;
 }
 
 bool
 nsIFrame::IsFloating() const
 {
   return StyleDisplay()->IsFloating(this);
 }
 
--- a/layout/generic/nsImageFrame.cpp
+++ b/layout/generic/nsImageFrame.cpp
@@ -2544,17 +2544,17 @@ nsImageListener::Notify(imgIRequest *aRe
 
 static bool
 IsInAutoWidthTableCellForQuirk(nsIFrame *aFrame)
 {
   if (eCompatibility_NavQuirks != aFrame->PresContext()->CompatibilityMode())
     return false;
   // Check if the parent of the closest nsBlockFrame has auto width.
   nsBlockFrame *ancestor = nsLayoutUtils::FindNearestBlockAncestor(aFrame);
-  if (ancestor->Style()->GetPseudo() == nsCSSAnonBoxes::cellContent()) {
+  if (ancestor->Style()->GetPseudo() == nsCSSAnonBoxes::cellContent) {
     // Assume direct parent is a table cell frame.
     nsFrame *grandAncestor = static_cast<nsFrame*>(ancestor->GetParent());
     return grandAncestor &&
       grandAncestor->StylePosition()->mWidth.GetUnit() == eStyleUnit_Auto;
   }
   return false;
 }
 
--- a/layout/generic/nsInlineFrame.cpp
+++ b/layout/generic/nsInlineFrame.cpp
@@ -954,30 +954,30 @@ nsInlineFrame::UpdateStyleOfOwnedAnonBox
 
   // The later inlines need to get our style.
   ComputedStyle* ourStyle = Style();
 
   // The anonymous block's style inherits from ours, and we already have our new
   // ComputedStyle.
   RefPtr<ComputedStyle> newContext =
     aRestyleState.StyleSet().ResolveInheritingAnonymousBoxStyle(
-      nsCSSAnonBoxes::mozBlockInsideInlineWrapper(), ourStyle);
+      nsCSSAnonBoxes::mozBlockInsideInlineWrapper, ourStyle);
 
   // We're guaranteed that newContext only differs from the old ComputedStyle on
   // the block in things they might inherit from us.  And changehint processing
   // guarantees walking the continuation and ib-sibling chains, so our existing
   // changehint being in aChangeList is good enough.  So we don't need to touch
   // aChangeList at all here.
 
   while (blockFrame) {
     MOZ_ASSERT(!blockFrame->GetPrevContinuation(),
                "Must be first continuation");
 
     MOZ_ASSERT(blockFrame->Style()->GetPseudo() ==
-               nsCSSAnonBoxes::mozBlockInsideInlineWrapper(),
+               nsCSSAnonBoxes::mozBlockInsideInlineWrapper,
                "Unexpected kind of ComputedStyle");
 
     // We don't want to just walk through using GetNextContinuationWithSameStyle
     // here, because we want to set updated ComputedStyles on both our
     // ib-sibling blocks and inlines.
     for (nsIFrame* cont = blockFrame; cont; cont = cont->GetNextContinuation()) {
       cont->SetComputedStyle(newContext);
     }
@@ -1013,37 +1013,37 @@ NS_IMPL_FRAMEARENA_HELPERS(nsFirstLineFr
 
 void
 nsFirstLineFrame::Init(nsIContent*       aContent,
                        nsContainerFrame* aParent,
                        nsIFrame*         aPrevInFlow)
 {
   nsInlineFrame::Init(aContent, aParent, aPrevInFlow);
   if (!aPrevInFlow) {
-    MOZ_ASSERT(Style()->GetPseudo() == nsCSSPseudoElements::firstLine());
+    MOZ_ASSERT(Style()->GetPseudo() == nsCSSPseudoElements::firstLine);
     return;
   }
 
   // This frame is a continuation - fixup the computed style if aPrevInFlow
   // is the first-in-flow (the only one with a ::first-line pseudo).
-  if (aPrevInFlow->Style()->GetPseudo() == nsCSSPseudoElements::firstLine()) {
+  if (aPrevInFlow->Style()->GetPseudo() == nsCSSPseudoElements::firstLine) {
     MOZ_ASSERT(FirstInFlow() == aPrevInFlow);
     // Create a new ComputedStyle that is a child of the parent
     // ComputedStyle thus removing the ::first-line style. This way
     // we behave as if an anonymous (unstyled) span was the child
     // of the parent frame.
     ComputedStyle* parentContext = aParent->Style();
     RefPtr<ComputedStyle> newSC = PresContext()->StyleSet()->
-      ResolveInheritingAnonymousBoxStyle(nsCSSAnonBoxes::mozLineFrame(),
+      ResolveInheritingAnonymousBoxStyle(nsCSSAnonBoxes::mozLineFrame,
                                          parentContext);
     SetComputedStyle(newSC);
   } else {
     MOZ_ASSERT(FirstInFlow() != aPrevInFlow);
     MOZ_ASSERT(aPrevInFlow->Style()->GetPseudo() ==
-                 nsCSSAnonBoxes::mozLineFrame());
+                 nsCSSAnonBoxes::mozLineFrame);
   }
 }
 
 #ifdef DEBUG_FRAME_DUMP
 nsresult
 nsFirstLineFrame::GetFrameName(nsAString& aResult) const
 {
   return MakeFrameName(NS_LITERAL_STRING("Line"), aResult);
--- a/layout/generic/nsRubyContentFrame.cpp
+++ b/layout/generic/nsRubyContentFrame.cpp
@@ -27,16 +27,16 @@ nsRubyContentFrame::IsFrameOfType(uint32
   }
   return nsInlineFrame::IsFrameOfType(aFlags);
 }
 
 bool
 nsRubyContentFrame::IsIntraLevelWhitespace() const
 {
   nsAtom* pseudoType = Style()->GetPseudo();
-  if (pseudoType != nsCSSAnonBoxes::rubyBase() &&
-      pseudoType != nsCSSAnonBoxes::rubyText()) {
+  if (pseudoType != nsCSSAnonBoxes::rubyBase &&
+      pseudoType != nsCSSAnonBoxes::rubyText) {
     return false;
   }
 
   nsIFrame* child = mFrames.OnlyChild();
   return child && child->GetContent()->TextIsOnlyWhitespace();
 }
--- a/layout/generic/nsTextFrame.cpp
+++ b/layout/generic/nsTextFrame.cpp
@@ -5198,17 +5198,17 @@ nsTextFrame::BuildDisplayList(nsDisplayL
     MakeDisplayItem<nsDisplayText>(aBuilder, this, isSelected));
 }
 
 static nsIFrame*
 GetGeneratedContentOwner(nsIFrame* aFrame, bool* aIsBefore)
 {
   *aIsBefore = false;
   while (aFrame && (aFrame->GetStateBits() & NS_FRAME_GENERATED_CONTENT)) {
-    if (aFrame->Style()->GetPseudo() == nsCSSPseudoElements::before()) {
+    if (aFrame->Style()->GetPseudo() == nsCSSPseudoElements::before) {
       *aIsBefore = true;
     }
     aFrame = aFrame->GetParent();
   }
   return aFrame;
 }
 
 UniquePtr<SelectionDetails>
--- a/layout/style/ComputedStyle.h
+++ b/layout/style/ComputedStyle.h
@@ -8,22 +8,21 @@
 
 #ifndef _ComputedStyle_h_
 #define _ComputedStyle_h_
 
 #include "nsIMemoryReporter.h"
 #include <algorithm>
 #include "mozilla/ArenaObjectID.h"
 #include "mozilla/Assertions.h"
-#include "mozilla/CachedInheritingStyles.h"
-#include "mozilla/Maybe.h"
 #include "mozilla/ServoComputedData.h"
 #include "mozilla/ServoTypes.h"
 #include "mozilla/ServoUtils.h"
 #include "mozilla/StyleComplexColor.h"
+#include "mozilla/CachedInheritingStyles.h"
 #include "nsCSSAnonBoxes.h"
 #include "nsCSSPseudoElements.h"
 
 #include "nsStyleStructFwd.h"
 
 class nsAtom;
 enum nsChangeHint : uint32_t;
 class nsIPresShell;
@@ -171,17 +170,17 @@ public:
   // NOTE: for nsTextFrame, use nsTextFrame::ShouldSuppressLineBreak()
   // instead of this method.
   bool ShouldSuppressLineBreak() const
   {
     return bool(mBits & Bit::SuppressLineBreak);
   }
 
   // Is this horizontal-in-vertical (tate-chu-yoko) text? This flag is
-  // only set on ComputedStyles whose pseudo is nsCSSAnonBoxes::mozText().
+  // only set on ComputedStyles whose pseudo is nsCSSAnonBoxes::mozText.
   bool IsTextCombined() const
   {
     return bool(mBits & Bit::IsTextCombined);
   }
 
   // Does this ComputedStyle represent the style for a pseudo-element or
   // inherit data from such a ComputedStyle?  Whether this returns true
   // is equivalent to whether it or any of its ancestors returns
--- a/layout/style/ServoStyleSet.cpp
+++ b/layout/style/ServoStyleSet.cpp
@@ -463,19 +463,19 @@ ServoStyleSet::PreTraverse(ServoTraversa
 }
 
 static inline already_AddRefed<ComputedStyle>
 ResolveStyleForTextOrFirstLetterContinuation(
     RawServoStyleSetBorrowed aStyleSet,
     ComputedStyle& aParent,
     nsAtom* aAnonBox)
 {
-  MOZ_ASSERT(aAnonBox == nsCSSAnonBoxes::mozText() ||
-             aAnonBox == nsCSSAnonBoxes::firstLetterContinuation());
-  auto inheritTarget = aAnonBox == nsCSSAnonBoxes::mozText()
+  MOZ_ASSERT(aAnonBox == nsCSSAnonBoxes::mozText ||
+             aAnonBox == nsCSSAnonBoxes::firstLetterContinuation);
+  auto inheritTarget = aAnonBox == nsCSSAnonBoxes::mozText
     ? InheritTarget::Text
     : InheritTarget::FirstLetterContinuation;
 
   RefPtr<ComputedStyle> style =
     aParent.GetCachedInheritingAnonBoxStyle(aAnonBox);
   if (!style) {
     style = Servo_ComputedValues_Inherit(aStyleSet,
                                          aAnonBox,
@@ -492,41 +492,41 @@ already_AddRefed<ComputedStyle>
 ServoStyleSet::ResolveStyleForText(nsIContent* aTextNode,
                                    ComputedStyle* aParentContext)
 {
   MOZ_ASSERT(aTextNode && aTextNode->IsText());
   MOZ_ASSERT(aTextNode->GetParent());
   MOZ_ASSERT(aParentContext);
 
   return ResolveStyleForTextOrFirstLetterContinuation(
-      mRawSet.get(), *aParentContext, nsCSSAnonBoxes::mozText());
+      mRawSet.get(), *aParentContext, nsCSSAnonBoxes::mozText);
 }
 
 already_AddRefed<ComputedStyle>
 ServoStyleSet::ResolveStyleForFirstLetterContinuation(ComputedStyle* aParentContext)
 {
   MOZ_ASSERT(aParentContext);
 
   return ResolveStyleForTextOrFirstLetterContinuation(
-      mRawSet.get(), *aParentContext, nsCSSAnonBoxes::firstLetterContinuation());
+      mRawSet.get(), *aParentContext, nsCSSAnonBoxes::firstLetterContinuation);
 }
 
 already_AddRefed<ComputedStyle>
 ServoStyleSet::ResolveStyleForPlaceholder()
 {
   RefPtr<ComputedStyle>& cache =
     mNonInheritingComputedStyles[nsCSSAnonBoxes::NonInheriting::oofPlaceholder];
   if (cache) {
     RefPtr<ComputedStyle> retval = cache;
     return retval.forget();
   }
 
   RefPtr<ComputedStyle> computedValues =
     Servo_ComputedValues_Inherit(mRawSet.get(),
-                                 nsCSSAnonBoxes::oofPlaceholder(),
+                                 nsCSSAnonBoxes::oofPlaceholder,
                                  nullptr,
                                  InheritTarget::PlaceholderFrame)
                                  .Consume();
   MOZ_ASSERT(computedValues);
 
   cache = computedValues;
   return computedValues.forget();
 }
@@ -622,18 +622,18 @@ ServoStyleSet::ResolveInheritingAnonymou
   return style.forget();
 }
 
 already_AddRefed<ComputedStyle>
 ServoStyleSet::ResolveNonInheritingAnonymousBoxStyle(nsAtom* aPseudoTag)
 {
   MOZ_ASSERT(nsCSSAnonBoxes::IsAnonBox(aPseudoTag) &&
              nsCSSAnonBoxes::IsNonInheritingAnonBox(aPseudoTag));
-  MOZ_ASSERT(aPseudoTag != nsCSSAnonBoxes::pageContent(),
-             "If nsCSSAnonBoxes::pageContent() ends up non-inheriting, check "
+  MOZ_ASSERT(aPseudoTag != nsCSSAnonBoxes::pageContent,
+             "If nsCSSAnonBoxes::pageContent ends up non-inheriting, check "
              "whether we need to do anything to move the "
              "@page handling from ResolveInheritingAnonymousBoxStyle to "
              "ResolveNonInheritingAnonymousBoxStyle");
 
   nsCSSAnonBoxes::NonInheriting type =
     nsCSSAnonBoxes::NonInheritingTypeForPseudoTag(aPseudoTag);
   RefPtr<ComputedStyle>& cache = mNonInheritingComputedStyles[type];
   if (cache) {
@@ -642,17 +642,17 @@ ServoStyleSet::ResolveNonInheritingAnony
   }
 
   UpdateStylistIfNeeded();
 
   // We always want to skip parent-based display fixup here.  It never makes
   // sense for non-inheriting anonymous boxes.  (Static assertions in
   // nsCSSAnonBoxes.cpp ensure that all non-inheriting non-anonymous boxes
   // are indeed annotated as skipping this fixup.)
-  MOZ_ASSERT(!nsCSSAnonBoxes::IsNonInheritingAnonBox(nsCSSAnonBoxes::viewport()),
+  MOZ_ASSERT(!nsCSSAnonBoxes::IsNonInheritingAnonBox(nsCSSAnonBoxes::viewport),
              "viewport needs fixup to handle blockifying it");
   RefPtr<ComputedStyle> computedValues =
     Servo_ComputedValues_GetForAnonymousBox(nullptr,
                                             aPseudoTag,
                                             mRawSet.get()).Consume();
 #ifdef DEBUG
   if (!computedValues) {
     nsString pseudo;
--- a/layout/style/ServoStyleSet.h
+++ b/layout/style/ServoStyleSet.h
@@ -149,43 +149,43 @@ public:
   // used...
   already_AddRefed<ComputedStyle>
   ResolveStyleFor(dom::Element* aElement,
                   ComputedStyle* aParentContext,
                   LazyComputeBehavior aMayCompute);
 
   // Get a CopmutedStyle for a text node (which no rules will match).
   //
-  // The returned ComputedStyle will have nsCSSAnonBoxes::mozText() as its pseudo.
+  // The returned ComputedStyle will have nsCSSAnonBoxes::mozText as its pseudo.
   //
   // (Perhaps mozText should go away and we shouldn't even create style
   // contexts for such content nodes, when text-combine-upright is not
   // present.  However, not doing any rule matching for them is a first step.)
   already_AddRefed<ComputedStyle>
   ResolveStyleForText(nsIContent* aTextNode, ComputedStyle* aParentContext);
 
   // Get a ComputedStyle for a first-letter continuation (which no rules will
   // match).
   //
   // The returned ComputedStyle will have
-  // nsCSSAnonBoxes::firstLetterContinuation() as its pseudo.
+  // nsCSSAnonBoxes::firstLetterContinuation as its pseudo.
   //
-  // (Perhaps nsCSSAnonBoxes::firstLetterContinuation() should go away and we
+  // (Perhaps nsCSSAnonBoxes::firstLetterContinuation should go away and we
   // shouldn't even create ComputedStyles for such frames.  However, not doing
   // any rule matching for them is a first step.  And right now we do use this
   // ComputedStyle for some things)
   already_AddRefed<ComputedStyle>
   ResolveStyleForFirstLetterContinuation(ComputedStyle* aParentContext);
 
   // Get a ComputedStyle for a placeholder frame (which no rules will match).
   //
-  // The returned ComputedStyle will have nsCSSAnonBoxes::oofPlaceholder() as
+  // The returned ComputedStyle will have nsCSSAnonBoxes::oofPlaceholder as
   // its pseudo.
   //
-  // (Perhaps nsCSSAnonBoxes::oofPaceholder() should go away and we shouldn't even
+  // (Perhaps nsCSSAnonBoxes::oofPaceholder should go away and we shouldn't even
   // create ComputedStyle for placeholders.  However, not doing any rule
   // matching for them is a first step.)
   already_AddRefed<ComputedStyle>
   ResolveStyleForPlaceholder();
 
   // Get a ComputedStyle for a pseudo-element.  aParentElement must be
   // non-null.  aPseudoID is the CSSPseudoElementType for the
   // pseudo-element.  aPseudoElement must be non-null if the pseudo-element
--- a/layout/style/nsCSSAnonBoxes.cpp
+++ b/layout/style/nsCSSAnonBoxes.cpp
@@ -4,66 +4,73 @@
  * 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/. */
 
 /* atom list for CSS anonymous boxes */
 
 #include "mozilla/ArrayUtils.h"
 
 #include "nsCSSAnonBoxes.h"
-#include "nsGkAtomConsts.h"
-#include "nsStaticAtomUtils.h"
 
 using namespace mozilla;
 
-static nsStaticAtom*
-GetAtomBase()
+namespace mozilla {
+namespace detail {
+
+MOZ_PUSH_DISABLE_INTEGRAL_CONSTANT_OVERFLOW_WARNING
+extern constexpr CSSAnonBoxAtoms gCSSAnonBoxAtoms = {
+  #define CSS_ANON_BOX(name_, value_) \
+    NS_STATIC_ATOM_INIT_STRING(value_)
+  #include "nsCSSAnonBoxList.h"
+  #undef CSS_ANON_BOX
+  {
+    #define CSS_ANON_BOX(name_, value_) \
+      NS_STATIC_ATOM_INIT_ATOM( \
+        nsICSSAnonBoxPseudo, CSSAnonBoxAtoms, name_, value_)
+    #include "nsCSSAnonBoxList.h"
+    #undef CSS_ANON_BOX
+  }
+};
+MOZ_POP_DISABLE_INTEGRAL_CONSTANT_OVERFLOW_WARNING
+
+} // namespace detail
+} // namespace mozilla
+
+// Non-inheriting boxes must come first in nsCSSAnonBoxList.h so that
+// `NonInheriting` values can index into this array and other similar arrays.
+const nsStaticAtom* const nsCSSAnonBoxes::sAtoms =
+  mozilla::detail::gCSSAnonBoxAtoms.mAtoms;
+
+#define CSS_ANON_BOX(name_, value_) \
+  NS_STATIC_ATOM_DEFN_PTR( \
+    nsICSSAnonBoxPseudo, mozilla::detail::CSSAnonBoxAtoms, \
+    mozilla::detail::gCSSAnonBoxAtoms, nsCSSAnonBoxes, name_)
+#include "nsCSSAnonBoxList.h"
+#undef CSS_ANON_BOX
+
+void nsCSSAnonBoxes::RegisterStaticAtoms()
 {
-  return const_cast<nsStaticAtom*>(
-      nsGkAtoms::GetAtomByIndex(kAtomIndex_AnonBoxes));
+  NS_RegisterStaticAtoms(sAtoms, sAtomsLen);
 }
 
-bool
-nsCSSAnonBoxes::IsAnonBox(nsAtom* aAtom)
+bool nsCSSAnonBoxes::IsAnonBox(nsAtom *aAtom)
 {
-  return nsStaticAtomUtils::IsMember(aAtom, GetAtomBase(),
-                                     kAtomCount_AnonBoxes);
+  return nsStaticAtomUtils::IsMember(aAtom, sAtoms, sAtomsLen);
 }
 
 #ifdef MOZ_XUL
 /* static */ bool
 nsCSSAnonBoxes::IsTreePseudoElement(nsAtom* aPseudo)
 {
   MOZ_ASSERT(nsCSSAnonBoxes::IsAnonBox(aPseudo));
   return StringBeginsWith(nsDependentAtomString(aPseudo),
                           NS_LITERAL_STRING(":-moz-tree-"));
 }
 #endif
 
 /* static*/ nsCSSAnonBoxes::NonInheriting
 nsCSSAnonBoxes::NonInheritingTypeForPseudoTag(nsAtom* aPseudo)
 {
   MOZ_ASSERT(IsNonInheritingAnonBox(aPseudo));
-  Maybe<uint32_t> index =
-    nsStaticAtomUtils::Lookup(aPseudo, GetAtomBase(), kAtomCount_AnonBoxes);
+  Maybe<uint32_t> index = nsStaticAtomUtils::Lookup(aPseudo, sAtoms, sAtomsLen);
   MOZ_RELEASE_ASSERT(index.isSome());
   return static_cast<NonInheriting>(*index);
 }
-
-#ifdef DEBUG
-/* static */ void
-nsCSSAnonBoxes::AssertAtoms()
-{
-  nsStaticAtom* base = GetAtomBase();
-  size_t index = 0;
-#define CSS_ANON_BOX(name_, value_)                                  \
-  {                                                                  \
-    RefPtr<nsAtom> atom = NS_Atomize(value_);                        \
-    MOZ_ASSERT(atom == nsGkAtoms::AnonBox_##name_,                   \
-               "Static atom for " #name_ " has incorrect value");    \
-    MOZ_ASSERT(atom == &base[index],                                 \
-               "Static atom for " #name_ " not at expected index");  \
-    ++index;                                                         \
-  }
-#include "nsCSSAnonBoxList.h"
-#undef CSS_ANON_BOX
-}
-#endif
--- a/layout/style/nsCSSAnonBoxes.h
+++ b/layout/style/nsCSSAnonBoxes.h
@@ -5,31 +5,78 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 /* atom list for CSS anonymous boxes */
 
 #ifndef nsCSSAnonBoxes_h___
 #define nsCSSAnonBoxes_h___
 
 #include "nsAtom.h"
-#include "nsGkAtoms.h"
+#include "nsStaticAtom.h"
+
+// Trivial subclass of nsStaticAtom so that function signatures can require an
+// atom from this atom list.
+class nsICSSAnonBoxPseudo : public nsStaticAtom
+{
+public:
+  constexpr nsICSSAnonBoxPseudo(const char16_t* aStr, uint32_t aLength,
+                                uint32_t aStringOffset)
+    : nsStaticAtom(aStr, aLength, aStringOffset)
+  {}
+};
+
+namespace mozilla {
+namespace detail {
+
+struct CSSAnonBoxAtoms
+{
+  #define CSS_ANON_BOX(name_, value_) NS_STATIC_ATOM_DECL_STRING(name_, value_)
+  #include "nsCSSAnonBoxList.h"
+  #undef CSS_ANON_BOX
+
+  enum class Atoms {
+    #define CSS_ANON_BOX(name_, value_) \
+      NS_STATIC_ATOM_ENUM(name_)
+    #include "nsCSSAnonBoxList.h"
+    #undef CSS_ANON_BOX
+    AtomsCount
+  };
+
+  const nsICSSAnonBoxPseudo mAtoms[static_cast<size_t>(Atoms::AtomsCount)];
+};
+
+} // namespace detail
+} // namespace mozilla
 
 class nsCSSAnonBoxes {
 public:
+
+  static void RegisterStaticAtoms();
+
   static bool IsAnonBox(nsAtom *aAtom);
 #ifdef MOZ_XUL
   static bool IsTreePseudoElement(nsAtom* aPseudo);
 #endif
   static bool IsNonElement(nsAtom* aPseudo)
   {
-    return aPseudo == nsCSSAnonBoxes::mozText() ||
-           aPseudo == nsCSSAnonBoxes::oofPlaceholder() ||
-           aPseudo == nsCSSAnonBoxes::firstLetterContinuation();
+    return aPseudo == mozText || aPseudo == oofPlaceholder ||
+           aPseudo == firstLetterContinuation;
   }
 
+private:
+  static const nsStaticAtom* const sAtoms;
+  static constexpr size_t sAtomsLen =
+    static_cast<size_t>(mozilla::detail::CSSAnonBoxAtoms::Atoms::AtomsCount);
+
+public:
+  #define CSS_ANON_BOX(name_, value_) \
+    NS_STATIC_ATOM_DECL_PTR(nsICSSAnonBoxPseudo, name_)
+  #include "nsCSSAnonBoxList.h"
+  #undef CSS_ANON_BOX
+
   typedef uint8_t NonInheritingBase;
   enum class NonInheriting : NonInheritingBase {
 #define CSS_ANON_BOX(_name, _value) /* nothing */
 #define CSS_NON_INHERITING_ANON_BOX(_name, _value) _name,
 #include "nsCSSAnonBoxList.h"
 #undef CSS_NON_INHERITING_ANON_BOX
 #undef CSS_ANON_BOX
     _Count
@@ -39,71 +86,55 @@ public:
   // might not be very fast.  We may want to think of ways to handle that
   // (e.g. by moving to an enum instead of an atom, like we did for
   // pseudo-elements, or by adding a new value of the pseudo-element enum for
   // non-inheriting anon boxes or something).
   static bool IsNonInheritingAnonBox(nsAtom* aPseudo)
   {
     return
 #define CSS_ANON_BOX(_name, _value) /* nothing */
-#define CSS_NON_INHERITING_ANON_BOX(_name, _value) \
-      nsGkAtoms::AnonBox_##_name == aPseudo ||
+#define CSS_NON_INHERITING_ANON_BOX(_name, _value) _name == aPseudo ||
 #include "nsCSSAnonBoxList.h"
 #undef CSS_NON_INHERITING_ANON_BOX
 #undef CSS_ANON_BOX
       false;
   }
 
 #ifdef DEBUG
   // NOTE(emilio): DEBUG only because this does a pretty slow linear search. Try
   // to use IsNonInheritingAnonBox if you know the atom is an anon box already
   // or, even better, nothing like this.  Note that this function returns true
   // for wrapper anon boxes as well, since they're all inheriting.
   static bool IsInheritingAnonBox(nsAtom* aPseudo)
   {
     return
-#define CSS_ANON_BOX(_name, _value) nsGkAtoms::AnonBox_##_name == aPseudo ||
+#define CSS_ANON_BOX(_name, _value) _name == aPseudo ||
 #define CSS_NON_INHERITING_ANON_BOX(_name, _value) /* nothing */
 #include "nsCSSAnonBoxList.h"
 #undef CSS_NON_INHERITING_ANON_BOX
 #undef CSS_ANON_BOX
       false;
   }
 #endif // DEBUG
 
   // This function is rather slow; you probably don't want to use it outside
   // asserts unless you have to.
   static bool IsWrapperAnonBox(nsAtom* aPseudo) {
     // We commonly get null passed here, and want to quickly return false for
     // it.
     return aPseudo &&
       (
 #define CSS_ANON_BOX(_name, _value) /* nothing */
-#define CSS_WRAPPER_ANON_BOX(_name, _value) nsGkAtoms::AnonBox_##_name == aPseudo ||
+#define CSS_WRAPPER_ANON_BOX(_name, _value) _name == aPseudo ||
 #define CSS_NON_INHERITING_ANON_BOX(_name, _value) /* nothing */
 #include "nsCSSAnonBoxList.h"
 #undef CSS_NON_INHERITING_ANON_BOX
 #undef CSS_WRAPPER_ANON_BOX
 #undef CSS_ANON_BOX
        false);
   }
 
   // Get the NonInheriting type for a given pseudo tag.  The pseudo tag must
   // test true for IsNonInheritingAnonBox.
   static NonInheriting NonInheritingTypeForPseudoTag(nsAtom* aPseudo);
-
-#ifdef DEBUG
-  static void AssertAtoms();
-#endif
-
-  // Alias nsCSSAnonBoxes::foo() to alias nsGkAtoms::AnonBox_foo.
-  // XXX Once nsGkAtoms::AnonBox_foo become constexpr variables, these can too.
-  // See bug 1449787.
-  #define CSS_ANON_BOX(name_, value_)                     \
-    static constexpr nsICSSAnonBoxPseudo* const& name_()  \
-    {                                                     \
-      return nsGkAtoms::AnonBox_##name_;                  \
-    }
-  #include "nsCSSAnonBoxList.h"
-  #undef CSS_ANON_BOX
 };
 
 #endif /* nsCSSAnonBoxes_h___ */
--- a/layout/style/nsCSSPseudoElementList.h
+++ b/layout/style/nsCSSPseudoElementList.h
@@ -1,34 +1,31 @@
 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
 /* 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/. */
 
-/* list of CSS pseudo-elements */
+/* atom list for CSS pseudo-elements */
 
 /*
- * This file contains the list of support CSS pseudo-elements and some flags.
- * It is designed to be used as inline input to nsCSSPseudoElements.cpp *only*
- * through the magic of C preprocessing.  All entries must be enclosed either
- * in the macro CSS_PSEUDO_ELEMENT; these macros will have cruel and unusual
- * things done to them.  The entries should be kept in some sort of logical
- * order.
+ * This file contains the list of nsAtoms and their values for CSS
+ * pseudo-elements.  It is designed to be used as inline input to
+ * nsCSSPseudoElements.cpp *only* through the magic of C preprocessing.  All
+ * entries must be enclosed either in the macro CSS_PSEUDO_ELEMENT;
+ * these macros will have cruel and unusual things done to them.  The
+ * entries should be kept in some sort of logical order.
  *
  * Code including this file MUST define CSS_PSEUDO_ELEMENT, which takes
  * three parameters:
  * name_  : The C++ identifier used for the atom (which will be a member
  *          of nsCSSPseudoElements)
  * value_ : The pseudo-element as a string, with single-colon syntax,
  *          used as the string value of the atom.
  * flags_ : A bitfield containing flags defined in nsCSSPseudoElements.h
- *
- * A corresponding atom must also be defined in StaticAtoms.py with a name of
- * "PseudoElement_<name_>" and whose value matches the definition in this file.
  */
 
 // OUTPUT_CLASS=nsCSSPseudoElements
 // MACRO_NAME=CSS_PSEUDO_ELEMENT
 
 CSS_PSEUDO_ELEMENT(after, ":after", CSS_PSEUDO_ELEMENT_IS_CSS2 |
                                     CSS_PSEUDO_ELEMENT_IS_FLEX_OR_GRID_ITEM)
 CSS_PSEUDO_ELEMENT(before, ":before", CSS_PSEUDO_ELEMENT_IS_CSS2 |
--- a/layout/style/nsCSSPseudoElements.cpp
+++ b/layout/style/nsCSSPseudoElements.cpp
@@ -7,69 +7,94 @@
 /* atom list for CSS pseudo-elements */
 
 #include "nsCSSPseudoElements.h"
 
 #include "mozilla/ArrayUtils.h"
 
 #include "nsCSSAnonBoxes.h"
 #include "nsDOMString.h"
-#include "nsGkAtomConsts.h"
-#include "nsStaticAtomUtils.h"
 
 using namespace mozilla;
 
+namespace mozilla {
+namespace detail {
+
+MOZ_PUSH_DISABLE_INTEGRAL_CONSTANT_OVERFLOW_WARNING
+extern constexpr CSSPseudoElementAtoms gCSSPseudoElementAtoms = {
+  #define CSS_PSEUDO_ELEMENT(name_, value_, flags_) \
+    NS_STATIC_ATOM_INIT_STRING(value_)
+  #include "nsCSSPseudoElementList.h"
+  #undef CSS_PSEUDO_ELEMENT
+  {
+    #define CSS_PSEUDO_ELEMENT(name_, value_, flags_) \
+      NS_STATIC_ATOM_INIT_ATOM( \
+        nsICSSPseudoElement, CSSPseudoElementAtoms, name_, value_)
+    #include "nsCSSPseudoElementList.h"
+    #undef CSS_PSEUDO_ELEMENT
+  }
+};
+MOZ_POP_DISABLE_INTEGRAL_CONSTANT_OVERFLOW_WARNING
+
+} // namespace detail
+} // namespace mozilla
+
+const nsStaticAtom* const nsCSSPseudoElements::sAtoms =
+  mozilla::detail::gCSSPseudoElementAtoms.mAtoms;
+
+#define CSS_PSEUDO_ELEMENT(name_, value_, flags_) \
+  NS_STATIC_ATOM_DEFN_PTR( \
+    nsICSSPseudoElement, mozilla::detail::CSSPseudoElementAtoms, \
+    mozilla::detail::gCSSPseudoElementAtoms, nsCSSPseudoElements, name_);
+#include "nsCSSPseudoElementList.h"
+#undef CSS_PSEUDO_ELEMENT
+
 // Flags data for each of the pseudo-elements.
 /* static */ const uint32_t
 nsCSSPseudoElements::kPseudoElementFlags[] = {
 #define CSS_PSEUDO_ELEMENT(name_, value_, flags_) \
   flags_,
 #include "nsCSSPseudoElementList.h"
 #undef CSS_PSEUDO_ELEMENT
 };
 
-static nsStaticAtom*
-GetAtomBase()
+void nsCSSPseudoElements::RegisterStaticAtoms()
 {
-  return const_cast<nsStaticAtom*>(
-      nsGkAtoms::GetAtomByIndex(kAtomIndex_PseudoElements));
+  NS_RegisterStaticAtoms(sAtoms, sAtomsLen);
 }
 
-bool
-nsCSSPseudoElements::IsPseudoElement(nsAtom* aAtom)
+bool nsCSSPseudoElements::IsPseudoElement(nsAtom *aAtom)
 {
-  return nsStaticAtomUtils::IsMember(aAtom, GetAtomBase(),
-                                     kAtomCount_PseudoElements);
+  return nsStaticAtomUtils::IsMember(aAtom, sAtoms, sAtomsLen);
 }
 
 /* static */ bool
 nsCSSPseudoElements::IsCSS2PseudoElement(nsAtom *aAtom)
 {
   // We don't implement this using PseudoElementHasFlags because callers
   // want to pass things that could be anon boxes.
   NS_ASSERTION(nsCSSPseudoElements::IsPseudoElement(aAtom) ||
                nsCSSAnonBoxes::IsAnonBox(aAtom),
                "must be pseudo element or anon box");
-  bool result = aAtom == nsCSSPseudoElements::after() ||
-                  aAtom == nsCSSPseudoElements::before() ||
-                  aAtom == nsCSSPseudoElements::firstLetter() ||
-                  aAtom == nsCSSPseudoElements::firstLine();
+  bool result = aAtom == nsCSSPseudoElements::after ||
+                  aAtom == nsCSSPseudoElements::before ||
+                  aAtom == nsCSSPseudoElements::firstLetter ||
+                  aAtom == nsCSSPseudoElements::firstLine;
   NS_ASSERTION(nsCSSAnonBoxes::IsAnonBox(aAtom) ||
                result == PseudoElementHasFlags(
                    GetPseudoType(aAtom, EnabledState::eIgnoreEnabledState),
                    CSS_PSEUDO_ELEMENT_IS_CSS2),
                "result doesn't match flags");
   return result;
 }
 
 /* static */ CSSPseudoElementType
 nsCSSPseudoElements::GetPseudoType(nsAtom* aAtom, EnabledState aEnabledState)
 {
-  Maybe<uint32_t> index =
-    nsStaticAtomUtils::Lookup(aAtom, GetAtomBase(), kAtomCount_PseudoElements);
+  Maybe<uint32_t> index = nsStaticAtomUtils::Lookup(aAtom, sAtoms, sAtomsLen);
   if (index.isSome()) {
     auto type = static_cast<Type>(*index);
     return IsEnabled(type, aEnabledState) ? type : Type::NotPseudo;
   }
 
   if (nsCSSAnonBoxes::IsAnonBox(aAtom)) {
 #ifdef MOZ_XUL
     if (nsCSSAnonBoxes::IsTreePseudoElement(aAtom)) {
@@ -86,18 +111,18 @@ nsCSSPseudoElements::GetPseudoType(nsAto
 
   return Type::NotPseudo;
 }
 
 /* static */ nsAtom*
 nsCSSPseudoElements::GetPseudoAtom(Type aType)
 {
   MOZ_ASSERT(aType < Type::Count, "Unexpected type");
-  size_t index = kAtomIndex_PseudoElements + static_cast<size_t>(aType);
-  return nsGkAtoms::GetAtomByIndex(index);
+  return const_cast<nsStaticAtom*>(
+    &sAtoms[static_cast<CSSPseudoElementTypeBase>(aType)]);
 }
 
 /* static */ already_AddRefed<nsAtom>
 nsCSSPseudoElements::GetPseudoAtom(const nsAString& aPseudoElement)
 {
   if (DOMStringIsNull(aPseudoElement) || aPseudoElement.IsEmpty() ||
       aPseudoElement.First() != char16_t(':')) {
     return nullptr;
@@ -145,26 +170,8 @@ nsCSSPseudoElements::PseudoTypeAsString(
       return NS_LITERAL_STRING("::after");
     default:
       MOZ_ASSERT(aPseudoType == CSSPseudoElementType::NotPseudo,
                  "Unexpected pseudo type");
       return EmptyString();
   }
 }
 
-#ifdef DEBUG
-/* static */ void
-nsCSSPseudoElements::AssertAtoms()
-{
-  nsStaticAtom* base = GetAtomBase();
-#define CSS_PSEUDO_ELEMENT(name_, value_, flags_)                    \
-  {                                                                  \
-    RefPtr<nsAtom> atom = NS_Atomize(value_);                        \
-    size_t index = static_cast<size_t>(CSSPseudoElementType::name_); \
-    MOZ_ASSERT(atom == nsGkAtoms::PseudoElement_##name_,             \
-               "Static atom for " #name_ " has incorrect value");    \
-    MOZ_ASSERT(atom == &base[index],                                 \
-               "Static atom for " #name_ " not at expected index");  \
-  }
-#include "nsCSSPseudoElementList.h"
-#undef CSS_PSEUDO_ELEMENT
-}
-#endif
--- a/layout/style/nsCSSPseudoElements.h
+++ b/layout/style/nsCSSPseudoElements.h
@@ -4,17 +4,18 @@
  * 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/. */
 
 /* atom list for CSS pseudo-elements */
 
 #ifndef nsCSSPseudoElements_h___
 #define nsCSSPseudoElements_h___
 
-#include "nsGkAtoms.h"
+#include "nsAtom.h"
+#include "nsStaticAtom.h"
 #include "mozilla/CSSEnabledState.h"
 #include "mozilla/Compiler.h"
 
 // Is this pseudo-element a CSS2 pseudo-element that can be specified
 // with the single colon syntax (in addition to the double-colon syntax,
 // which can be used for all pseudo-elements)?
 //
 // Note: We also rely on this for IsEagerlyCascadedInServo.
@@ -50,16 +51,27 @@
 // Can we use the ChromeOnly document.createElement(..., { pseudo: "::foo" })
 // API for creating pseudo-implementing native anonymous content in JS with this
 // pseudo-element?
 #define CSS_PSEUDO_ELEMENT_IS_JS_CREATED_NAC           (1<<6)
 // Does this pseudo-element act like an item for containers (such as flex and
 // grid containers) and thus needs parent display-based style fixup?
 #define CSS_PSEUDO_ELEMENT_IS_FLEX_OR_GRID_ITEM        (1<<7)
 
+// Trivial subclass of nsStaticAtom so that function signatures can require an
+// atom from this atom list.
+class nsICSSPseudoElement : public nsStaticAtom
+{
+public:
+  constexpr nsICSSPseudoElement(const char16_t* aStr, uint32_t aLength,
+                                uint32_t aStringOffset)
+    : nsStaticAtom(aStr, aLength, aStringOffset)
+  {}
+};
+
 namespace mozilla {
 
 // The total count of CSSPseudoElement is less than 256,
 // so use uint8_t as its underlying type.
 typedef uint8_t CSSPseudoElementTypeBase;
 enum class CSSPseudoElementType : CSSPseudoElementTypeBase {
   // If the actual pseudo-elements stop being first here, change
   // GetPseudoType.
@@ -73,49 +85,68 @@ enum class CSSPseudoElementType : CSSPse
   NonInheritingAnonBox, // from nsCSSAnonBoxes, IsNonInheritingAnonBox true.
 #ifdef MOZ_XUL
   XULTree,
 #endif
   NotPseudo,
   MAX
 };
 
+namespace detail {
+
+struct CSSPseudoElementAtoms
+{
+  #define CSS_PSEUDO_ELEMENT(name_, value_, flags_) \
+    NS_STATIC_ATOM_DECL_STRING(name_, value_)
+  #include "nsCSSPseudoElementList.h"
+  #undef CSS_PSEUDO_ELEMENT
+
+  enum class Atoms {
+    #define CSS_PSEUDO_ELEMENT(name_, value_, flags_) \
+      NS_STATIC_ATOM_ENUM(name_)
+    #include "nsCSSPseudoElementList.h"
+    #undef CSS_PSEUDO_ELEMENT
+    AtomsCount
+  };
+
+  const nsICSSPseudoElement mAtoms[static_cast<size_t>(Atoms::AtomsCount)];
+};
+
+} // namespace detail
+
 } // namespace mozilla
 
 class nsCSSPseudoElements
 {
   typedef mozilla::CSSPseudoElementType Type;
   typedef mozilla::CSSEnabledState EnabledState;
 
 public:
+  static void RegisterStaticAtoms();
+
   static bool IsPseudoElement(nsAtom *aAtom);
 
   static bool IsCSS2PseudoElement(nsAtom *aAtom);
 
   // This must match EAGER_PSEUDO_COUNT in Rust code.
   static const size_t kEagerPseudoCount = 4;
 
   static bool IsEagerlyCascadedInServo(const Type aType)
   {
     return PseudoElementHasFlags(aType, CSS_PSEUDO_ELEMENT_IS_CSS2);
   }
 
-public:
-#ifdef DEBUG
-  static void AssertAtoms();
-#endif
+private:
+  static const nsStaticAtom* const sAtoms;
+  static constexpr size_t sAtomsLen =
+    static_cast<size_t>(mozilla::detail::CSSPseudoElementAtoms::Atoms::AtomsCount);
 
-  // Alias nsCSSPseudoElements::foo() to alias nsGkAtoms::foo.
-  // XXX Once nsGkAtoms::foo become constexpr variables, these can too.
-  // See bug 1449787.
-  #define CSS_PSEUDO_ELEMENT(name_, value_, flags_)       \
-    static constexpr nsICSSPseudoElement* const& name_()  \
-    {                                                     \
-      return nsGkAtoms::PseudoElement_##name_;            \
-    }
+public:
+  #define CSS_PSEUDO_ELEMENT(name_, value_, flags_) \
+    NS_STATIC_ATOM_DECL_PTR(nsICSSPseudoElement, name_);
   #include "nsCSSPseudoElementList.h"
   #undef CSS_PSEUDO_ELEMENT
 
   static Type GetPseudoType(nsAtom* aAtom, EnabledState aEnabledState);
 
   // Get the atom for a given Type. aType must be < CSSPseudoElementType::Count.
   // This only ever returns static atoms, so it's fine to return a raw pointer.
   static nsAtom* GetPseudoAtom(Type aType);
--- a/layout/style/nsComputedDOMStyle.cpp
+++ b/layout/style/nsComputedDOMStyle.cpp
@@ -136,21 +136,21 @@ DocumentNeedsRestyle(
   // ch / ex units).
   if (presContext->HasPendingMediaQueryUpdates()) {
     // So gotta flush.
     return true;
   }
 
   // If the pseudo-element is animating, make sure to flush.
   if (aElement->MayHaveAnimations() && aPseudo) {
-    if (aPseudo == nsCSSPseudoElements::before()) {
+    if (aPseudo == nsCSSPseudoElements::before) {
       if (EffectSet::GetEffectSet(aElement, CSSPseudoElementType::before)) {
         return true;
       }
-    } else if (aPseudo == nsCSSPseudoElements::after()) {
+    } else if (aPseudo == nsCSSPseudoElements::after) {
       if (EffectSet::GetEffectSet(aElement, CSSPseudoElementType::after)) {
         return true;
       }
     }
   }
 
   // For Servo, we need to process the restyle-hint-invalidations first, to
   // expand LaterSiblings hint, so that we can look whether ancestors need
@@ -574,19 +574,19 @@ nsComputedDOMStyle::DoGetComputedStyleNo
 
   // XXX the !aElement->IsHTMLElement(nsGkAtoms::area)
   // check is needed due to bug 135040 (to avoid using
   // mPrimaryFrame). Remove it once that's fixed.
   if (inDocWithShell &&
       aStyleType == eAll &&
       !aElement->IsHTMLElement(nsGkAtoms::area)) {
     nsIFrame* frame = nullptr;
-    if (aPseudo == nsCSSPseudoElements::before()) {
+    if (aPseudo == nsCSSPseudoElements::before) {
       frame = nsLayoutUtils::GetBeforeFrame(aElement);
-    } else if (aPseudo == nsCSSPseudoElements::after()) {
+    } else if (aPseudo == nsCSSPseudoElements::after) {
       frame = nsLayoutUtils::GetAfterFrame(aElement);
     } else if (!aPseudo) {
       frame = nsLayoutUtils::GetStyleFrame(aElement);
     }
     if (frame) {
       ComputedStyle* result = frame->Style();
       // Don't use the style if it was influenced by pseudo-elements, since then
       // it's not the primary style for this element / pseudo.
@@ -942,19 +942,19 @@ nsComputedDOMStyle::UpdateCurrentStyleSo
   // XXX the !mElement->IsHTMLElement(nsGkAtoms::area)
   // check is needed due to bug 135040 (to avoid using
   // mPrimaryFrame). Remove it once that's fixed.
   if (mStyleType == eAll && !mElement->IsHTMLElement(nsGkAtoms::area)) {
     mOuterFrame = nullptr;
 
     if (!mPseudo) {
       mOuterFrame = mElement->GetPrimaryFrame();
-    } else if (mPseudo == nsCSSPseudoElements::before() ||
-               mPseudo == nsCSSPseudoElements::after()) {
-      nsAtom* property = mPseudo == nsCSSPseudoElements::before()
+    } else if (mPseudo == nsCSSPseudoElements::before ||
+               mPseudo == nsCSSPseudoElements::after) {
+      nsAtom* property = mPseudo == nsCSSPseudoElements::before
                             ? nsGkAtoms::beforePseudoProperty
                             : nsGkAtoms::afterPseudoProperty;
 
       auto* pseudo = static_cast<Element*>(mElement->GetProperty(property));
       mOuterFrame = pseudo ? pseudo->GetPrimaryFrame() : nullptr;
     }
 
     mInnerFrame = mOuterFrame;
--- a/layout/tables/nsTableFrame.cpp
+++ b/layout/tables/nsTableFrame.cpp
@@ -670,17 +670,17 @@ nsTableColGroupFrame*
 nsTableFrame::CreateSyntheticColGroupFrame()
 {
   nsIContent* colGroupContent = GetContent();
   nsPresContext* presContext = PresContext();
   nsIPresShell *shell = presContext->PresShell();
 
   RefPtr<ComputedStyle> colGroupStyle;
   colGroupStyle = shell->StyleSet()->
-    ResolveNonInheritingAnonymousBoxStyle(nsCSSAnonBoxes::tableColGroup());
+    ResolveNonInheritingAnonymousBoxStyle(nsCSSAnonBoxes::tableColGroup);
   // Create a col group frame
   nsTableColGroupFrame* newFrame =
     NS_NewTableColGroupFrame(shell, colGroupStyle);
   newFrame->SetIsSynthetic();
   newFrame->Init(colGroupContent, this, nullptr);
   return newFrame;
 }
 
@@ -729,17 +729,17 @@ nsTableFrame::AppendAnonymousColFrames(n
   int32_t startIndex = mColFrames.Length();
   int32_t lastIndex  = startIndex + aNumColsToAdd - 1;
 
   for (int32_t childX = startIndex; childX <= lastIndex; childX++) {
     // all anonymous cols that we create here use a pseudo ComputedStyle of the
     // col group
     nsIContent* iContent = aColGroupFrame->GetContent();
     RefPtr<ComputedStyle> computedStyle = shell->StyleSet()->
-      ResolveNonInheritingAnonymousBoxStyle(nsCSSAnonBoxes::tableCol());
+      ResolveNonInheritingAnonymousBoxStyle(nsCSSAnonBoxes::tableCol);
     // ASSERTION to check for bug 54454 sneaking back in...
     NS_ASSERTION(iContent, "null content in CreateAnonymousColFrames");
 
     // create the new col frame
     nsIFrame* colFrame = NS_NewTableColFrame(shell, computedStyle);
     ((nsTableColFrame *) colFrame)->SetColType(aColType);
     colFrame->Init(iContent, aColGroupFrame, nullptr);
 
@@ -8196,35 +8196,35 @@ nsTableFrame::InvalidateTableFrame(nsIFr
   }
 }
 
 void
 nsTableFrame::AppendDirectlyOwnedAnonBoxes(nsTArray<OwnedAnonBox>& aResult)
 {
   nsIFrame* wrapper = GetParent();
   MOZ_ASSERT(wrapper->Style()->GetPseudo() ==
-               nsCSSAnonBoxes::tableWrapper(),
+               nsCSSAnonBoxes::tableWrapper,
              "What happened to our parent?");
   aResult.AppendElement(
     OwnedAnonBox(wrapper, &UpdateStyleOfOwnedAnonBoxesForTableWrapper));
 }
 
 /* static */ void
 nsTableFrame::UpdateStyleOfOwnedAnonBoxesForTableWrapper(
   nsIFrame* aOwningFrame,
   nsIFrame* aWrapperFrame,
   ServoRestyleState& aRestyleState)
 {
   MOZ_ASSERT(aWrapperFrame->Style()->GetPseudo() ==
-               nsCSSAnonBoxes::tableWrapper(),
+               nsCSSAnonBoxes::tableWrapper,
              "What happened to our parent?");
 
   RefPtr<ComputedStyle> newStyle =
     aRestyleState.StyleSet().ResolveInheritingAnonymousBoxStyle(
-      nsCSSAnonBoxes::tableWrapper(), aOwningFrame->Style());
+      nsCSSAnonBoxes::tableWrapper, aOwningFrame->Style());
 
   // Figure out whether we have an actual change.  It's important that we do
   // this, even though all the wrapper's changes are due to properties it
   // inherits from us, because it's possible that no one ever asked us for those
   // style structs and hence changes to them aren't reflected in
   // the handled changes at all.
   //
   // Also note that extensions can add/remove stylesheets that change the styles
--- a/layout/xul/tree/nsTreeBodyFrame.cpp
+++ b/layout/xul/tree/nsTreeBodyFrame.cpp
@@ -217,17 +217,17 @@ nscoord
 nsTreeBodyFrame::CalcMaxRowWidth()
 {
   if (mStringWidth != -1)
     return mStringWidth;
 
   if (!mView)
     return 0;
 
-  ComputedStyle* rowContext = GetPseudoComputedStyle(nsCSSAnonBoxes::mozTreeRow());
+  ComputedStyle* rowContext = GetPseudoComputedStyle(nsCSSAnonBoxes::mozTreeRow);
   nsMargin rowMargin(0,0,0,0);
   GetBorderPadding(rowContext, rowMargin);
 
   nscoord rowWidth;
   nsTreeColumn* col;
 
   RefPtr<gfxContext> rc =
     PresShell()->CreateReferenceRenderingContext();
@@ -994,23 +994,23 @@ nsTreeBodyFrame::GetCellAt(int32_t aX, i
   }
 
   nsTreeColumn* col;
   nsICSSAnonBoxPseudo* child;
   GetCellAt(point.x, point.y, aRow, &col, &child);
 
   if (col) {
     NS_ADDREF(*aCol = col);
-    if (child == nsCSSAnonBoxes::mozTreeCell())
+    if (child == nsCSSAnonBoxes::mozTreeCell)
       aChildElt.AssignLiteral("cell");
-    else if (child == nsCSSAnonBoxes::mozTreeTwisty())
+    else if (child == nsCSSAnonBoxes::mozTreeTwisty)
       aChildElt.AssignLiteral("twisty");
-    else if (child == nsCSSAnonBoxes::mozTreeImage())
+    else if (child == nsCSSAnonBoxes::mozTreeImage)
       aChildElt.AssignLiteral("image");
-    else if (child == nsCSSAnonBoxes::mozTreeCellText())
+    else if (child == nsCSSAnonBoxes::mozTreeCellText)
       aChildElt.AssignLiteral("text");
   }
 
   return NS_OK;
 }
 
 
 //
@@ -1072,24 +1072,24 @@ nsTreeBodyFrame::GetCoordsForCellItem(in
     }
     // Now obtain the properties for our cell.
     PrefillPropertyArray(aRow, currCol);
 
     nsAutoString properties;
     mView->GetCellProperties(aRow, currCol, properties);
     nsTreeUtils::TokenizeProperties(properties, mScratchArray);
 
-    ComputedStyle* rowContext = GetPseudoComputedStyle(nsCSSAnonBoxes::mozTreeRow());
+    ComputedStyle* rowContext = GetPseudoComputedStyle(nsCSSAnonBoxes::mozTreeRow);
 
     // We don't want to consider any of the decorations that may be present
     // on the current row, so we have to deflate the rect by the border and
     // padding and offset its left and top coordinates appropriately.
     AdjustForBorderPadding(rowContext, cellRect);
 
-    ComputedStyle* cellContext = GetPseudoComputedStyle(nsCSSAnonBoxes::mozTreeCell());
+    ComputedStyle* cellContext = GetPseudoComputedStyle(nsCSSAnonBoxes::mozTreeCell);
 
     NS_NAMED_LITERAL_CSTRING(cell, "cell");
     if (currCol->IsCycler() || cell.Equals(aElement)) {
       // If the current Column is a Cycler, then the Rect is just the cell - the margins.
       // Similarly, if we're just being asked for the cell rect, provide it.
 
       theRect = cellRect;
       nsMargin cellMargin;
@@ -1122,17 +1122,17 @@ nsTreeBodyFrame::GetCoordsForCellItem(in
       mView->GetLevel(aRow, &level);
       if (!isRTL)
         cellX += mIndentation * level;
       remainWidth -= mIndentation * level;
 
       // Find the twisty rect by computing its size.
       nsRect imageRect;
       nsRect twistyRect(cellRect);
-      ComputedStyle* twistyContext = GetPseudoComputedStyle(nsCSSAnonBoxes::mozTreeTwisty());
+      ComputedStyle* twistyContext = GetPseudoComputedStyle(nsCSSAnonBoxes::mozTreeTwisty);
       GetTwistyRect(aRow, currCol, imageRect, twistyRect, presContext,
                     twistyContext);
 
       if (NS_LITERAL_CSTRING("twisty").Equals(aElement)) {
         // If we're looking for the twisty Rect, just return the size
         theRect = twistyRect;
         break;
       }
@@ -1145,17 +1145,17 @@ nsTreeBodyFrame::GetCoordsForCellItem(in
 
       // Adjust our working X value with the twisty width (image size, margins,
       // borders, padding.
       if (!isRTL)
         cellX += twistyRect.width;
     }
 
     // Cell Image
-    ComputedStyle* imageContext = GetPseudoComputedStyle(nsCSSAnonBoxes::mozTreeImage());
+    ComputedStyle* imageContext = GetPseudoComputedStyle(nsCSSAnonBoxes::mozTreeImage);
 
     nsRect imageSize = GetImageSize(aRow, currCol, false, imageContext);
     if (NS_LITERAL_CSTRING("image").Equals(aElement)) {
       theRect = imageSize;
       theRect.x = cellX;
       theRect.y = cellRect.y;
       break;
     }
@@ -1181,17 +1181,17 @@ nsTreeBodyFrame::GetCoordsForCellItem(in
     // remaining width we have left to traverse in the cell, which will be the
     // widest possible value for the text rect, and the row height.
     nsRect textRect(cellX, cellRect.y, remainWidth, cellRect.height);
 
     // Measure the width of the text. If the width of the text is greater than
     // the remaining width available, then we just assume that the text has
     // been cropped and use the remaining rect as the text Rect. Otherwise,
     // we add in borders and padding to the text dimension and give that back.
-    ComputedStyle* textContext = GetPseudoComputedStyle(nsCSSAnonBoxes::mozTreeCellText());
+    ComputedStyle* textContext = GetPseudoComputedStyle(nsCSSAnonBoxes::mozTreeCellText);
 
     RefPtr<nsFontMetrics> fm =
       nsLayoutUtils::GetFontMetricsForComputedStyle(textContext, presContext);
     nscoord height = fm->MaxHeight();
 
     nsMargin textMargin;
     textContext->StyleMargin()->GetMargin(textMargin);
     textRect.Deflate(textMargin);
@@ -1433,31 +1433,31 @@ nsTreeBodyFrame::GetItemWithinCellAt(nsc
 
   // Obtain the properties for our cell.
   PrefillPropertyArray(aRowIndex, aColumn);
   nsAutoString properties;
   mView->GetCellProperties(aRowIndex, aColumn, properties);
   nsTreeUtils::TokenizeProperties(properties, mScratchArray);
 
   // Resolve style for the cell.
-  ComputedStyle* cellContext = GetPseudoComputedStyle(nsCSSAnonBoxes::mozTreeCell());
+  ComputedStyle* cellContext = GetPseudoComputedStyle(nsCSSAnonBoxes::mozTreeCell);
 
   // Obtain the margins for the cell and then deflate our rect by that
   // amount.  The cell is assumed to be contained within the deflated rect.
   nsRect cellRect(aCellRect);
   nsMargin cellMargin;
   cellContext->StyleMargin()->GetMargin(cellMargin);
   cellRect.Deflate(cellMargin);
 
   // Adjust the rect for its border and padding.
   AdjustForBorderPadding(cellContext, cellRect);
 
   if (aX < cellRect.x || aX >= cellRect.x + cellRect.width) {
     // The user clicked within the cell's margins/borders/padding.  This constitutes a click on the cell.
-    return nsCSSAnonBoxes::mozTreeCell();
+    return nsCSSAnonBoxes::mozTreeCell;
   }
 
   nscoord currX = cellRect.x;
   nscoord remainingWidth = cellRect.width;
 
   // Handle right alignment hit testing.
   bool isRTL = StyleVisibility()->mDirection == NS_STYLE_DIRECTION_RTL;
 
@@ -1472,33 +1472,33 @@ nsTreeBodyFrame::GetItemWithinCellAt(nsc
 
     if (!isRTL)
       currX += mIndentation*level;
     remainingWidth -= mIndentation*level;
 
     if ((isRTL && aX > currX + remainingWidth) ||
         (!isRTL && aX < currX)) {
       // The user clicked within the indentation.
-      return nsCSSAnonBoxes::mozTreeCell();
+      return nsCSSAnonBoxes::mozTreeCell;
     }
 
     // Always leave space for the twisty.
     nsRect twistyRect(currX, cellRect.y, remainingWidth, cellRect.height);
     bool hasTwisty = false;
     bool isContainer = false;
     mView->IsContainer(aRowIndex, &isContainer);
     if (isContainer) {
       bool isContainerEmpty = false;
       mView->IsContainerEmpty(aRowIndex, &isContainerEmpty);
       if (!isContainerEmpty)
         hasTwisty = true;
     }
 
     // Resolve style for the twisty.
-    ComputedStyle* twistyContext = GetPseudoComputedStyle(nsCSSAnonBoxes::mozTreeTwisty());
+    ComputedStyle* twistyContext = GetPseudoComputedStyle(nsCSSAnonBoxes::mozTreeTwisty);
 
     nsRect imageSize;
     GetTwistyRect(aRowIndex, aColumn, imageSize, twistyRect, presContext,
                   twistyContext);
 
     // We will treat a click as hitting the twisty if it happens on the margins, borders, padding,
     // or content of the twisty object.  By allowing a "slop" into the margin, we make it a little
     // bit easier for a user to hit the twisty.  (We don't want to be too picky here.)
@@ -1508,73 +1508,73 @@ nsTreeBodyFrame::GetItemWithinCellAt(nsc
     if (isRTL)
       twistyRect.x = currX + remainingWidth - twistyRect.width;
 
     // Now we test to see if aX is actually within the twistyRect.  If it is, and if the item should
     // have a twisty, then we return "twisty".  If it is within the rect but we shouldn't have a twisty,
     // then we return "cell".
     if (aX >= twistyRect.x && aX < twistyRect.x + twistyRect.width) {
       if (hasTwisty)
-        return nsCSSAnonBoxes::mozTreeTwisty();
+        return nsCSSAnonBoxes::mozTreeTwisty;
       else
-        return nsCSSAnonBoxes::mozTreeCell();
+        return nsCSSAnonBoxes::mozTreeCell;
     }
 
     if (!isRTL)
       currX += twistyRect.width;
     remainingWidth -= twistyRect.width;
   }
 
   // Now test to see if the user hit the icon for the cell.
   nsRect iconRect(currX, cellRect.y, remainingWidth, cellRect.height);
 
   // Resolve style for the image.
-  ComputedStyle* imageContext = GetPseudoComputedStyle(nsCSSAnonBoxes::mozTreeImage());
+  ComputedStyle* imageContext = GetPseudoComputedStyle(nsCSSAnonBoxes::mozTreeImage);
 
   nsRect iconSize = GetImageSize(aRowIndex, aColumn, false, imageContext);
   nsMargin imageMargin;
   imageContext->StyleMargin()->GetMargin(imageMargin);
   iconSize.Inflate(imageMargin);
   iconRect.width = iconSize.width;
   if (isRTL)
     iconRect.x = currX + remainingWidth - iconRect.width;
 
   if (aX >= iconRect.x && aX < iconRect.x + iconRect.width) {
     // The user clicked on the image.
-    return nsCSSAnonBoxes::mozTreeImage();
+    return nsCSSAnonBoxes::mozTreeImage;
   }
 
   if (!isRTL)
     currX += iconRect.width;
   remainingWidth -= iconRect.width;
 
   nsAutoString cellText;
   mView->GetCellText(aRowIndex, aColumn, cellText);
   // We're going to measure this text so we need to ensure bidi is enabled if
   // necessary
   CheckTextForBidi(cellText);
 
   nsRect textRect(currX, cellRect.y, remainingWidth, cellRect.height);
 
-  ComputedStyle* textContext = GetPseudoComputedStyle(nsCSSAnonBoxes::mozTreeCellText());
+  ComputedStyle* textContext = GetPseudoComputedStyle(nsCSSAnonBoxes::mozTreeCellText);
 
   nsMargin textMargin;
   textContext->StyleMargin()->GetMargin(textMargin);
   textRect.Deflate(textMargin);
 
   AdjustForBorderPadding(textContext, textRect);
 
   RefPtr<nsFontMetrics> fm =
     nsLayoutUtils::GetFontMetricsForComputedStyle(textContext, presContext);
   AdjustForCellText(cellText, aRowIndex, aColumn, *rc, *fm, textRect);
 
   if (aX >= textRect.x && aX < textRect.x + textRect.width)
-    return nsCSSAnonBoxes::mozTreeCellText();
+    return nsCSSAnonBoxes::mozTreeCellText;
   else
-    return nsCSSAnonBoxes::mozTreeCell();
+    return nsCSSAnonBoxes::mozTreeCell;
 }
 
 void
 nsTreeBodyFrame::GetCellAt(nscoord aX, nscoord aY, int32_t* aRow,
                            nsTreeColumn** aCol,
                            nsICSSAnonBoxPseudo** aChildElt)
 {
   *aCol = nullptr;
@@ -1602,17 +1602,17 @@ nsTreeBodyFrame::GetCellAt(nscoord aX, n
       continue;
 
     if (aX >= cellRect.x && aX < cellRect.x + cellRect.width) {
       // We know the column hit now.
       *aCol = currCol;
 
       if (currCol->IsCycler())
         // Cyclers contain only images.  Fill this in immediately and return.
-        *aChildElt = nsCSSAnonBoxes::mozTreeImage();
+        *aChildElt = nsCSSAnonBoxes::mozTreeImage;
       else
         *aChildElt = GetItemWithinCellAt(aX, cellRect, *aRow, currCol);
       break;
     }
   }
 }
 
 nsresult
@@ -1630,49 +1630,49 @@ nsTreeBodyFrame::GetCellWidth(int32_t aR
 
   nsRect cellRect(0, 0, colWidth, mRowHeight);
 
   int32_t overflow = cellRect.x+cellRect.width-(mInnerBox.x+mInnerBox.width);
   if (overflow > 0)
     cellRect.width -= overflow;
 
   // Adjust borders and padding for the cell.
-  ComputedStyle* cellContext = GetPseudoComputedStyle(nsCSSAnonBoxes::mozTreeCell());
+  ComputedStyle* cellContext = GetPseudoComputedStyle(nsCSSAnonBoxes::mozTreeCell);
   nsMargin bp(0,0,0,0);
   GetBorderPadding(cellContext, bp);
 
   aCurrentSize = cellRect.width;
   aDesiredSize = bp.left + bp.right;
 
   if (aCol->IsPrimary()) {
     // If the current Column is a Primary, then we need to take into account
     // the indentation and possibly a twisty.
 
     // The amount of indentation is the indentation width (|mIndentation|) by the level.
     int32_t level;
     mView->GetLevel(aRow, &level);
     aDesiredSize += mIndentation * level;
 
     // Find the twisty rect by computing its size.
-    ComputedStyle* twistyContext = GetPseudoComputedStyle(nsCSSAnonBoxes::mozTreeTwisty());
+    ComputedStyle* twistyContext = GetPseudoComputedStyle(nsCSSAnonBoxes::mozTreeTwisty);
 
     nsRect imageSize;
     nsRect twistyRect(cellRect);
     GetTwistyRect(aRow, aCol, imageSize, twistyRect, PresContext(),
                   twistyContext);
 
     // Add in the margins of the twisty element.
     nsMargin twistyMargin;
     twistyContext->StyleMargin()->GetMargin(twistyMargin);
     twistyRect.Inflate(twistyMargin);
 
     aDesiredSize += twistyRect.width;
   }
 
-  ComputedStyle* imageContext = GetPseudoComputedStyle(nsCSSAnonBoxes::mozTreeImage());
+  ComputedStyle* imageContext = GetPseudoComputedStyle(nsCSSAnonBoxes::mozTreeImage);
 
   // Account for the width of the cell image.
   nsRect imageSize = GetImageSize(aRow, aCol, false, imageContext);
   // Add in the margins of the cell image.
   nsMargin imageMargin;
   imageContext->StyleMargin()->GetMargin(imageMargin);
   imageSize.Inflate(imageMargin);
 
@@ -1680,17 +1680,17 @@ nsTreeBodyFrame::GetCellWidth(int32_t aR
 
   // Get the cell text.
   nsAutoString cellText;
   mView->GetCellText(aRow, aCol, cellText);
   // We're going to measure this text so we need to ensure bidi is enabled if
   // necessary
   CheckTextForBidi(cellText);
 
-  ComputedStyle* textContext = GetPseudoComputedStyle(nsCSSAnonBoxes::mozTreeCellText());
+  ComputedStyle* textContext = GetPseudoComputedStyle(nsCSSAnonBoxes::mozTreeCellText);
 
   // Get the borders and padding for the text.
   GetBorderPadding(textContext, bp);
 
   RefPtr<nsFontMetrics> fm =
     nsLayoutUtils::GetFontMetricsForComputedStyle(textContext, PresContext());
   // Get the width of the text itself
   nscoord width = nsLayoutUtils::AppUnitWidthOfStringBidi(cellText, this, *fm,
@@ -2336,17 +2336,17 @@ nsTreeBodyFrame::GetImageSourceRect(Comp
   return r;
 }
 
 int32_t nsTreeBodyFrame::GetRowHeight()
 {
   // Look up the correct height.  It is equal to the specified height
   // + the specified margins.
   mScratchArray.Clear();
-  ComputedStyle* rowContext = GetPseudoComputedStyle(nsCSSAnonBoxes::mozTreeRow());
+  ComputedStyle* rowContext = GetPseudoComputedStyle(nsCSSAnonBoxes::mozTreeRow);
   if (rowContext) {
     const nsStylePosition* myPosition = rowContext->StylePosition();
 
     nscoord minHeight = 0;
     if (myPosition->mMinHeight.GetUnit() == eStyleUnit_Coord)
       minHeight = myPosition->mMinHeight.GetCoordValue();
 
     nscoord height = 0;
@@ -2374,17 +2374,17 @@ int32_t nsTreeBodyFrame::GetRowHeight()
 
   return nsPresContext::CSSPixelsToAppUnits(18); // As good a default as any.
 }
 
 int32_t nsTreeBodyFrame::GetIndentation()
 {
   // Look up the correct indentation.  It is equal to the specified indentation width.
   mScratchArray.Clear();
-  ComputedStyle* indentContext = GetPseudoComputedStyle(nsCSSAnonBoxes::mozTreeIndentation());
+  ComputedStyle* indentContext = GetPseudoComputedStyle(nsCSSAnonBoxes::mozTreeIndentation);
   if (indentContext) {
     const nsStylePosition* myPosition = indentContext->StylePosition();
     if (myPosition->mWidth.GetUnit() == eStyleUnit_Coord)  {
       nscoord val = myPosition->mWidth.GetCoordValue();
       return val;
     }
   }
 
@@ -2779,17 +2779,17 @@ nsTreeBodyFrame::BuildDisplayList(nsDisp
       bool isSelected;
       selection->IsSelected(i, &isSelected);
       if (isSelected) {
         PrefillPropertyArray(i, nullptr);
         nsAutoString properties;
         mView->GetRowProperties(i, properties);
         nsTreeUtils::TokenizeProperties(properties, mScratchArray);
         ComputedStyle* rowContext =
-          GetPseudoComputedStyle(nsCSSAnonBoxes::mozTreeRow());
+          GetPseudoComputedStyle(nsCSSAnonBoxes::mozTreeRow);
         auto appearance = rowContext->StyleDisplay()->mAppearance;
         if (appearance != StyleAppearance::None) {
           if (theme->ThemeSupportsWidget(PresContext(), this, appearance)) {
             nsITheme::ThemeGeometryType type =
               theme->ThemeGeometryTypeForWidget(this, appearance);
             if (type != nsITheme::eThemeGeometryTypeUnknown) {
               nsRect rowRect(mInnerBox.x, mInnerBox.y + mRowHeight *
                              (i - FirstVisibleRow()), mInnerBox.width,
@@ -2903,17 +2903,17 @@ nsTreeBodyFrame::PaintColumn(nsTreeColum
   // Now obtain the properties for our cell.
   PrefillPropertyArray(-1, aColumn);
   nsAutoString properties;
   mView->GetColumnProperties(aColumn, properties);
   nsTreeUtils::TokenizeProperties(properties, mScratchArray);
 
   // Resolve style for the column.  It contains all the info we need to lay ourselves
   // out and to paint.
-  ComputedStyle* colContext = GetPseudoComputedStyle(nsCSSAnonBoxes::mozTreeColumn());
+  ComputedStyle* colContext = GetPseudoComputedStyle(nsCSSAnonBoxes::mozTreeColumn);
 
   // Obtain the margins for the cell and then deflate our rect by that
   // amount.  The cell is assumed to be contained within the deflated rect.
   nsRect colRect(aColumnRect);
   nsMargin colMargin;
   colContext->StyleMargin()->GetMargin(colMargin);
   colRect.Deflate(colMargin);
 
@@ -2945,17 +2945,17 @@ nsTreeBodyFrame::PaintRow(int32_t       
   PrefillPropertyArray(aRowIndex, nullptr);
 
   nsAutoString properties;
   mView->GetRowProperties(aRowIndex, properties);
   nsTreeUtils::TokenizeProperties(properties, mScratchArray);
 
   // Resolve style for the row.  It contains all the info we need to lay ourselves
   // out and to paint.
-  ComputedStyle* rowContext = GetPseudoComputedStyle(nsCSSAnonBoxes::mozTreeRow());
+  ComputedStyle* rowContext = GetPseudoComputedStyle(nsCSSAnonBoxes::mozTreeRow);
 
   // Obtain the margins for the row and then deflate our rect by that
   // amount.  The row is assumed to be contained within the deflated rect.
   nsRect rowRect(aRowRect);
   nsMargin rowMargin;
   rowContext->StyleMargin()->GetMargin(rowMargin);
   rowRect.Deflate(rowMargin);
 
@@ -3085,17 +3085,17 @@ nsTreeBodyFrame::PaintRow(int32_t       
 ImgDrawResult
 nsTreeBodyFrame::PaintSeparator(int32_t              aRowIndex,
                                 const nsRect&        aSeparatorRect,
                                 nsPresContext*      aPresContext,
                                 gfxContext&          aRenderingContext,
                                 const nsRect&        aDirtyRect)
 {
   // Resolve style for the separator.
-  ComputedStyle* separatorContext = GetPseudoComputedStyle(nsCSSAnonBoxes::mozTreeSeparator());
+  ComputedStyle* separatorContext = GetPseudoComputedStyle(nsCSSAnonBoxes::mozTreeSeparator);
   bool useTheme = false;
   nsITheme *theme = nullptr;
   const nsStyleDisplay* displayData = separatorContext->StyleDisplay();
   if (displayData->HasAppearance()) {
     theme = aPresContext->GetTheme();
     if (theme && theme->ThemeSupportsWidget(aPresContext, nullptr, displayData->mAppearance))
       useTheme = true;
   }
@@ -3156,17 +3156,17 @@ nsTreeBodyFrame::PaintCell(int32_t      
   // XXX Automatically fill in the following props: open, closed, container, leaf, selected, focused, and the col ID.
   PrefillPropertyArray(aRowIndex, aColumn);
   nsAutoString properties;
   mView->GetCellProperties(aRowIndex, aColumn, properties);
   nsTreeUtils::TokenizeProperties(properties, mScratchArray);
 
   // Resolve style for the cell.  It contains all the info we need to lay ourselves
   // out and to paint.
-  ComputedStyle* cellContext = GetPseudoComputedStyle(nsCSSAnonBoxes::mozTreeCell());
+  ComputedStyle* cellContext = GetPseudoComputedStyle(nsCSSAnonBoxes::mozTreeCell);
 
   bool isRTL = StyleVisibility()->mDirection == NS_STYLE_DIRECTION_RTL;
 
   // Obtain the margins for the cell and then deflate our rect by that
   // amount.  The cell is assumed to be contained within the deflated rect.
   nsRect cellRect(aCellRect);
   nsMargin cellMargin;
   cellContext->StyleMargin()->GetMargin(cellMargin);
@@ -3195,26 +3195,26 @@ nsTreeBodyFrame::PaintCell(int32_t      
     int32_t level;
     mView->GetLevel(aRowIndex, &level);
 
     if (!isRTL)
       currX += mIndentation * level;
     remainingWidth -= mIndentation * level;
 
     // Resolve the style to use for the connecting lines.
-    ComputedStyle* lineContext = GetPseudoComputedStyle(nsCSSAnonBoxes::mozTreeLine());
+    ComputedStyle* lineContext = GetPseudoComputedStyle(nsCSSAnonBoxes::mozTreeLine);
 
     if (mIndentation && level &&
         lineContext->StyleVisibility()->IsVisibleOrCollapsed()) {
       // Paint the thread lines.
 
       // Get the size of the twisty. We don't want to paint the twisty
       // before painting of connecting lines since it would paint lines over
       // the twisty. But we need to leave a place for it.
-      ComputedStyle* twistyContext = GetPseudoComputedStyle(nsCSSAnonBoxes::mozTreeTwisty());
+      ComputedStyle* twistyContext = GetPseudoComputedStyle(nsCSSAnonBoxes::mozTreeTwisty);
 
       nsRect imageSize;
       nsRect twistyRect(aCellRect);
       GetTwistyRect(aRowIndex, aColumn, imageSize, twistyRect, aPresContext,
                     twistyContext);
 
       nsMargin twistyMargin;
       twistyContext->StyleMargin()->GetMargin(twistyMargin);
@@ -3347,17 +3347,17 @@ nsTreeBodyFrame::PaintTwisty(int32_t    
   if (isContainer) {
     bool isContainerEmpty = false;
     mView->IsContainerEmpty(aRowIndex, &isContainerEmpty);
     if (!isContainerEmpty)
       shouldPaint = true;
   }
 
   // Resolve style for the twisty.
-  ComputedStyle* twistyContext = GetPseudoComputedStyle(nsCSSAnonBoxes::mozTreeTwisty());
+  ComputedStyle* twistyContext = GetPseudoComputedStyle(nsCSSAnonBoxes::mozTreeTwisty);
 
   // Obtain the margins for the twisty and then deflate our rect by that
   // amount.  The twisty is assumed to be contained within the deflated rect.
   nsRect twistyRect(aTwistyRect);
   nsMargin twistyMargin;
   twistyContext->StyleMargin()->GetMargin(twistyMargin);
   twistyRect.Deflate(twistyMargin);
 
@@ -3443,17 +3443,17 @@ nsTreeBodyFrame::PaintImage(int32_t     
                             nscoord&              aCurrX,
                             nsDisplayListBuilder* aBuilder)
 {
   MOZ_ASSERT(aColumn && aColumn->GetFrame(), "invalid column passed");
 
   bool isRTL = StyleVisibility()->mDirection == NS_STYLE_DIRECTION_RTL;
   nscoord rightEdge = aCurrX + aRemainingWidth;
   // Resolve style for the image.
-  ComputedStyle* imageContext = GetPseudoComputedStyle(nsCSSAnonBoxes::mozTreeImage());
+  ComputedStyle* imageContext = GetPseudoComputedStyle(nsCSSAnonBoxes::mozTreeImage);
 
   // Obtain opacity value for the image.
   float opacity = imageContext->StyleEffects()->mOpacity;
 
   // Obtain the margins for the image and then deflate our rect by that
   // amount.  The image is assumed to be contained within the deflated rect.
   nsRect imageRect(aImageRect);
   nsMargin imageMargin;
@@ -3641,17 +3641,17 @@ nsTreeBodyFrame::PaintText(int32_t      
     return result;
   }
 
   int32_t appUnitsPerDevPixel = PresContext()->AppUnitsPerDevPixel();
   DrawTarget* drawTarget = aRenderingContext.GetDrawTarget();
 
   // Resolve style for the text.  It contains all the info we need to lay ourselves
   // out and to paint.
-  ComputedStyle* textContext = GetPseudoComputedStyle(nsCSSAnonBoxes::mozTreeCellText());
+  ComputedStyle* textContext = GetPseudoComputedStyle(nsCSSAnonBoxes::mozTreeCellText);
 
   // Obtain opacity value for the image.
   float opacity = textContext->StyleEffects()->mOpacity;
 
   // Obtain the margins for the text and then deflate our rect by that
   // amount.  The text is assumed to be contained within the deflated rect.
   nsRect textRect(aTextRect);
   nsMargin textMargin;
@@ -3717,17 +3717,17 @@ nsTreeBodyFrame::PaintText(int32_t      
   }
   if (decorations & NS_STYLE_TEXT_DECORATION_LINE_LINE_THROUGH) {
     fontMet->GetStrikeout(offset, size);
     nsRect r(textRect.x, textRect.y + baseline - offset, textRect.width, size);
     Rect devPxRect =
       NSRectToSnappedRect(r, appUnitsPerDevPixel, *drawTarget);
     drawTarget->FillRect(devPxRect, color);
   }
-  ComputedStyle* cellContext = GetPseudoComputedStyle(nsCSSAnonBoxes::mozTreeCell());
+  ComputedStyle* cellContext = GetPseudoComputedStyle(nsCSSAnonBoxes::mozTreeCell);
 
   if (opacity != 1.0f) {
     aRenderingContext.PushGroupForBlendBack(gfxContentType::COLOR_ALPHA, opacity);
   }
 
   aRenderingContext.SetColor(Color::FromABGR(textContext->StyleColor()->mColor));
   nsLayoutUtils::DrawString(this, *fontMet, &aRenderingContext, text.get(),
                             text.Length(),
@@ -3747,17 +3747,17 @@ nsTreeBodyFrame::PaintCheckbox(int32_t  
                                const nsRect&        aCheckboxRect,
                                nsPresContext*      aPresContext,
                                gfxContext&          aRenderingContext,
                                const nsRect&        aDirtyRect)
 {
   MOZ_ASSERT(aColumn && aColumn->GetFrame(), "invalid column passed");
 
   // Resolve style for the checkbox.
-  ComputedStyle* checkboxContext = GetPseudoComputedStyle(nsCSSAnonBoxes::mozTreeCheckbox());
+  ComputedStyle* checkboxContext = GetPseudoComputedStyle(nsCSSAnonBoxes::mozTreeCheckbox);
 
   nscoord rightEdge = aCheckboxRect.XMost();
 
   // Obtain the margins for the checkbox and then deflate our rect by that
   // amount.  The checkbox is assumed to be contained within the deflated rect.
   nsRect checkboxRect(aCheckboxRect);
   nsMargin checkboxMargin;
   checkboxContext->StyleMargin()->GetMargin(checkboxMargin);
@@ -3838,17 +3838,17 @@ nsTreeBodyFrame::PaintDropFeedback(const
     currX += aPt.x - mHorzPosition;
   } else {
     currX = aDropFeedbackRect.x;
   }
 
   PrefillPropertyArray(mSlots->mDropRow, primaryCol);
 
   // Resolve the style to use for the drop feedback.
-  ComputedStyle* feedbackContext = GetPseudoComputedStyle(nsCSSAnonBoxes::mozTreeDropFeedback());
+  ComputedStyle* feedbackContext = GetPseudoComputedStyle(nsCSSAnonBoxes::mozTreeDropFeedback);
 
   ImgDrawResult result = ImgDrawResult::SUCCESS;
 
   // Paint only if it is visible.
   if (feedbackContext->StyleVisibility()->IsVisibleOrCollapsed()) {
     int32_t level;
     mView->GetLevel(mSlots->mDropRow, &level);
 
@@ -3869,17 +3869,17 @@ nsTreeBodyFrame::PaintDropFeedback(const
         if (nextLevel > level)
           level = nextLevel;
       }
     }
 
     currX += mIndentation * level;
 
     if (primaryCol){
-      ComputedStyle* twistyContext = GetPseudoComputedStyle(nsCSSAnonBoxes::mozTreeTwisty());
+      ComputedStyle* twistyContext = GetPseudoComputedStyle(nsCSSAnonBoxes::mozTreeTwisty);
       nsRect imageSize;
       nsRect twistyRect;
       GetTwistyRect(mSlots->mDropRow, primaryCol, imageSize, twistyRect,
                     aPresContext, twistyContext);
       nsMargin twistyMargin;
       twistyContext->StyleMargin()->GetMargin(twistyMargin);
       twistyRect.Inflate(twistyMargin);
       currX += twistyRect.width;
--- a/servo/components/style/gecko/pseudo_element_definition.mako.rs
+++ b/servo/components/style/gecko/pseudo_element_definition.mako.rs
@@ -3,19 +3,19 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 /// Gecko's pseudo-element definition.
 #[derive(Clone, Debug, Eq, Hash, MallocSizeOf, PartialEq)]
 pub enum PseudoElement {
     % for pseudo in PSEUDOS:
         /// ${pseudo.value}
         % if pseudo.is_tree_pseudo_element():
-        ${pseudo.capitalized_pseudo()}(ThinBoxedSlice<Atom>),
+        ${pseudo.capitalized()}(ThinBoxedSlice<Atom>),
         % else:
-        ${pseudo.capitalized_pseudo()},
+        ${pseudo.capitalized()},
         % endif
     % endfor
 }
 
 /// Important: If you change this, you should also update Gecko's
 /// nsCSSPseudoElements::IsEagerlyCascadedInServo.
 <% EAGER_PSEUDOS = ["Before", "After", "FirstLine", "FirstLetter"] %>
 <% TREE_PSEUDOS = [pseudo for pseudo in PSEUDOS if pseudo.is_tree_pseudo_element()] %>
@@ -36,17 +36,17 @@ pub const PSEUDO_COUNT: usize = ${len(PS
 /// The list of eager pseudos.
 pub const EAGER_PSEUDOS: [PseudoElement; EAGER_PSEUDO_COUNT] = [
     % for eager_pseudo_name in EAGER_PSEUDOS:
     PseudoElement::${eager_pseudo_name},
     % endfor
 ];
 
 <%def name="pseudo_element_variant(pseudo, tree_arg='..')">\
-PseudoElement::${pseudo.capitalized_pseudo()}${"({})".format(tree_arg) if pseudo.is_tree_pseudo_element() else ""}\
+PseudoElement::${pseudo.capitalized()}${"({})".format(tree_arg) if pseudo.is_tree_pseudo_element() else ""}\
 </%def>
 
 impl PseudoElement {
     /// Get the pseudo-element as an atom.
     #[inline]
     pub fn atom(&self) -> Atom {
         match *self {
             % for pseudo in PSEUDOS:
@@ -115,68 +115,68 @@ impl PseudoElement {
                     if unsafe { structs::StaticPrefs_sVarCache_layout_css_xul_tree_pseudos_content_enabled } {
                         0
                     } else {
                         structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS_AND_CHROME
                     },
                 % elif pseudo.is_anon_box():
                     structs::CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS,
                 % else:
-                    structs::SERVO_CSS_PSEUDO_ELEMENT_FLAGS_${pseudo.pseudo_ident},
+                    structs::SERVO_CSS_PSEUDO_ELEMENT_FLAGS_${pseudo.original_ident},
                 % endif
             % endfor
         }
     }
 
     /// Construct a pseudo-element from a `CSSPseudoElementType`.
     #[inline]
     pub fn from_pseudo_type(type_: CSSPseudoElementType) -> Option<Self> {
         match type_ {
             % for pseudo in PSEUDOS:
                 % if not pseudo.is_anon_box():
-                    CSSPseudoElementType::${pseudo.pseudo_ident} => {
+                    CSSPseudoElementType::${pseudo.original_ident} => {
                         Some(${pseudo_element_variant(pseudo)})
                     },
                 % endif
             % endfor
             _ => None,
         }
     }
 
     /// Construct a `CSSPseudoElementType` from a pseudo-element
     #[inline]
     pub fn pseudo_type(&self) -> CSSPseudoElementType {
         use gecko_bindings::structs::CSSPseudoElementType_InheritingAnonBox;
 
         match *self {
             % for pseudo in PSEUDOS:
                 % if not pseudo.is_anon_box():
-                    PseudoElement::${pseudo.capitalized_pseudo()} => CSSPseudoElementType::${pseudo.pseudo_ident},
+                    PseudoElement::${pseudo.capitalized()} => CSSPseudoElementType::${pseudo.original_ident},
                 % elif pseudo.is_tree_pseudo_element():
-                    PseudoElement::${pseudo.capitalized_pseudo()}(..) => CSSPseudoElementType::XULTree,
+                    PseudoElement::${pseudo.capitalized()}(..) => CSSPseudoElementType::XULTree,
                 % elif pseudo.is_inheriting_anon_box():
-                    PseudoElement::${pseudo.capitalized_pseudo()} => CSSPseudoElementType_InheritingAnonBox,
+                    PseudoElement::${pseudo.capitalized()} => CSSPseudoElementType_InheritingAnonBox,
                 % else:
-                    PseudoElement::${pseudo.capitalized_pseudo()} => CSSPseudoElementType::NonInheritingAnonBox,
+                    PseudoElement::${pseudo.capitalized()} => CSSPseudoElementType::NonInheritingAnonBox,
                 % endif
             % endfor
         }
     }
 
     /// Get a PseudoInfo for a pseudo
     pub fn pseudo_info(&self) -> (*mut structs::nsAtom, CSSPseudoElementType) {
         (self.atom().as_ptr(), self.pseudo_type())
     }
 
     /// Get the argument list of a tree pseudo-element.
     #[inline]
     pub fn tree_pseudo_args(&self) -> Option<<&[Atom]> {
         match *self {
             % for pseudo in TREE_PSEUDOS:
-            PseudoElement::${pseudo.capitalized_pseudo()}(ref args) => Some(args),
+            PseudoElement::${pseudo.capitalized()}(ref args) => Some(args),
             % endfor
             _ => None,
         }
     }
 
     /// Construct a pseudo-element from an `Atom`.
     #[inline]
     pub fn from_atom(atom: &Atom) -> Option<Self> {
@@ -208,17 +208,17 @@ impl PseudoElement {
     }
 
     /// Construct a tree pseudo-element from atom and args.
     #[inline]
     pub fn from_tree_pseudo_atom(atom: &Atom, args: Box<[Atom]>) -> Option<Self> {
         % for pseudo in PSEUDOS:
             % if pseudo.is_tree_pseudo_element():
                 if atom == &atom!("${pseudo.value}") {
-                    return Some(PseudoElement::${pseudo.capitalized_pseudo()}(args.into()));
+                    return Some(PseudoElement::${pseudo.capitalized()}(args.into()));
                 }
             % endif
         % endfor
         None
     }
 
     /// Constructs a pseudo-element from a string of text.
     ///
--- a/servo/components/style/gecko/regen_atoms.py
+++ b/servo/components/style/gecko/regen_atoms.py
@@ -15,104 +15,125 @@ sys.path.insert(0, os.path.join(os.path.
 
 import build
 
 PRELUDE = """
 /* 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/. */
 
-/* Autogenerated file created by components/style/gecko/regen_atoms.py, DO NOT EDIT DIRECTLY */
+/* Autogenerated file created by components/style/gecko/binding_tools/regen_atoms.py, DO NOT EDIT DIRECTLY */
 """[1:]   # NOQA: E501
 
 
-# Matches lines like `GK_ATOM(foo, "foo", 0x12345678, nsStaticAtom, PseudoElementAtom)`.
-PATTERN = re.compile('^GK_ATOM\(([^,]*),[^"]*"([^"]*)",\s*(0x[0-9a-f]+),\s*([^,]*),\s*([^)]*)\)',
-                     re.MULTILINE)
-FILE = "include/nsGkAtomList.h"
-CLASS = "nsGkAtoms"
+def gnu_symbolify(source, ident):
+    return "_ZN{}{}{}{}E".format(len(source.CLASS), source.CLASS, len(ident), ident)
+
+
+def msvc64_symbolify(source, ident):
+    return "?{}@{}@@2PEAV{}@@EA".format(ident, source.CLASS, source.TYPE)
+
+
+def msvc32_symbolify(source, ident):
+    # Prepend "\x01" to avoid LLVM prefixing the mangled name with "_".
+    # See https://github.com/rust-lang/rust/issues/36097
+    return "\\x01?{}@{}@@2PAV{}@@A".format(ident, source.CLASS, source.TYPE)
+
+
+class GkAtomSource:
+    PATTERN = re.compile('^(GK_ATOM)\(([^,]*),[^"]*"([^"]*)"\)',
+                         re.MULTILINE)
+    FILE = "include/nsGkAtomList.h"
+    CLASS = "nsGkAtoms"
+    TYPE = "nsStaticAtom"
 
 
-def gnu_symbolify(ident):
-    return "_ZN{}{}{}{}E".format(len(CLASS), CLASS, len(ident), ident)
+class CSSPseudoElementsAtomSource:
+    PATTERN = re.compile('^(CSS_PSEUDO_ELEMENT)\(([^,]*),[^"]*"([^"]*)",',
+                         re.MULTILINE)
+    FILE = "include/nsCSSPseudoElementList.h"
+    CLASS = "nsCSSPseudoElements"
+    # NB: nsICSSPseudoElement is effectively the same as a nsStaticAtom, but we need
+    # this for MSVC name mangling.
+    TYPE = "nsICSSPseudoElement"
 
 
-def msvc64_symbolify(ident, ty):
-    return "?{}@{}@@2PEAV{}@@EA".format(ident, CLASS, ty)
+class CSSAnonBoxesAtomSource:
+    PATTERN = re.compile('^(CSS_ANON_BOX|CSS_NON_INHERITING_ANON_BOX|CSS_WRAPPER_ANON_BOX)\(([^,]*),[^"]*"([^"]*)"\)',  # NOQA: E501
+                         re.MULTILINE)
+    FILE = "include/nsCSSAnonBoxList.h"
+    CLASS = "nsCSSAnonBoxes"
+    TYPE = "nsICSSAnonBoxPseudo"
 
 
-def msvc32_symbolify(ident, ty):
-    # Prepend "\x01" to avoid LLVM prefixing the mangled name with "_".
-    # See https://github.com/rust-lang/rust/issues/36097
-    return "\\x01?{}@{}@@2PAV{}@@A".format(ident, CLASS, ty)
+SOURCES = [
+    GkAtomSource,
+    CSSPseudoElementsAtomSource,
+    CSSAnonBoxesAtomSource,
+]
 
 
 def map_atom(ident):
     if ident in {"box", "loop", "match", "mod", "ref",
                  "self", "type", "use", "where", "in"}:
         return ident + "_"
     return ident
 
 
 class Atom:
-    def __init__(self, ident, value, hash, ty, atom_type):
-        self.ident = "{}_{}".format(CLASS, ident)
+    def __init__(self, source, macro_name, ident, value):
+        self.ident = "{}_{}".format(source.CLASS, ident)
         self.original_ident = ident
         self.value = value
-        self.hash = hash
-        # The Gecko type: "nsStaticAtom", "nsICSSPseudoElement", or "nsIAnonBoxPseudo"
-        self.ty = ty
-        # The type of atom: "Atom", "PseudoElement", "NonInheritingAnonBox",
-        # or "InheritingAnonBox"
-        self.atom_type = atom_type
-        if self.is_pseudo() or self.is_anon_box():
-            self.pseudo_ident = (ident.split("_", 1))[1]
+        self.source = source
+        self.macro = macro_name
         if self.is_anon_box():
             assert self.is_inheriting_anon_box() or self.is_non_inheriting_anon_box()
 
+    def cpp_class(self):
+        return self.source.CLASS
+
     def gnu_symbol(self):
-        return gnu_symbolify(self.original_ident)
+        return gnu_symbolify(self.source, self.original_ident)
 
     def msvc32_symbol(self):
-        return msvc32_symbolify(self.original_ident, self.ty)
+        return msvc32_symbolify(self.source, self.original_ident)
 
     def msvc64_symbol(self):
-        return msvc64_symbolify(self.original_ident, self.ty)
+        return msvc64_symbolify(self.source, self.original_ident)
 
     def type(self):
-        return self.ty
+        return self.source.TYPE
 
-    def capitalized_pseudo(self):
-        return self.pseudo_ident[0].upper() + self.pseudo_ident[1:]
-
-    def is_pseudo(self):
-        return self.atom_type == "PseudoElementAtom"
+    def capitalized(self):
+        return self.original_ident[0].upper() + self.original_ident[1:]
 
     def is_anon_box(self):
-        return self.is_non_inheriting_anon_box() or self.is_inheriting_anon_box()
+        return self.type() == "nsICSSAnonBoxPseudo"
 
     def is_non_inheriting_anon_box(self):
-        return self.atom_type == "NonInheritingAnonBoxAtom"
+        return self.macro == "CSS_NON_INHERITING_ANON_BOX"
 
     def is_inheriting_anon_box(self):
-        return self.atom_type == "InheritingAnonBoxAtom"
+        return (self.macro == "CSS_ANON_BOX" or
+                self.macro == "CSS_WRAPPER_ANON_BOX")
 
     def is_tree_pseudo_element(self):
         return self.value.startswith(":-moz-tree-")
 
 
 def collect_atoms(objdir):
     atoms = []
-    path = os.path.abspath(os.path.join(objdir, FILE))
-    print("cargo:rerun-if-changed={}".format(path))
-    with open(path) as f:
-        content = f.read()
-        for result in PATTERN.finditer(content):
-            atoms.append(Atom(result.group(1), result.group(2), result.group(3),
-                              result.group(4), result.group(5)))
+    for source in SOURCES:
+        path = os.path.abspath(os.path.join(objdir, source.FILE))
+        print("cargo:rerun-if-changed={}".format(path))
+        with open(path) as f:
+            content = f.read()
+            for result in source.PATTERN.finditer(content):
+                atoms.append(Atom(source, result.group(1), result.group(2), result.group(3)))
     return atoms
 
 
 class FileAvoidWrite(BytesIO):
     """File-like object that buffers output and only writes if content changed."""
     def __init__(self, filename):
         BytesIO.__init__(self)
         self.name = filename
@@ -193,19 +214,19 @@ def write_atom_macro(atoms, file_name):
         return '\n'.join([ATOM_TEMPLATE.format(name=atom.ident,
                                                link_name=func(atom),
                                                type=atom.type()) for atom in atoms])
 
     with FileAvoidWrite(file_name) as f:
         f.write(PRELUDE)
         f.write(IMPORTS)
 
-        for ty in sorted(set([atom.type() for atom in atoms])):
-            if ty != "nsStaticAtom":
-                f.write("pub enum {} {{}}\n\n".format(ty))
+        for source in SOURCES:
+            if source.TYPE != "nsStaticAtom":
+                f.write("pub enum {} {{}}\n\n".format(source.TYPE))
 
         f.write(UNSAFE_STATIC)
 
         gnu_symbols = get_symbols(Atom.gnu_symbol)
         msvc32_symbols = get_symbols(Atom.msvc32_symbol)
         msvc64_symbols = get_symbols(Atom.msvc64_symbol)
         f.write(CFG_IF.format(gnu=gnu_symbols, msvc32=msvc32_symbols, msvc64=msvc64_symbols))
 
deleted file mode 100644
--- a/xpcom/ds/Atom.py
+++ /dev/null
@@ -1,54 +0,0 @@
-# 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/.
-
-
-class Atom():
-    def __init__(self, ident, string, ty="nsStaticAtom"):
-        self.ident = ident
-        self.string = string
-        self.ty = ty
-        self.atom_type = self.__class__.__name__
-        self.hash = hash_string(string)
-
-
-class PseudoElementAtom(Atom):
-    def __init__(self, ident, string):
-        Atom.__init__(self, ident, string, ty="nsICSSPseudoElement")
-
-
-class AnonBoxAtom(Atom):
-    def __init__(self, ident, string):
-        Atom.__init__(self, ident, string, ty="nsICSSAnonBoxPseudo")
-
-
-class NonInheritingAnonBoxAtom(AnonBoxAtom):
-    def __init__(self, ident, string):
-        AnonBoxAtom.__init__(self, ident, string)
-
-
-class InheritingAnonBoxAtom(AnonBoxAtom):
-    def __init__(self, ident, string):
-        AnonBoxAtom.__init__(self, ident, string)
-
-
-GOLDEN_RATIO_U32 = 0x9E3779B9
-
-
-def rotate_left_5(value):
-    return ((value << 5) | (value >> 27)) & 0xFFFFFFFF
-
-
-def wrapping_multiply(x, y):
-    return (x * y) & 0xFFFFFFFF
-
-
-# Calculate the precomputed hash of the static atom. This is a port of
-# mozilla::HashString(const char16_t*), which is what we use for atomizing
-# strings. An assertion in nsAtomTable::RegisterStaticAtoms ensures that
-# the value we compute here matches what HashString() would produce.
-def hash_string(s):
-    h = 0
-    for c in s:
-        h = wrapping_multiply(GOLDEN_RATIO_U32, rotate_left_5(h) ^ ord(c))
-    return h
deleted file mode 100644
--- a/xpcom/ds/HTMLAtoms.py
+++ /dev/null
@@ -1,259 +0,0 @@
-# THIS FILE IS GENERATED BY THE HTML PARSER TRANSLATOR AND WILL BE OVERWRITTEN!
-from Atom import Atom
-
-HTML_PARSER_ATOMS = [
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("xlink", "xlink"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("xml_space", "xml:space"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("xml_lang", "xml:lang"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("xml_base", "xml:base"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("aria_grab", "aria-grab"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("aria_channel", "aria-channel"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("aria_secret", "aria-secret"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("aria_templateid", "aria-templateid"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("aria_datatype", "aria-datatype"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("local", "local"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("xchannelselector", "xchannelselector"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("ychannelselector", "ychannelselector"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("enable_background", "enable-background"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("calcmode", "calcmode"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("specularexponent", "specularexponent"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("specularconstant", "specularconstant"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("gradienttransform", "gradienttransform"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("gradientunits", "gradientunits"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("rendering_intent", "rendering-intent"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("stddeviation", "stddeviation"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("basefrequency", "basefrequency"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("baseprofile", "baseprofile"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("baseProfile", "baseProfile"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("edgemode", "edgemode"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("repeatcount", "repeatcount"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("repeatdur", "repeatdur"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("spreadmethod", "spreadmethod"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("diffuseconstant", "diffuseconstant"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("surfacescale", "surfacescale"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("lengthadjust", "lengthadjust"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("origin", "origin"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("targetx", "targetx"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("targety", "targety"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("pathlength", "pathlength"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("definitionurl", "definitionurl"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("limitingconeangle", "limitingconeangle"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("markerheight", "markerheight"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("markerwidth", "markerwidth"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("maskunits", "maskunits"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("markerunits", "markerunits"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("maskcontentunits", "maskcontentunits"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("tablevalues", "tablevalues"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("primitiveunits", "primitiveunits"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("zoomandpan", "zoomandpan"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("kernelmatrix", "kernelmatrix"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("kerning", "kerning"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("kernelunitlength", "kernelunitlength"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("pointsatx", "pointsatx"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("pointsaty", "pointsaty"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("pointsatz", "pointsatz"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("xlink_href", "xlink:href"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("xlink_title", "xlink:title"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("xlink_role", "xlink:role"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("xlink_arcrole", "xlink:arcrole"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("arcrole", "arcrole"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("xmlns_xlink", "xmlns:xlink"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("xlink_type", "xlink:type"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("xlink_show", "xlink:show"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("xlink_actuate", "xlink:actuate"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("color_rendering", "color-rendering"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("numoctaves", "numoctaves"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("onmousewheel", "onmousewheel"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("clippathunits", "clippathunits"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("glyph_orientation_vertical", "glyph-orientation-vertical"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("glyph_orientation_horizontal", "glyph-orientation-horizontal"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("glyphref", "glyphref"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("keypoints", "keypoints"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("attributename", "attributename"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("attributetype", "attributetype"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("startoffset", "startoffset"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("keysplines", "keysplines"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("preservealpha", "preservealpha"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("preserveaspectratio", "preserveaspectratio"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("alttext", "alttext"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("filterunits", "filterunits"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("keytimes", "keytimes"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("patterntransform", "patterntransform"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("patternunits", "patternunits"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("patterncontentunits", "patterncontentunits"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("stitchtiles", "stitchtiles"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("systemlanguage", "systemlanguage"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("textlength", "textlength"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("requiredfeatures", "requiredfeatures"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("requiredextensions", "requiredextensions"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("viewtarget", "viewtarget"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("viewbox", "viewbox"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("refx", "refx"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("refy", "refy"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("fefunca", "fefunca"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("fefuncb", "fefuncb"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("feblend", "feblend"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("feflood", "feflood"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("feturbulence", "feturbulence"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("femergenode", "femergenode"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("feimage", "feimage"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("femerge", "femerge"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("fetile", "fetile"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("fecomposite", "fecomposite"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("altglyphdef", "altglyphdef"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("altGlyphDef", "altGlyphDef"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("fefuncg", "fefuncg"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("fediffuselighting", "fediffuselighting"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("fespecularlighting", "fespecularlighting"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("altglyph", "altglyph"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("altGlyph", "altGlyph"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("clippath", "clippath"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("textpath", "textpath"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("altglyphitem", "altglyphitem"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("altGlyphItem", "altGlyphItem"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("animatetransform", "animatetransform"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("animatemotion", "animatemotion"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("fedisplacementmap", "fedisplacementmap"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("animatecolor", "animatecolor"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("fefuncr", "fefuncr"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("fecomponenttransfer", "fecomponenttransfer"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("fegaussianblur", "fegaussianblur"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("foreignobject", "foreignobject"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("feoffset", "feoffset"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("fespotlight", "fespotlight"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("fepointlight", "fepointlight"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("fedistantlight", "fedistantlight"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("lineargradient", "lineargradient"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("radialgradient", "radialgradient"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("fedropshadow", "fedropshadow"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("fecolormatrix", "fecolormatrix"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("feconvolvematrix", "feconvolvematrix"),
-    # ATOM GENERATED BY HTML PARSER TRANSLATOR (WILL BE AUTOMATICALLY OVERWRITTEN):
-    Atom("femorphology", "femorphology"),
-]
deleted file mode 100644
--- a/xpcom/ds/StaticAtoms.py
+++ /dev/null
@@ -1,2384 +0,0 @@
-# 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/.
-
-# flake8: noqa
-
-from Atom import Atom, InheritingAnonBoxAtom, NonInheritingAnonBoxAtom
-from Atom import PseudoElementAtom
-from HTMLAtoms import HTML_PARSER_ATOMS
-import sys
-
-# Static atom definitions, used to generate nsGkAtomList.h.
-#
-# Each atom is defined by a call to Atom, PseudoElementAtom,
-# NonInheritingAnonBoxAtom or InheritingAnonBoxAtom.
-#
-# The first argument is the atom's identifier.
-# The second argument is the atom's string value.
-#
-# It is not possible to conditionally define static atoms with #ifdef etc.
-STATIC_ATOMS = [
-    # --------------------------------------------------------------------------
-    # Generic atoms
-    # --------------------------------------------------------------------------
-
-    Atom("_empty", ""),
-    Atom("moz", "_moz"),
-    Atom("mozframetype", "mozframetype"),
-    Atom("_moz_abspos", "_moz_abspos"),
-    Atom("_moz_activated", "_moz_activated"),
-    Atom("_moz_anonclass", "_moz_anonclass"),
-    Atom("_moz_resizing", "_moz_resizing"),
-    Atom("mozallowfullscreen", "mozallowfullscreen"),
-    Atom("moztype", "_moz-type"),
-    Atom("mozdirty", "_moz_dirty"),
-    Atom("mozdisallowselectionprint", "mozdisallowselectionprint"),
-    Atom("mozdonotsend", "moz-do-not-send"),
-    Atom("mozeditorbogusnode", "_moz_editor_bogus_node"),
-    Atom("mozgeneratedcontentbefore", "_moz_generated_content_before"),
-    Atom("mozgeneratedcontentafter", "_moz_generated_content_after"),
-    Atom("mozgeneratedcontentimage", "_moz_generated_content_image"),
-    Atom("mozquote", "_moz_quote"),
-    Atom("mozsignature", "moz-signature"),
-    Atom("_moz_is_glyph", "-moz-is-glyph"),
-    Atom("_moz_original_size", "_moz_original_size"),
-    Atom("menuactive", "_moz-menuactive"),
-    Atom("_poundDefault", "#default"),
-    Atom("_asterisk", "*"),
-    Atom("a", "a"),
-    Atom("abbr", "abbr"),
-    Atom("abort", "abort"),
-    Atom("acceltext", "acceltext"),
-    Atom("accept", "accept"),
-    Atom("acceptcharset", "accept-charset"),
-    Atom("accessiblenode", "accessible-node"),
-    Atom("accesskey", "accesskey"),
-    Atom("acronym", "acronym"),
-    Atom("action", "action"),
-    Atom("active", "active"),
-    Atom("activateontab", "activateontab"),
-    Atom("actuate", "actuate"),
-    Atom("address", "address"),
-    Atom("after", "after"),
-    Atom("align", "align"),
-    Atom("alink", "alink"),
-    Atom("allowdirs", "allowdirs"),
-    Atom("allowevents", "allowevents"),
-    Atom("allowforms", "allow-forms"),
-    Atom("allowfullscreen", "allowfullscreen"),
-    Atom("allowmodals", "allow-modals"),
-    Atom("alloworientationlock", "allow-orientation-lock"),
-    Atom("allowpaymentrequest", "allowpaymentrequest"),
-    Atom("allowpointerlock", "allow-pointer-lock"),
-    Atom("allowpopupstoescapesandbox", "allow-popups-to-escape-sandbox"),
-    Atom("allowpopups", "allow-popups"),
-    Atom("allowpresentation", "allow-presentation"),
-    Atom("allowsameorigin", "allow-same-origin"),
-    Atom("allowscripts", "allow-scripts"),
-    Atom("allowtopnavigation", "allow-top-navigation"),
-    Atom("allowuntrusted", "allowuntrusted"),
-    Atom("alt", "alt"),
-    Atom("alternate", "alternate"),
-    Atom("always", "always"),
-    Atom("ancestor", "ancestor"),
-    Atom("ancestorOrSelf", "ancestor-or-self"),
-    Atom("anchor", "anchor"),
-    Atom("_and", "and"),
-    Atom("animations", "animations"),
-    Atom("anonid", "anonid"),
-    Atom("anonlocation", "anonlocation"),
-    Atom("any", "any"),
-    Atom("applet", "applet"),
-    Atom("applyImports", "apply-imports"),
-    Atom("applyTemplates", "apply-templates"),
-    Atom("archive", "archive"),
-    Atom("area", "area"),
-    Atom("aria_activedescendant", "aria-activedescendant"),
-    Atom("aria_atomic", "aria-atomic"),
-    Atom("aria_autocomplete", "aria-autocomplete"),
-    Atom("aria_busy", "aria-busy"),
-    Atom("aria_checked", "aria-checked"),
-    Atom("aria_controls", "aria-controls"),
-    Atom("aria_current", "aria-current"),
-    Atom("aria_describedby", "aria-describedby"),
-    Atom("aria_disabled", "aria-disabled"),
-    Atom("aria_dropeffect", "aria-dropeffect"),
-    Atom("aria_expanded", "aria-expanded"),
-    Atom("aria_flowto", "aria-flowto"),
-    Atom("aria_haspopup", "aria-haspopup"),
-    Atom("aria_hidden", "aria-hidden"),
-    Atom("aria_invalid", "aria-invalid"),
-    Atom("aria_labelledby", "aria-labelledby"),
-    Atom("aria_level", "aria-level"),
-    Atom("aria_live", "aria-live"),
-    Atom("aria_multiline", "aria-multiline"),
-    Atom("aria_multiselectable", "aria-multiselectable"),
-    Atom("aria_owns", "aria-owns"),
-    Atom("aria_posinset", "aria-posinset"),
-    Atom("aria_pressed", "aria-pressed"),
-    Atom("aria_readonly", "aria-readonly"),
-    Atom("aria_relevant", "aria-relevant"),
-    Atom("aria_required", "aria-required"),
-    Atom("aria_selected", "aria-selected"),
-    Atom("aria_setsize", "aria-setsize"),
-    Atom("aria_sort", "aria-sort"),
-    Atom("aria_valuemax", "aria-valuemax"),
-    Atom("aria_valuemin", "aria-valuemin"),
-    Atom("aria_valuenow", "aria-valuenow"),
-    Atom("arrow", "arrow"),
-    Atom("article", "article"),
-    Atom("as", "as"),
-    Atom("ascending", "ascending"),
-    Atom("aside", "aside"),
-    Atom("aspectRatio", "aspect-ratio"),
-    Atom("async", "async"),
-    Atom("attribute", "attribute"),
-    Atom("attributes", "attributes"),
-    Atom("attributeSet", "attribute-set"),
-    Atom("_auto", "auto"),
-    Atom("autocheck", "autocheck"),
-    Atom("autocomplete", "autocomplete"),
-    Atom("autocomplete_richlistbox", "autocomplete-richlistbox"),
-    Atom("autofocus", "autofocus"),
-    Atom("autoplay", "autoplay"),
-    Atom("axis", "axis"),
-    Atom("b", "b"),
-    Atom("background", "background"),
-    Atom("base", "base"),
-    Atom("basefont", "basefont"),
-    Atom("baseline", "baseline"),
-    Atom("bdi", "bdi"),
-    Atom("bdo", "bdo"),
-    Atom("before", "before"),
-    Atom("bgcolor", "bgcolor"),
-    Atom("bgsound", "bgsound"),
-    Atom("big", "big"),
-    Atom("binding", "binding"),
-    Atom("bindings", "bindings"),
-    Atom("bindToUntrustedContent", "bindToUntrustedContent"),
-    Atom("block", "block"),
-    Atom("blockquote", "blockquote"),
-    Atom("body", "body"),
-    Atom("boolean", "boolean"),
-    Atom("border", "border"),
-    Atom("bordercolor", "bordercolor"),
-    Atom("both", "both"),
-    Atom("bottom", "bottom"),
-    Atom("bottomend", "bottomend"),
-    Atom("bottomstart", "bottomstart"),
-    Atom("bottomleft", "bottomleft"),
-    Atom("bottommargin", "bottommargin"),
-    Atom("bottomright", "bottomright"),
-    Atom("box", "box"),
-    Atom("br", "br"),
-    Atom("browser", "browser"),
-    Atom("mozbrowser", "mozbrowser"),
-    Atom("button", "button"),
-    Atom("brighttitlebarforeground", "brighttitlebarforeground"),
-    Atom("callTemplate", "call-template"),
-    Atom("canvas", "canvas"),
-    Atom("caption", "caption"),
-    Atom("caseOrder", "case-order"),
-    Atom("cdataSectionElements", "cdata-section-elements"),
-    Atom("ceiling", "ceiling"),
-    Atom("cell", "cell"),
-    Atom("cellpadding", "cellpadding"),
-    Atom("cellspacing", "cellspacing"),
-    Atom("center", "center"),
-    Atom("change", "change"),
-    Atom("_char", "char"),
-    Atom("characterData", "characterData"),
-    Atom("charcode", "charcode"),
-    Atom("charoff", "charoff"),
-    Atom("charset", "charset"),
-    Atom("checkbox", "checkbox"),
-    Atom("checked", "checked"),
-    Atom("child", "child"),
-    Atom("children", "children"),
-    Atom("childList", "childList"),
-    Atom("choose", "choose"),
-    Atom("chromemargin", "chromemargin"),
-    Atom("chromeOnlyContent", "chromeOnlyContent"),
-    Atom("exposeToUntrustedContent", "exposeToUntrustedContent"),
-    Atom("circ", "circ"),
-    Atom("circle", "circle"),
-    Atom("cite", "cite"),
-    Atom("cjkDecimal", "cjk-decimal"),
-    Atom("_class", "class"),
-    Atom("classid", "classid"),
-    Atom("clear", "clear"),
-    Atom("click", "click"),
-    Atom("clickcount", "clickcount"),
-    Atom("clickthrough", "clickthrough"),
-    Atom("movetoclick", "movetoclick"),
-    Atom("clip", "clip"),
-    Atom("close", "close"),
-    Atom("closed", "closed"),
-    Atom("closemenu", "closemenu"),
-    Atom("code", "code"),
-    Atom("codebase", "codebase"),
-    Atom("codetype", "codetype"),
-    Atom("col", "col"),
-    Atom("colgroup", "colgroup"),
-    Atom("collapse", "collapse"),
-    Atom("collapsed", "collapsed"),
-    Atom("color", "color"),
-    Atom("colorIndex", "color-index"),
-    Atom("cols", "cols"),
-    Atom("colspan", "colspan"),
-    Atom("combobox", "combobox"),
-    Atom("command", "command"),
-    Atom("commandupdater", "commandupdater"),
-    Atom("comment", "comment"),
-    Atom("compact", "compact"),
-    Atom("concat", "concat"),
-    Atom("constructor", "constructor"),
-    Atom("consumeoutsideclicks", "consumeoutsideclicks"),
-    Atom("container", "container"),
-    Atom("contains", "contains"),
-    Atom("content", "content"),
-    Atom("contenteditable", "contenteditable"),
-    Atom("headerContentDisposition", "content-disposition"),
-    Atom("headerContentLanguage", "content-language"),
-    Atom("contentLocation", "content-location"),
-    Atom("headerContentScriptType", "content-script-type"),
-    Atom("headerContentStyleType", "content-style-type"),
-    Atom("headerContentType", "content-type"),
-    Atom("consumeanchor", "consumeanchor"),
-    Atom("context", "context"),
-    Atom("contextmenu", "contextmenu"),
-    Atom("control", "control"),
-    Atom("controls", "controls"),
-    Atom("coords", "coords"),
-    Atom("copy", "copy"),
-    Atom("copyOf", "copy-of"),
-    Atom("count", "count"),
-    Atom("crop", "crop"),
-    Atom("crossorigin", "crossorigin"),
-    Atom("curpos", "curpos"),
-    Atom("current", "current"),
-    Atom("cutoutregion", "cutoutregion"),
-    Atom("cycler", "cycler"),
-    Atom("data", "data"),
-    Atom("datalist", "datalist"),
-    Atom("datal10nid", "data-l10n-id"),
-    Atom("datal10nargs", "data-l10n-args"),
-    Atom("datal10nattrs", "data-l10n-attrs"),
-    Atom("dataType", "data-type"),
-    Atom("dateTime", "date-time"),
-    Atom("date", "date"),
-    Atom("datetime", "datetime"),
-    Atom("datetimebox", "datetimebox"),
-    Atom("dd", "dd"),
-    Atom("decimal", "decimal"),
-    Atom("decimalFormat", "decimal-format"),
-    Atom("decimalSeparator", "decimal-separator"),
-    Atom("declare", "declare"),
-    Atom("decoderDoctor", "decoder-doctor"),
-    Atom("decoding", "decoding"),
-    Atom("decrement", "decrement"),
-    Atom("_default", "default"),
-    Atom("headerDefaultStyle", "default-style"),
-    Atom("defer", "defer"),
-    Atom("del", "del"),
-    Atom("descendant", "descendant"),
-    Atom("descendantOrSelf", "descendant-or-self"),
-    Atom("descending", "descending"),
-    Atom("description", "description"),
-    Atom("destructor", "destructor"),
-    Atom("details", "details"),
-    Atom("deviceAspectRatio", "device-aspect-ratio"),
-    Atom("deviceHeight", "device-height"),
-    Atom("devicePixelRatio", "device-pixel-ratio"),
-    Atom("deviceWidth", "device-width"),
-    Atom("dfn", "dfn"),
-    Atom("dialog", "dialog"),
-    Atom("difference", "difference"),
-    Atom("digit", "digit"),
-    Atom("dir", "dir"),
-    Atom("dirAutoSetBy", "dirAutoSetBy"),
-    Atom("directory", "directory"),
-    Atom("disableOutputEscaping", "disable-output-escaping"),
-    Atom("disabled", "disabled"),
-    Atom("disableglobalhistory", "disableglobalhistory"),
-    Atom("disablehistory", "disablehistory"),
-    Atom("disablefullscreen", "disablefullscreen"),
-    Atom("disclosure_closed", "disclosure-closed"),
-    Atom("disclosure_open", "disclosure-open"),
-    Atom("display", "display"),
-    Atom("displayMode", "display-mode"),
-    Atom("distinct", "distinct"),
-    Atom("div", "div"),
-    Atom("dl", "dl"),
-    Atom("docAbstract", "doc-abstract"),
-    Atom("docAcknowledgments", "doc-acknowledgments"),
-    Atom("docAfterword", "doc-afterword"),
-    Atom("docAppendix", "doc-appendix"),
-    Atom("docBacklink", "doc-backlink"),
-    Atom("docBiblioentry", "doc-biblioentry"),
-    Atom("docBibliography", "doc-bibliography"),
-    Atom("docBiblioref", "doc-biblioref"),
-    Atom("docChapter", "doc-chapter"),
-    Atom("docColophon", "doc-colophon"),
-    Atom("docConclusion", "doc-conclusion"),
-    Atom("docCover", "doc-cover"),
-    Atom("docCredit", "doc-credit"),
-    Atom("docCredits", "doc-credits"),
-    Atom("docDedication", "doc-dedication"),
-    Atom("docEndnote", "doc-endnote"),
-    Atom("docEndnotes", "doc-endnotes"),
-    Atom("docEpigraph", "doc-epigraph"),
-    Atom("docEpilogue", "doc-epilogue"),
-    Atom("docErrata", "doc-errata"),
-    Atom("docExample", "doc-example"),
-    Atom("docFootnote", "doc-footnote"),
-    Atom("docForeword", "doc-foreword"),
-    Atom("docGlossary", "doc-glossary"),
-    Atom("docGlossref", "doc-glossref"),
-    Atom("docIndex", "doc-index"),
-    Atom("docIntroduction", "doc-introduction"),
-    Atom("docNoteref", "doc-noteref"),
-    Atom("docNotice", "doc-notice"),
-    Atom("docPagebreak", "doc-pagebreak"),
-    Atom("docPagelist", "doc-pagelist"),
-    Atom("docPart", "doc-part"),
-    Atom("docPreface", "doc-preface"),
-    Atom("docPrologue", "doc-prologue"),
-    Atom("docPullquote", "doc-pullquote"),
-    Atom("docQna", "doc-qna"),
-    Atom("docSubtitle", "doc-subtitle"),
-    Atom("docTip", "doc-tip"),
-    Atom("docToc", "doc-toc"),
-    Atom("doctypePublic", "doctype-public"),
-    Atom("doctypeSystem", "doctype-system"),
-    Atom("document", "document"),
-    Atom("download", "download"),
-    Atom("drag", "drag"),
-    Atom("draggable", "draggable"),
-    Atom("dragging", "dragging"),
-    Atom("dragSession", "dragSession"),
-    Atom("drawintitlebar", "drawintitlebar"),
-    Atom("drawtitle", "drawtitle"),
-    Atom("dropAfter", "dropAfter"),
-    Atom("dropBefore", "dropBefore"),
-    Atom("dropOn", "dropOn"),
-    Atom("dropMarker", "dropmarker"),
-    Atom("dt", "dt"),
-    Atom("editable", "editable"),
-    Atom("editing", "editing"),
-    Atom("editor", "editor"),
-    Atom("element", "element"),
-    Atom("elementAvailable", "element-available"),
-    Atom("elements", "elements"),
-    Atom("em", "em"),
-    Atom("embed", "embed"),
-    Atom("empty", "empty"),
-    Atom("encoding", "encoding"),
-    Atom("enctype", "enctype"),
-    Atom("end", "end"),
-    Atom("endEvent", "endEvent"),
-    Atom("equalsize", "equalsize"),
-    Atom("error", "error"),
-    Atom("ethiopic_numeric", "ethiopic-numeric"),
-    Atom("even", "even"),
-    Atom("event", "event"),
-    Atom("events", "events"),
-    Atom("excludeResultPrefixes", "exclude-result-prefixes"),
-    Atom("extends", "extends"),
-    Atom("extensionElementPrefixes", "extension-element-prefixes"),
-    Atom("face", "face"),
-    Atom("fallback", "fallback"),
-    Atom("_false", "false"),
-    Atom("farthest", "farthest"),
-    Atom("field", "field"),
-    Atom("fieldset", "fieldset"),
-    Atom("file", "file"),
-    Atom("figcaption", "figcaption"),
-    Atom("figure", "figure"),
-    Atom("findbar", "findbar"),
-    Atom("fixed", "fixed"),
-    Atom("flags", "flags"),
-    Atom("flex", "flex"),
-    Atom("flip", "flip"),
-    Atom("floating", "floating"),
-    Atom("floor", "floor"),
-    Atom("flowlength", "flowlength"),
-    Atom("focus", "focus"),
-    Atom("focused", "focused"),
-    Atom("followanchor", "followanchor"),
-    Atom("following", "following"),
-    Atom("followingSibling", "following-sibling"),
-    Atom("font", "font"),
-    Atom("fontWeight", "font-weight"),
-    Atom("footer", "footer"),
-    Atom("_for", "for"),
-    Atom("forEach", "for-each"),
-    Atom("forceOwnRefreshDriver", "forceOwnRefreshDriver"),
-    Atom("form", "form"),
-    Atom("formaction", "formaction"),
-    Atom("format", "format"),
-    Atom("formatNumber", "format-number"),
-    Atom("formenctype", "formenctype"),
-    Atom("formmethod", "formmethod"),
-    Atom("formnovalidate", "formnovalidate"),
-    Atom("formtarget", "formtarget"),
-    Atom("frame", "frame"),
-    Atom("frameborder", "frameborder"),
-    Atom("frameset", "frameset"),
-    Atom("from", "from"),
-    Atom("fullscreenchange", "fullscreenchange"),
-    Atom("fullscreenerror", "fullscreenerror"),
-    Atom("functionAvailable", "function-available"),
-    Atom("generateId", "generate-id"),
-    Atom("getter", "getter"),
-    Atom("graphicsDocument", "graphics-document"),
-    Atom("graphicsObject", "graphics-object"),
-    Atom("graphicsSymbol", "graphics-symbol"),
-    Atom("grid", "grid"),
-    Atom("group", "group"),
-    Atom("groupbox", "groupbox"),
-    Atom("groupingSeparator", "grouping-separator"),
-    Atom("groupingSize", "grouping-size"),
-    Atom("grow", "grow"),
-    Atom("h1", "h1"),
-    Atom("h2", "h2"),
-    Atom("h3", "h3"),
-    Atom("h4", "h4"),
-    Atom("h5", "h5"),
-    Atom("h6", "h6"),
-    Atom("handheldFriendly", "HandheldFriendly"),
-    Atom("handler", "handler"),
-    Atom("handlers", "handlers"),
-    Atom("HARD", "HARD"),
-    Atom("hasSameNode", "has-same-node"),
-    Atom("hbox", "hbox"),
-    Atom("head", "head"),
-    Atom("header", "header"),
-    Atom("headers", "headers"),
-    Atom("hebrew", "hebrew"),
-    Atom("height", "height"),
-    Atom("hgroup", "hgroup"),
-    Atom("hidden", "hidden"),
-    Atom("hidechrome", "hidechrome"),
-    Atom("hidecolumnpicker", "hidecolumnpicker"),
-    Atom("high", "high"),
-    Atom("highest", "highest"),
-    Atom("horizontal", "horizontal"),
-    Atom("hover", "hover"),
-    Atom("hr", "hr"),
-    Atom("href", "href"),
-    Atom("hreflang", "hreflang"),
-    Atom("hspace", "hspace"),
-    Atom("html", "html"),
-    Atom("httpEquiv", "http-equiv"),
-    Atom("i", "i"),
-    Atom("icon", "icon"),
-    Atom("id", "id"),
-    Atom("_if", "if"),
-    Atom("iframe", "iframe"),
-    Atom("ignorekeys", "ignorekeys"),
-    Atom("ignoreuserfocus", "ignoreuserfocus"),
-    Atom("image", "image"),
-    Atom("imageClickedPoint", "image-clicked-point"),
-    Atom("img", "img"),
-    Atom("implementation", "implementation"),
-    Atom("implements", "implements"),
-    Atom("import", "import"),
-    Atom("include", "include"),
-    Atom("includes", "includes"),
-    Atom("increment", "increment"),
-    Atom("indent", "indent"),
-    Atom("indeterminate", "indeterminate"),
-    Atom("index", "index"),
-    Atom("infinity", "infinity"),
-    Atom("inherits", "inherits"),
-    Atom("inheritstyle", "inheritstyle"),
-    Atom("initial_scale", "initial-scale"),
-    Atom("input", "input"),
-    Atom("inputmode", "inputmode"),
-    Atom("ins", "ins"),
-    Atom("insertafter", "insertafter"),
-    Atom("insertbefore", "insertbefore"),
-    Atom("integer", "integer"),
-    Atom("integrity", "integrity"),
-    Atom("intersection", "intersection"),
-    Atom("intersectionobserverlist", "intersectionobserverlist"),
-    Atom("is", "is"),
-    Atom("ismap", "ismap"),
-    Atom("itemid", "itemid"),
-    Atom("itemprop", "itemprop"),
-    Atom("itemref", "itemref"),
-    Atom("itemscope", "itemscope"),
-    Atom("itemtype", "itemtype"),
-    Atom("japanese_formal", "japanese-formal"),
-    Atom("japanese_informal", "japanese-informal"),
-    Atom("kbd", "kbd"),
-    Atom("keepcurrentinview", "keepcurrentinview"),
-    Atom("keepobjectsalive", "keepobjectsalive"),
-    Atom("key", "key"),
-    Atom("keycode", "keycode"),
-    Atom("keydown", "keydown"),
-    Atom("keygen", "keygen"),
-    Atom("keypress", "keypress"),
-    Atom("keyset", "keyset"),
-    Atom("keysystem", "keysystem"),
-    Atom("keytext", "keytext"),
-    Atom("keyup", "keyup"),
-    Atom("kind", "kind"),
-    Atom("korean_hangul_formal", "korean-hangul-formal"),
-    Atom("korean_hanja_formal", "korean-hanja-formal"),
-    Atom("korean_hanja_informal", "korean-hanja-informal"),
-    Atom("label", "label"),
-    Atom("lang", "lang"),
-    Atom("language", "language"),
-    Atom("last", "last"),
-    Atom("layer", "layer"),
-    Atom("LayerActivity", "LayerActivity"),
-    Atom("leading", "leading"),
-    Atom("leaf", "leaf"),
-    Atom("left", "left"),
-    Atom("leftmargin", "leftmargin"),
-    Atom("legend", "legend"),
-    Atom("length", "length"),
-    Atom("letterValue", "letter-value"),
-    Atom("level", "level"),
-    Atom("li", "li"),
-    Atom("line", "line"),
-    Atom("link", "link"),
-    # Atom("list", "list"),  # "list" is present below
-    Atom("listbox", "listbox"),
-    Atom("listener", "listener"),
-    Atom("listheader", "listheader"),
-    Atom("listing", "listing"),
-    Atom("listitem", "listitem"),
-    Atom("load", "load"),
-    Atom("triggeringprincipal", "triggeringprincipal"),
-    Atom("localedir", "localedir"),
-    Atom("localName", "local-name"),
-    Atom("longdesc", "longdesc"),
-    Atom("loop", "loop"),
-    Atom("low", "low"),
-    Atom("lowerAlpha", "lower-alpha"),
-    Atom("lowerFirst", "lower-first"),
-    Atom("lowerRoman", "lower-roman"),
-    Atom("lowest", "lowest"),
-    Atom("lowsrc", "lowsrc"),
-    Atom("ltr", "ltr"),
-    Atom("lwtheme", "lwtheme"),
-    Atom("lwthemetextcolor", "lwthemetextcolor"),
-    Atom("main", "main"),
-    Atom("map", "map"),
-    Atom("manifest", "manifest"),
-    Atom("marginBottom", "margin-bottom"),
-    Atom("marginLeft", "margin-left"),
-    Atom("marginRight", "margin-right"),
-    Atom("marginTop", "margin-top"),
-    Atom("marginheight", "marginheight"),
-    Atom("marginwidth", "marginwidth"),
-    Atom("mark", "mark"),
-    Atom("marquee", "marquee"),
-    Atom("match", "match"),
-    Atom("max", "max"),
-    Atom("maxheight", "maxheight"),
-    Atom("maximum_scale", "maximum-scale"),
-    Atom("maxlength", "maxlength"),
-    Atom("maxpos", "maxpos"),
-    Atom("maxwidth", "maxwidth"),
-    Atom("media", "media"),
-    Atom("mediaType", "media-type"),
-    Atom("menu", "menu"),
-    Atom("menubar", "menubar"),
-    Atom("menubutton", "menubutton"),
-    Atom("menuButton", "menu-button"),
-    Atom("menucaption", "menucaption"),
-    Atom("menugroup", "menugroup"),
-    Atom("menuitem", "menuitem"),
-    Atom("menulist", "menulist"),
-    Atom("menupopup", "menupopup"),
-    Atom("menuseparator", "menuseparator"),
-    Atom("message", "message"),
-    Atom("meta", "meta"),
-    Atom("referrer", "referrer"),
-    Atom("referrerpolicy", "referrerpolicy"),
-    Atom("headerReferrerPolicy", "referrer-policy"),
-    Atom("meter", "meter"),
-    Atom("method", "method"),
-    Atom("middle", "middle"),
-    Atom("min", "min"),
-    Atom("minheight", "minheight"),
-    Atom("minimum_scale", "minimum-scale"),
-    Atom("minlength", "minlength"),
-    Atom("minpos", "minpos"),
-    Atom("minusSign", "minus-sign"),
-    Atom("minwidth", "minwidth"),
-    Atom("mixed", "mixed"),
-    Atom("messagemanagergroup", "messagemanagergroup"),
-    Atom("mod", "mod"),
-    Atom("mode", "mode"),
-    Atom("modifiers", "modifiers"),
-    Atom("monochrome", "monochrome"),
-    Atom("mouseover", "mouseover"),
-    Atom("mousethrough", "mousethrough"),
-    Atom("mozprivatebrowsing", "mozprivatebrowsing"),
-    Atom("moz_opaque", "moz-opaque"),
-    Atom("moz_action_hint", "mozactionhint"),
-    Atom("x_moz_errormessage", "x-moz-errormessage"),
-    Atom("multicol", "multicol"),
-    Atom("multiple", "multiple"),
-    Atom("muted", "muted"),
-    Atom("name", "name"),
-    Atom("_namespace", "namespace"),
-    Atom("namespaceAlias", "namespace-alias"),
-    Atom("namespaceUri", "namespace-uri"),
-    Atom("NaN", "NaN"),
-    Atom("nativeAnonymousChildList", "nativeAnonymousChildList"),
-    Atom("nav", "nav"),
-    Atom("never", "never"),
-    Atom("_new", "new"),
-    Atom("newline", "newline"),
-    Atom("nextTabParentId", "nextTabParentId"),
-    Atom("no", "no"),
-    Atom("noautofocus", "noautofocus"),
-    Atom("noautohide", "noautohide"),
-    Atom("norolluponanchor", "norolluponanchor"),
-    Atom("nobr", "nobr"),
-    Atom("nodefaultsrc", "nodefaultsrc"),
-    Atom("nodeSet", "node-set"),
-    Atom("noembed", "noembed"),
-    Atom("noframes", "noframes"),
-    Atom("nohref", "nohref"),
-    Atom("noisolation", "noisolation"),
-    Atom("nomodule", "nomodule"),
-    Atom("nonce", "nonce"),
-    Atom("none", "none"),
-    Atom("noresize", "noresize"),
-    Atom("normal", "normal"),
-    Atom("normalizeSpace", "normalize-space"),
-    Atom("noscript", "noscript"),
-    Atom("noshade", "noshade"),
-    Atom("notification", "notification"),
-    Atom("novalidate", "novalidate"),
-    Atom("_not", "not"),
-    Atom("nowrap", "nowrap"),
-    Atom("number", "number"),
-    Atom("object", "object"),
-    Atom("objectType", "object-type"),
-    Atom("observes", "observes"),
-    Atom("odd", "odd"),
-    Atom("OFF", "OFF"),
-    Atom("ol", "ol"),
-    Atom("omitXmlDeclaration", "omit-xml-declaration"),
-    Atom("onabort", "onabort"),
-    Atom("onmozaccesskeynotfound", "onmozaccesskeynotfound"),
-    Atom("onactivate", "onactivate"),
-    Atom("onafterprint", "onafterprint"),
-    Atom("onafterscriptexecute", "onafterscriptexecute"),
-    Atom("onanimationcancel", "onanimationcancel"),
-    Atom("onanimationend", "onanimationend"),
-    Atom("onanimationiteration", "onanimationiteration"),
-    Atom("onanimationstart", "onanimationstart"),
-    Atom("onAppCommand", "onAppCommand"),
-    Atom("onappinstalled", "onappinstalled"),
-    Atom("onaudioprocess", "onaudioprocess"),
-    Atom("onauxclick", "onauxclick"),
-    Atom("onbeforecopy", "onbeforecopy"),
-    Atom("onbeforecut", "onbeforecut"),
-    Atom("onbeforepaste", "onbeforepaste"),
-    Atom("onbeforeprint", "onbeforeprint"),
-    Atom("onbeforescriptexecute", "onbeforescriptexecute"),
-    Atom("onbeforeunload", "onbeforeunload"),
-    Atom("onblocked", "onblocked"),
-    Atom("onblur", "onblur"),
-    Atom("onbounce", "onbounce"),
-    Atom("onbroadcast", "onbroadcast"),
-    Atom("onbufferedamountlow", "onbufferedamountlow"),
-    Atom("oncached", "oncached"),
-    Atom("oncancel", "oncancel"),
-    Atom("onchange", "onchange"),
-    Atom("onchargingchange", "onchargingchange"),
-    Atom("onchargingtimechange", "onchargingtimechange"),
-    Atom("onchecking", "onchecking"),
-    Atom("onCheckboxStateChange", "onCheckboxStateChange"),
-    Atom("onclick", "onclick"),
-    Atom("onclose", "onclose"),
-    Atom("oncommand", "oncommand"),
-    Atom("oncommandupdate", "oncommandupdate"),
-    Atom("oncomplete", "oncomplete"),
-    Atom("oncompositionend", "oncompositionend"),
-    Atom("oncompositionstart", "oncompositionstart"),
-    Atom("oncompositionupdate", "oncompositionupdate"),
-    Atom("onconnect", "onconnect"),
-    Atom("onconnectionavailable", "onconnectionavailable"),
-    Atom("oncontextmenu", "oncontextmenu"),
-    Atom("oncopy", "oncopy"),
-    Atom("oncut", "oncut"),
-    Atom("ondblclick", "ondblclick"),
-    Atom("ondischargingtimechange", "ondischargingtimechange"),
-    Atom("ondownloading", "ondownloading"),
-    Atom("onDOMActivate", "onDOMActivate"),
-    Atom("onDOMAttrModified", "onDOMAttrModified"),
-    Atom("onDOMCharacterDataModified", "onDOMCharacterDataModified"),
-    Atom("onDOMFocusIn", "onDOMFocusIn"),
-    Atom("onDOMFocusOut", "onDOMFocusOut"),
-    Atom("onDOMMouseScroll", "onDOMMouseScroll"),
-    Atom("onDOMNodeInserted", "onDOMNodeInserted"),
-    Atom("onDOMNodeInsertedIntoDocument", "onDOMNodeInsertedIntoDocument"),
-    Atom("onDOMNodeRemoved", "onDOMNodeRemoved"),
-    Atom("onDOMNodeRemovedFromDocument", "onDOMNodeRemovedFromDocument"),
-    Atom("onDOMSubtreeModified", "onDOMSubtreeModified"),
-    Atom("ondata", "ondata"),
-    Atom("ondrag", "ondrag"),
-    Atom("ondragdrop", "ondragdrop"),
-    Atom("ondragend", "ondragend"),
-    Atom("ondragenter", "ondragenter"),
-    Atom("ondragexit", "ondragexit"),
-    Atom("ondragleave", "ondragleave"),
-    Atom("ondragover", "ondragover"),
-    Atom("ondragstart", "ondragstart"),
-    Atom("ondrain", "ondrain"),
-    Atom("ondrop", "ondrop"),
-    Atom("onerror", "onerror"),
-    Atom("onfinish", "onfinish"),
-    Atom("onfocus", "onfocus"),
-    Atom("onfocusin", "onfocusin"),
-    Atom("onfocusout", "onfocusout"),
-    Atom("onfullscreenchange", "onfullscreenchange"),
-    Atom("onfullscreenerror", "onfullscreenerror"),
-    Atom("onget", "onget"),
-    Atom("onhashchange", "onhashchange"),
-    Atom("oninput", "oninput"),
-    Atom("oninstall", "oninstall"),
-    Atom("oninvalid", "oninvalid"),
-    Atom("onkeydown", "onkeydown"),
-    Atom("onkeypress", "onkeypress"),
-    Atom("onkeyup", "onkeyup"),
-    Atom("onlanguagechange", "onlanguagechange"),
-    Atom("onlevelchange", "onlevelchange"),
-    Atom("onload", "onload"),
-    Atom("onloading", "onloading"),
-    Atom("onloadingdone", "onloadingdone"),
-    Atom("onloadingerror", "onloadingerror"),
-    Atom("onpopstate", "onpopstate"),
-    Atom("only", "only"),               # this one is not an event
-    Atom("onmessage", "onmessage"),
-    Atom("onmessageerror", "onmessageerror"),
-    Atom("onmidimessage", "onmidimessage"),
-    Atom("onmousedown", "onmousedown"),
-    Atom("onmouseenter", "onmouseenter"),
-    Atom("onmouseleave", "onmouseleave"),
-    Atom("onmouselongtap", "onmouselongtap"),
-    Atom("onmousemove", "onmousemove"),
-    Atom("onmouseout", "onmouseout"),
-    Atom("onmouseover", "onmouseover"),
-    Atom("onMozMouseHittest", "onMozMouseHittest"),
-    Atom("onmouseup", "onmouseup"),
-    Atom("onMozAfterPaint", "onMozAfterPaint"),
-    Atom("onmozfullscreenchange", "onmozfullscreenchange"),
-    Atom("onmozfullscreenerror", "onmozfullscreenerror"),
-    Atom("onmozkeydownonplugin", "onmozkeydownonplugin"),
-    Atom("onmozkeyuponplugin", "onmozkeyuponplugin"),
-    Atom("onmozpointerlockchange", "onmozpointerlockchange"),
-    Atom("onmozpointerlockerror", "onmozpointerlockerror"),
-    Atom("onMozMousePixelScroll", "onMozMousePixelScroll"),
-    Atom("onMozScrolledAreaChanged", "onMozScrolledAreaChanged"),
-    Atom("onmute", "onmute"),
-    Atom("onnotificationclick", "onnotificationclick"),
-    Atom("onnotificationclose", "onnotificationclose"),
-    Atom("onnoupdate", "onnoupdate"),
-    Atom("onobsolete", "onobsolete"),
-    Atom("ononline", "ononline"),
-    Atom("onoffline", "onoffline"),
-    Atom("onopen", "onopen"),
-    Atom("onorientationchange", "onorientationchange"),
-    Atom("onoverflow", "onoverflow"),
-    Atom("onpagehide", "onpagehide"),
-    Atom("onpageshow", "onpageshow"),
-    Atom("onpaste", "onpaste"),
-    Atom("onpaymentmethodchange", "onpaymentmethodchange"),
-    Atom("onpointerlockchange", "onpointerlockchange"),
-    Atom("onpointerlockerror", "onpointerlockerror"),
-    Atom("onpopuphidden", "onpopuphidden"),
-    Atom("onpopuphiding", "onpopuphiding"),
-    Atom("onpopuppositioned", "onpopuppositioned"),
-    Atom("onpopupshowing", "onpopupshowing"),
-    Atom("onpopupshown", "onpopupshown"),
-    Atom("onprocessorerror", "onprocessorerror"),
-    Atom("onpush", "onpush"),
-    Atom("onpushsubscriptionchange", "onpushsubscriptionchange"),
-    Atom("onRadioStateChange", "onRadioStateChange"),
-    Atom("onreadystatechange", "onreadystatechange"),
-    Atom("onrequestprogress", "onrequestprogress"),
-    Atom("onresourcetimingbufferfull", "onresourcetimingbufferfull"),
-    Atom("onresponseprogress", "onresponseprogress"),
-    Atom("onRequest", "onRequest"),
-    Atom("onreset", "onreset"),
-    Atom("onresize", "onresize"),
-    Atom("onscroll", "onscroll"),
-    Atom("onselect", "onselect"),
-    Atom("onselectionchange", "onselectionchange"),
-    Atom("onselectstart", "onselectstart"),
-    Atom("onset", "onset"),
-    Atom("onshippingaddresschange", "onshippingaddresschange"),
-    Atom("onshippingoptionchange", "onshippingoptionchange"),
-    Atom("onshow", "onshow"),
-    Atom("onstatechange", "onstatechange"),
-    Atom("onstorage", "onstorage"),
-    Atom("onsubmit", "onsubmit"),
-    Atom("onsuccess", "onsuccess"),
-    Atom("ontypechange", "ontypechange"),
-    Atom("onterminate", "onterminate"),
-    Atom("ontext", "ontext"),
-    Atom("ontoggle", "ontoggle"),
-    Atom("ontouchstart", "ontouchstart"),
-    Atom("ontouchend", "ontouchend"),
-    Atom("ontouchmove", "ontouchmove"),
-    Atom("ontouchcancel", "ontouchcancel"),
-    Atom("ontransitioncancel", "ontransitioncancel"),
-    Atom("ontransitionend", "ontransitionend"),
-    Atom("ontransitionrun", "ontransitionrun"),
-    Atom("ontransitionstart", "ontransitionstart"),
-    Atom("onunderflow", "onunderflow"),
-    Atom("onunload", "onunload"),
-    Atom("onunmute", "onunmute"),
-    Atom("onupdatefound", "onupdatefound"),
-    Atom("onupdateready", "onupdateready"),
-    Atom("onupgradeneeded", "onupgradeneeded"),
-    Atom("onversionchange", "onversionchange"),
-    Atom("onvisibilitychange", "onvisibilitychange"),
-    Atom("onvoiceschanged", "onvoiceschanged"),
-    Atom("onvrdisplayactivate", "onvrdisplayactivate"),
-    Atom("onvrdisplayconnect", "onvrdisplayconnect"),
-    Atom("onvrdisplaydeactivate", "onvrdisplaydeactivate"),
-    Atom("onvrdisplaydisconnect", "onvrdisplaydisconnect"),
-    Atom("onvrdisplaypresentchange", "onvrdisplaypresentchange"),
-    Atom("onwebkitAnimationEnd", "onwebkitAnimationEnd"),
-    Atom("onwebkitAnimationIteration", "onwebkitAnimationIteration"),
-    Atom("onwebkitAnimationStart", "onwebkitAnimationStart"),
-    Atom("onwebkitTransitionEnd", "onwebkitTransitionEnd"),
-    Atom("onwebkitanimationend", "onwebkitanimationend"),
-    Atom("onwebkitanimationiteration", "onwebkitanimationiteration"),
-    Atom("onwebkitanimationstart", "onwebkitanimationstart"),
-    Atom("onwebkittransitionend", "onwebkittransitionend"),
-    Atom("onwheel", "onwheel"),
-    Atom("open", "open"),
-    Atom("optgroup", "optgroup"),
-    Atom("optimum", "optimum"),
-    Atom("option", "option"),
-    Atom("_or", "or"),
-    Atom("order", "order"),
-    Atom("ordinal", "ordinal"),
-    Atom("orient", "orient"),
-    Atom("orientation", "orientation"),
-    Atom("otherwise", "otherwise"),
-    Atom("output", "output"),
-    Atom("overflow", "overflow"),
-    Atom("overlay", "overlay"),
-    Atom("p", "p"),
-    Atom("pack", "pack"),
-    Atom("page", "page"),
-    Atom("pageincrement", "pageincrement"),
-    Atom("paint_order", "paint-order"),
-    Atom("panel", "panel"),
-    Atom("paragraph", "paragraph"),
-    Atom("param", "param"),
-    Atom("parameter", "parameter"),
-    Atom("parent", "parent"),
-    Atom("parentfocused", "parentfocused"),
-    Atom("password", "password"),
-    Atom("pattern", "pattern"),
-    Atom("patternSeparator", "pattern-separator"),
-    Atom("perMille", "per-mille"),
-    Atom("percent", "percent"),
-    Atom("persist", "persist"),
-    Atom("phase", "phase"),
-    Atom("picture", "picture"),
-    Atom("ping", "ping"),
-    Atom("pinned", "pinned"),
-    Atom("placeholder", "placeholder"),
-    Atom("plaintext", "plaintext"),
-    Atom("playbackrate", "playbackrate"),
-    Atom("pointSize", "point-size"),
-    Atom("poly", "poly"),
-    Atom("polygon", "polygon"),
-    Atom("popup", "popup"),
-    Atom("popupalign", "popupalign"),
-    Atom("popupanchor", "popupanchor"),
-    Atom("popupgroup", "popupgroup"),
-    Atom("popupset", "popupset"),
-    Atom("popupsinherittooltip", "popupsinherittooltip"),
-    Atom("position", "position"),
-    Atom("poster", "poster"),
-    Atom("pre", "pre"),
-    Atom("preceding", "preceding"),
-    Atom("precedingSibling", "preceding-sibling"),
-    Atom("prefersReducedMotion", "prefers-reduced-motion"),
-    Atom("prefix", "prefix"),
-    Atom("preload", "preload"),
-    Atom("mozpresentation", "mozpresentation"),
-    Atom("preserve", "preserve"),
-    Atom("preserveSpace", "preserve-space"),
-    Atom("preventdefault", "preventdefault"),
-    Atom("primary", "primary"),
-    Atom("print", "print"),
-    Atom("priority", "priority"),
-    Atom("processingInstruction", "processing-instruction"),
-    Atom("profile", "profile"),
-    Atom("progress", "progress"),
-    Atom("progressmeter", "progressmeter"),
-    Atom("prompt", "prompt"),
-    Atom("properties", "properties"),
-    Atom("property", "property"),
-    Atom("pubdate", "pubdate"),
-    Atom("q", "q"),
-    Atom("radio", "radio"),
-    Atom("radiogroup", "radiogroup"),
-    Atom("range", "range"),
-    Atom("readonly", "readonly"),
-    Atom("rect", "rect"),
-    Atom("rectangle", "rectangle"),
-    Atom("refresh", "refresh"),
-    Atom("rel", "rel"),
-    Atom("rem", "rem"),
-    Atom("remote", "remote"),
-    Atom("removeelement", "removeelement"),
-    Atom("renderingobserverlist", "renderingobserverlist"),
-    Atom("repeat", "repeat"),
-    Atom("replace", "replace"),
-    Atom("requestcontextid", "requestcontextid"),
-    Atom("required", "required"),
-    Atom("reserved", "reserved"),
-    Atom("reset", "reset"),
-    Atom("resizeafter", "resizeafter"),
-    Atom("resizebefore", "resizebefore"),
-    Atom("resizer", "resizer"),
-    Atom("resolution", "resolution"),
-    Atom("resources", "resources"),
-    Atom("result", "result"),
-    Atom("resultPrefix", "result-prefix"),
-    Atom("retargetdocumentfocus", "retargetdocumentfocus"),
-    Atom("rev", "rev"),
-    Atom("reverse", "reverse"),
-    Atom("reversed", "reversed"),
-    Atom("richlistbox", "richlistbox"),
-    Atom("richlistitem", "richlistitem"),
-    Atom("right", "right"),
-    Atom("rightmargin", "rightmargin"),
-    Atom("role", "role"),
-    Atom("rolluponmousewheel", "rolluponmousewheel"),
-    Atom("round", "round"),
-    Atom("row", "row"),
-    Atom("rows", "rows"),
-    Atom("rowspan", "rowspan"),
-    Atom("rb", "rb"),
-    Atom("rp", "rp"),
-    Atom("rt", "rt"),
-    Atom("rtc", "rtc"),
-    Atom("rtl", "rtl"),
-    Atom("ruby", "ruby"),
-    Atom("rubyBase", "ruby-base"),
-    Atom("rubyBaseContainer", "ruby-base-container"),
-    Atom("rubyText", "ruby-text"),
-    Atom("rubyTextContainer", "ruby-text-container"),
-    Atom("rules", "rules"),
-    Atom("s", "s"),
-    Atom("samp", "samp"),
-    Atom("sandbox", "sandbox"),
-    Atom("sbattr", "sbattr"),
-    Atom("scale", "scale"),
-    Atom("scan", "scan"),
-    Atom("scheme", "scheme"),
-    Atom("scope", "scope"),
-    Atom("scoped", "scoped"),
-    Atom("screen", "screen"),
-    Atom("screenX", "screenX"),
-    Atom("screenY", "screenY"),
-    Atom("script", "script"),
-    Atom("scriptEnabledBeforePrintOrPreview", "scriptEnabledBeforePrintOrPreview"),
-    Atom("scrollbar", "scrollbar"),
-    Atom("scrollbarbutton", "scrollbarbutton"),
-    Atom("scrollbarDownBottom", "scrollbar-down-bottom"),
-    Atom("scrollbarDownTop", "scrollbar-down-top"),
-    Atom("scrollbarUpBottom", "scrollbar-up-bottom"),
-    Atom("scrollbarUpTop", "scrollbar-up-top"),
-    Atom("scrollbox", "scrollbox"),
-    Atom("scrollcorner", "scrollcorner"),
-    Atom("scrolling", "scrolling"),
-    Atom("scrollPosition", "scroll-position"),
-    Atom("section", "section"),
-    Atom("select", "select"),
-    Atom("selectable", "selectable"),
-    Atom("selected", "selected"),
-    Atom("selectedIndex", "selectedIndex"),
-    Atom("selectedindex", "selectedindex"),
-    Atom("self", "self"),
-    Atom("seltype", "seltype"),
-    Atom("setcookie", "set-cookie"),
-    Atom("setter", "setter"),
-    Atom("shape", "shape"),
-    Atom("show", "show"),
-    Atom("showcaret", "showcaret"),
-    Atom("showresizer", "showresizer"),
-    Atom("simple", "simple"),
-    Atom("simp_chinese_formal", "simp-chinese-formal"),
-    Atom("simp_chinese_informal", "simp-chinese-informal"),
-    Atom("single", "single"),
-    Atom("size", "size"),
-    Atom("sizes", "sizes"),
-    Atom("sizemode", "sizemode"),
-    Atom("sizetopopup", "sizetopopup"),
-    Atom("slider", "slider"),
-    Atom("small", "small"),
-    Atom("smooth", "smooth"),
-    Atom("snap", "snap"),
-    Atom("sort", "sort"),
-    Atom("sortActive", "sortActive"),
-    Atom("sortDirection", "sortDirection"),
-    Atom("sorted", "sorted"),
-    Atom("sorthints", "sorthints"),
-    Atom("source", "source"),
-    Atom("space", "space"),
-    Atom("spacer", "spacer"),
-    Atom("span", "span"),
-    Atom("spellcheck", "spellcheck"),
-    Atom("split", "split"),
-    Atom("splitter", "splitter"),
-    Atom("spring", "spring"),
-    Atom("square", "square"),
-    Atom("src", "src"),
-    Atom("srcdoc", "srcdoc"),
-    Atom("srclang", "srclang"),
-    Atom("srcset", "srcset"),
-    Atom("standalone", "standalone"),
-    Atom("standby", "standby"),
-    Atom("start", "start"),
-    Atom("startsWith", "starts-with"),
-    Atom("state", "state"),
-    Atom("statusbar", "statusbar"),
-    Atom("step", "step"),
-    Atom("stop", "stop"),
-    Atom("stretch", "stretch"),
-    Atom("strike", "strike"),
-    Atom("string", "string"),
-    Atom("stringLength", "string-length"),
-    Atom("stripSpace", "strip-space"),
-    Atom("strong", "strong"),
-    Atom("style", "style"),
-    Atom("stylesheet", "stylesheet"),
-    Atom("stylesheetPrefix", "stylesheet-prefix"),
-    Atom("submit", "submit"),
-    Atom("substate", "substate"),
-    Atom("substring", "substring"),
-    Atom("substringAfter", "substring-after"),
-    Atom("substringBefore", "substring-before"),
-    Atom("sub", "sub"),
-    Atom("sum", "sum"),
-    Atom("sup", "sup"),
-    Atom("summary", "summary"),
-    # Atom("_switch", "switch"),  # "switch" is present below
-    Atom("systemProperty", "system-property"),
-    Atom("tab", "tab"),
-    Atom("tabindex", "tabindex"),
-    Atom("table", "table"),
-    Atom("tabpanel", "tabpanel"),
-    Atom("tabpanels", "tabpanels"),
-    Atom("tag", "tag"),
-    Atom("target", "target"),
-    Atom("targets", "targets"),
-    Atom("tbody", "tbody"),
-    Atom("td", "td"),
-    Atom("_template", "template"),
-    Atom("text_decoration", "text-decoration"),
-    Atom("terminate", "terminate"),
-    Atom("term", "term"),
-    Atom("test", "test"),
-    Atom("text", "text"),
-    Atom("textAlign", "text-align"),
-    Atom("textarea", "textarea"),
-    Atom("textbox", "textbox"),
-    Atom("textNodeDirectionalityMap", "textNodeDirectionalityMap"),
-    Atom("tfoot", "tfoot"),
-    Atom("th", "th"),
-    Atom("thead", "thead"),
-    Atom("thumb", "thumb"),
-    Atom("time", "time"),
-    Atom("title", "title"),
-    Atom("titlebar", "titlebar"),
-    Atom("titletip", "titletip"),
-    Atom("token", "token"),
-    Atom("tokenize", "tokenize"),
-    Atom("toolbar", "toolbar"),
-    Atom("toolbarbutton", "toolbarbutton"),
-    Atom("toolbaritem", "toolbaritem"),
-    Atom("toolbarpaletteitem", "toolbarpaletteitem"),
-    Atom("toolbox", "toolbox"),
-    Atom("tooltip", "tooltip"),
-    Atom("tooltiptext", "tooltiptext"),
-    Atom("top", "top"),
-    Atom("topleft", "topleft"),
-    Atom("topmargin", "topmargin"),
-    Atom("topright", "topright"),
-    Atom("tr", "tr"),
-    Atom("track", "track"),
-    Atom("trad_chinese_formal", "trad-chinese-formal"),
-    Atom("trad_chinese_informal", "trad-chinese-informal"),
-    Atom("trailing", "trailing"),
-    Atom("transform", "transform"),
-    Atom("transform_3d", "transform-3d"),
-    Atom("transformiix", "transformiix"),
-    Atom("translate", "translate"),
-    Atom("transparent", "transparent"),
-    Atom("tree", "tree"),
-    Atom("treecell", "treecell"),
-    Atom("treechildren", "treechildren"),
-    Atom("treecol", "treecol"),
-    Atom("treecolpicker", "treecolpicker"),
-    Atom("treecols", "treecols"),
-    Atom("treeitem", "treeitem"),
-    Atom("treerow", "treerow"),
-    Atom("treeseparator", "treeseparator"),
-    Atom("_true", "true"),
-    Atom("tt", "tt"),
-    Atom("type", "type"),
-    Atom("typemustmatch", "typemustmatch"),
-    Atom("u", "u"),
-    Atom("ul", "ul"),
-    Atom("undetermined", "undetermined"),
-    Atom("unparsedEntityUri", "unparsed-entity-uri"),
-    Atom("upperAlpha", "upper-alpha"),
-    Atom("upperFirst", "upper-first"),
-    Atom("upperRoman", "upper-roman"),
-    Atom("use", "use"),
-    Atom("useAttributeSets", "use-attribute-sets"),
-    Atom("usemap", "usemap"),
-    Atom("user_scalable", "user-scalable"),
-    Atom("validate", "validate"),
-    Atom("valign", "valign"),
-    Atom("value", "value"),
-    Atom("values", "values"),
-    Atom("valueOf", "value-of"),
-    Atom("valuetype", "valuetype"),
-    Atom("var", "var"),
-    Atom("variable", "variable"),
-    Atom("vendor", "vendor"),
-    Atom("vendorUrl", "vendor-url"),
-    Atom("version", "version"),
-    Atom("vertical", "vertical"),
-    Atom("audio", "audio"),
-    Atom("video", "video"),
-    Atom("videocontrols", "videocontrols"),
-    Atom("viewport", "viewport"),
-    Atom("viewport_height", "viewport-height"),
-    Atom("viewport_initial_scale", "viewport-initial-scale"),
-    Atom("viewport_maximum_scale", "viewport-maximum-scale"),
-    Atom("viewport_minimum_scale", "viewport-minimum-scale"),
-    Atom("viewport_user_scalable", "viewport-user-scalable"),
-    Atom("viewport_width", "viewport-width"),
-    Atom("visibility", "visibility"),
-    Atom("visuallyselected", "visuallyselected"),
-    Atom("vlink", "vlink"),
-    Atom("vspace", "vspace"),
-    Atom("wbr", "wbr"),
-    Atom("webkitdirectory", "webkitdirectory"),
-    Atom("when", "when"),
-    Atom("width", "width"),
-    Atom("willChange", "will-change"),
-    Atom("window", "window"),
-    Atom("headerWindowTarget", "window-target"),
-    Atom("windowtype", "windowtype"),
-    Atom("withParam", "with-param"),
-    Atom("wizard", "wizard"),
-    Atom("wrap", "wrap"),
-    Atom("headerDNSPrefetchControl", "x-dns-prefetch-control"),
-    Atom("headerCSP", "content-security-policy"),
-    Atom("headerCSPReportOnly", "content-security-policy-report-only"),
-    Atom("headerXFO", "x-frame-options"),
-    Atom("x_western", "x-western"),
-    Atom("xml", "xml"),
-    Atom("xml_stylesheet", "xml-stylesheet"),
-    Atom("xmlns", "xmlns"),
-    Atom("xmp", "xmp"),
-    Atom("yes", "yes"),
-    Atom("z_index", "z-index"),
-    Atom("zeroDigit", "zero-digit"),
-    Atom("zlevel", "zlevel"),
-
-
-    Atom("percentage", "%"),
-    Atom("A", "A"),
-    Atom("alignment_baseline", "alignment-baseline"),
-    Atom("amplitude", "amplitude"),
-    Atom("animate", "animate"),
-    Atom("animateColor", "animateColor"),
-    Atom("animateMotion", "animateMotion"),
-    Atom("animateTransform", "animateTransform"),
-    Atom("arithmetic", "arithmetic"),
-    Atom("atop", "atop"),
-    Atom("azimuth", "azimuth"),
-    Atom("B", "B"),
-    Atom("backgroundColor", "background-color"),
-    Atom("background_image", "background-image"),
-    Atom("baseFrequency", "baseFrequency"),
-    Atom("baseline_shift", "baseline-shift"),
-    Atom("bias", "bias"),
-    Atom("caption_side", "caption-side"),
-    Atom("clip_path", "clip-path"),
-    Atom("clip_rule", "clip-rule"),
-    Atom("clipPath", "clipPath"),
-    Atom("clipPathUnits", "clipPathUnits"),
-    Atom("cm", "cm"),
-    Atom("colorBurn", "color-burn"),
-    Atom("colorDodge", "color-dodge"),
-    Atom("colorInterpolation", "color-interpolation"),
-    Atom("colorInterpolationFilters", "color-interpolation-filters"),
-    Atom("colorpicker", "colorpicker"),
-    Atom("colorProfile", "color-profile"),
-    Atom("cursor", "cursor"),
-    Atom("cx", "cx"),
-    Atom("cy", "cy"),
-    Atom("d", "d"),
-    Atom("darken", "darken"),
-    Atom("defs", "defs"),
-    Atom("deg", "deg"),
-    Atom("desc", "desc"),
-    Atom("diffuseConstant", "diffuseConstant"),
-    Atom("dilate", "dilate"),
-    Atom("direction", "direction"),
-    Atom("disable", "disable"),
-    Atom("disc", "disc"),
-    Atom("discrete", "discrete"),
-    Atom("divisor", "divisor"),
-    Atom("dominant_baseline", "dominant-baseline"),
-    Atom("duplicate", "duplicate"),
-    Atom("dx", "dx"),
-    Atom("dy", "dy"),
-    Atom("edgeMode", "edgeMode"),
-    Atom("ellipse", "ellipse"),
-    Atom("elevation", "elevation"),
-    Atom("erode", "erode"),
-    Atom("ex", "ex"),
-    Atom("exact", "exact"),
-    Atom("exclusion", "exclusion"),
-    Atom("exponent", "exponent"),
-    Atom("feBlend", "feBlend"),
-    Atom("feColorMatrix", "feColorMatrix"),
-    Atom("feComponentTransfer", "feComponentTransfer"),
-    Atom("feComposite", "feComposite"),
-    Atom("feConvolveMatrix", "feConvolveMatrix"),
-    Atom("feDiffuseLighting", "feDiffuseLighting"),
-    Atom("feDisplacementMap", "feDisplacementMap"),
-    Atom("feDistantLight", "feDistantLight"),
-    Atom("feDropShadow", "feDropShadow"),
-    Atom("feFlood", "feFlood"),
-    Atom("feFuncA", "feFuncA"),
-    Atom("feFuncB", "feFuncB"),
-    Atom("feFuncG", "feFuncG"),
-    Atom("feFuncR", "feFuncR"),
-    Atom("feGaussianBlur", "feGaussianBlur"),
-    Atom("feImage", "feImage"),
-    Atom("feMerge", "feMerge"),
-    Atom("feMergeNode", "feMergeNode"),
-    Atom("feMorphology", "feMorphology"),
-    Atom("feOffset", "feOffset"),
-    Atom("fePointLight", "fePointLight"),
-    Atom("feSpecularLighting", "feSpecularLighting"),
-    Atom("feSpotLight", "feSpotLight"),
-    Atom("feTile", "feTile"),
-    Atom("feTurbulence", "feTurbulence"),
-    Atom("fill", "fill"),
-    Atom("fill_opacity", "fill-opacity"),
-    Atom("fill_rule", "fill-rule"),
-    Atom("filter", "filter"),
-    Atom("filterUnits", "filterUnits"),
-    Atom("_float", "float"),
-    Atom("flood_color", "flood-color"),
-    Atom("flood_opacity", "flood-opacity"),
-    Atom("font_face", "font-face"),
-    Atom("font_face_format", "font-face-format"),
-    Atom("font_face_name", "font-face-name"),
-    Atom("font_face_src", "font-face-src"),
-    Atom("font_face_uri", "font-face-uri"),
-    Atom("font_family", "font-family"),
-    Atom("font_size", "font-size"),
-    Atom("font_size_adjust", "font-size-adjust"),
-    Atom("font_stretch", "font-stretch"),
-    Atom("font_style", "font-style"),
-    Atom("font_variant", "font-variant"),
-    Atom("foreignObject", "foreignObject"),
-    Atom("fractalNoise", "fractalNoise"),
-    Atom("fr", "fr"),
-    Atom("fx", "fx"),
-    Atom("fy", "fy"),
-    Atom("G", "G"),
-    Atom("g", "g"),
-    Atom("gamma", "gamma"),
-    # 'generic' conflicts with msvc11 winrt compiler extensions
-    Atom("generic_", "generic"),
-    Atom("glyphRef", "glyphRef"),
-    Atom("grad", "grad"),
-    Atom("gradientTransform", "gradientTransform"),
-    Atom("gradientUnits", "gradientUnits"),
-    Atom("hardLight", "hard-light"),
-    Atom("hue", "hue"),
-    Atom("hueRotate", "hueRotate"),
-    Atom("identity", "identity"),
-    Atom("image_rendering", "image-rendering"),
-    Atom("in", "in"),
-    Atom("in2", "in2"),
-    Atom("intercept", "intercept"),
-    Atom("k1", "k1"),
-    Atom("k2", "k2"),
-    Atom("k3", "k3"),
-    Atom("k4", "k4"),
-    Atom("kernelMatrix", "kernelMatrix"),
-    Atom("kernelUnitLength", "kernelUnitLength"),
-    Atom("lengthAdjust", "lengthAdjust"),
-    Atom("letter_spacing", "letter-spacing"),
-    Atom("lighten", "lighten"),
-    Atom("lighting_color", "lighting-color"),
-    Atom("limitingConeAngle", "limitingConeAngle"),
-    Atom("linear", "linear"),
-    Atom("linearGradient", "linearGradient"),
-    Atom("list_style_type", "list-style-type"),
-    Atom("luminanceToAlpha", "luminanceToAlpha"),
-    Atom("luminosity", "luminosity"),
-    Atom("magnify", "magnify"),
-    Atom("marker", "marker"),
-    Atom("marker_end", "marker-end"),
-    Atom("marker_mid", "marker-mid"),
-    Atom("marker_start", "marker-start"),
-    Atom("markerHeight", "markerHeight"),
-    Atom("markerUnits", "markerUnits"),
-    Atom("markerWidth", "markerWidth"),
-    Atom("mask", "mask"),
-    Atom("maskContentUnits", "maskContentUnits"),
-    Atom("mask_type", "mask-type"),
-    Atom("maskUnits", "maskUnits"),
-    Atom("matrix", "matrix"),
-    Atom("metadata", "metadata"),
-    Atom("missingGlyph", "missing-glyph"),
-    Atom("mm", "mm"),
-    Atom("mpath", "mpath"),
-    Atom("noStitch", "noStitch"),
-    Atom("numOctaves", "numOctaves"),
-    Atom("multiply", "multiply"),
-    Atom("objectBoundingBox", "objectBoundingBox"),
-    Atom("offset", "offset"),
-    Atom("onSVGLoad", "onSVGLoad"),
-    Atom("onSVGResize", "onSVGResize"),
-    Atom("onSVGScroll", "onSVGScroll"),
-    Atom("onSVGUnload", "onSVGUnload"),
-    Atom("onSVGZoom", "onSVGZoom"),
-    Atom("onzoom", "onzoom"),
-    Atom("opacity", "opacity"),
-    Atom("_operator", "operator"),
-    Atom("out", "out"),
-    Atom("over", "over"),
-    Atom("overridePreserveAspectRatio", "overridePreserveAspectRatio"),
-    Atom("pad", "pad"),
-    Atom("path", "path"),
-    Atom("pathLength", "pathLength"),
-    Atom("patternContentUnits", "patternContentUnits"),
-    Atom("patternTransform", "patternTransform"),
-    Atom("patternUnits", "patternUnits"),
-    Atom("pc", "pc"),
-    Atom("pointer_events", "pointer-events"),
-    Atom("points", "points"),
-    Atom("pointsAtX", "pointsAtX"),
-    Atom("pointsAtY", "pointsAtY"),
-    Atom("pointsAtZ", "pointsAtZ"),
-    Atom("polyline", "polyline"),
-    Atom("preserveAlpha", "preserveAlpha"),
-    Atom("preserveAspectRatio", "preserveAspectRatio"),
-    Atom("primitiveUnits", "primitiveUnits"),
-    Atom("pt", "pt"),
-    Atom("px", "px"),
-    Atom("R", "R"),
-    Atom("r", "r"),
-    Atom("rad", "rad"),
-    Atom("radialGradient", "radialGradient"),
-    Atom("radius", "radius"),
-    Atom("reflect", "reflect"),
-    Atom("refX", "refX"),
-    Atom("refY", "refY"),
-    Atom("requiredExtensions", "requiredExtensions"),
-    Atom("requiredFeatures", "requiredFeatures"),
-    Atom("rotate", "rotate"),
-    Atom("rx", "rx"),
-    Atom("ry", "ry"),
-    Atom("saturate", "saturate"),
-    Atom("saturation", "saturation"),
-    Atom("set", "set"),
-    Atom("seed", "seed"),
-    Atom("shape_rendering", "shape-rendering"),
-    Atom("simpleScopeChain", "simpleScopeChain"),
-    Atom("skewX", "skewX"),
-    Atom("skewY", "skewY"),
-    Atom("slope", "slope"),
-    Atom("slot", "slot"),
-    Atom("softLight", "soft-light"),
-    Atom("spacing", "spacing"),
-    Atom("spacingAndGlyphs", "spacingAndGlyphs"),
-    Atom("specularConstant", "specularConstant"),
-    Atom("specularExponent", "specularExponent"),
-    Atom("spreadMethod", "spreadMethod"),
-    Atom("startOffset", "startOffset"),
-    Atom("stdDeviation", "stdDeviation"),
-    Atom("stitch", "stitch"),
-    Atom("stitchTiles", "stitchTiles"),
-    Atom("stop_color", "stop-color"),
-    Atom("stop_opacity", "stop-opacity"),
-    Atom("stroke", "stroke"),
-    Atom("stroke_dasharray", "stroke-dasharray"),
-    Atom("stroke_dashoffset", "stroke-dashoffset"),
-    Atom("stroke_linecap", "stroke-linecap"),
-    Atom("stroke_linejoin", "stroke-linejoin"),
-    Atom("stroke_miterlimit", "stroke-miterlimit"),
-    Atom("stroke_opacity", "stroke-opacity"),
-    Atom("stroke_width", "stroke-width"),
-    Atom("strokeWidth", "strokeWidth"),
-    Atom("surfaceScale", "surfaceScale"),
-    Atom("svg", "svg"),
-    Atom("svgSwitch", "switch"),
-    Atom("symbol", "symbol"),
-    Atom("systemLanguage", "systemLanguage"),
-    Atom("tableValues", "tableValues"),
-    Atom("targetX", "targetX"),
-    Atom("targetY", "targetY"),
-    Atom("text_anchor", "text-anchor"),
-    Atom("text_rendering", "text-rendering"),
-    Atom("textLength", "textLength"),
-    Atom("textPath", "textPath"),
-    Atom("tref", "tref"),
-    Atom("tspan", "tspan"),
-    Atom("turbulence", "turbulence"),
-    Atom("unicode_bidi", "unicode-bidi"),
-    Atom("userSpaceOnUse", "userSpaceOnUse"),
-    Atom("view", "view"),
-    Atom("viewBox", "viewBox"),
-    Atom("viewTarget", "viewTarget"),
-    Atom("white_space", "white-space"),
-    Atom("word_spacing", "word-spacing"),
-    Atom("writing_mode", "writing-mode"),
-    Atom("x", "x"),
-    Atom("x1", "x1"),
-    Atom("x2", "x2"),
-    Atom("xChannelSelector", "xChannelSelector"),
-    Atom("xor_", "xor"),
-    Atom("y", "y"),
-    Atom("y1", "y1"),
-    Atom("y2", "y2"),
-    Atom("yChannelSelector", "yChannelSelector"),
-    Atom("z", "z"),
-    Atom("zoomAndPan", "zoomAndPan"),
-    Atom("vector_effect", "vector-effect"),
-    Atom("vertical_align", "vertical-align"),
-
-    Atom("accumulate", "accumulate"),
-    Atom("additive", "additive"),
-    Atom("attributeName", "attributeName"),
-    Atom("attributeType", "attributeType"),
-    Atom("auto_reverse", "auto-reverse"),
-    Atom("begin", "begin"),
-    Atom("beginEvent", "beginEvent"),
-    Atom("by", "by"),
-    Atom("calcMode", "calcMode"),
-    Atom("dur", "dur"),
-    Atom("keyPoints", "keyPoints"),
-    Atom("keySplines", "keySplines"),
-    Atom("keyTimes", "keyTimes"),
-    Atom("mozAnimateMotionDummyAttr", "_mozAnimateMotionDummyAttr"),
-    Atom("onbegin", "onbegin"),
-    Atom("onbeginEvent", "onbeginEvent"),
-    Atom("onend", "onend"),
-    Atom("onendEvent", "onendEvent"),
-    Atom("onrepeat", "onrepeat"),
-    Atom("onrepeatEvent", "onrepeatEvent"),
-    Atom("repeatCount", "repeatCount"),
-    Atom("repeatDur", "repeatDur"),
-    Atom("repeatEvent", "repeatEvent"),
-    Atom("restart", "restart"),
-    Atom("to", "to"),
-
-    Atom("abs_", "abs"),
-    Atom("accent_", "accent"),
-    Atom("accentunder_", "accentunder"),
-    Atom("actiontype_", "actiontype"),
-    Atom("alignmentscope_", "alignmentscope"),
-    Atom("altimg_", "altimg"),
-    Atom("altimg_height_", "altimg-height"),
-    Atom("altimg_valign_", "altimg-valign"),
-    Atom("altimg_width_", "altimg-width"),
-    Atom("annotation_", "annotation"),
-    Atom("annotation_xml_", "annotation-xml"),
-    Atom("apply_", "apply"),
-    Atom("approx_", "approx"),
-    Atom("arccos_", "arccos"),
-    Atom("arccosh_", "arccosh"),
-    Atom("arccot_", "arccot"),
-    Atom("arccoth_", "arccoth"),
-    Atom("arccsc_", "arccsc"),
-    Atom("arccsch_", "arccsch"),
-    Atom("arcsec_", "arcsec"),
-    Atom("arcsech_", "arcsech"),
-    Atom("arcsin_", "arcsin"),
-    Atom("arcsinh_", "arcsinh"),
-    Atom("arctan_", "arctan"),
-    Atom("arctanh_", "arctanh"),
-    Atom("arg_", "arg"),
-    Atom("bevelled_", "bevelled"),
-    Atom("bind_", "bind"),
-    Atom("bvar_", "bvar"),
-    Atom("card_", "card"),
-    Atom("cartesianproduct_", "cartesianproduct"),
-    Atom("cbytes_", "cbytes"),
-    Atom("cd_", "cd"),
-    Atom("cdgroup_", "cdgroup"),
-    Atom("cerror_", "cerror"),
-    Atom("charalign_", "charalign"),
-    Atom("ci_", "ci"),
-    Atom("closure_", "closure"),
-    Atom("cn_", "cn"),
-    Atom("codomain_", "codomain"),
-    Atom("columnalign_", "columnalign"),
-    Atom("columnalignment_", "columnalignment"),
-    Atom("columnlines_", "columnlines"),
-    Atom("columnspacing_", "columnspacing"),
-    Atom("columnspan_", "columnspan"),
-    Atom("columnwidth_", "columnwidth"),
-    Atom("complexes_", "complexes"),
-    Atom("compose_", "compose"),
-    Atom("condition_", "condition"),
-    Atom("conjugate_", "conjugate"),
-    Atom("cos_", "cos"),
-    Atom("cosh_", "cosh"),
-    Atom("cot_", "cot"),
-    Atom("coth_", "coth"),
-    Atom("crossout_", "crossout"),
-    Atom("csc_", "csc"),
-    Atom("csch_", "csch"),
-    Atom("cs_", "cs"),
-    Atom("csymbol_", "csymbol"),
-    Atom("curl_", "curl"),
-    Atom("decimalpoint_", "decimalpoint"),
-    Atom("definitionURL_", "definitionURL"),
-    Atom("degree_", "degree"),
-    Atom("denomalign_", "denomalign"),
-    Atom("depth_", "depth"),
-    Atom("determinant_", "determinant"),
-    Atom("diff_", "diff"),
-    Atom("displaystyle_", "displaystyle"),
-    Atom("divergence_", "divergence"),
-    Atom("divide_", "divide"),
-    Atom("domain_", "domain"),
-    Atom("domainofapplication_", "domainofapplication"),
-    Atom("edge_", "edge"),
-    Atom("el", "el"),
-    Atom("emptyset_", "emptyset"),
-    Atom("eq_", "eq"),
-    Atom("equalcolumns_", "equalcolumns"),
-    Atom("equalrows_", "equalrows"),
-    Atom("equivalent_", "equivalent"),
-    Atom("eulergamma_", "eulergamma"),
-    Atom("exists_", "exists"),
-    Atom("exp_", "exp"),
-    Atom("exponentiale_", "exponentiale"),
-    Atom("factorial_", "factorial"),
-    Atom("factorof_", "factorof"),
-    Atom("fence_", "fence"),
-    Atom("fn_", "fn"),
-    Atom("fontfamily_", "fontfamily"),
-    Atom("fontsize_", "fontsize"),
-    Atom("fontstyle_", "fontstyle"),
-    Atom("fontweight_", "fontweight"),
-    Atom("forall_", "forall"),
-    Atom("framespacing_", "framespacing"),
-    Atom("gcd_", "gcd"),
-    Atom("geq_", "geq"),
-    Atom("groupalign_", "groupalign"),
-    Atom("gt_", "gt"),
-    Atom("ident_", "ident"),
-    Atom("imaginaryi_", "imaginaryi"),
-    Atom("imaginary_", "imaginary"),
-    Atom("implies_", "implies"),
-    Atom("indentalignfirst_", "indentalignfirst"),
-    Atom("indentalign_", "indentalign"),
-    Atom("indentalignlast_", "indentalignlast"),
-    Atom("indentshiftfirst_", "indentshiftfirst"),
-    Atom("indentshift_", "indentshift"),
-    Atom("indenttarget_", "indenttarget"),
-    Atom("integers_", "integers"),
-    Atom("intersect_", "intersect"),
-    Atom("interval_", "interval"),
-    Atom("int_", "int"),
-    Atom("inverse_", "inverse"),
-    Atom("lambda_", "lambda"),
-    Atom("laplacian_", "laplacian"),
-    Atom("largeop_", "largeop"),
-    Atom("lcm_", "lcm"),
-    Atom("leq_", "leq"),
-    Atom("limit_", "limit"),
-    Atom("linebreak_", "linebreak"),
-    Atom("linebreakmultchar_", "linebreakmultchar"),
-    Atom("linebreakstyle_", "linebreakstyle"),
-    Atom("linethickness_", "linethickness"),
-    Atom("list_", "list"),
-    Atom("ln_", "ln"),
-    Atom("location_", "location"),
-    Atom("logbase_", "logbase"),
-    Atom("log_", "log"),
-    Atom("longdivstyle_", "longdivstyle"),
-    Atom("lowlimit_", "lowlimit"),
-    Atom("lquote_", "lquote"),
-    Atom("lspace_", "lspace"),
-    Atom("lt_", "lt"),
-    Atom("maction_", "maction"),
-    Atom("maligngroup_", "maligngroup"),
-    Atom("malignmark_", "malignmark"),
-    Atom("mathbackground_", "mathbackground"),
-    Atom("mathcolor_", "mathcolor"),
-    Atom("mathsize_", "mathsize"),
-    Atom("mathvariant_", "mathvariant"),
-    Atom("matrixrow_", "matrixrow"),
-    Atom("maxsize_", "maxsize"),
-    Atom("mean_", "mean"),
-    Atom("median_", "median"),
-    Atom("menclose_", "menclose"),
-    Atom("merror_", "merror"),
-    Atom("mfenced_", "mfenced"),
-    Atom("mfrac_", "mfrac"),
-    Atom("mglyph_", "mglyph"),
-    Atom("mi_", "mi"),
-    Atom("minlabelspacing_", "minlabelspacing"),
-    Atom("minsize_", "minsize"),
-    Atom("minus_", "minus"),
-    Atom("mlabeledtr_", "mlabeledtr"),
-    Atom("mlongdiv_", "mlongdiv"),
-    Atom("mmultiscripts_", "mmultiscripts"),
-    Atom("mn_", "mn"),
-    Atom("momentabout_", "momentabout"),
-    Atom("moment_", "moment"),
-    Atom("mo_", "mo"),
-    Atom("movablelimits_", "movablelimits"),
-    Atom("mover_", "mover"),
-    Atom("mpadded_", "mpadded"),
-    Atom("mphantom_", "mphantom"),
-    Atom("mprescripts_", "mprescripts"),
-    Atom("mroot_", "mroot"),
-    Atom("mrow_", "mrow"),
-    Atom("mscarries_", "mscarries"),
-    Atom("mscarry_", "mscarry"),
-    Atom("msgroup_", "msgroup"),
-    Atom("msline_", "msline"),
-    Atom("ms_", "ms"),
-    Atom("mspace_", "mspace"),
-    Atom("msqrt_", "msqrt"),
-    Atom("msrow_", "msrow"),
-    Atom("mstack_", "mstack"),
-    Atom("mstyle_", "mstyle"),
-    Atom("msub_", "msub"),
-    Atom("msubsup_", "msubsup"),
-    Atom("msup_", "msup"),
-    Atom("mtable_", "mtable"),
-    Atom("mtd_", "mtd"),
-    Atom("mtext_", "mtext"),
-    Atom("mtr_", "mtr"),
-    Atom("munder_", "munder"),
-    Atom("munderover_", "munderover"),
-    Atom("naturalnumbers_", "naturalnumbers"),
-    Atom("neq_", "neq"),
-    Atom("notanumber_", "notanumber"),
-    Atom("notation_", "notation"),
-    Atom("note_", "note"),
-    Atom("notin_", "notin"),
-    Atom("notprsubset_", "notprsubset"),
-    Atom("notsubset_", "notsubset"),
-    Atom("numalign_", "numalign"),
-    Atom("other", "other"),
-    Atom("outerproduct_", "outerproduct"),
-    Atom("partialdiff_", "partialdiff"),
-    Atom("piece_", "piece"),
-    Atom("piecewise_", "piecewise"),
-    Atom("pi_", "pi"),
-    Atom("plus_", "plus"),
-    Atom("power_", "power"),
-    Atom("primes_", "primes"),
-    Atom("product_", "product"),
-    Atom("prsubset_", "prsubset"),
-    Atom("quotient_", "quotient"),
-    Atom("rationals_", "rationals"),
-    Atom("real_", "real"),
-    Atom("reals_", "reals"),
-    Atom("reln_", "reln"),
-    Atom("root_", "root"),
-    Atom("rowalign_", "rowalign"),
-    Atom("rowlines_", "rowlines"),
-    Atom("rowspacing_", "rowspacing"),
-    Atom("rquote_", "rquote"),
-    Atom("rspace_", "rspace"),
-    Atom("scalarproduct_", "scalarproduct"),
-    Atom("schemaLocation_", "schemaLocation"),
-    Atom("scriptlevel_", "scriptlevel"),
-    Atom("scriptminsize_", "scriptminsize"),
-    Atom("scriptsizemultiplier_", "scriptsizemultiplier"),
-    Atom("scriptsize_", "scriptsize"),
-    Atom("sdev_", "sdev"),
-    Atom("sech_", "sech"),
-    Atom("sec_", "sec"),
-    Atom("selection_", "selection"),
-    Atom("selector_", "selector"),
-    Atom("semantics_", "semantics"),
-    Atom("separator_", "separator"),
-    Atom("separators_", "separators"),
-    Atom("sep_", "sep"),
-    Atom("setdiff_", "setdiff"),
-    # Atom("set_", "set"),  # "set" is present above
-    Atom("share_", "share"),
-    Atom("shift_", "shift"),
-    Atom("side_", "side"),
-    Atom("sinh_", "sinh"),
-    Atom("sin_", "sin"),
-    Atom("stackalign_", "stackalign"),
-    Atom("stretchy_", "stretchy"),
-    Atom("subscriptshift_", "subscriptshift"),
-    Atom("subset_", "subset"),
-    Atom("superscriptshift_", "superscriptshift"),
-    Atom("symmetric_", "symmetric"),
-    Atom("tanh_", "tanh"),
-    Atom("tan_", "tan"),
-    Atom("tendsto_", "tendsto"),
-    Atom("times_", "times"),
-    Atom("transpose_", "transpose"),
-    Atom("union_", "union"),
-    Atom("uplimit_", "uplimit"),
-    Atom("variance_", "variance"),
-    Atom("vectorproduct_", "vectorproduct"),
-    Atom("vector_", "vector"),
-    Atom("voffset_", "voffset"),
-    Atom("xref_", "xref"),
-    Atom("math", "math"),  # the only one without an underscore
-    Atom("booleanFromString", "boolean-from-string"),
-    Atom("countNonEmpty", "count-non-empty"),
-    Atom("daysFromDate", "days-from-date"),
-    Atom("secondsFromDateTime", "seconds-from-dateTime"),
-
-    # Simple gestures support
-    Atom("onMozSwipeGestureMayStart", "onMozSwipeGestureMayStart"),
-    Atom("onMozSwipeGestureStart", "onMozSwipeGestureStart"),
-    Atom("onMozSwipeGestureUpdate", "onMozSwipeGestureUpdate"),
-    Atom("onMozSwipeGestureEnd", "onMozSwipeGestureEnd"),
-    Atom("onMozSwipeGesture", "onMozSwipeGesture"),
-    Atom("onMozMagnifyGestureStart", "onMozMagnifyGestureStart"),
-    Atom("onMozMagnifyGestureUpdate", "onMozMagnifyGestureUpdate"),
-    Atom("onMozMagnifyGesture", "onMozMagnifyGesture"),
-    Atom("onMozRotateGestureStart", "onMozRotateGestureStart"),
-    Atom("onMozRotateGestureUpdate", "onMozRotateGestureUpdate"),
-    Atom("onMozRotateGesture", "onMozRotateGesture"),
-    Atom("onMozTapGesture", "onMozTapGesture"),
-    Atom("onMozPressTapGesture", "onMozPressTapGesture"),
-    Atom("onMozEdgeUIStarted", "onMozEdgeUIStarted"),
-    Atom("onMozEdgeUICanceled", "onMozEdgeUICanceled"),
-    Atom("onMozEdgeUICompleted", "onMozEdgeUICompleted"),
-
-    # Pointer events
-    Atom("onpointerdown", "onpointerdown"),
-    Atom("onpointermove", "onpointermove"),
-    Atom("onpointerup", "onpointerup"),
-    Atom("onpointercancel", "onpointercancel"),
-    Atom("onpointerover", "onpointerover"),
-    Atom("onpointerout", "onpointerout"),
-    Atom("onpointerenter", "onpointerenter"),
-    Atom("onpointerleave", "onpointerleave"),
-    Atom("ongotpointercapture", "ongotpointercapture"),
-    Atom("onlostpointercapture", "onlostpointercapture"),
-
-    # orientation support
-    Atom("ondevicemotion", "ondevicemotion"),
-    Atom("ondeviceorientation", "ondeviceorientation"),
-    Atom("onabsolutedeviceorientation", "onabsolutedeviceorientation"),
-    Atom("ondeviceproximity", "ondeviceproximity"),
-    Atom("onmozorientationchange", "onmozorientationchange"),
-    Atom("onuserproximity", "onuserproximity"),
-
-    # light sensor support
-    Atom("ondevicelight", "ondevicelight"),
-
-    # MediaDevices device change event
-    Atom("ondevicechange", "ondevicechange"),
-
-    # WebExtensions
-    Atom("moz_extension", "moz-extension"),
-    Atom("all_urlsPermission", "<all_urls>"),
-    Atom("clipboardRead", "clipboardRead"),
-    Atom("clipboardWrite", "clipboardWrite"),
-    Atom("debugger", "debugger"),
-    Atom("mozillaAddons", "mozillaAddons"),
-    Atom("tabs", "tabs"),
-    Atom("webRequestBlocking", "webRequestBlocking"),
-    Atom("http", "http"),
-    Atom("https", "https"),
-    Atom("proxy", "proxy"),
-
-    # --------------------------------------------------------------------------
-    # Special atoms
-    # --------------------------------------------------------------------------
-
-    # Node types
-    Atom("cdataTagName", "#cdata-section"),
-    Atom("commentTagName", "#comment"),
-    Atom("documentNodeName", "#document"),
-    Atom("documentFragmentNodeName", "#document-fragment"),
-    Atom("documentTypeNodeName", "#document-type"),
-    Atom("processingInstructionTagName", "#processing-instruction"),
-    Atom("textTagName", "#text"),
-
-    # Frame types
-    #
-    # TODO(emilio): Rename this? This is only used now to mark the style context of
-    # the placeholder with a dummy pseudo.
-    Atom("placeholderFrame", "PlaceholderFrame"),
-
-    Atom("onloadend", "onloadend"),
-    Atom("onloadstart", "onloadstart"),
-    Atom("onprogress", "onprogress"),
-    Atom("onsuspend", "onsuspend"),
-    Atom("onemptied", "onemptied"),
-    Atom("onstalled", "onstalled"),
-    Atom("onplay", "onplay"),
-    Atom("onpause", "onpause"),
-    Atom("onloadedmetadata", "onloadedmetadata"),
-    Atom("onloadeddata", "onloadeddata"),
-    Atom("onwaiting", "onwaiting"),
-    Atom("onplaying", "onplaying"),
-    Atom("oncanplay", "oncanplay"),
-    Atom("oncanplaythrough", "oncanplaythrough"),
-    Atom("onseeking", "onseeking"),
-    Atom("onseeked", "onseeked"),
-    Atom("ontimeout", "ontimeout"),
-    Atom("ontimeupdate", "ontimeupdate"),
-    Atom("onended", "onended"),
-    Atom("onratechange", "onratechange"),
-    Atom("ondurationchange", "ondurationchange"),
-    Atom("onvolumechange", "onvolumechange"),
-    Atom("onaddtrack", "onaddtrack"),
-    Atom("oncontrollerchange", "oncontrollerchange"),
-    Atom("oncuechange", "oncuechange"),
-    Atom("onenter", "onenter"),
-    Atom("onexit", "onexit"),
-    Atom("onencrypted", "onencrypted"),
-    Atom("onwaitingforkey", "onwaitingforkey"),
-    Atom("onkeystatuseschange", "onkeystatuseschange"),
-    Atom("onremovetrack", "onremovetrack"),
-    Atom("loadstart", "loadstart"),
-    Atom("suspend", "suspend"),
-    Atom("emptied", "emptied"),
-    Atom("play", "play"),
-    Atom("pause", "pause"),
-    Atom("loadedmetadata", "loadedmetadata"),
-    Atom("loadeddata", "loadeddata"),
-    Atom("waiting", "waiting"),
-    Atom("playing", "playing"),
-    Atom("timeupdate", "timeupdate"),
-    Atom("canplay", "canplay"),
-    Atom("canplaythrough", "canplaythrough"),
-    Atom("ondataavailable", "ondataavailable"),
-    Atom("onwarning", "onwarning"),
-    Atom("onstart", "onstart"),
-    Atom("onstop", "onstop"),
-    Atom("onphoto", "onphoto"),
-    Atom("ongamepadbuttondown", "ongamepadbuttondown"),
-    Atom("ongamepadbuttonup", "ongamepadbuttonup"),
-    Atom("ongamepadaxismove", "ongamepadaxismove"),
-    Atom("ongamepadconnected", "ongamepadconnected"),
-    Atom("ongamepaddisconnected", "ongamepaddisconnected"),
-    Atom("onfetch", "onfetch"),
-
-    # Content property names
-    Atom("afterPseudoProperty", "afterPseudoProperty"),  # nsXMLElement*
-    Atom("animationsProperty", "AnimationsProperty"),        # FrameAnimations*
-    Atom("animationsOfBeforeProperty", "AnimationsOfBeforeProperty"),  # FrameAnimations*
-    Atom("animationsOfAfterProperty", "AnimationsOfAfterProperty"),  # FrameAnimations*
-    Atom("animationEffectsProperty", "AnimationEffectsProperty"),  # EffectSet*
-    Atom("animationEffectsForBeforeProperty", "AnimationsEffectsForBeforeProperty"),  # EffectSet*
-    Atom("animationEffectsForAfterProperty", "AnimationsEffectsForAfterProperty"),  # EffectSet*
-    Atom("beforePseudoProperty", "beforePseudoProperty"),  # nsXMLElement*
-    Atom("cssPseudoElementBeforeProperty", "CSSPseudoElementBeforeProperty"),  # CSSPseudoElement*
-    Atom("cssPseudoElementAfterProperty", "CSSPseudoElementAfterProperty"),  # CSSPseudoElement*
-    Atom("transitionsProperty", "TransitionsProperty"),        # FrameTransitions*
-    Atom("transitionsOfBeforeProperty", "TransitionsOfBeforeProperty"),  # FrameTransitions*
-    Atom("transitionsOfAfterProperty", "TransitionsOfAfterProperty"),  # FrameTransitions*
-    Atom("genConInitializerProperty", "QuoteNodeProperty"),
-    Atom("labelMouseDownPtProperty", "LabelMouseDownPtProperty"),
-    Atom("lockedStyleStates", "lockedStyleStates"),
-    Atom("apzCallbackTransform", "apzCallbackTransform"),
-    Atom("restylableAnonymousNode", "restylableAnonymousNode"),  # bool
-    Atom("docLevelNativeAnonymousContent", "docLevelNativeAnonymousContent"),  # bool
-    Atom("paintRequestTime", "PaintRequestTime"),
-    Atom("pseudoProperty", "PseudoProperty"),  # CSSPseudoElementType
-    Atom("manualNACProperty", "ManualNACProperty"),  # ManualNAC*
-
-    # Languages for lang-specific transforms
-    Atom("Japanese", "ja"),
-    Atom("Chinese", "zh-CN"),
-    Atom("Taiwanese", "zh-TW"),
-    Atom("HongKongChinese", "zh-HK"),
-    Atom("Unicode", "x-unicode"),
-
-    # language codes specifically referenced in the gfx code
-    Atom("ko", "ko"),
-    Atom("zh_cn", "zh-cn"),
-    Atom("zh_tw", "zh-tw"),
-
-    # additional codes used in nsUnicodeRange.cpp
-    Atom("x_cyrillic", "x-cyrillic"),
-    Atom("he", "he"),
-    Atom("ar", "ar"),
-    Atom("x_devanagari", "x-devanagari"),
-    Atom("x_tamil", "x-tamil"),
-    Atom("x_armn", "x-armn"),
-    Atom("x_beng", "x-beng"),
-    Atom("x_cans", "x-cans"),
-    Atom("x_ethi", "x-ethi"),
-    Atom("x_geor", "x-geor"),
-    Atom("x_gujr", "x-gujr"),
-    Atom("x_guru", "x-guru"),
-    Atom("x_khmr", "x-khmr"),
-    Atom("x_knda", "x-knda"),
-    Atom("x_mlym", "x-mlym"),
-    Atom("x_orya", "x-orya"),
-    Atom("x_sinh", "x-sinh"),
-    Atom("x_telu", "x-telu"),
-    Atom("x_tibt", "x-tibt"),
-
-    # additional languages that have special case transformations
-    Atom("az", "az"),
-    Atom("ba", "ba"),
-    Atom("crh", "crh"),
-    # Atom("el", "el"),  # "el" is present above
-    Atom("ga", "ga"),
-    Atom("nl", "nl"),
-
-    # mathematical language, used for MathML
-    Atom("x_math", "x-math"),
-
-    # Names for editor transactions
-    Atom("TypingTxnName", "Typing"),
-    Atom("IMETxnName", "IME"),
-    Atom("DeleteTxnName", "Deleting"),
-
-    # Font families
-    Atom("serif", "serif"),
-    Atom("sans_serif", "sans-serif"),
-    Atom("cursive", "cursive"),
-    Atom("fantasy", "fantasy"),
-    Atom("monospace", "monospace"),
-    Atom("mozfixed", "-moz-fixed"),
-
-    # IPC stuff
-    # Atom("Remote", "remote"),  # "remote" is present above
-    Atom("RemoteId", "_remote_id"),
-    Atom("RemoteType", "remoteType"),
-    Atom("DisplayPort", "_displayport"),
-    Atom("DisplayPortMargins", "_displayportmargins"),
-    Atom("DisplayPortBase", "_displayportbase"),
-    Atom("forcemessagemanager", "forcemessagemanager"),
-    Atom("preloadedState", "preloadedState"),
-    Atom("RecordExecution", "recordExecution"),
-    Atom("ReplayExecution", "replayExecution"),
-
-    # Names for system metrics
-    Atom("scrollbar_start_backward", "scrollbar-start-backward"),
-    Atom("scrollbar_start_forward", "scrollbar-start-forward"),
-    Atom("scrollbar_end_backward", "scrollbar-end-backward"),
-    Atom("scrollbar_end_forward", "scrollbar-end-forward"),
-    Atom("scrollbar_thumb_proportional", "scrollbar-thumb-proportional"),
-    Atom("overlay_scrollbars", "overlay-scrollbars"),
-    Atom("windows_accent_color_in_titlebar", "windows-accent-color-in-titlebar"),
-    Atom("windows_default_theme", "windows-default-theme"),
-    Atom("mac_graphite_theme", "mac-graphite-theme"),
-    Atom("mac_yosemite_theme", "mac-yosemite-theme"),
-    Atom("windows_compositor", "windows-compositor"),
-    Atom("windows_classic", "windows-classic"),
-    Atom("windows_glass", "windows-glass"),
-    Atom("touch_enabled", "touch-enabled"),
-    Atom("menubar_drag", "menubar-drag"),
-    Atom("swipe_animation_enabled", "swipe-animation-enabled"),
-    Atom("gtk_csd_available", "gtk-csd-available"),
-    Atom("gtk_csd_minimize_button", "gtk-csd-minimize-button"),
-    Atom("gtk_csd_maximize_button", "gtk-csd-maximize-button"),
-    Atom("gtk_csd_close_button", "gtk-csd-close-button"),
-    Atom("system_dark_theme", "system-dark-theme"),
-
-    # windows media query names
-    Atom("windows_win7", "windows-win7"),
-    Atom("windows_win8", "windows-win8"),
-    Atom("windows_win10", "windows-win10"),
-
-    # And the same again, as media query keywords.
-    Atom("_moz_scrollbar_start_backward", "-moz-scrollbar-start-backward"),
-    Atom("_moz_scrollbar_start_forward", "-moz-scrollbar-start-forward"),
-    Atom("_moz_scrollbar_end_backward", "-moz-scrollbar-end-backward"),
-    Atom("_moz_scrollbar_end_forward", "-moz-scrollbar-end-forward"),
-    Atom("_moz_scrollbar_thumb_proportional", "-moz-scrollbar-thumb-proportional"),
-    Atom("_moz_overlay_scrollbars", "-moz-overlay-scrollbars"),
-    Atom("_moz_windows_accent_color_in_titlebar", "-moz-windows-accent-color-in-titlebar"),
-    Atom("_moz_windows_default_theme", "-moz-windows-default-theme"),
-    Atom("_moz_mac_graphite_theme", "-moz-mac-graphite-theme"),
-    Atom("_moz_mac_yosemite_theme", "-moz-mac-yosemite-theme"),
-    Atom("_moz_windows_compositor", "-moz-windows-compositor"),
-    Atom("_moz_windows_classic", "-moz-windows-classic"),
-    Atom("_moz_windows_glass", "-moz-windows-glass"),
-    Atom("_moz_os_version", "-moz-os-version"),
-    Atom("_moz_touch_enabled", "-moz-touch-enabled"),
-    Atom("_moz_menubar_drag", "-moz-menubar-drag"),
-    Atom("_moz_device_pixel_ratio", "-moz-device-pixel-ratio"),
-    Atom("_moz_device_orientation", "-moz-device-orientation"),
-    Atom("_moz_is_resource_document", "-moz-is-resource-document"),
-    Atom("_moz_swipe_animation_enabled", "-moz-swipe-animation-enabled"),
-    Atom("_moz_gtk_csd_available", "-moz-gtk-csd-available"),
-    Atom("_moz_gtk_csd_minimize_button", "-moz-gtk-csd-minimize-button"),
-    Atom("_moz_gtk_csd_maximize_button", "-moz-gtk-csd-maximize-button"),
-    Atom("_moz_gtk_csd_close_button", "-moz-gtk-csd-close-button"),
-    Atom("_moz_system_dark_theme", "-moz-system-dark-theme"),
-
-    # application commands
-    Atom("Back", "Back"),
-    Atom("Forward", "Forward"),
-    Atom("Reload", "Reload"),
-    Atom("Stop", "Stop"),
-    Atom("Search", "Search"),
-    Atom("Bookmarks", "Bookmarks"),
-    Atom("Home", "Home"),
-    Atom("NextTrack", "NextTrack"),
-    Atom("PreviousTrack", "PreviousTrack"),
-    Atom("MediaStop", "MediaStop"),
-    Atom("PlayPause", "PlayPause"),
-    Atom("New", "New"),
-    Atom("Open", "Open"),
-    Atom("Close", "Close"),
-    Atom("Save", "Save"),
-    Atom("Find", "Find"),
-    Atom("Help", "Help"),
-    Atom("Print", "Print"),
-    Atom("SendMail", "SendMail"),
-    Atom("ForwardMail", "ForwardMail"),
-    Atom("ReplyToMail", "ReplyToMail"),
-
-    # Scroll origins (these are used in various scrolling functions in
-    # nsIScrollableFrame and ScrollFrameHelper). These are divided into two lists
-    # - origins in the first one have smooth-scrolling prefs associated with them,
-    # under the "general.smoothScroll.<origin>.*" pref branch. Origins in the
-    # second one do not.
-    Atom("mouseWheel", "mouseWheel"),  # For discrete wheel events (e.g. not OSX magic mouse)
-    Atom("pixels",     "pixels"),
-    Atom("lines",      "lines"),
-    Atom("pages",      "pages"),
-    Atom("scrollbars", "scrollbars"),
-    # Atom("other",      "other"),  # "other" is present above
-    # Scroll origins without smooth-scrolling prefs
-    Atom("apz",        "apz"),
-    Atom("restore",    "restore"),
-
-    Atom("alert", "alert"),
-    Atom("alertdialog", "alertdialog"),
-    Atom("application", "application"),
-    Atom("aria_colcount", "aria-colcount"),
-    Atom("aria_colindex", "aria-colindex"),
-    Atom("aria_details", "aria-details"),
-    Atom("aria_errormessage", "aria-errormessage"),
-    Atom("aria_grabbed", "aria-grabbed"),
-    Atom("aria_label", "aria-label"),
-    Atom("aria_modal", "aria-modal"),
-    Atom("aria_orientation", "aria-orientation"),
-    Atom("aria_rowcount", "aria-rowcount"),
-    Atom("aria_rowindex", "aria-rowindex"),
-    Atom("aria_valuetext", "aria-valuetext"),
-    Atom("auto_generated", "auto-generated"),
-    Atom("banner", "banner"),
-    Atom("checkable", "checkable"),
-    Atom("columnheader", "columnheader"),
-    Atom("complementary", "complementary"),
-    Atom("containerAtomic", "container-atomic"),
-    Atom("containerBusy", "container-busy"),
-    Atom("containerLive", "container-live"),
-    Atom("containerLiveRole", "container-live-role"),
-    Atom("containerRelevant", "container-relevant"),
-    Atom("contentinfo", "contentinfo"),
-    Atom("cycles", "cycles"),
-    Atom("datatable", "datatable"),
-    Atom("eventFromInput", "event-from-input"),
-    Atom("feed", "feed"),
-    Atom("grammar", "grammar"),
-    Atom("gridcell", "gridcell"),
-    Atom("heading", "heading"),
-    Atom("hitregion", "hitregion"),
-    Atom("inlinevalue", "inline"),
-    Atom("invalid", "invalid"),
-    Atom("lineNumber", "line-number"),
-    Atom("live", "live"),
-    Atom("menuitemcheckbox", "menuitemcheckbox"),
-    Atom("menuitemradio", "menuitemradio"),
-    # Atom("mixed", "mixed"),  # "mixed" is present above
-    Atom("navigation", "navigation"),
-    Atom("polite", "polite"),
-    Atom("posinset", "posinset"),
-    Atom("presentation", "presentation"),
-    Atom("progressbar", "progressbar"),
-    Atom("region", "region"),
-    Atom("rowgroup", "rowgroup"),
-    Atom("rowheader", "rowheader"),
-    Atom("search", "search"),
-    Atom("searchbox", "searchbox"),
-    Atom("setsize", "setsize"),
-    Atom("spelling", "spelling"),
-    Atom("spinbutton", "spinbutton"),
-    Atom("status", "status"),
-    Atom("tableCellIndex", "table-cell-index"),
-    Atom("tablist", "tablist"),
-    Atom("textIndent", "text-indent"),
-    Atom("textInputType", "text-input-type"),
-    Atom("textLineThroughColor", "text-line-through-color"),
-    Atom("textLineThroughStyle", "text-line-through-style"),
-    Atom("textPosition", "text-position"),
-    Atom("textUnderlineColor", "text-underline-color"),
-    Atom("textUnderlineStyle", "text-underline-style"),
-    Atom("timer", "timer"),
-    Atom("toolbarname", "toolbarname"),
-    Atom("toolbarseparator", "toolbarseparator"),
-    Atom("toolbarspacer", "toolbarspacer"),
-    Atom("toolbarspring", "toolbarspring"),
-    Atom("treegrid", "treegrid"),
-    Atom("_undefined", "undefined"),
-    Atom("xmlroles", "xml-roles"),
-
-    # MathML xml roles
-    Atom("close_fence", "close-fence"),
-    Atom("denominator", "denominator"),
-    Atom("numerator", "numerator"),
-    Atom("open_fence", "open-fence"),
-    Atom("overscript", "overscript"),
-    Atom("presubscript", "presubscript"),
-    Atom("presuperscript", "presuperscript"),
-    Atom("root_index", "root-index"),
-    Atom("subscript", "subscript"),
-    Atom("superscript", "superscript"),
-    Atom("underscript", "underscript"),
-
-    Atom("onaudiostart", "onaudiostart"),
-    Atom("onaudioend", "onaudioend"),
-    Atom("onsoundstart", "onsoundstart"),
-    Atom("onsoundend", "onsoundend"),
-    Atom("onspeechstart", "onspeechstart"),
-    Atom("onspeechend", "onspeechend"),
-    Atom("onresult", "onresult"),
-    Atom("onnomatch", "onnomatch"),
-    Atom("onresume", "onresume"),
-    Atom("onmark", "onmark"),
-    Atom("onboundary", "onboundary"),
-
-    # Contextual Identity / Containers
-    Atom("usercontextid", "usercontextid"),
-
-    # Namespaces
-    Atom("nsuri_xmlns", "http://www.w3.org/2000/xmlns/"),
-    Atom("nsuri_xml", "http://www.w3.org/XML/1998/namespace"),
-    Atom("nsuri_xhtml", "http://www.w3.org/1999/xhtml"),
-    Atom("nsuri_xlink", "http://www.w3.org/1999/xlink"),
-    Atom("nsuri_xslt", "http://www.w3.org/1999/XSL/Transform"),
-    Atom("nsuri_xbl", "http://www.mozilla.org/xbl"),
-    Atom("nsuri_mathml", "http://www.w3.org/1998/Math/MathML"),
-    Atom("nsuri_rdf", "http://www.w3.org/1999/02/22-rdf-syntax-ns#"),
-    Atom("nsuri_xul", "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"),
-    Atom("nsuri_svg", "http://www.w3.org/2000/svg"),
-
-    # MSE
-    Atom("onsourceopen", "onsourceopen"),
-    Atom("onsourceended", "onsourceended"),
-    Atom("onsourceclosed", "onsourceclosed"),
-    Atom("onupdatestart", "onupdatestart"),
-    Atom("onupdate", "onupdate"),
-    Atom("onupdateend", "onupdateend"),
-    Atom("onaddsourcebuffer", "onaddsourcebuffer"),
-    Atom("onremovesourcebuffer", "onremovesourcebuffer"),
-
-    # RDF
-    Atom("about", "about"),
-    Atom("ID", "ID"),
-    Atom("nodeID", "nodeID"),
-    Atom("aboutEach", "aboutEach"),
-    Atom("resource", "resource"),
-    Atom("RDF", "RDF"),
-    Atom("Description", "Description"),
-    Atom("Bag", "Bag"),
-    Atom("Seq", "Seq"),
-    Atom("Alt", "Alt"),
-    # Atom("kLiAtom", "li"),  # "li" is present above
-    # Atom("kXMLNSAtom", "xmlns"),  # "xmlns" is present above
-    Atom("parseType", "parseType"),
-
-    # Directory service
-    Atom("DirectoryService_CurrentProcess", "XCurProcD"),
-    Atom("DirectoryService_GRE_Directory", "GreD"),
-    Atom("DirectoryService_GRE_BinDirectory", "GreBinD"),
-    Atom("DirectoryService_OS_TemporaryDirectory", "TmpD"),
-    Atom("DirectoryService_OS_CurrentProcessDirectory", "CurProcD"),
-    Atom("DirectoryService_OS_CurrentWorkingDirectory", "CurWorkD"),
-    # Atom("DirectoryService_OS_HomeDirectory", "Home"),  # "Home" is present above
-    Atom("DirectoryService_OS_DesktopDirectory", "Desk"),
-    Atom("DirectoryService_InitCurrentProcess_dummy", "MozBinD"),
-    Atom("DirectoryService_SystemDirectory", "SysD"),
-    Atom("DirectoryService_UserLibDirectory", "ULibDir"),
-    Atom("DirectoryService_DefaultDownloadDirectory", "DfltDwnld"),
-    Atom("DirectoryService_LocalApplicationsDirectory", "LocApp"),
-    Atom("DirectoryService_UserPreferencesDirectory", "UsrPrfs"),
-    Atom("DirectoryService_PictureDocumentsDirectory", "Pct"),
-    Atom("DirectoryService_WindowsDirectory", "WinD"),
-    Atom("DirectoryService_WindowsProgramFiles", "ProgF"),
-    Atom("DirectoryService_Programs", "Progs"),
-    Atom("DirectoryService_Favorites", "Favs"),
-    Atom("DirectoryService_Appdata", "AppData"),
-    Atom("DirectoryService_LocalAppdata", "LocalAppData"),
-    Atom("DirectoryService_LocalAppdataLow", "LocalAppDataLow"),
-    Atom("DirectoryService_LowIntegrityTempBase", "LowTmpDBase"),
-    Atom("DirectoryService_WinCookiesDirectory", "CookD"),
-
-    # CSS pseudo-elements -- these must appear in the same order as
-    # in nsCSSPseudoElementList.h
-    PseudoElementAtom("PseudoElement_after", ":after"),
-    PseudoElementAtom("PseudoElement_before", ":before"),
-    PseudoElementAtom("PseudoElement_backdrop", ":backdrop"),
-    PseudoElementAtom("PseudoElement_cue", ":cue"),
-    PseudoElementAtom("PseudoElement_firstLetter", ":first-letter"),
-    PseudoElementAtom("PseudoElement_firstLine", ":first-line"),
-    PseudoElementAtom("PseudoElement_selection", ":selection"),
-    PseudoElementAtom("PseudoElement_mozFocusInner", ":-moz-focus-inner"),
-    PseudoElementAtom("PseudoElement_mozFocusOuter", ":-moz-focus-outer"),
-    PseudoElementAtom("PseudoElement_mozListBullet", ":-moz-list-bullet"),
-    PseudoElementAtom("PseudoElement_mozListNumber", ":-moz-list-number"),
-    PseudoElementAtom("PseudoElement_mozMathAnonymous", ":-moz-math-anonymous"),
-    PseudoElementAtom("PseudoElement_mozNumberWrapper", ":-moz-number-wrapper"),
-    PseudoElementAtom("PseudoElement_mozNumberText", ":-moz-number-text"),
-    PseudoElementAtom("PseudoElement_mozNumberSpinBox", ":-moz-number-spin-box"),
-    PseudoElementAtom("PseudoElement_mozNumberSpinUp", ":-moz-number-spin-up"),
-    PseudoElementAtom("PseudoElement_mozNumberSpinDown", ":-moz-number-spin-down"),
-    PseudoElementAtom("PseudoElement_mozProgressBar", ":-moz-progress-bar"),
-    PseudoElementAtom("PseudoElement_mozRangeTrack", ":-moz-range-track"),
-    PseudoElementAtom("PseudoElement_mozRangeProgress", ":-moz-range-progress"),
-    PseudoElementAtom("PseudoElement_mozRangeThumb", ":-moz-range-thumb"),
-    PseudoElementAtom("PseudoElement_mozMeterBar", ":-moz-meter-bar"),
-    PseudoElementAtom("PseudoElement_placeholder", ":placeholder"),
-    PseudoElementAtom("PseudoElement_mozColorSwatch", ":-moz-color-swatch"),
-
-    # CSS anonymous boxes -- these must appear in the same order as
-    # in nsCSSAnonBoxList.h
-    NonInheritingAnonBoxAtom("AnonBox_oofPlaceholder", ":-moz-oof-placeholder"),
-    NonInheritingAnonBoxAtom("AnonBox_horizontalFramesetBorder", ":-moz-hframeset-border"),
-    NonInheritingAnonBoxAtom("AnonBox_verticalFramesetBorder", ":-moz-vframeset-border"),
-    NonInheritingAnonBoxAtom("AnonBox_framesetBlank", ":-moz-frameset-blank"),
-    NonInheritingAnonBoxAtom("AnonBox_tableColGroup", ":-moz-table-column-group"),
-    NonInheritingAnonBoxAtom("AnonBox_tableCol", ":-moz-table-column"),
-    NonInheritingAnonBoxAtom("AnonBox_pageBreak", ":-moz-pagebreak"),
-    InheritingAnonBoxAtom("AnonBox_mozText", ":-moz-text"),
-    InheritingAnonBoxAtom("AnonBox_firstLetterContinuation", ":-moz-first-letter-continuation"),
-    InheritingAnonBoxAtom("AnonBox_mozBlockInsideInlineWrapper", ":-moz-block-inside-inline-wrapper"),
-    InheritingAnonBoxAtom("AnonBox_mozMathMLAnonymousBlock", ":-moz-mathml-anonymous-block"),
-    InheritingAnonBoxAtom("AnonBox_mozXULAnonymousBlock", ":-moz-xul-anonymous-block"),
-    InheritingAnonBoxAtom("AnonBox_mozLineFrame", ":-moz-line-frame"),
-    InheritingAnonBoxAtom("AnonBox_buttonContent", ":-moz-button-content"),
-    InheritingAnonBoxAtom("AnonBox_cellContent", ":-moz-cell-content"),
-    InheritingAnonBoxAtom("AnonBox_dropDownList", ":-moz-dropdown-list"),
-    InheritingAnonBoxAtom("AnonBox_fieldsetContent", ":-moz-fieldset-content"),
-    InheritingAnonBoxAtom("AnonBox_mozDisplayComboboxControlFrame", ":-moz-display-comboboxcontrol-frame"),
-    InheritingAnonBoxAtom("AnonBox_htmlCanvasContent", ":-moz-html-canvas-content"),
-    InheritingAnonBoxAtom("AnonBox_inlineTable", ":-moz-inline-table"),
-    InheritingAnonBoxAtom("AnonBox_table", ":-moz-table"),
-    InheritingAnonBoxAtom("AnonBox_tableCell", ":-moz-table-cell"),
-    InheritingAnonBoxAtom("AnonBox_tableWrapper", ":-moz-table-wrapper"),
-    InheritingAnonBoxAtom("AnonBox_tableRowGroup", ":-moz-table-row-group"),
-    InheritingAnonBoxAtom("AnonBox_tableRow", ":-moz-table-row"),
-    InheritingAnonBoxAtom("AnonBox_canvas", ":-moz-canvas"),
-    InheritingAnonBoxAtom("AnonBox_page", ":-moz-page"),
-    InheritingAnonBoxAtom("AnonBox_pageContent", ":-moz-pagecontent"),
-    InheritingAnonBoxAtom("AnonBox_pageSequence", ":-moz-page-sequence"),
-    InheritingAnonBoxAtom("AnonBox_scrolledContent", ":-moz-scrolled-content"),
-    InheritingAnonBoxAtom("AnonBox_scrolledCanvas", ":-moz-scrolled-canvas"),
-    InheritingAnonBoxAtom("AnonBox_scrolledPageSequence", ":-moz-scrolled-page-sequence"),
-    InheritingAnonBoxAtom("AnonBox_columnContent", ":-moz-column-content"),
-    InheritingAnonBoxAtom("AnonBox_viewport", ":-moz-viewport"),
-    InheritingAnonBoxAtom("AnonBox_viewportScroll", ":-moz-viewport-scroll"),
-    InheritingAnonBoxAtom("AnonBox_anonymousFlexItem", ":-moz-anonymous-flex-item"),
-    InheritingAnonBoxAtom("AnonBox_anonymousGridItem", ":-moz-anonymous-grid-item"),
-    InheritingAnonBoxAtom("AnonBox_ruby", ":-moz-ruby"),
-    InheritingAnonBoxAtom("AnonBox_rubyBase", ":-moz-ruby-base"),
-    InheritingAnonBoxAtom("AnonBox_rubyBaseContainer", ":-moz-ruby-base-container"),
-    InheritingAnonBoxAtom("AnonBox_rubyText", ":-moz-ruby-text"),
-    InheritingAnonBoxAtom("AnonBox_rubyTextContainer", ":-moz-ruby-text-container"),
-    InheritingAnonBoxAtom("AnonBox_mozTreeColumn", ":-moz-tree-column"),
-    InheritingAnonBoxAtom("AnonBox_mozTreeRow", ":-moz-tree-row"),
-    InheritingAnonBoxAtom("AnonBox_mozTreeSeparator", ":-moz-tree-separator"),
-    InheritingAnonBoxAtom("AnonBox_mozTreeCell", ":-moz-tree-cell"),
-    InheritingAnonBoxAtom("AnonBox_mozTreeIndentation", ":-moz-tree-indentation"),
-    InheritingAnonBoxAtom("AnonBox_mozTreeLine", ":-moz-tree-line"),
-    InheritingAnonBoxAtom("AnonBox_mozTreeTwisty", ":-moz-tree-twisty"),
-    InheritingAnonBoxAtom("AnonBox_mozTreeImage", ":-moz-tree-image"),
-    InheritingAnonBoxAtom("AnonBox_mozTreeCellText", ":-moz-tree-cell-text"),
-    InheritingAnonBoxAtom("AnonBox_mozTreeCheckbox", ":-moz-tree-checkbox"),
-    InheritingAnonBoxAtom("AnonBox_mozTreeDropFeedback", ":-moz-tree-drop-feedback"),
-    InheritingAnonBoxAtom("AnonBox_mozSVGMarkerAnonChild", ":-moz-svg-marker-anon-child"),
-    InheritingAnonBoxAtom("AnonBox_mozSVGOuterSVGAnonChild", ":-moz-svg-outer-svg-anon-child"),
-    InheritingAnonBoxAtom("AnonBox_mozSVGForeignContent", ":-moz-svg-foreign-content"),
-    InheritingAnonBoxAtom("AnonBox_mozSVGText", ":-moz-svg-text"),
-] + HTML_PARSER_ATOMS
-
-
-def verify():
-    idents = set()
-    strings = set()
-    failed = False
-    for atom in STATIC_ATOMS:
-        if atom.ident in idents:
-            print("StaticAtoms.py: duplicate static atom ident: %s" % atom.ident)
-            failed = True
-        if atom.string in strings:
-            print("StaticAtoms.py: duplicate static atom string: \"%s\"" % atom.string)
-            failed = True
-        idents.add(atom.ident)
-        strings.add(atom.string)
-    if failed:
-        sys.exit(1)
-
-
-def generate_nsgkatomlist_h(output, *ignore):
-    verify()
-    output.write("/* THIS FILE IS AUTOGENERATED BY StaticAtoms.py.  DO NOT EDIT */\n\n"
-                 "// GK_ATOM(identifier, string, hash, gecko_type, atom_type)\n" +
-                 "".join(["GK_ATOM(%s, \"%s\", 0x%08x, %s, %s)\n" %
-                            (a.ident, a.string, a.hash, a.ty, a.atom_type)
-                          for a in STATIC_ATOMS]))
-
-
-def generate_nsgkatomconsts_h(output, *ignore):
-    pseudo_index = None
-    anon_box_index = None
-    pseudo_count = 0
-    anon_box_count = 0
-    for i, atom in enumerate(STATIC_ATOMS):
-        if atom.atom_type is "PseudoElementAtom":
-            if pseudo_index is None:
-                pseudo_index = i
-            pseudo_count += 1
-        elif atom.atom_type is "NonInheritingAnonBoxAtom" or atom.atom_type is "InheritingAnonBoxAtom":
-            if anon_box_index is None:
-                anon_box_index = i
-            anon_box_count += 1
-    output.write("/* THIS IS AN AUTOGENERATED FILE.  DO NOT EDIT */\n\n"
-                 "namespace mozilla {\n"
-                 "  constexpr uint32_t kAtomIndex_PseudoElements = %d;\n"
-                 "  constexpr uint32_t kAtomCount_PseudoElements = %d;\n"
-                 "  constexpr uint32_t kAtomIndex_AnonBoxes = %d;\n"
-                 "  constexpr uint32_t kAtomCount_AnonBoxes = %d;\n"
-                 "}\n" % (pseudo_index, pseudo_count, anon_box_index, anon_box_count))
-
-
-if __name__ == '__main__':
-    generate_nsgkatomlist_h(sys.stdout)
--- a/xpcom/ds/moz.build
+++ b/xpcom/ds/moz.build
@@ -34,42 +34,41 @@ if CONFIG['OS_ARCH'] == 'WINNT':
     EXPORTS += ['nsWindowsRegKey.h']
     SOURCES += [
         'nsWindowsRegKey.cpp'
     ]
 
 XPIDL_MODULE = 'xpcom_ds'
 
 EXPORTS += [
-    '!nsGkAtomConsts.h',
-    '!nsGkAtomList.h',
     'nsArray.h',
     'nsArrayEnumerator.h',
     'nsArrayUtils.h',
     'nsAtom.h',
     'nsBaseHashtable.h',
     'nsCharSeparatedTokenizer.h',
     'nsCheapSets.h',
     'nsClassHashtable.h',
     'nsCOMArray.h',
     'nsCRT.h',
     'nsDataHashtable.h',
     'nsDeque.h',
     'nsEnumeratorUtils.h',
     'nsExpirationTracker.h',
+    'nsGkAtomList.h',
     'nsGkAtoms.h',
     'nsHashKeys.h',
     'nsHashPropertyBag.h',
     'nsInterfaceHashtable.h',
     'nsJSThingHashtable.h',
     'nsMathUtils.h',
     'nsPointerHashKeys.h',
     'nsQuickSort.h',
     'nsRefPtrHashtable.h',
-    'nsStaticAtomUtils.h',
+    'nsStaticAtom.h',
     'nsStaticNameTable.h',
     'nsStringEnumerator.h',
     'nsSupportsPrimitives.h',
     'nsTArray-inl.h',
     'nsTArray.h',
     'nsTArrayForwardDeclare.h',
     'nsTHashtable.h',
     'nsTObserverArray.h',
@@ -133,17 +132,9 @@ EXTRA_COMPONENTS += [
     'nsINIProcessor.js',
     'nsINIProcessor.manifest',
 ]
 
 LOCAL_INCLUDES += [
     '../io',
 ]
 
-GENERATED_FILES += ['nsGkAtomList.h']
-GENERATED_FILES['nsGkAtomList.h'].script = 'StaticAtoms.py:generate_nsgkatomlist_h'
-GENERATED_FILES['nsGkAtomList.h'].inputs = ['Atom.py', 'HTMLAtoms.py']
-
-GENERATED_FILES += ['nsGkAtomConsts.h']
-GENERATED_FILES['nsGkAtomConsts.h'].script = 'StaticAtoms.py:generate_nsgkatomconsts_h'
-GENERATED_FILES['nsGkAtomConsts.h'].inputs = ['Atom.py', 'HTMLAtoms.py']
-
 FINAL_LIBRARY = 'xul'
--- a/xpcom/ds/nsAtom.h
+++ b/xpcom/ds/nsAtom.h
@@ -4,16 +4,17 @@
  * 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/. */
 
 #ifndef nsAtom_h
 #define nsAtom_h
 
 #include "nsISupportsImpl.h"
 #include "nsString.h"
+#include "mozilla/HashFunctions.h"
 #include "mozilla/UniquePtr.h"
 
 namespace mozilla {
 struct AtomsSizes;
 }
 
 class nsStaticAtom;
 class nsDynamicAtom;
@@ -98,20 +99,20 @@ public:
   // of this type is special.
   MozExternalRefCountType AddRef();
   MozExternalRefCountType Release();
 
   typedef mozilla::TrueType HasThreadSafeRefCnt;
 
 protected:
   // Used by nsStaticAtom.
-  constexpr nsAtom(const char16_t* aStr, uint32_t aLength, uint32_t aHash)
+  constexpr nsAtom(const char16_t* aStr, uint32_t aLength)
     : mLength(aLength)
     , mKind(static_cast<uint32_t>(nsAtom::AtomKind::Static))
-    , mHash(aHash)
+    , mHash(mozilla::HashString(aStr))
   {}
 
   // Used by nsDynamicAtom.
   nsAtom(AtomKind aKind, const nsAString& aString, uint32_t aHash)
     : mLength(aString.Length())
     , mKind(static_cast<uint32_t>(aKind))
     , mHash(aHash)
   {
@@ -132,39 +133,34 @@ protected:
 class nsStaticAtom : public nsAtom
 {
 public:
   // These are deleted so it's impossible to RefPtr<nsStaticAtom>. Raw
   // nsStaticAtom pointers should be used instead.
   MozExternalRefCountType AddRef() = delete;
   MozExternalRefCountType Release() = delete;
 
-  // The static atom's precomputed hash value is an argument here, but it
-  // must be the same as would be computed by mozilla::HashString(aStr),
-  // which is what we use when atomizing strings. We compute this hash in
-  // Atom.py and assert in nsAtomTable::RegisterStaticAtoms that the two
-  // hashes match.
   constexpr nsStaticAtom(const char16_t* aStr, uint32_t aLength,
-                         uint32_t aHash, uint32_t aStringOffset)
-    : nsAtom(aStr, aLength, aHash)
+                         uint32_t aStringOffset)
+    : nsAtom(aStr, aLength)
     , mStringOffset(aStringOffset)
   {}
 
   const char16_t* String() const
   {
     return reinterpret_cast<const char16_t*>(uintptr_t(this) - mStringOffset);
   }
 
   already_AddRefed<nsAtom> ToAddRefed() {
     return already_AddRefed<nsAtom>(static_cast<nsAtom*>(this));
   }
 
 private:
   // This is an offset to the string chars, which must be at a lower address in
-  // memory.
+  // memory. This should be achieved by using the macros in nsStaticAtom.h.
   uint32_t mStringOffset;
 };
 
 class nsDynamicAtom : public nsAtom
 {
 public:
   // We can't use NS_INLINE_DECL_THREADSAFE_REFCOUNTING because the refcounting
   // of this type is special.
@@ -234,16 +230,19 @@ already_AddRefed<nsAtom> NS_AtomizeMainT
 // Currently this function is only used in tests, which should probably remain
 // the case.
 nsrefcnt NS_GetNumberOfAtoms();
 
 // Return a pointer for a static atom for the string or null if there's no
 // static atom for this string.
 nsStaticAtom* NS_GetStaticAtom(const nsAString& aUTF16String);
 
+// Record that all static atoms have been inserted.
+void NS_SetStaticAtomsDone();
+
 class nsAtomString : public nsString
 {
 public:
   explicit nsAtomString(const nsAtom* aAtom) { aAtom->ToString(*this); }
 };
 
 class nsAtomCString : public nsCString
 {
--- a/xpcom/ds/nsAtomTable.cpp
+++ b/xpcom/ds/nsAtomTable.cpp
@@ -16,16 +16,17 @@
 #include "nsAtom.h"
 #include "nsAtomTable.h"
 #include "nsAutoPtr.h"
 #include "nsCRT.h"
 #include "nsDataHashtable.h"
 #include "nsGkAtoms.h"
 #include "nsHashKeys.h"
 #include "nsPrintfCString.h"
+#include "nsStaticAtom.h"
 #include "nsString.h"
 #include "nsThreadUtils.h"
 #include "nsUnicharUtils.h"
 #include "PLDHashTable.h"
 #include "prenv.h"
 
 // There are two kinds of atoms handled by this module.
 //
@@ -642,21 +643,16 @@ nsAtomTable::RegisterStaticAtoms(const n
   MOZ_ASSERT(NS_IsMainThread());
   MOZ_RELEASE_ASSERT(!gStaticAtomsDone, "Static atom insertion is finished!");
 
   for (uint32_t i = 0; i < aAtomsLen; ++i) {
     const nsStaticAtom* atom = &aAtoms[i];
     MOZ_ASSERT(nsCRT::IsAscii(atom->String()));
     MOZ_ASSERT(NS_strlen(atom->String()) == atom->GetLength());
 
-    // This assertion ensures the static atom's precomputed hash value matches
-    // what would be computed by mozilla::HashString(aStr), which is what we use
-    // when atomizing strings. We compute this hash in Atom.py.
-    MOZ_ASSERT(HashString(atom->String()) == atom->hash());
-
     AtomTableKey key(atom);
     nsAtomSubTable& table = SelectSubTable(key);
     MutexAutoLock lock(table.mLock);
     AtomTableEntry* he = table.Add(key);
 
     if (he->mAtom) {
       // There are two ways we could get here.
       // - Register two static atoms with the same string.
@@ -670,20 +666,18 @@ nsAtomTable::RegisterStaticAtoms(const n
     }
     he->mAtom = const_cast<nsStaticAtom*>(atom);
   }
 }
 
 void
 NS_RegisterStaticAtoms(const nsStaticAtom* aAtoms, size_t aAtomsLen)
 {
-  MOZ_ASSERT(NS_IsMainThread());
   MOZ_ASSERT(gAtomTable);
   gAtomTable->RegisterStaticAtoms(aAtoms, aAtomsLen);
-  gStaticAtomsDone = true;
 }
 
 already_AddRefed<nsAtom>
 NS_Atomize(const char* aUTF8String)
 {
   MOZ_ASSERT(gAtomTable);
   return gAtomTable->Atomize(nsDependentCString(aUTF8String));
 }
@@ -835,16 +829,23 @@ nsAtomTable::GetStaticAtom(const nsAStri
   nsAtomSubTable& table = SelectSubTable(key);
   MutexAutoLock lock(table.mLock);
   AtomTableEntry* he = table.Search(key);
   return he && he->mAtom->IsStatic()
        ? static_cast<nsStaticAtom*>(he->mAtom)
        : nullptr;
 }
 
+void
+NS_SetStaticAtomsDone()
+{
+  MOZ_ASSERT(NS_IsMainThread());
+  gStaticAtomsDone = true;
+}
+
 void ToLowerCaseASCII(RefPtr<nsAtom>& aAtom)
 {
   // Assume the common case is that the atom is already ASCII lowercase.
   bool reAtomize = false;
   const nsDependentString existing(aAtom->GetUTF16String(), aAtom->GetLength());
   for (size_t i = 0; i < existing.Length(); ++i) {
     if (IS_ASCII_UPPER(existing[i])) {
       reAtomize = true;
new file mode 100644
--- /dev/null
+++ b/xpcom/ds/nsGkAtomList.h
@@ -0,0 +1,2486 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set ts=8 sts=2 et sw=2 tw=80: */
+/* 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/. */
+// IWYU pragma: private, include "nsGkAtoms.h"
+
+/*
+  This file is designed to be used as inline input to nsGkAtoms.cpp and
+  nsGkAtoms.h *only* through the magic of C preprocessing.
+
+  All entries must be enclosed in the macro GK_ATOM which will have cruel
+  and unusual things done to it.
+
+  The first argument to GK_ATOM is the C++ name of the atom.
+  The second argument it GK_ATOM is the string value of the atom.
+*/
+
+// OUTPUT_CLASS=nsGkAtoms
+// MACRO_NAME=GK_ATOM
+#ifdef small
+#undef small
+#endif
+
+//---------------------------------------------------------------------------
+// Generic atoms
+//---------------------------------------------------------------------------
+
+GK_ATOM(_empty, "")
+GK_ATOM(moz, "_moz")
+GK_ATOM(mozframetype, "mozframetype")
+GK_ATOM(_moz_abspos, "_moz_abspos")
+GK_ATOM(_moz_activated, "_moz_activated")
+GK_ATOM(_moz_anonclass, "_moz_anonclass")
+GK_ATOM(_moz_resizing, "_moz_resizing")
+GK_ATOM(mozallowfullscreen, "mozallowfullscreen")
+GK_ATOM(moztype, "_moz-type")
+GK_ATOM(mozdirty, "_moz_dirty")
+GK_ATOM(mozdisallowselectionprint, "mozdisallowselectionprint")
+GK_ATOM(mozdonotsend, "moz-do-not-send")
+GK_ATOM(mozeditorbogusnode, "_moz_editor_bogus_node")
+GK_ATOM(mozgeneratedcontentbefore, "_moz_generated_content_before")
+GK_ATOM(mozgeneratedcontentafter, "_moz_generated_content_after")
+GK_ATOM(mozgeneratedcontentimage, "_moz_generated_content_image")
+GK_ATOM(mozquote, "_moz_quote")
+GK_ATOM(mozsignature, "moz-signature")
+GK_ATOM(_moz_is_glyph, "-moz-is-glyph")
+GK_ATOM(_moz_original_size, "_moz_original_size")
+GK_ATOM(menuactive, "_moz-menuactive")
+GK_ATOM(_poundDefault, "#default")
+GK_ATOM(_asterisk, "*")
+GK_ATOM(a, "a")
+GK_ATOM(abbr, "abbr")
+GK_ATOM(abort, "abort")
+GK_ATOM(acceltext, "acceltext")
+GK_ATOM(accept, "accept")
+GK_ATOM(acceptcharset, "accept-charset")
+GK_ATOM(accessiblenode, "accessible-node")
+GK_ATOM(accesskey, "accesskey")
+GK_ATOM(acronym, "acronym")
+GK_ATOM(action, "action")
+GK_ATOM(active, "active")
+GK_ATOM(activateontab, "activateontab")
+GK_ATOM(actuate, "actuate")
+GK_ATOM(address, "address")
+GK_ATOM(after, "after")
+GK_ATOM(align, "align")
+GK_ATOM(alink, "alink")
+GK_ATOM(allowdirs, "allowdirs")
+GK_ATOM(allowevents, "allowevents")
+GK_ATOM(allowforms,"allow-forms")
+GK_ATOM(allowfullscreen, "allowfullscreen")
+GK_ATOM(allowmodals, "allow-modals")
+GK_ATOM(alloworientationlock,"allow-orientation-lock")
+GK_ATOM(allowpaymentrequest, "allowpaymentrequest")
+GK_ATOM(allowpointerlock,"allow-pointer-lock")
+GK_ATOM(allowpopupstoescapesandbox,"allow-popups-to-escape-sandbox")
+GK_ATOM(allowpopups,"allow-popups")
+GK_ATOM(allowpresentation,"allow-presentation")
+GK_ATOM(allowsameorigin,"allow-same-origin")
+GK_ATOM(allowscripts,"allow-scripts")
+GK_ATOM(allowtopnavigation,"allow-top-navigation")
+GK_ATOM(allowuntrusted, "allowuntrusted")
+GK_ATOM(alt, "alt")
+GK_ATOM(alternate, "alternate")
+GK_ATOM(always, "always")
+GK_ATOM(ancestor, "ancestor")
+GK_ATOM(ancestorOrSelf, "ancestor-or-self")
+GK_ATOM(anchor, "anchor")
+GK_ATOM(_and, "and")
+GK_ATOM(animations, "animations")
+GK_ATOM(anonid, "anonid")
+GK_ATOM(anonlocation, "anonlocation")
+GK_ATOM(any, "any")
+GK_ATOM(applet, "applet")
+GK_ATOM(applyImports, "apply-imports")
+GK_ATOM(applyTemplates, "apply-templates")
+GK_ATOM(archive, "archive")
+GK_ATOM(area, "area")
+GK_ATOM(aria_activedescendant, "aria-activedescendant")
+GK_ATOM(aria_atomic, "aria-atomic")
+GK_ATOM(aria_autocomplete, "aria-autocomplete")
+GK_ATOM(aria_busy, "aria-busy")
+GK_ATOM(aria_checked, "aria-checked")
+GK_ATOM(aria_controls, "aria-controls")
+GK_ATOM(aria_current, "aria-current")
+GK_ATOM(aria_describedby, "aria-describedby")
+GK_ATOM(aria_disabled, "aria-disabled")
+GK_ATOM(aria_dropeffect, "aria-dropeffect")
+GK_ATOM(aria_expanded, "aria-expanded")
+GK_ATOM(aria_flowto, "aria-flowto")
+GK_ATOM(aria_haspopup, "aria-haspopup")
+GK_ATOM(aria_hidden, "aria-hidden")
+GK_ATOM(aria_invalid, "aria-invalid")
+GK_ATOM(aria_labelledby, "aria-labelledby")
+GK_ATOM(aria_level, "aria-level")
+GK_ATOM(aria_live, "aria-live")
+GK_ATOM(aria_multiline, "aria-multiline")
+GK_ATOM(aria_multiselectable, "aria-multiselectable")
+GK_ATOM(aria_owns, "aria-owns")
+GK_ATOM(aria_posinset, "aria-posinset")
+GK_ATOM(aria_pressed, "aria-pressed")
+GK_ATOM(aria_readonly, "aria-readonly")
+GK_ATOM(aria_relevant, "aria-relevant")
+GK_ATOM(aria_required, "aria-required")
+GK_ATOM(aria_selected, "aria-selected")
+GK_ATOM(aria_setsize, "aria-setsize")
+GK_ATOM(aria_sort, "aria-sort")
+GK_ATOM(aria_valuemax, "aria-valuemax")
+GK_ATOM(aria_valuemin, "aria-valuemin")
+GK_ATOM(aria_valuenow, "aria-valuenow")
+GK_ATOM(arrow, "arrow")
+GK_ATOM(article, "article")
+GK_ATOM(as, "as")
+GK_ATOM(ascending, "ascending")
+GK_ATOM(aside, "aside")
+GK_ATOM(aspectRatio, "aspect-ratio")
+GK_ATOM(async, "async")
+GK_ATOM(attribute, "attribute")
+GK_ATOM(attributes, "attributes")
+GK_ATOM(attributeSet, "attribute-set")
+GK_ATOM(_auto, "auto")
+GK_ATOM(autocheck, "autocheck")
+GK_ATOM(autocomplete, "autocomplete")
+GK_ATOM(autocomplete_richlistbox, "autocomplete-richlistbox")
+GK_ATOM(autofocus, "autofocus")
+GK_ATOM(autoplay, "autoplay")
+GK_ATOM(axis, "axis")
+GK_ATOM(b, "b")
+GK_ATOM(background, "background")
+GK_ATOM(base, "base")
+GK_ATOM(basefont, "basefont")
+GK_ATOM(baseline, "baseline")
+GK_ATOM(bdi, "bdi")
+GK_ATOM(bdo, "bdo")
+GK_ATOM(before, "before")
+GK_ATOM(bgcolor, "bgcolor")
+GK_ATOM(bgsound, "bgsound")
+GK_ATOM(big, "big")
+GK_ATOM(binding, "binding")
+GK_ATOM(bindings, "bindings")
+GK_ATOM(bindToUntrustedContent, "bindToUntrustedContent")
+GK_ATOM(block, "block")
+GK_ATOM(blockquote, "blockquote")
+GK_ATOM(body, "body")
+GK_ATOM(boolean, "boolean")
+GK_ATOM(border, "border")
+GK_ATOM(bordercolor, "bordercolor")
+GK_ATOM(both, "both")
+GK_ATOM(bottom, "bottom")
+GK_ATOM(bottomend, "bottomend")
+GK_ATOM(bottomstart, "bottomstart")
+GK_ATOM(bottomleft, "bottomleft")
+GK_ATOM(bottommargin, "bottommargin")
+GK_ATOM(bottomright, "bottomright")
+GK_ATOM(box, "box")
+GK_ATOM(br, "br")
+GK_ATOM(browser, "browser")
+GK_ATOM(mozbrowser, "mozbrowser")
+GK_ATOM(button, "button")
+GK_ATOM(brighttitlebarforeground, "brighttitlebarforeground")
+GK_ATOM(callTemplate, "call-template")
+GK_ATOM(canvas, "canvas")
+GK_ATOM(caption, "caption")
+GK_ATOM(caseOrder, "case-order")
+GK_ATOM(cdataSectionElements, "cdata-section-elements")
+GK_ATOM(ceiling, "ceiling")
+GK_ATOM(cell, "cell")
+GK_ATOM(cellpadding, "cellpadding")
+GK_ATOM(cellspacing, "cellspacing")
+GK_ATOM(center, "center")
+GK_ATOM(change, "change")
+GK_ATOM(_char, "char")
+GK_ATOM(characterData, "characterData")
+GK_ATOM(charcode, "charcode")
+GK_ATOM(charoff, "charoff")
+GK_ATOM(charset, "charset")
+GK_ATOM(checkbox, "checkbox")
+GK_ATOM(checked, "checked")
+GK_ATOM(child, "child")
+GK_ATOM(children, "children")
+GK_ATOM(childList, "childList")
+GK_ATOM(choose, "choose")
+GK_ATOM(chromemargin, "chromemargin")
+GK_ATOM(chromeOnlyContent, "chromeOnlyContent")
+GK_ATOM(exposeToUntrustedContent, "exposeToUntrustedContent")
+GK_ATOM(circ, "circ")
+GK_ATOM(circle, "circle")
+GK_ATOM(cite, "cite")
+GK_ATOM(cjkDecimal, "cjk-decimal")
+GK_ATOM(_class, "class")
+GK_ATOM(classid, "classid")
+GK_ATOM(clear, "clear")
+GK_ATOM(click, "click")
+GK_ATOM(clickcount, "clickcount")
+GK_ATOM(clickthrough, "clickthrough")
+GK_ATOM(movetoclick, "movetoclick")
+GK_ATOM(clip, "clip")
+GK_ATOM(close, "close")
+GK_ATOM(closed, "closed")
+GK_ATOM(closemenu, "closemenu")
+GK_ATOM(code, "code")
+GK_ATOM(codebase, "codebase")
+GK_ATOM(codetype, "codetype")
+GK_ATOM(col, "col")
+GK_ATOM(colgroup, "colgroup")
+GK_ATOM(collapse, "collapse")
+GK_ATOM(collapsed, "collapsed")
+GK_ATOM(color, "color")
+GK_ATOM(colorIndex, "color-index")
+GK_ATOM(cols, "cols")
+GK_ATOM(colspan, "colspan")
+GK_ATOM(combobox, "combobox")
+GK_ATOM(command, "command")
+GK_ATOM(commandupdater, "commandupdater")
+GK_ATOM(comment, "comment")
+GK_ATOM(compact, "compact")
+GK_ATOM(concat, "concat")
+GK_ATOM(constructor, "constructor")
+GK_ATOM(consumeoutsideclicks, "consumeoutsideclicks")
+GK_ATOM(container, "container")
+GK_ATOM(contains, "contains")
+GK_ATOM(content, "content")
+GK_ATOM(contenteditable, "contenteditable")
+GK_ATOM(headerContentDisposition, "content-disposition")
+GK_ATOM(headerContentLanguage, "content-language")
+GK_ATOM(contentLocation, "content-location")
+GK_ATOM(headerContentScriptType, "content-script-type")
+GK_ATOM(headerContentStyleType, "content-style-type")
+GK_ATOM(headerContentType, "content-type")
+GK_ATOM(consumeanchor, "consumeanchor")
+GK_ATOM(context, "context")
+GK_ATOM(contextmenu, "contextmenu")
+GK_ATOM(control, "control")
+GK_ATOM(controls, "controls")
+GK_ATOM(coords, "coords")
+GK_ATOM(copy, "copy")
+GK_ATOM(copyOf, "copy-of")
+GK_ATOM(count, "count")
+GK_ATOM(crop, "crop")
+GK_ATOM(crossorigin, "crossorigin")
+GK_ATOM(curpos, "curpos")
+GK_ATOM(current, "current")
+GK_ATOM(cutoutregion, "cutoutregion")
+GK_ATOM(cycler, "cycler")
+GK_ATOM(data, "data")
+GK_ATOM(datalist, "datalist")
+GK_ATOM(datal10nid, "data-l10n-id")
+GK_ATOM(datal10nargs, "data-l10n-args")
+GK_ATOM(datal10nattrs, "data-l10n-attrs")
+GK_ATOM(dataType, "data-type")
+GK_ATOM(dateTime, "date-time")
+GK_ATOM(date, "date")
+GK_ATOM(datetime, "datetime")
+GK_ATOM(datetimebox, "datetimebox")
+GK_ATOM(dd, "dd")
+GK_ATOM(decimal, "decimal")
+GK_ATOM(decimalFormat, "decimal-format")
+GK_ATOM(decimalSeparator, "decimal-separator")
+GK_ATOM(declare, "declare")
+GK_ATOM(decoderDoctor, "decoder-doctor")
+GK_ATOM(decoding, "decoding")
+GK_ATOM(decrement, "decrement")
+GK_ATOM(_default, "default")
+GK_ATOM(headerDefaultStyle, "default-style")
+GK_ATOM(defer, "defer")
+GK_ATOM(del, "del")
+GK_ATOM(descendant, "descendant")
+GK_ATOM(descendantOrSelf, "descendant-or-self")
+GK_ATOM(descending, "descending")
+GK_ATOM(description, "description")
+GK_ATOM(destructor, "destructor")
+GK_ATOM(details, "details")
+GK_ATOM(deviceAspectRatio, "device-aspect-ratio")
+GK_ATOM(deviceHeight, "device-height")
+GK_ATOM(devicePixelRatio, "device-pixel-ratio")
+GK_ATOM(deviceWidth, "device-width")
+GK_ATOM(dfn, "dfn")
+GK_ATOM(dialog, "dialog")
+GK_ATOM(difference, "difference")
+GK_ATOM(digit, "digit")
+GK_ATOM(dir, "dir")
+GK_ATOM(dirAutoSetBy, "dirAutoSetBy")
+GK_ATOM(directory, "directory")
+GK_ATOM(disableOutputEscaping, "disable-output-escaping")
+GK_ATOM(disabled, "disabled")
+GK_ATOM(disableglobalhistory, "disableglobalhistory")
+GK_ATOM(disablehistory, "disablehistory")
+GK_ATOM(disablefullscreen, "disablefullscreen")
+GK_ATOM(disclosure_closed, "disclosure-closed")
+GK_ATOM(disclosure_open, "disclosure-open")
+GK_ATOM(display, "display")
+GK_ATOM(displayMode, "display-mode")
+GK_ATOM(distinct, "distinct")
+GK_ATOM(div, "div")
+GK_ATOM(dl, "dl")
+GK_ATOM(docAbstract, "doc-abstract")
+GK_ATOM(docAcknowledgments, "doc-acknowledgments")
+GK_ATOM(docAfterword, "doc-afterword")
+GK_ATOM(docAppendix, "doc-appendix")
+GK_ATOM(docBacklink, "doc-backlink")
+GK_ATOM(docBiblioentry, "doc-biblioentry")
+GK_ATOM(docBibliography, "doc-bibliography")
+GK_ATOM(docBiblioref, "doc-biblioref")
+GK_ATOM(docChapter, "doc-chapter")
+GK_ATOM(docColophon, "doc-colophon")
+GK_ATOM(docConclusion, "doc-conclusion")
+GK_ATOM(docCover, "doc-cover")
+GK_ATOM(docCredit, "doc-credit")
+GK_ATOM(docCredits, "doc-credits")
+GK_ATOM(docDedication, "doc-dedication")
+GK_ATOM(docEndnote, "doc-endnote")
+GK_ATOM(docEndnotes, "doc-endnotes")
+GK_ATOM(docEpigraph, "doc-epigraph")
+GK_ATOM(docEpilogue, "doc-epilogue")
+GK_ATOM(docErrata, "doc-errata")
+GK_ATOM(docExample, "doc-example")
+GK_ATOM(docFootnote, "doc-footnote")
+GK_ATOM(docForeword, "doc-foreword")
+GK_ATOM(docGlossary, "doc-glossary")
+GK_ATOM(docGlossref, "doc-glossref")
+GK_ATOM(docIndex, "doc-index")
+GK_ATOM(docIntroduction, "doc-introduction")
+GK_ATOM(docNoteref, "doc-noteref")
+GK_ATOM(docNotice, "doc-notice")
+GK_ATOM(docPagebreak, "doc-pagebreak")
+GK_ATOM(docPagelist, "doc-pagelist")
+GK_ATOM(docPart, "doc-part")
+GK_ATOM(docPreface, "doc-preface")
+GK_ATOM(docPrologue, "doc-prologue")
+GK_ATOM(docPullquote, "doc-pullquote")
+GK_ATOM(docQna, "doc-qna")
+GK_ATOM(docSubtitle, "doc-subtitle")
+GK_ATOM(docTip, "doc-tip")
+GK_ATOM(docToc, "doc-toc")
+GK_ATOM(doctypePublic, "doctype-public")
+GK_ATOM(doctypeSystem, "doctype-system")
+GK_ATOM(document, "document")
+GK_ATOM(download, "download")
+GK_ATOM(drag, "drag")
+GK_ATOM(draggable, "draggable")
+GK_ATOM(dragging, "dragging")
+GK_ATOM(dragSession, "dragSession")
+GK_ATOM(drawintitlebar, "drawintitlebar")
+GK_ATOM(drawtitle, "drawtitle")
+GK_ATOM(dropAfter, "dropAfter")
+GK_ATOM(dropBefore, "dropBefore")
+GK_ATOM(dropOn, "dropOn")
+GK_ATOM(dropMarker, "dropmarker")
+GK_ATOM(dt, "dt")
+GK_ATOM(editable, "editable")
+GK_ATOM(editing, "editing")
+GK_ATOM(editor, "editor")
+GK_ATOM(element, "element")
+GK_ATOM(elementAvailable, "element-available")
+GK_ATOM(elements, "elements")
+GK_ATOM(em, "em")
+GK_ATOM(embed, "embed")
+GK_ATOM(empty, "empty")
+GK_ATOM(encoding, "encoding")
+GK_ATOM(enctype, "enctype")
+GK_ATOM(end, "end")
+GK_ATOM(endEvent, "endEvent")
+GK_ATOM(equalsize, "equalsize")
+GK_ATOM(error, "error")
+GK_ATOM(ethiopic_numeric, "ethiopic-numeric")
+GK_ATOM(even, "even")
+GK_ATOM(event, "event")
+GK_ATOM(events, "events")
+GK_ATOM(excludeResultPrefixes, "exclude-result-prefixes")
+GK_ATOM(extends, "extends")
+GK_ATOM(extensionElementPrefixes, "extension-element-prefixes")
+GK_ATOM(face, "face")
+GK_ATOM(fallback, "fallback")
+GK_ATOM(_false, "false")
+GK_ATOM(farthest, "farthest")
+GK_ATOM(field, "field")
+GK_ATOM(fieldset, "fieldset")
+GK_ATOM(file, "file")
+GK_ATOM(figcaption, "figcaption")
+GK_ATOM(figure, "figure")
+GK_ATOM(findbar, "findbar")
+GK_ATOM(fixed, "fixed")
+GK_ATOM(flags, "flags")
+GK_ATOM(flex, "flex")
+GK_ATOM(flip, "flip")
+GK_ATOM(floating, "floating")
+GK_ATOM(floor, "floor")
+GK_ATOM(flowlength, "flowlength")
+GK_ATOM(focus, "focus")
+GK_ATOM(focused, "focused")
+GK_ATOM(followanchor, "followanchor")
+GK_ATOM(following, "following")
+GK_ATOM(followingSibling, "following-sibling")
+GK_ATOM(font, "font")
+GK_ATOM(fontWeight, "font-weight")
+GK_ATOM(footer, "footer")
+GK_ATOM(_for, "for")
+GK_ATOM(forEach, "for-each")
+GK_ATOM(forceOwnRefreshDriver, "forceOwnRefreshDriver")
+GK_ATOM(form, "form")
+GK_ATOM(formaction, "formaction")
+GK_ATOM(format, "format")
+GK_ATOM(formatNumber, "format-number")
+GK_ATOM(formenctype, "formenctype")
+GK_ATOM(formmethod, "formmethod")
+GK_ATOM(formnovalidate, "formnovalidate")
+GK_ATOM(formtarget, "formtarget")
+GK_ATOM(frame, "frame")
+GK_ATOM(frameborder, "frameborder")
+GK_ATOM(frameset, "frameset")
+GK_ATOM(from, "from")
+GK_ATOM(fullscreenchange, "fullscreenchange")
+GK_ATOM(fullscreenerror, "fullscreenerror")
+GK_ATOM(functionAvailable, "function-available")
+GK_ATOM(generateId, "generate-id")
+GK_ATOM(getter, "getter")
+GK_ATOM(graphicsDocument, "graphics-document")
+GK_ATOM(graphicsObject, "graphics-object")
+GK_ATOM(graphicsSymbol, "graphics-symbol")
+GK_ATOM(grid, "grid")
+GK_ATOM(group, "group")
+GK_ATOM(groupbox, "groupbox")
+GK_ATOM(groupingSeparator, "grouping-separator")
+GK_ATOM(groupingSize, "grouping-size")
+GK_ATOM(grow, "grow")
+GK_ATOM(h1, "h1")
+GK_ATOM(h2, "h2")
+GK_ATOM(h3, "h3")
+GK_ATOM(h4, "h4")
+GK_ATOM(h5, "h5")
+GK_ATOM(h6, "h6")
+GK_ATOM(handheldFriendly, "HandheldFriendly")
+GK_ATOM(handler, "handler")
+GK_ATOM(handlers, "handlers")
+GK_ATOM(HARD, "HARD")
+GK_ATOM(hasSameNode, "has-same-node")
+GK_ATOM(hbox, "hbox")
+GK_ATOM(head, "head")
+GK_ATOM(header, "header")
+GK_ATOM(headers, "headers")
+GK_ATOM(hebrew, "hebrew")
+GK_ATOM(height, "height")
+GK_ATOM(hgroup, "hgroup")
+GK_ATOM(hidden, "hidden")
+GK_ATOM(hidechrome, "hidechrome")
+GK_ATOM(hidecolumnpicker, "hidecolumnpicker")
+GK_ATOM(high, "high")
+GK_ATOM(highest, "highest")
+GK_ATOM(horizontal, "horizontal")
+GK_ATOM(hover, "hover")
+GK_ATOM(hr, "hr")
+GK_ATOM(href, "href")
+GK_ATOM(hreflang, "hreflang")
+GK_ATOM(hspace, "hspace")
+GK_ATOM(html, "html")
+GK_ATOM(httpEquiv, "http-equiv")
+GK_ATOM(i, "i")
+GK_ATOM(icon, "icon")
+GK_ATOM(id, "id")
+GK_ATOM(_if, "if")
+GK_ATOM(iframe, "iframe")
+GK_ATOM(ignorekeys, "ignorekeys")
+GK_ATOM(ignoreuserfocus, "ignoreuserfocus")
+GK_ATOM(image, "image")
+GK_ATOM(imageClickedPoint, "image-clicked-point")
+GK_ATOM(img, "img")
+GK_ATOM(implementation, "implementation")
+GK_ATOM(implements, "implements")
+GK_ATOM(import, "import")
+GK_ATOM(include, "include")
+GK_ATOM(includes, "includes")
+GK_ATOM(increment, "increment")
+GK_ATOM(indent, "indent")
+GK_ATOM(indeterminate, "indeterminate")
+GK_ATOM(index, "index")
+GK_ATOM(infinity, "infinity")
+GK_ATOM(inherits, "inherits")
+GK_ATOM(inheritstyle, "inheritstyle")
+GK_ATOM(initial_scale, "initial-scale")
+GK_ATOM(input, "input")
+GK_ATOM(inputmode, "inputmode")
+GK_ATOM(ins, "ins")
+GK_ATOM(insertafter, "insertafter")
+GK_ATOM(insertbefore, "insertbefore")
+GK_ATOM(integer, "integer")
+GK_ATOM(integrity, "integrity")
+GK_ATOM(intersection, "intersection")
+GK_ATOM(intersectionobserverlist, "intersectionobserverlist")
+GK_ATOM(is, "is")
+GK_ATOM(ismap, "ismap")
+GK_ATOM(itemid, "itemid")
+GK_ATOM(itemprop, "itemprop")
+GK_ATOM(itemref, "itemref")
+GK_ATOM(itemscope, "itemscope")
+GK_ATOM(itemtype, "itemtype")
+GK_ATOM(japanese_formal, "japanese-formal")
+GK_ATOM(japanese_informal, "japanese-informal")
+GK_ATOM(kbd, "kbd")
+GK_ATOM(keepcurrentinview, "keepcurrentinview")
+GK_ATOM(keepobjectsalive, "keepobjectsalive")
+GK_ATOM(key, "key")
+GK_ATOM(keycode, "keycode")
+GK_ATOM(keydown, "keydown")
+GK_ATOM(keygen, "keygen")
+GK_ATOM(keypress, "keypress")
+GK_ATOM(keyset, "keyset")
+GK_ATOM(keysystem, "keysystem")
+GK_ATOM(keytext, "keytext")
+GK_ATOM(keyup, "keyup")
+GK_ATOM(kind, "kind")
+GK_ATOM(korean_hangul_formal, "korean-hangul-formal")
+GK_ATOM(korean_hanja_formal, "korean-hanja-formal")
+GK_ATOM(korean_hanja_informal, "korean-hanja-informal")
+GK_ATOM(label, "label")
+GK_ATOM(lang, "lang")
+GK_ATOM(language, "language")
+GK_ATOM(last, "last")
+GK_ATOM(layer, "layer")
+GK_ATOM(LayerActivity, "LayerActivity")
+GK_ATOM(leading, "leading")
+GK_ATOM(leaf, "leaf")
+GK_ATOM(left, "left")
+GK_ATOM(leftmargin, "leftmargin")
+GK_ATOM(legend, "legend")
+GK_ATOM(length, "length")
+GK_ATOM(letterValue, "letter-value")
+GK_ATOM(level, "level")
+GK_ATOM(li, "li")
+GK_ATOM(line, "line")
+GK_ATOM(link, "link")
+//GK_ATOM(list, "list")  # "list" is present below
+GK_ATOM(listbox, "listbox")
+GK_ATOM(listener, "listener")
+GK_ATOM(listheader, "listheader")
+GK_ATOM(listing, "listing")
+GK_ATOM(listitem, "listitem")
+GK_ATOM(load, "load")
+GK_ATOM(triggeringprincipal, "triggeringprincipal")
+GK_ATOM(localedir, "localedir")
+GK_ATOM(localName, "local-name")
+GK_ATOM(longdesc, "longdesc")
+GK_ATOM(loop, "loop")
+GK_ATOM(low, "low")
+GK_ATOM(lowerAlpha, "lower-alpha")
+GK_ATOM(lowerFirst, "lower-first")
+GK_ATOM(lowerRoman, "lower-roman")
+GK_ATOM(lowest, "lowest")
+GK_ATOM(lowsrc, "lowsrc")
+GK_ATOM(ltr, "ltr")
+GK_ATOM(lwtheme, "lwtheme")
+GK_ATOM(lwthemetextcolor, "lwthemetextcolor")
+GK_ATOM(main, "main")
+GK_ATOM(map, "map")
+GK_ATOM(manifest, "manifest")
+GK_ATOM(marginBottom, "margin-bottom")
+GK_ATOM(marginLeft, "margin-left")
+GK_ATOM(marginRight, "margin-right")
+GK_ATOM(marginTop, "margin-top")
+GK_ATOM(marginheight, "marginheight")
+GK_ATOM(marginwidth, "marginwidth")
+GK_ATOM(mark, "mark")
+GK_ATOM(marquee, "marquee")
+GK_ATOM(match, "match")
+GK_ATOM(max, "max")
+GK_ATOM(maxheight, "maxheight")
+GK_ATOM(maximum_scale, "maximum-scale")
+GK_ATOM(maxlength, "maxlength")
+GK_ATOM(maxpos, "maxpos")
+GK_ATOM(maxwidth, "maxwidth")
+GK_ATOM(media, "media")
+GK_ATOM(mediaType, "media-type")
+GK_ATOM(menu, "menu")
+GK_ATOM(menubar, "menubar")
+GK_ATOM(menubutton, "menubutton")
+GK_ATOM(menuButton, "menu-button")
+GK_ATOM(menucaption, "menucaption")
+GK_ATOM(menugroup, "menugroup")
+GK_ATOM(menuitem, "menuitem")
+GK_ATOM(menulist, "menulist")
+GK_ATOM(menupopup, "menupopup")
+GK_ATOM(menuseparator, "menuseparator")
+GK_ATOM(message, "message")
+GK_ATOM(meta, "meta")
+GK_ATOM(referrer, "referrer")
+GK_ATOM(referrerpolicy, "referrerpolicy")
+GK_ATOM(headerReferrerPolicy, "referrer-policy")
+GK_ATOM(meter, "meter")
+GK_ATOM(method, "method")
+GK_ATOM(middle, "middle")
+GK_ATOM(min, "min")
+GK_ATOM(minheight, "minheight")
+GK_ATOM(minimum_scale, "minimum-scale")
+GK_ATOM(minlength, "minlength")
+GK_ATOM(minpos, "minpos")
+GK_ATOM(minusSign, "minus-sign")
+GK_ATOM(minwidth, "minwidth")
+GK_ATOM(mixed, "mixed")
+GK_ATOM(messagemanagergroup, "messagemanagergroup")
+GK_ATOM(mod, "mod")
+GK_ATOM(mode, "mode")
+GK_ATOM(modifiers, "modifiers")
+GK_ATOM(monochrome, "monochrome")
+GK_ATOM(mouseover, "mouseover")
+GK_ATOM(mousethrough, "mousethrough")
+GK_ATOM(mozprivatebrowsing, "mozprivatebrowsing")
+GK_ATOM(moz_opaque, "moz-opaque")
+GK_ATOM(moz_action_hint, "mozactionhint")
+GK_ATOM(x_moz_errormessage, "x-moz-errormessage")
+GK_ATOM(multicol, "multicol")
+GK_ATOM(multiple, "multiple")
+GK_ATOM(muted, "muted")
+GK_ATOM(name, "name")
+GK_ATOM(_namespace, "namespace")
+GK_ATOM(namespaceAlias, "namespace-alias")
+GK_ATOM(namespaceUri, "namespace-uri")
+GK_ATOM(NaN, "NaN")
+GK_ATOM(nativeAnonymousChildList, "nativeAnonymousChildList")
+GK_ATOM(nav, "nav")
+GK_ATOM(never, "never")
+GK_ATOM(_new, "new")
+GK_ATOM(newline, "newline")
+GK_ATOM(nextTabParentId, "nextTabParentId")
+GK_ATOM(no, "no")
+GK_ATOM(noautofocus, "noautofocus")
+GK_ATOM(noautohide, "noautohide")
+GK_ATOM(norolluponanchor, "norolluponanchor")
+GK_ATOM(nobr, "nobr")
+GK_ATOM(nodefaultsrc, "nodefaultsrc")
+GK_ATOM(nodeSet, "node-set")
+GK_ATOM(noembed, "noembed")
+GK_ATOM(noframes, "noframes")
+GK_ATOM(nohref, "nohref")
+GK_ATOM(noisolation, "noisolation")
+GK_ATOM(nomodule, "nomodule")
+GK_ATOM(nonce, "nonce")
+GK_ATOM(none, "none")
+GK_ATOM(noresize, "noresize")
+GK_ATOM(normal, "normal")
+GK_ATOM(normalizeSpace, "normalize-space")
+GK_ATOM(noscript, "noscript")
+GK_ATOM(noshade, "noshade")
+GK_ATOM(notification, "notification")
+GK_ATOM(novalidate, "novalidate")
+GK_ATOM(_not, "not")
+GK_ATOM(nowrap, "nowrap")
+GK_ATOM(number, "number")
+GK_ATOM(object, "object")
+GK_ATOM(objectType, "object-type")
+GK_ATOM(observes, "observes")
+GK_ATOM(odd, "odd")
+GK_ATOM(OFF, "OFF")
+GK_ATOM(ol, "ol")
+GK_ATOM(omitXmlDeclaration, "omit-xml-declaration")
+GK_ATOM(onabort, "onabort")
+GK_ATOM(onmozaccesskeynotfound, "onmozaccesskeynotfound")
+GK_ATOM(onactivate, "onactivate")
+GK_ATOM(onafterprint, "onafterprint")
+GK_ATOM(onafterscriptexecute, "onafterscriptexecute")
+GK_ATOM(onanimationcancel, "onanimationcancel")
+GK_ATOM(onanimationend, "onanimationend")
+GK_ATOM(onanimationiteration, "onanimationiteration")
+GK_ATOM(onanimationstart, "onanimationstart")
+GK_ATOM(onAppCommand, "onAppCommand")
+GK_ATOM(onappinstalled, "onappinstalled")
+GK_ATOM(onaudioprocess, "onaudioprocess")
+GK_ATOM(onauxclick, "onauxclick")
+GK_ATOM(onbeforecopy, "onbeforecopy")
+GK_ATOM(onbeforecut, "onbeforecut")
+GK_ATOM(onbeforepaste, "onbeforepaste")
+GK_ATOM(onbeforeprint, "onbeforeprint")
+GK_ATOM(onbeforescriptexecute, "onbeforescriptexecute")
+GK_ATOM(onbeforeunload, "onbeforeunload")
+GK_ATOM(onblocked, "onblocked")
+GK_ATOM(onblur, "onblur")
+GK_ATOM(onbounce, "onbounce")
+GK_ATOM(onbroadcast, "onbroadcast")
+GK_ATOM(onbufferedamountlow, "onbufferedamountlow")
+GK_ATOM(oncached, "oncached")
+GK_ATOM(oncancel, "oncancel")
+GK_ATOM(onchange, "onchange")
+GK_ATOM(onchargingchange, "onchargingchange")
+GK_ATOM(onchargingtimechange, "onchargingtimechange")
+GK_ATOM(onchecking, "onchecking")
+GK_ATOM(onCheckboxStateChange, "onCheckboxStateChange")
+GK_ATOM(onclick, "onclick")
+GK_ATOM(onclose, "onclose")
+GK_ATOM(oncommand, "oncommand")
+GK_ATOM(oncommandupdate, "oncommandupdate")
+GK_ATOM(oncomplete, "oncomplete")
+GK_ATOM(oncompositionend, "oncompositionend")
+GK_ATOM(oncompositionstart, "oncompositionstart")
+GK_ATOM(oncompositionupdate, "oncompositionupdate")
+GK_ATOM(onconnect, "onconnect")
+GK_ATOM(onconnectionavailable, "onconnectionavailable")
+GK_ATOM(oncontextmenu, "oncontextmenu")
+GK_ATOM(oncopy, "oncopy")
+GK_ATOM(oncut, "oncut")
+GK_ATOM(ondblclick, "ondblclick")
+GK_ATOM(ondischargingtimechange, "ondischargingtimechange")
+GK_ATOM(ondownloading, "ondownloading")
+GK_ATOM(onDOMActivate, "onDOMActivate")
+GK_ATOM(onDOMAttrModified, "onDOMAttrModified")
+GK_ATOM(onDOMCharacterDataModified, "onDOMCharacterDataModified")
+GK_ATOM(onDOMFocusIn, "onDOMFocusIn")
+GK_ATOM(onDOMFocusOut, "onDOMFocusOut")
+GK_ATOM(onDOMMouseScroll, "onDOMMouseScroll")
+GK_ATOM(onDOMNodeInserted, "onDOMNodeInserted")
+GK_ATOM(onDOMNodeInsertedIntoDocument, "onDOMNodeInsertedIntoDocument")
+GK_ATOM(onDOMNodeRemoved, "onDOMNodeRemoved")
+GK_ATOM(onDOMNodeRemovedFromDocument, "onDOMNodeRemovedFromDocument")
+GK_ATOM(onDOMSubtreeModified, "onDOMSubtreeModified")
+GK_ATOM(ondata, "ondata")
+GK_ATOM(ondrag, "ondrag")
+GK_ATOM(ondragdrop, "ondragdrop")
+GK_ATOM(ondragend, "ondragend")
+GK_ATOM(ondragenter, "ondragenter")
+GK_ATOM(ondragexit, "ondragexit")
+GK_ATOM(ondragleave, "ondragleave")
+GK_ATOM(ondragover, "ondragover")
+GK_ATOM(ondragstart, "ondragstart")
+GK_ATOM(ondrain, "ondrain")
+GK_ATOM(ondrop, "ondrop")
+GK_ATOM(onerror, "onerror")
+GK_ATOM(onfinish, "onfinish")
+GK_ATOM(onfocus, "onfocus")
+GK_ATOM(onfocusin, "onfocusin")
+GK_ATOM(onfocusout, "onfocusout")
+GK_ATOM(onfullscreenchange, "onfullscreenchange")
+GK_ATOM(onfullscreenerror, "onfullscreenerror")
+GK_ATOM(onget, "onget")
+GK_ATOM(onhashchange, "onhashchange")
+GK_ATOM(oninput, "oninput")
+GK_ATOM(oninstall, "oninstall")
+GK_ATOM(oninvalid, "oninvalid")
+GK_ATOM(onkeydown, "onkeydown")
+GK_ATOM(onkeypress, "onkeypress")
+GK_ATOM(onkeyup, "onkeyup")
+GK_ATOM(onlanguagechange, "onlanguagechange")
+GK_ATOM(onlevelchange, "onlevelchange")
+GK_ATOM(onload, "onload")
+GK_ATOM(onloading, "onloading")
+GK_ATOM(onloadingdone, "onloadingdone")
+GK_ATOM(onloadingerror, "onloadingerror")
+GK_ATOM(onpopstate, "onpopstate")
+GK_ATOM(only, "only")               // this one is not an event
+GK_ATOM(onmessage, "onmessage")
+GK_ATOM(onmessageerror, "onmessageerror")
+GK_ATOM(onmidimessage, "onmidimessage")
+GK_ATOM(onmousedown, "onmousedown")
+GK_ATOM(onmouseenter, "onmouseenter")
+GK_ATOM(onmouseleave, "onmouseleave")
+GK_ATOM(onmouselongtap, "onmouselongtap")
+GK_ATOM(onmousemove, "onmousemove")
+GK_ATOM(onmouseout, "onmouseout")
+GK_ATOM(onmouseover, "onmouseover")
+GK_ATOM(onMozMouseHittest, "onMozMouseHittest")
+GK_ATOM(onmouseup, "onmouseup")
+GK_ATOM(onMozAfterPaint, "onMozAfterPaint")
+GK_ATOM(onmozfullscreenchange, "onmozfullscreenchange")
+GK_ATOM(onmozfullscreenerror, "onmozfullscreenerror")
+GK_ATOM(onmozkeydownonplugin, "onmozkeydownonplugin")
+GK_ATOM(onmozkeyuponplugin, "onmozkeyuponplugin")
+GK_ATOM(onmozpointerlockchange, "onmozpointerlockchange")
+GK_ATOM(onmozpointerlockerror, "onmozpointerlockerror")
+GK_ATOM(onMozMousePixelScroll, "onMozMousePixelScroll")
+GK_ATOM(onMozScrolledAreaChanged, "onMozScrolledAreaChanged")
+GK_ATOM(onmute, "onmute")
+GK_ATOM(onnotificationclick, "onnotificationclick")
+GK_ATOM(onnotificationclose, "onnotificationclose")
+GK_ATOM(onnoupdate, "onnoupdate")
+GK_ATOM(onobsolete, "onobsolete")
+GK_ATOM(ononline, "ononline")
+GK_ATOM(onoffline, "onoffline")
+GK_ATOM(onopen, "onopen")
+GK_ATOM(onorientationchange, "onorientationchange")
+GK_ATOM(onoverflow, "onoverflow")
+GK_ATOM(onpagehide, "onpagehide")
+GK_ATOM(onpageshow, "onpageshow")
+GK_ATOM(onpaste, "onpaste")
+GK_ATOM(onpaymentmethodchange, "onpaymentmethodchange")
+GK_ATOM(onpointerlockchange, "onpointerlockchange")
+GK_ATOM(onpointerlockerror, "onpointerlockerror")
+GK_ATOM(onpopuphidden, "onpopuphidden")
+GK_ATOM(onpopuphiding, "onpopuphiding")
+GK_ATOM(onpopuppositioned, "onpopuppositioned")
+GK_ATOM(onpopupshowing, "onpopupshowing")
+GK_ATOM(onpopupshown, "onpopupshown")
+GK_ATOM(onprocessorerror, "onprocessorerror")
+GK_ATOM(onpush, "onpush")
+GK_ATOM(onpushsubscriptionchange, "onpushsubscriptionchange")
+GK_ATOM(onRadioStateChange, "onRadioStateChange")
+GK_ATOM(onreadystatechange, "onreadystatechange")
+GK_ATOM(onrequestprogress, "onrequestprogress")
+GK_ATOM(onresourcetimingbufferfull, "onresourcetimingbufferfull")
+GK_ATOM(onresponseprogress, "onresponseprogress")
+GK_ATOM(onRequest, "onRequest")
+GK_ATOM(onreset, "onreset")
+GK_ATOM(onresize, "onresize")
+GK_ATOM(onscroll, "onscroll")
+GK_ATOM(onselect, "onselect")
+GK_ATOM(onselectionchange, "onselectionchange")
+GK_ATOM(onselectstart, "onselectstart")
+GK_ATOM(onset, "onset")
+GK_ATOM(onshippingaddresschange, "onshippingaddresschange")
+GK_ATOM(onshippingoptionchange, "onshippingoptionchange")
+GK_ATOM(onshow, "onshow")
+GK_ATOM(onstatechange, "onstatechange")
+GK_ATOM(onstorage, "onstorage")
+GK_ATOM(onsubmit, "onsubmit")
+GK_ATOM(onsuccess, "onsuccess")
+GK_ATOM(ontypechange, "ontypechange")
+GK_ATOM(onterminate, "onterminate")
+GK_ATOM(ontext, "ontext")
+GK_ATOM(ontoggle, "ontoggle")
+GK_ATOM(ontouchstart, "ontouchstart")
+GK_ATOM(ontouchend, "ontouchend")
+GK_ATOM(ontouchmove, "ontouchmove")
+GK_ATOM(ontouchcancel, "ontouchcancel")
+GK_ATOM(ontransitioncancel, "ontransitioncancel")
+GK_ATOM(ontransitionend, "ontransitionend")
+GK_ATOM(ontransitionrun, "ontransitionrun")
+GK_ATOM(ontransitionstart, "ontransitionstart")
+GK_ATOM(onunderflow, "onunderflow")
+GK_ATOM(onunload, "onunload")
+GK_ATOM(onunmute, "onunmute")
+GK_ATOM(onupdatefound, "onupdatefound")
+GK_ATOM(onupdateready, "onupdateready")
+GK_ATOM(onupgradeneeded, "onupgradeneeded")
+GK_ATOM(onversionchange, "onversionchange")
+GK_ATOM(onvisibilitychange, "onvisibilitychange")
+GK_ATOM(onvoiceschanged, "onvoiceschanged")
+GK_ATOM(onvrdisplayactivate, "onvrdisplayactivate")
+GK_ATOM(onvrdisplayconnect, "onvrdisplayconnect")
+GK_ATOM(onvrdisplaydeactivate, "onvrdisplaydeactivate")
+GK_ATOM(onvrdisplaydisconnect, "onvrdisplaydisconnect")
+GK_ATOM(onvrdisplaypresentchange, "onvrdisplaypresentchange")
+GK_ATOM(onwebkitAnimationEnd, "onwebkitAnimationEnd")
+GK_ATOM(onwebkitAnimationIteration, "onwebkitAnimationIteration")
+GK_ATOM(onwebkitAnimationStart, "onwebkitAnimationStart")
+GK_ATOM(onwebkitTransitionEnd, "onwebkitTransitionEnd")
+GK_ATOM(onwebkitanimationend, "onwebkitanimationend")
+GK_ATOM(onwebkitanimationiteration, "onwebkitanimationiteration")
+GK_ATOM(onwebkitanimationstart, "onwebkitanimationstart")
+GK_ATOM(onwebkittransitionend, "onwebkittransitionend")
+GK_ATOM(onwheel, "onwheel")
+GK_ATOM(open, "open")
+GK_ATOM(optgroup, "optgroup")
+GK_ATOM(optimum, "optimum")
+GK_ATOM(option, "option")
+GK_ATOM(_or, "or")
+GK_ATOM(order, "order")
+GK_ATOM(ordinal, "ordinal")
+GK_ATOM(orient, "orient")
+GK_ATOM(orientation, "orientation")
+GK_ATOM(otherwise, "otherwise")
+GK_ATOM(output, "output")
+GK_ATOM(overflow, "overflow")
+GK_ATOM(overlay, "overlay")
+GK_ATOM(p, "p")
+GK_ATOM(pack, "pack")
+GK_ATOM(page, "page")
+GK_ATOM(pageincrement, "pageincrement")
+GK_ATOM(paint_order, "paint-order")
+GK_ATOM(panel, "panel")
+GK_ATOM(paragraph, "paragraph")
+GK_ATOM(param, "param")
+GK_ATOM(parameter, "parameter")
+GK_ATOM(parent, "parent")
+GK_ATOM(parentfocused, "parentfocused")
+GK_ATOM(password, "password")
+GK_ATOM(pattern, "pattern")
+GK_ATOM(patternSeparator, "pattern-separator")
+GK_ATOM(perMille, "per-mille")
+GK_ATOM(percent, "percent")
+GK_ATOM(persist, "persist")
+GK_ATOM(phase, "phase")
+GK_ATOM(picture, "picture")
+GK_ATOM(ping, "ping")
+GK_ATOM(pinned,"pinned")
+GK_ATOM(placeholder, "placeholder")
+GK_ATOM(plaintext, "plaintext")
+GK_ATOM(playbackrate, "playbackrate")
+GK_ATOM(pointSize, "point-size")
+GK_ATOM(poly, "poly")
+GK_ATOM(polygon, "polygon")
+GK_ATOM(popup, "popup")
+GK_ATOM(popupalign, "popupalign")
+GK_ATOM(popupanchor, "popupanchor")
+GK_ATOM(popupgroup, "popupgroup")
+GK_ATOM(popupset, "popupset")
+GK_ATOM(popupsinherittooltip, "popupsinherittooltip")
+GK_ATOM(position, "position")
+GK_ATOM(poster, "poster")
+GK_ATOM(pre, "pre")
+GK_ATOM(preceding, "preceding")
+GK_ATOM(precedingSibling, "preceding-sibling")
+GK_ATOM(prefersReducedMotion, "prefers-reduced-motion")
+GK_ATOM(prefix, "prefix")
+GK_ATOM(preload, "preload")
+GK_ATOM(mozpresentation, "mozpresentation")
+GK_ATOM(preserve, "preserve")
+GK_ATOM(preserveSpace, "preserve-space")
+GK_ATOM(preventdefault, "preventdefault")
+GK_ATOM(primary, "primary")
+GK_ATOM(print, "print")
+GK_ATOM(priority, "priority")
+GK_ATOM(processingInstruction, "processing-instruction")
+GK_ATOM(profile, "profile")
+GK_ATOM(progress, "progress")
+GK_ATOM(progressmeter, "progressmeter")
+GK_ATOM(prompt, "prompt")
+GK_ATOM(properties, "properties")
+GK_ATOM(property, "property")
+GK_ATOM(pubdate, "pubdate")
+GK_ATOM(q, "q")
+GK_ATOM(radio, "radio")
+GK_ATOM(radiogroup, "radiogroup")
+GK_ATOM(range, "range")
+GK_ATOM(readonly, "readonly")
+GK_ATOM(rect, "rect")
+GK_ATOM(rectangle, "rectangle")
+GK_ATOM(refresh, "refresh")
+GK_ATOM(rel, "rel")
+GK_ATOM(rem, "rem")
+GK_ATOM(remote, "remote")
+GK_ATOM(removeelement, "removeelement")
+GK_ATOM(renderingobserverlist, "renderingobserverlist")
+GK_ATOM(repeat, "repeat")
+GK_ATOM(replace, "replace")
+GK_ATOM(requestcontextid, "requestcontextid")
+GK_ATOM(required, "required")
+GK_ATOM(reserved, "reserved")
+GK_ATOM(reset, "reset")
+GK_ATOM(resizeafter, "resizeafter")
+GK_ATOM(resizebefore, "resizebefore")
+GK_ATOM(resizer, "resizer")
+GK_ATOM(resolution, "resolution")
+GK_ATOM(resources, "resources")
+GK_ATOM(result, "result")
+GK_ATOM(resultPrefix, "result-prefix")
+GK_ATOM(retargetdocumentfocus, "retargetdocumentfocus")
+GK_ATOM(rev, "rev")
+GK_ATOM(reverse, "reverse")
+GK_ATOM(reversed, "reversed")
+GK_ATOM(richlistbox, "richlistbox")
+GK_ATOM(richlistitem, "richlistitem")
+GK_ATOM(right, "right")
+GK_ATOM(rightmargin, "rightmargin")
+GK_ATOM(role, "role")
+GK_ATOM(rolluponmousewheel, "rolluponmousewheel")
+GK_ATOM(round, "round")
+GK_ATOM(row, "row")
+GK_ATOM(rows, "rows")
+GK_ATOM(rowspan, "rowspan")
+GK_ATOM(rb, "rb")
+GK_ATOM(rp, "rp")
+GK_ATOM(rt, "rt")
+GK_ATOM(rtc, "rtc")
+GK_ATOM(rtl, "rtl")
+GK_ATOM(ruby, "ruby")
+GK_ATOM(rubyBase, "ruby-base")
+GK_ATOM(rubyBaseContainer, "ruby-base-container")
+GK_ATOM(rubyText, "ruby-text")
+GK_ATOM(rubyTextContainer, "ruby-text-container")
+GK_ATOM(rules, "rules")
+GK_ATOM(s, "s")
+GK_ATOM(samp, "samp")
+GK_ATOM(sandbox, "sandbox")
+GK_ATOM(sbattr, "sbattr")
+GK_ATOM(scale, "scale")
+GK_ATOM(scan, "scan")
+GK_ATOM(scheme, "scheme")
+GK_ATOM(scope, "scope")
+GK_ATOM(scoped, "scoped")
+GK_ATOM(screen, "screen")
+GK_ATOM(screenX, "screenX")
+GK_ATOM(screenY, "screenY")
+GK_ATOM(script, "script")
+GK_ATOM(scriptEnabledBeforePrintOrPreview, "scriptEnabledBeforePrintOrPreview")
+GK_ATOM(scrollbar, "scrollbar")
+GK_ATOM(scrollbarbutton, "scrollbarbutton")
+GK_ATOM(scrollbarDownBottom, "scrollbar-down-bottom")
+GK_ATOM(scrollbarDownTop, "scrollbar-down-top")
+GK_ATOM(scrollbarUpBottom, "scrollbar-up-bottom")
+GK_ATOM(scrollbarUpTop, "scrollbar-up-top")
+GK_ATOM(scrollbox, "scrollbox")
+GK_ATOM(scrollcorner, "scrollcorner")
+GK_ATOM(scrolling, "scrolling")
+GK_ATOM(scrollPosition, "scroll-position")
+GK_ATOM(section, "section")
+GK_ATOM(select, "select")
+GK_ATOM(selectable, "selectable")
+GK_ATOM(selected, "selected")
+GK_ATOM(selectedIndex, "selectedIndex")
+GK_ATOM(selectedindex, "selectedindex")
+GK_ATOM(self, "self")
+GK_ATOM(seltype, "seltype")
+GK_ATOM(setcookie, "set-cookie")
+GK_ATOM(setter, "setter")
+GK_ATOM(shape, "shape")
+GK_ATOM(show, "show")
+GK_ATOM(showcaret, "showcaret")
+GK_ATOM(showresizer, "showresizer")
+GK_ATOM(simple, "simple")
+GK_ATOM(simp_chinese_formal, "simp-chinese-formal")
+GK_ATOM(simp_chinese_informal, "simp-chinese-informal")
+GK_ATOM(single, "single")
+GK_ATOM(size, "size")
+GK_ATOM(sizes, "sizes")
+GK_ATOM(sizemode, "sizemode")
+GK_ATOM(sizetopopup, "sizetopopup")
+GK_ATOM(slider, "slider")
+GK_ATOM(small, "small")
+GK_ATOM(smooth, "smooth")
+GK_ATOM(snap, "snap")
+GK_ATOM(sort, "sort")
+GK_ATOM(sortActive, "sortActive")
+GK_ATOM(sortDirection, "sortDirection")
+GK_ATOM(sorted, "sorted")
+GK_ATOM(sorthints, "sorthints")
+GK_ATOM(source, "source")
+GK_ATOM(space, "space")
+GK_ATOM(spacer, "spacer")
+GK_ATOM(span, "span")
+GK_ATOM(spellcheck, "spellcheck")
+GK_ATOM(split, "split")
+GK_ATOM(splitter, "splitter")
+GK_ATOM(spring, "spring")
+GK_ATOM(square, "square")
+GK_ATOM(src, "src")
+GK_ATOM(srcdoc, "srcdoc")
+GK_ATOM(srclang, "srclang")
+GK_ATOM(srcset, "srcset")
+GK_ATOM(standalone, "standalone")
+GK_ATOM(standby, "standby")
+GK_ATOM(start, "start")
+GK_ATOM(startsWith, "starts-with")
+GK_ATOM(state, "state")
+GK_ATOM(statusbar, "statusbar")
+GK_ATOM(step, "step")
+GK_ATOM(stop, "stop")
+GK_ATOM(stretch, "stretch")
+GK_ATOM(strike, "strike")
+GK_ATOM(string, "string")
+GK_ATOM(stringLength, "string-length")
+GK_ATOM(stripSpace, "strip-space")
+GK_ATOM(strong, "strong")
+GK_ATOM(style, "style")
+GK_ATOM(stylesheet, "stylesheet")
+GK_ATOM(stylesheetPrefix, "stylesheet-prefix")
+GK_ATOM(submit, "submit")
+GK_ATOM(substate, "substate")
+GK_ATOM(substring, "substring")
+GK_ATOM(substringAfter, "substring-after")
+GK_ATOM(substringBefore, "substring-before")
+GK_ATOM(sub, "sub")
+GK_ATOM(sum, "sum")
+GK_ATOM(sup, "sup")
+GK_ATOM(summary, "summary")
+//GK_ATOM(_switch, "switch")  # "switch" is present below
+GK_ATOM(systemProperty, "system-property")
+GK_ATOM(tab, "tab")
+GK_ATOM(tabindex, "tabindex")
+GK_ATOM(table, "table")
+GK_ATOM(tabpanel, "tabpanel")
+GK_ATOM(tabpanels, "tabpanels")
+GK_ATOM(tag, "tag")
+GK_ATOM(target, "target")
+GK_ATOM(targets, "targets")
+GK_ATOM(tbody, "tbody")
+GK_ATOM(td, "td")
+GK_ATOM(_template, "template")
+GK_ATOM(text_decoration, "text-decoration")
+GK_ATOM(terminate, "terminate")
+GK_ATOM(term, "term")
+GK_ATOM(test, "test")
+GK_ATOM(text, "text")
+GK_ATOM(textAlign, "text-align")
+GK_ATOM(textarea, "textarea")
+GK_ATOM(textbox, "textbox")
+GK_ATOM(textNodeDirectionalityMap, "textNodeDirectionalityMap")
+GK_ATOM(tfoot, "tfoot")
+GK_ATOM(th, "th")
+GK_ATOM(thead, "thead")
+GK_ATOM(thumb, "thumb")
+GK_ATOM(time, "time")
+GK_ATOM(title, "title")
+GK_ATOM(titlebar, "titlebar")
+GK_ATOM(titletip, "titletip")
+GK_ATOM(token, "token")
+GK_ATOM(tokenize, "tokenize")
+GK_ATOM(toolbar, "toolbar")
+GK_ATOM(toolbarbutton, "toolbarbutton")
+GK_ATOM(toolbaritem, "toolbaritem")
+GK_ATOM(toolbarpaletteitem, "toolbarpaletteitem")
+GK_ATOM(toolbox, "toolbox")
+GK_ATOM(tooltip, "tooltip")
+GK_ATOM(tooltiptext, "tooltiptext")
+GK_ATOM(top, "top")
+GK_ATOM(topleft, "topleft")
+GK_ATOM(topmargin, "topmargin")
+GK_ATOM(topright, "topright")
+GK_ATOM(tr, "tr")
+GK_ATOM(track, "track")
+GK_ATOM(trad_chinese_formal, "trad-chinese-formal")
+GK_ATOM(trad_chinese_informal, "trad-chinese-informal")
+GK_ATOM(trailing, "trailing")
+GK_ATOM(transform, "transform")
+GK_ATOM(transform_3d, "transform-3d")
+GK_ATOM(transformiix, "transformiix")
+GK_ATOM(translate, "translate")
+GK_ATOM(transparent, "transparent")
+GK_ATOM(tree, "tree")
+GK_ATOM(treecell, "treecell")
+GK_ATOM(treechildren, "treechildren")
+GK_ATOM(treecol, "treecol")
+GK_ATOM(treecolpicker, "treecolpicker")
+GK_ATOM(treecols, "treecols")
+GK_ATOM(treeitem, "treeitem")
+GK_ATOM(treerow, "treerow")
+GK_ATOM(treeseparator, "treeseparator")
+GK_ATOM(_true, "true")
+GK_ATOM(tt, "tt")
+GK_ATOM(type, "type")
+GK_ATOM(typemustmatch, "typemustmatch")
+GK_ATOM(u, "u")
+GK_ATOM(ul, "ul")
+GK_ATOM(undetermined, "undetermined")
+GK_ATOM(unparsedEntityUri, "unparsed-entity-uri")
+GK_ATOM(upperAlpha, "upper-alpha")
+GK_ATOM(upperFirst, "upper-first")
+GK_ATOM(upperRoman, "upper-roman")
+GK_ATOM(use, "use")
+GK_ATOM(useAttributeSets, "use-attribute-sets")
+GK_ATOM(usemap, "usemap")
+GK_ATOM(user_scalable, "user-scalable")
+GK_ATOM(validate, "validate")
+GK_ATOM(valign, "valign")
+GK_ATOM(value, "value")
+GK_ATOM(values, "values")
+GK_ATOM(valueOf, "value-of")
+GK_ATOM(valuetype, "valuetype")
+GK_ATOM(var, "var")
+GK_ATOM(variable, "variable")
+GK_ATOM(vendor, "vendor")
+GK_ATOM(vendorUrl, "vendor-url")
+GK_ATOM(version, "version")
+GK_ATOM(vertical, "vertical")
+GK_ATOM(audio, "audio")
+GK_ATOM(video, "video")
+GK_ATOM(videocontrols, "videocontrols")
+GK_ATOM(viewport, "viewport")
+GK_ATOM(viewport_height, "viewport-height")
+GK_ATOM(viewport_initial_scale, "viewport-initial-scale")
+GK_ATOM(viewport_maximum_scale, "viewport-maximum-scale")
+GK_ATOM(viewport_minimum_scale, "viewport-minimum-scale")
+GK_ATOM(viewport_user_scalable, "viewport-user-scalable")
+GK_ATOM(viewport_width, "viewport-width")
+GK_ATOM(visibility, "visibility")
+GK_ATOM(visuallyselected, "visuallyselected")
+GK_ATOM(vlink, "vlink")
+GK_ATOM(vspace, "vspace")
+GK_ATOM(wbr, "wbr")
+GK_ATOM(webkitdirectory, "webkitdirectory")
+GK_ATOM(when, "when")
+GK_ATOM(width, "width")
+GK_ATOM(willChange, "will-change")
+GK_ATOM(window, "window")
+GK_ATOM(headerWindowTarget, "window-target")
+GK_ATOM(windowtype, "windowtype")
+GK_ATOM(withParam, "with-param")
+GK_ATOM(wizard, "wizard")
+GK_ATOM(wrap, "wrap")
+GK_ATOM(headerDNSPrefetchControl,"x-dns-prefetch-control")
+GK_ATOM(headerCSP, "content-security-policy")
+GK_ATOM(headerCSPReportOnly, "content-security-policy-report-only")
+GK_ATOM(headerXFO, "x-frame-options")
+GK_ATOM(x_western, "x-western")
+GK_ATOM(xml, "xml")
+GK_ATOM(xml_stylesheet, "xml-stylesheet")
+GK_ATOM(xmlns, "xmlns")
+GK_ATOM(xmp, "xmp")
+GK_ATOM(yes, "yes")
+GK_ATOM(z_index, "z-index")
+GK_ATOM(zeroDigit, "zero-digit")
+GK_ATOM(zlevel, "zlevel")
+
+
+GK_ATOM(percentage, "%")
+GK_ATOM(A, "A")
+GK_ATOM(alignment_baseline, "alignment-baseline")
+GK_ATOM(amplitude, "amplitude")
+GK_ATOM(animate, "animate")
+GK_ATOM(animateColor, "animateColor")
+GK_ATOM(animateMotion, "animateMotion")
+GK_ATOM(animateTransform, "animateTransform")
+GK_ATOM(arithmetic, "arithmetic")
+GK_ATOM(atop, "atop")
+GK_ATOM(azimuth, "azimuth")
+GK_ATOM(B, "B")
+GK_ATOM(backgroundColor, "background-color")
+GK_ATOM(background_image, "background-image")
+GK_ATOM(baseFrequency, "baseFrequency")
+GK_ATOM(baseline_shift, "baseline-shift")
+GK_ATOM(bias, "bias")
+GK_ATOM(caption_side, "caption-side")
+GK_ATOM(clip_path, "clip-path")
+GK_ATOM(clip_rule, "clip-rule")
+GK_ATOM(clipPath, "clipPath")
+GK_ATOM(clipPathUnits, "clipPathUnits")
+GK_ATOM(cm, "cm")
+GK_ATOM(colorBurn, "color-burn")
+GK_ATOM(colorDodge, "color-dodge")
+GK_ATOM(colorInterpolation, "color-interpolation")
+GK_ATOM(colorInterpolationFilters, "color-interpolation-filters")
+GK_ATOM(colorpicker, "colorpicker")
+GK_ATOM(colorProfile, "color-profile")
+GK_ATOM(cursor, "cursor")
+GK_ATOM(cx, "cx")
+GK_ATOM(cy, "cy")
+GK_ATOM(d, "d")
+GK_ATOM(darken, "darken")
+GK_ATOM(defs, "defs")
+GK_ATOM(deg, "deg")
+GK_ATOM(desc, "desc")
+GK_ATOM(diffuseConstant, "diffuseConstant")
+GK_ATOM(dilate, "dilate")
+GK_ATOM(direction, "direction")
+GK_ATOM(disable, "disable")
+GK_ATOM(disc, "disc")
+GK_ATOM(discrete, "discrete")
+GK_ATOM(divisor, "divisor")
+GK_ATOM(dominant_baseline, "dominant-baseline")
+GK_ATOM(duplicate, "duplicate")
+GK_ATOM(dx, "dx")
+GK_ATOM(dy, "dy")
+GK_ATOM(edgeMode, "edgeMode")
+GK_ATOM(ellipse, "ellipse")
+GK_ATOM(elevation, "elevation")
+GK_ATOM(erode, "erode")
+GK_ATOM(ex, "ex")
+GK_ATOM(exact, "exact")
+GK_ATOM(exclusion, "exclusion")
+GK_ATOM(exponent, "exponent")
+GK_ATOM(feBlend, "feBlend")
+GK_ATOM(feColorMatrix, "feColorMatrix")
+GK_ATOM(feComponentTransfer, "feComponentTransfer")
+GK_ATOM(feComposite, "feComposite")
+GK_ATOM(feConvolveMatrix, "feConvolveMatrix")
+GK_ATOM(feDiffuseLighting, "feDiffuseLighting")
+GK_ATOM(feDisplacementMap, "feDisplacementMap")
+GK_ATOM(feDistantLight,"feDistantLight")
+GK_ATOM(feDropShadow, "feDropShadow")
+GK_ATOM(feFlood, "feFlood")
+GK_ATOM(feFuncA, "feFuncA")
+GK_ATOM(feFuncB, "feFuncB")
+GK_ATOM(feFuncG, "feFuncG")
+GK_ATOM(feFuncR, "feFuncR")
+GK_ATOM(feGaussianBlur, "feGaussianBlur")
+GK_ATOM(feImage, "feImage")
+GK_ATOM(feMerge, "feMerge")
+GK_ATOM(feMergeNode, "feMergeNode")
+GK_ATOM(feMorphology, "feMorphology")
+GK_ATOM(feOffset, "feOffset")
+GK_ATOM(fePointLight, "fePointLight")
+GK_ATOM(feSpecularLighting, "feSpecularLighting")
+GK_ATOM(feSpotLight, "feSpotLight")
+GK_ATOM(feTile, "feTile")
+GK_ATOM(feTurbulence, "feTurbulence")
+GK_ATOM(fill, "fill")
+GK_ATOM(fill_opacity, "fill-opacity")
+GK_ATOM(fill_rule, "fill-rule")
+GK_ATOM(filter, "filter")
+GK_ATOM(filterUnits, "filterUnits")
+GK_ATOM(_float, "float")
+GK_ATOM(flood_color, "flood-color")
+GK_ATOM(flood_opacity, "flood-opacity")
+GK_ATOM(font_face, "font-face")
+GK_ATOM(font_face_format, "font-face-format")
+GK_ATOM(font_face_name, "font-face-name")
+GK_ATOM(font_face_src, "font-face-src")
+GK_ATOM(font_face_uri, "font-face-uri")
+GK_ATOM(font_family, "font-family")
+GK_ATOM(font_size, "font-size")
+GK_ATOM(font_size_adjust, "font-size-adjust")
+GK_ATOM(font_stretch, "font-stretch")
+GK_ATOM(font_style, "font-style")
+GK_ATOM(font_variant, "font-variant")
+GK_ATOM(foreignObject, "foreignObject")
+GK_ATOM(fractalNoise, "fractalNoise")
+GK_ATOM(fr, "fr")
+GK_ATOM(fx, "fx")
+GK_ATOM(fy, "fy")
+GK_ATOM(G, "G")
+GK_ATOM(g, "g")
+GK_ATOM(gamma, "gamma")
+// 'generic' conflicts with msvc11 winrt compiler extensions
+GK_ATOM(generic_, "generic")
+GK_ATOM(glyphRef, "glyphRef")
+GK_ATOM(grad, "grad")
+GK_ATOM(gradientTransform, "gradientTransform")
+GK_ATOM(gradientUnits, "gradientUnits")
+GK_ATOM(hardLight, "hard-light")
+GK_ATOM(hue, "hue")
+GK_ATOM(hueRotate, "hueRotate")
+GK_ATOM(identity, "identity")
+GK_ATOM(image_rendering, "image-rendering")
+GK_ATOM(in, "in")
+GK_ATOM(in2, "in2")
+GK_ATOM(intercept, "intercept")
+GK_ATOM(k1, "k1")
+GK_ATOM(k2, "k2")
+GK_ATOM(k3, "k3")
+GK_ATOM(k4, "k4")
+GK_ATOM(kernelMatrix, "kernelMatrix")
+GK_ATOM(kernelUnitLength, "kernelUnitLength")
+GK_ATOM(lengthAdjust, "lengthAdjust")
+GK_ATOM(letter_spacing, "letter-spacing")
+GK_ATOM(lighten, "lighten")
+GK_ATOM(lighting_color, "lighting-color")
+GK_ATOM(limitingConeAngle, "limitingConeAngle")
+GK_ATOM(linear, "linear")
+GK_ATOM(linearGradient, "linearGradient")
+GK_ATOM(list_style_type, "list-style-type")
+GK_ATOM(luminanceToAlpha, "luminanceToAlpha")
+GK_ATOM(luminosity, "luminosity")
+GK_ATOM(magnify, "magnify")
+GK_ATOM(marker, "marker")
+GK_ATOM(marker_end, "marker-end")
+GK_ATOM(marker_mid, "marker-mid")
+GK_ATOM(marker_start, "marker-start")
+GK_ATOM(markerHeight, "markerHeight")
+GK_ATOM(markerUnits, "markerUnits")
+GK_ATOM(markerWidth, "markerWidth")
+GK_ATOM(mask, "mask")
+GK_ATOM(maskContentUnits, "maskContentUnits")
+GK_ATOM(mask_type, "mask-type")
+GK_ATOM(maskUnits, "maskUnits")
+GK_ATOM(matrix, "matrix")
+GK_ATOM(metadata, "metadata")
+GK_ATOM(missingGlyph, "missing-glyph")
+GK_ATOM(mm, "mm")
+GK_ATOM(mpath, "mpath")
+GK_ATOM(noStitch, "noStitch")
+GK_ATOM(numOctaves, "numOctaves")
+GK_ATOM(multiply, "multiply")
+GK_ATOM(objectBoundingBox, "objectBoundingBox")
+GK_ATOM(offset, "offset")
+GK_ATOM(onSVGLoad, "onSVGLoad")
+GK_ATOM(onSVGResize, "onSVGResize")
+GK_ATOM(onSVGScroll, "onSVGScroll")
+GK_ATOM(onSVGUnload, "onSVGUnload")
+GK_ATOM(onSVGZoom, "onSVGZoom")
+GK_ATOM(onzoom, "onzoom")
+GK_ATOM(opacity, "opacity")
+GK_ATOM(_operator, "operator")
+GK_ATOM(out, "out")
+GK_ATOM(over, "over")
+GK_ATOM(overridePreserveAspectRatio, "overridePreserveAspectRatio")
+GK_ATOM(pad, "pad")
+GK_ATOM(path, "path")
+GK_ATOM(pathLength, "pathLength")
+GK_ATOM(patternContentUnits, "patternContentUnits")
+GK_ATOM(patternTransform, "patternTransform")
+GK_ATOM(patternUnits, "patternUnits")
+GK_ATOM(pc, "pc")
+GK_ATOM(pointer_events, "pointer-events")
+GK_ATOM(points, "points")
+GK_ATOM(pointsAtX, "pointsAtX")
+GK_ATOM(pointsAtY, "pointsAtY")
+GK_ATOM(pointsAtZ, "pointsAtZ")
+GK_ATOM(polyline, "polyline")
+GK_ATOM(preserveAlpha, "preserveAlpha")
+GK_ATOM(preserveAspectRatio, "preserveAspectRatio")
+GK_ATOM(primitiveUnits, "primitiveUnits")
+GK_ATOM(pt, "pt")
+GK_ATOM(px, "px")
+GK_ATOM(R, "R")
+GK_ATOM(r, "r")
+GK_ATOM(rad, "rad")
+GK_ATOM(radialGradient, "radialGradient")
+GK_ATOM(radius, "radius")
+GK_ATOM(reflect, "reflect")
+GK_ATOM(refX, "refX")
+GK_ATOM(refY, "refY")
+GK_ATOM(requiredExtensions, "requiredExtensions")
+GK_ATOM(requiredFeatures, "requiredFeatures")
+GK_ATOM(rotate, "rotate")
+GK_ATOM(rx, "rx")
+GK_ATOM(ry, "ry")
+GK_ATOM(saturate, "saturate")
+GK_ATOM(saturation, "saturation")
+GK_ATOM(set, "set")
+GK_ATOM(seed, "seed")
+GK_ATOM(shape_rendering, "shape-rendering")
+GK_ATOM(simpleScopeChain, "simpleScopeChain")
+GK_ATOM(skewX, "skewX")
+GK_ATOM(skewY, "skewY")
+GK_ATOM(slope, "slope")
+GK_ATOM(slot, "slot")
+GK_ATOM(softLight, "soft-light")
+GK_ATOM(spacing, "spacing")
+GK_ATOM(spacingAndGlyphs, "spacingAndGlyphs")
+GK_ATOM(specularConstant, "specularConstant")
+GK_ATOM(specularExponent, "specularExponent")
+GK_ATOM(spreadMethod, "spreadMethod")
+GK_ATOM(startOffset, "startOffset")
+GK_ATOM(stdDeviation, "stdDeviation")
+GK_ATOM(stitch, "stitch")
+GK_ATOM(stitchTiles, "stitchTiles")
+GK_ATOM(stop_color, "stop-color")
+GK_ATOM(stop_opacity, "stop-opacity")
+GK_ATOM(stroke, "stroke")
+GK_ATOM(stroke_dasharray, "stroke-dasharray")
+GK_ATOM(stroke_dashoffset, "stroke-dashoffset")
+GK_ATOM(stroke_linecap, "stroke-linecap")
+GK_ATOM(stroke_linejoin, "stroke-linejoin")
+GK_ATOM(stroke_miterlimit, "stroke-miterlimit")
+GK_ATOM(stroke_opacity, "stroke-opacity")
+GK_ATOM(stroke_width, "stroke-width")
+GK_ATOM(strokeWidth, "strokeWidth")
+GK_ATOM(surfaceScale, "surfaceScale")
+GK_ATOM(svg, "svg")
+GK_ATOM(svgSwitch, "switch")
+GK_ATOM(symbol, "symbol")
+GK_ATOM(systemLanguage, "systemLanguage")
+GK_ATOM(tableValues, "tableValues")
+GK_ATOM(targetX, "targetX")
+GK_ATOM(targetY, "targetY")
+GK_ATOM(text_anchor, "text-anchor")
+GK_ATOM(text_rendering, "text-rendering")
+GK_ATOM(textLength, "textLength")
+GK_ATOM(textPath, "textPath")
+GK_ATOM(tref, "tref")
+GK_ATOM(tspan, "tspan")
+GK_ATOM(turbulence, "turbulence")
+GK_ATOM(unicode_bidi, "unicode-bidi")
+GK_ATOM(userSpaceOnUse, "userSpaceOnUse")
+GK_ATOM(view, "view")
+GK_ATOM(viewBox, "viewBox")
+GK_ATOM(viewTarget, "viewTarget")
+GK_ATOM(white_space, "white-space")
+GK_ATOM(word_spacing, "word-spacing")
+GK_ATOM(writing_mode, "writing-mode")
+GK_ATOM(x, "x")
+GK_ATOM(x1, "x1")
+GK_ATOM(x2, "x2")
+GK_ATOM(xChannelSelector, "xChannelSelector")
+GK_ATOM(xor_, "xor")
+GK_ATOM(y, "y")
+GK_ATOM(y1, "y1")
+GK_ATOM(y2, "y2")
+GK_ATOM(yChannelSelector, "yChannelSelector")
+GK_ATOM(z, "z")
+GK_ATOM(zoomAndPan, "zoomAndPan")
+GK_ATOM(vector_effect, "vector-effect")
+GK_ATOM(vertical_align, "vertical-align")
+
+GK_ATOM(accumulate, "accumulate")
+GK_ATOM(additive, "additive")
+GK_ATOM(attributeName, "attributeName")
+GK_ATOM(attributeType, "attributeType")
+GK_ATOM(auto_reverse, "auto-reverse")
+GK_ATOM(begin, "begin")
+GK_ATOM(beginEvent, "beginEvent")
+GK_ATOM(by, "by")
+GK_ATOM(calcMode, "calcMode")
+GK_ATOM(dur, "dur")
+GK_ATOM(keyPoints, "keyPoints")
+GK_ATOM(keySplines, "keySplines")
+GK_ATOM(keyTimes, "keyTimes")
+GK_ATOM(mozAnimateMotionDummyAttr, "_mozAnimateMotionDummyAttr")
+GK_ATOM(onbegin, "onbegin")
+GK_ATOM(onbeginEvent, "onbeginEvent")
+GK_ATOM(onend, "onend")
+GK_ATOM(onendEvent, "onendEvent")
+GK_ATOM(onrepeat, "onrepeat")
+GK_ATOM(onrepeatEvent, "onrepeatEvent")
+GK_ATOM(repeatCount, "repeatCount")
+GK_ATOM(repeatDur, "repeatDur")
+GK_ATOM(repeatEvent, "repeatEvent")
+GK_ATOM(restart, "restart")
+GK_ATOM(to, "to")
+
+GK_ATOM(abs_, "abs")
+GK_ATOM(accent_, "accent")
+GK_ATOM(accentunder_, "accentunder")
+GK_ATOM(actiontype_, "actiontype")
+GK_ATOM(alignmentscope_, "alignmentscope")
+GK_ATOM(altimg_, "altimg")
+GK_ATOM(altimg_height_, "altimg-height")
+GK_ATOM(altimg_valign_, "altimg-valign")
+GK_ATOM(altimg_width_, "altimg-width")
+GK_ATOM(annotation_, "annotation")
+GK_ATOM(annotation_xml_, "annotation-xml")
+GK_ATOM(apply_, "apply")
+GK_ATOM(approx_, "approx")
+GK_ATOM(arccos_, "arccos")
+GK_ATOM(arccosh_, "arccosh")
+GK_ATOM(arccot_, "arccot")
+GK_ATOM(arccoth_, "arccoth")
+GK_ATOM(arccsc_, "arccsc")
+GK_ATOM(arccsch_, "arccsch")
+GK_ATOM(arcsec_, "arcsec")
+GK_ATOM(arcsech_, "arcsech")
+GK_ATOM(arcsin_, "arcsin")
+GK_ATOM(arcsinh_, "arcsinh")
+GK_ATOM(arctan_, "arctan")
+GK_ATOM(arctanh_, "arctanh")
+GK_ATOM(arg_, "arg")
+GK_ATOM(bevelled_, "bevelled")
+GK_ATOM(bind_, "bind")
+GK_ATOM(bvar_, "bvar")
+GK_ATOM(card_, "card")
+GK_ATOM(cartesianproduct_, "cartesianproduct")
+GK_ATOM(cbytes_, "cbytes")
+GK_ATOM(cd_, "cd")
+GK_ATOM(cdgroup_, "cdgroup")
+GK_ATOM(cerror_, "cerror")
+GK_ATOM(charalign_, "charalign")
+GK_ATOM(ci_, "ci")
+GK_ATOM(closure_, "closure")
+GK_ATOM(cn_, "cn")
+GK_ATOM(codomain_, "codomain")
+GK_ATOM(columnalign_, "columnalign")
+GK_ATOM(columnalignment_, "columnalignment")
+GK_ATOM(columnlines_, "columnlines")
+GK_ATOM(columnspacing_, "columnspacing")
+GK_ATOM(columnspan_, "columnspan")
+GK_ATOM(columnwidth_, "columnwidth")
+GK_ATOM(complexes_, "complexes")
+GK_ATOM(compose_, "compose")
+GK_ATOM(condition_, "condition")
+GK_ATOM(conjugate_, "conjugate")
+GK_ATOM(cos_, "cos")
+GK_ATOM(cosh_, "cosh")
+GK_ATOM(cot_, "cot")
+GK_ATOM(coth_, "coth")
+GK_ATOM(crossout_, "crossout")
+GK_ATOM(csc_, "csc")
+GK_ATOM(csch_, "csch")
+GK_ATOM(cs_, "cs")
+GK_ATOM(csymbol_, "csymbol")
+GK_ATOM(curl_, "curl")
+GK_ATOM(decimalpoint_, "decimalpoint")
+GK_ATOM(definitionURL_, "definitionURL")
+GK_ATOM(degree_, "degree")
+GK_ATOM(denomalign_, "denomalign")
+GK_ATOM(depth_, "depth")
+GK_ATOM(determinant_, "determinant")
+GK_ATOM(diff_, "diff")
+GK_ATOM(displaystyle_, "displaystyle")
+GK_ATOM(divergence_, "divergence")
+GK_ATOM(divide_, "divide")
+GK_ATOM(domain_, "domain")
+GK_ATOM(domainofapplication_, "domainofapplication")
+GK_ATOM(edge_, "edge")
+GK_ATOM(el, "el")
+GK_ATOM(emptyset_, "emptyset")
+GK_ATOM(eq_, "eq")
+GK_ATOM(equalcolumns_, "equalcolumns")
+GK_ATOM(equalrows_, "equalrows")
+GK_ATOM(equivalent_, "equivalent")
+GK_ATOM(eulergamma_, "eulergamma")
+GK_ATOM(exists_, "exists")
+GK_ATOM(exp_, "exp")
+GK_ATOM(exponentiale_, "exponentiale")
+GK_ATOM(factorial_, "factorial")
+GK_ATOM(factorof_, "factorof")
+GK_ATOM(fence_, "fence")
+GK_ATOM(fn_, "fn")
+GK_ATOM(fontfamily_, "fontfamily")
+GK_ATOM(fontsize_, "fontsize")
+GK_ATOM(fontstyle_, "fontstyle")
+GK_ATOM(fontweight_, "fontweight")
+GK_ATOM(forall_, "forall")
+GK_ATOM(framespacing_, "framespacing")
+GK_ATOM(gcd_, "gcd")
+GK_ATOM(geq_, "geq")
+GK_ATOM(groupalign_, "groupalign")
+GK_ATOM(gt_, "gt")
+GK_ATOM(ident_, "ident")
+GK_ATOM(imaginaryi_, "imaginaryi")
+GK_ATOM(imaginary_, "imaginary")
+GK_ATOM(implies_, "implies")
+GK_ATOM(indentalignfirst_, "indentalignfirst")
+GK_ATOM(indentalign_, "indentalign")
+GK_ATOM(indentalignlast_, "indentalignlast")
+GK_ATOM(indentshiftfirst_, "indentshiftfirst")
+GK_ATOM(indentshift_, "indentshift")
+GK_ATOM(indenttarget_, "indenttarget")
+GK_ATOM(integers_, "integers")
+GK_ATOM(intersect_, "intersect")
+GK_ATOM(interval_, "interval")
+GK_ATOM(int_, "int")
+GK_ATOM(inverse_, "inverse")
+GK_ATOM(lambda_, "lambda")
+GK_ATOM(laplacian_, "laplacian")
+GK_ATOM(largeop_, "largeop")
+GK_ATOM(lcm_, "lcm")
+GK_ATOM(leq_, "leq")
+GK_ATOM(limit_, "limit")
+GK_ATOM(linebreak_, "linebreak")
+GK_ATOM(linebreakmultchar_, "linebreakmultchar")
+GK_ATOM(linebreakstyle_, "linebreakstyle")
+GK_ATOM(linethickness_, "linethickness")
+GK_ATOM(list_, "list")
+GK_ATOM(ln_, "ln")
+GK_ATOM(location_, "location")
+GK_ATOM(logbase_, "logbase")
+GK_ATOM(log_, "log")
+GK_ATOM(longdivstyle_, "longdivstyle")
+GK_ATOM(lowlimit_, "lowlimit")
+GK_ATOM(lquote_, "lquote")
+GK_ATOM(lspace_, "lspace")
+GK_ATOM(lt_, "lt")
+GK_ATOM(maction_, "maction")
+GK_ATOM(maligngroup_, "maligngroup")
+GK_ATOM(malignmark_, "malignmark")
+GK_ATOM(mathbackground_, "mathbackground")
+GK_ATOM(mathcolor_, "mathcolor")
+GK_ATOM(mathsize_, "mathsize")
+GK_ATOM(mathvariant_, "mathvariant")
+GK_ATOM(matrixrow_, "matrixrow")
+GK_ATOM(maxsize_, "maxsize")
+GK_ATOM(mean_, "mean")
+GK_ATOM(median_, "median")
+GK_ATOM(menclose_, "menclose")
+GK_ATOM(merror_, "merror")
+GK_ATOM(mfenced_, "mfenced")
+GK_ATOM(mfrac_, "mfrac")
+GK_ATOM(mglyph_, "mglyph")
+GK_ATOM(mi_, "mi")
+GK_ATOM(minlabelspacing_, "minlabelspacing")
+GK_ATOM(minsize_, "minsize")
+GK_ATOM(minus_, "minus")
+GK_ATOM(mlabeledtr_, "mlabeledtr")
+GK_ATOM(mlongdiv_, "mlongdiv")
+GK_ATOM(mmultiscripts_, "mmultiscripts")
+GK_ATOM(mn_, "mn")
+GK_ATOM(momentabout_, "momentabout")
+GK_ATOM(moment_, "moment")
+GK_ATOM(mo_, "mo")
+GK_ATOM(movablelimits_, "movablelimits")
+GK_ATOM(mover_, "mover")
+GK_ATOM(mpadded_, "mpadded")
+GK_ATOM(mphantom_, "mphantom")
+GK_ATOM(mprescripts_, "mprescripts")
+GK_ATOM(mroot_, "mroot")
+GK_ATOM(mrow_, "mrow")
+GK_ATOM(mscarries_, "mscarries")
+GK_ATOM(mscarry_, "mscarry")
+GK_ATOM(msgroup_, "msgroup")
+GK_ATOM(msline_, "msline")
+GK_ATOM(ms_, "ms")
+GK_ATOM(mspace_, "mspace")
+GK_ATOM(msqrt_, "msqrt")
+GK_ATOM(msrow_, "msrow")
+GK_ATOM(mstack_, "mstack")
+GK_ATOM(mstyle_, "mstyle")
+GK_ATOM(msub_, "msub")
+GK_ATOM(msubsup_, "msubsup")
+GK_ATOM(msup_, "msup")
+GK_ATOM(mtable_, "mtable")
+GK_ATOM(mtd_, "mtd")
+GK_ATOM(mtext_, "mtext")
+GK_ATOM(mtr_, "mtr")
+GK_ATOM(munder_, "munder")
+GK_ATOM(munderover_, "munderover")
+GK_ATOM(naturalnumbers_, "naturalnumbers")
+GK_ATOM(neq_, "neq")
+GK_ATOM(notanumber_, "notanumber")
+GK_ATOM(notation_, "notation")
+GK_ATOM(note_, "note")
+GK_ATOM(notin_, "notin")
+GK_ATOM(notprsubset_, "notprsubset")
+GK_ATOM(notsubset_, "notsubset")
+GK_ATOM(numalign_, "numalign")
+GK_ATOM(other, "other")
+GK_ATOM(outerproduct_, "outerproduct")
+GK_ATOM(partialdiff_, "partialdiff")
+GK_ATOM(piece_, "piece")
+GK_ATOM(piecewise_, "piecewise")
+GK_ATOM(pi_, "pi")
+GK_ATOM(plus_, "plus")
+GK_ATOM(power_, "power")
+GK_ATOM(primes_, "primes")
+GK_ATOM(product_, "product")
+GK_ATOM(prsubset_, "prsubset")
+GK_ATOM(quotient_, "quotient")
+GK_ATOM(rationals_, "rationals")
+GK_ATOM(real_, "real")
+GK_ATOM(reals_, "reals")
+GK_ATOM(reln_, "reln")
+GK_ATOM(root_, "root")
+GK_ATOM(rowalign_, "rowalign")
+GK_ATOM(rowlines_, "rowlines")
+GK_ATOM(rowspacing_, "rowspacing")
+GK_ATOM(rquote_, "rquote")
+GK_ATOM(rspace_, "rspace")
+GK_ATOM(scalarproduct_, "scalarproduct")
+GK_ATOM(schemaLocation_, "schemaLocation")
+GK_ATOM(scriptlevel_, "scriptlevel")
+GK_ATOM(scriptminsize_, "scriptminsize")
+GK_ATOM(scriptsizemultiplier_, "scriptsizemultiplier")
+GK_ATOM(scriptsize_, "scriptsize")
+GK_ATOM(sdev_, "sdev")
+GK_ATOM(sech_, "sech")
+GK_ATOM(sec_, "sec")
+GK_ATOM(selection_, "selection")
+GK_ATOM(selector_, "selector")
+GK_ATOM(semantics_, "semantics")
+GK_ATOM(separator_, "separator")
+GK_ATOM(separators_, "separators")
+GK_ATOM(sep_, "sep")
+GK_ATOM(setdiff_, "setdiff")
+//GK_ATOM(set_, "set") # "set" is present above
+GK_ATOM(share_, "share")
+GK_ATOM(shift_, "shift")
+GK_ATOM(side_, "side")
+GK_ATOM(sinh_, "sinh")
+GK_ATOM(sin_, "sin")
+GK_ATOM(stackalign_, "stackalign")
+GK_ATOM(stretchy_, "stretchy")
+GK_ATOM(subscriptshift_, "subscriptshift")
+GK_ATOM(subset_, "subset")
+GK_ATOM(superscriptshift_, "superscriptshift")
+GK_ATOM(symmetric_, "symmetric")
+GK_ATOM(tanh_, "tanh")
+GK_ATOM(tan_, "tan")
+GK_ATOM(tendsto_, "tendsto")
+GK_ATOM(times_, "times")
+GK_ATOM(transpose_, "transpose")
+GK_ATOM(union_, "union")
+GK_ATOM(uplimit_, "uplimit")
+GK_ATOM(variance_, "variance")
+GK_ATOM(vectorproduct_, "vectorproduct")
+GK_ATOM(vector_, "vector")
+GK_ATOM(voffset_, "voffset")
+GK_ATOM(xref_, "xref")
+GK_ATOM(math, "math") // the only one without an underscore
+GK_ATOM(booleanFromString, "boolean-from-string")
+GK_ATOM(countNonEmpty, "count-non-empty")
+GK_ATOM(daysFromDate, "days-from-date")
+GK_ATOM(secondsFromDateTime, "seconds-from-dateTime")
+
+// Simple gestures support
+GK_ATOM(onMozSwipeGestureMayStart, "onMozSwipeGestureMayStart")
+GK_ATOM(onMozSwipeGestureStart, "onMozSwipeGestureStart")
+GK_ATOM(onMozSwipeGestureUpdate, "onMozSwipeGestureUpdate")
+GK_ATOM(onMozSwipeGestureEnd, "onMozSwipeGestureEnd")
+GK_ATOM(onMozSwipeGesture, "onMozSwipeGesture")
+GK_ATOM(onMozMagnifyGestureStart, "onMozMagnifyGestureStart")
+GK_ATOM(onMozMagnifyGestureUpdate, "onMozMagnifyGestureUpdate")
+GK_ATOM(onMozMagnifyGesture, "onMozMagnifyGesture")
+GK_ATOM(onMozRotateGestureStart, "onMozRotateGestureStart")
+GK_ATOM(onMozRotateGestureUpdate, "onMozRotateGestureUpdate")
+GK_ATOM(onMozRotateGesture, "onMozRotateGesture")
+GK_ATOM(onMozTapGesture, "onMozTapGesture")
+GK_ATOM(onMozPressTapGesture, "onMozPressTapGesture")
+GK_ATOM(onMozEdgeUIStarted, "onMozEdgeUIStarted")
+GK_ATOM(onMozEdgeUICanceled, "onMozEdgeUICanceled")
+GK_ATOM(onMozEdgeUICompleted, "onMozEdgeUICompleted")
+
+// Pointer events
+GK_ATOM(onpointerdown, "onpointerdown")
+GK_ATOM(onpointermove, "onpointermove")
+GK_ATOM(onpointerup, "onpointerup")
+GK_ATOM(onpointercancel, "onpointercancel")
+GK_ATOM(onpointerover, "onpointerover")
+GK_ATOM(onpointerout, "onpointerout")
+GK_ATOM(onpointerenter, "onpointerenter")
+GK_ATOM(onpointerleave, "onpointerleave")
+GK_ATOM(ongotpointercapture, "ongotpointercapture")
+GK_ATOM(onlostpointercapture, "onlostpointercapture")
+
+// orientation support
+GK_ATOM(ondevicemotion, "ondevicemotion")
+GK_ATOM(ondeviceorientation, "ondeviceorientation")
+GK_ATOM(onabsolutedeviceorientation, "onabsolutedeviceorientation")
+GK_ATOM(ondeviceproximity, "ondeviceproximity")
+GK_ATOM(onmozorientationchange, "onmozorientationchange")
+GK_ATOM(onuserproximity, "onuserproximity")
+
+// light sensor support
+GK_ATOM(ondevicelight, "ondevicelight")
+
+// MediaDevices device change event
+GK_ATOM(ondevicechange, "ondevicechange")
+
+// WebExtensions
+GK_ATOM(moz_extension, "moz-extension")
+GK_ATOM(all_urlsPermission, "<all_urls>")
+GK_ATOM(clipboardRead, "clipboardRead")
+GK_ATOM(clipboardWrite, "clipboardWrite")
+GK_ATOM(debugger, "debugger")
+GK_ATOM(mozillaAddons, "mozillaAddons")
+GK_ATOM(tabs, "tabs")
+GK_ATOM(webRequestBlocking, "webRequestBlocking")
+GK_ATOM(http, "http")
+GK_ATOM(https, "https")
+GK_ATOM(proxy, "proxy")
+
+//---------------------------------------------------------------------------
+// Special atoms
+//---------------------------------------------------------------------------
+
+// Node types
+GK_ATOM(cdataTagName, "#cdata-section")
+GK_ATOM(commentTagName, "#comment")
+GK_ATOM(documentNodeName, "#document")
+GK_ATOM(documentFragmentNodeName, "#document-fragment")
+GK_ATOM(documentTypeNodeName, "#document-type")
+GK_ATOM(processingInstructionTagName, "#processing-instruction")
+GK_ATOM(textTagName, "#text")
+
+// Frame types
+//
+// TODO(emilio): Rename this? This is only used now to mark the style context of
+// the placeholder with a dummy pseudo.
+GK_ATOM(placeholderFrame, "PlaceholderFrame")
+
+GK_ATOM(onloadend, "onloadend")
+GK_ATOM(onloadstart, "onloadstart")
+GK_ATOM(onprogress, "onprogress")
+GK_ATOM(onsuspend, "onsuspend")
+GK_ATOM(onemptied, "onemptied")
+GK_ATOM(onstalled, "onstalled")
+GK_ATOM(onplay, "onplay")
+GK_ATOM(onpause, "onpause")
+GK_ATOM(onloadedmetadata, "onloadedmetadata")
+GK_ATOM(onloadeddata, "onloadeddata")
+GK_ATOM(onwaiting, "onwaiting")
+GK_ATOM(onplaying, "onplaying")
+GK_ATOM(oncanplay, "oncanplay")
+GK_ATOM(oncanplaythrough, "oncanplaythrough")
+GK_ATOM(onseeking, "onseeking")
+GK_ATOM(onseeked, "onseeked")
+GK_ATOM(ontimeout, "ontimeout")
+GK_ATOM(ontimeupdate, "ontimeupdate")
+GK_ATOM(onended, "onended")
+GK_ATOM(onratechange, "onratechange")
+GK_ATOM(ondurationchange, "ondurationchange")
+GK_ATOM(onvolumechange, "onvolumechange")
+GK_ATOM(onaddtrack, "onaddtrack")
+GK_ATOM(oncontrollerchange, "oncontrollerchange")
+GK_ATOM(oncuechange, "oncuechange")
+GK_ATOM(onenter, "onenter")
+GK_ATOM(onexit, "onexit")
+GK_ATOM(onencrypted, "onencrypted")
+GK_ATOM(onwaitingforkey, "onwaitingforkey")
+GK_ATOM(onkeystatuseschange, "onkeystatuseschange")
+GK_ATOM(onremovetrack, "onremovetrack")
+GK_ATOM(loadstart, "loadstart")
+GK_ATOM(suspend, "suspend")
+GK_ATOM(emptied, "emptied")
+GK_ATOM(play, "play")
+GK_ATOM(pause, "pause")
+GK_ATOM(loadedmetadata, "loadedmetadata")
+GK_ATOM(loadeddata, "loadeddata")
+GK_ATOM(waiting, "waiting")
+GK_ATOM(playing, "playing")
+GK_ATOM(timeupdate, "timeupdate")
+GK_ATOM(canplay, "canplay")
+GK_ATOM(canplaythrough, "canplaythrough")
+GK_ATOM(ondataavailable, "ondataavailable")
+GK_ATOM(onwarning, "onwarning")
+GK_ATOM(onstart, "onstart")
+GK_ATOM(onstop, "onstop")
+GK_ATOM(onphoto, "onphoto")
+GK_ATOM(ongamepadbuttondown, "ongamepadbuttondown")
+GK_ATOM(ongamepadbuttonup, "ongamepadbuttonup")
+GK_ATOM(ongamepadaxismove, "ongamepadaxismove")
+GK_ATOM(ongamepadconnected, "ongamepadconnected")
+GK_ATOM(ongamepaddisconnected, "ongamepaddisconnected")
+GK_ATOM(onfetch, "onfetch")
+
+// Content property names
+GK_ATOM(afterPseudoProperty, "afterPseudoProperty")  // nsXMLElement*
+GK_ATOM(animationsProperty, "AnimationsProperty")        // FrameAnimations*
+GK_ATOM(animationsOfBeforeProperty, "AnimationsOfBeforeProperty") // FrameAnimations*
+GK_ATOM(animationsOfAfterProperty, "AnimationsOfAfterProperty") // FrameAnimations*
+GK_ATOM(animationEffectsProperty, "AnimationEffectsProperty") // EffectSet*
+GK_ATOM(animationEffectsForBeforeProperty, "AnimationsEffectsForBeforeProperty") // EffectSet*
+GK_ATOM(animationEffectsForAfterProperty, "AnimationsEffectsForAfterProperty") // EffectSet*
+GK_ATOM(beforePseudoProperty, "beforePseudoProperty")  // nsXMLElement*
+GK_ATOM(cssPseudoElementBeforeProperty, "CSSPseudoElementBeforeProperty") // CSSPseudoElement*
+GK_ATOM(cssPseudoElementAfterProperty, "CSSPseudoElementAfterProperty") // CSSPseudoElement*
+GK_ATOM(transitionsProperty, "TransitionsProperty")        // FrameTransitions*
+GK_ATOM(transitionsOfBeforeProperty, "TransitionsOfBeforeProperty") // FrameTransitions*
+GK_ATOM(transitionsOfAfterProperty, "TransitionsOfAfterProperty") // FrameTransitions*
+GK_ATOM(genConInitializerProperty, "QuoteNodeProperty")
+GK_ATOM(labelMouseDownPtProperty, "LabelMouseDownPtProperty")
+GK_ATOM(lockedStyleStates, "lockedStyleStates")
+GK_ATOM(apzCallbackTransform, "apzCallbackTransform")
+GK_ATOM(restylableAnonymousNode, "restylableAnonymousNode") // bool
+GK_ATOM(docLevelNativeAnonymousContent, "docLevelNativeAnonymousContent") // bool
+GK_ATOM(paintRequestTime, "PaintRequestTime")
+GK_ATOM(pseudoProperty, "PseudoProperty")  // CSSPseudoElementType
+GK_ATOM(manualNACProperty, "ManualNACProperty") // ManualNAC*
+
+// Languages for lang-specific transforms
+GK_ATOM(Japanese, "ja")
+GK_ATOM(Chinese, "zh-CN")
+GK_ATOM(Taiwanese, "zh-TW")
+GK_ATOM(HongKongChinese, "zh-HK")
+GK_ATOM(Unicode, "x-unicode")
+
+// language codes specifically referenced in the gfx code
+GK_ATOM(ko, "ko")
+GK_ATOM(zh_cn, "zh-cn")
+GK_ATOM(zh_tw, "zh-tw")
+
+// additional codes used in nsUnicodeRange.cpp
+GK_ATOM(x_cyrillic, "x-cyrillic")
+GK_ATOM(he, "he")
+GK_ATOM(ar, "ar")
+GK_ATOM(x_devanagari, "x-devanagari")
+GK_ATOM(x_tamil, "x-tamil")
+GK_ATOM(x_armn, "x-armn")
+GK_ATOM(x_beng, "x-beng")
+GK_ATOM(x_cans, "x-cans")
+GK_ATOM(x_ethi, "x-ethi")
+GK_ATOM(x_geor, "x-geor")
+GK_ATOM(x_gujr, "x-gujr")
+GK_ATOM(x_guru, "x-guru")
+GK_ATOM(x_khmr, "x-khmr")
+GK_ATOM(x_knda, "x-knda")
+GK_ATOM(x_mlym, "x-mlym")
+GK_ATOM(x_orya, "x-orya")
+GK_ATOM(x_sinh, "x-sinh")
+GK_ATOM(x_telu, "x-telu")
+GK_ATOM(x_tibt, "x-tibt")
+
+// additional languages that have special case transformations
+GK_ATOM(az, "az")
+GK_ATOM(ba, "ba")
+GK_ATOM(crh, "crh")
+//GK_ATOM(el, "el")  # "el" is present above
+GK_ATOM(ga, "ga")
+GK_ATOM(nl, "nl")
+
+// mathematical language, used for MathML
+GK_ATOM(x_math, "x-math")
+
+// Names for editor transactions
+GK_ATOM(TypingTxnName, "Typing")
+GK_ATOM(IMETxnName, "IME")
+GK_ATOM(DeleteTxnName, "Deleting")
+
+// Font families
+GK_ATOM(serif, "serif")
+GK_ATOM(sans_serif, "sans-serif")
+GK_ATOM(cursive, "cursive")
+GK_ATOM(fantasy, "fantasy")
+GK_ATOM(monospace, "monospace")
+GK_ATOM(mozfixed, "-moz-fixed")
+
+// IPC stuff
+//GK_ATOM(Remote, "remote")  # "remote" is present above
+GK_ATOM(RemoteId, "_remote_id")
+GK_ATOM(RemoteType, "remoteType")
+GK_ATOM(DisplayPort, "_displayport")
+GK_ATOM(DisplayPortMargins, "_displayportmargins")
+GK_ATOM(DisplayPortBase, "_displayportbase")
+GK_ATOM(forcemessagemanager, "forcemessagemanager")
+GK_ATOM(preloadedState, "preloadedState")
+GK_ATOM(RecordExecution, "recordExecution")
+GK_ATOM(ReplayExecution, "replayExecution")
+
+// Names for system metrics
+GK_ATOM(scrollbar_start_backward, "scrollbar-start-backward")
+GK_ATOM(scrollbar_start_forward, "scrollbar-start-forward")
+GK_ATOM(scrollbar_end_backward, "scrollbar-end-backward")
+GK_ATOM(scrollbar_end_forward, "scrollbar-end-forward")
+GK_ATOM(scrollbar_thumb_proportional, "scrollbar-thumb-proportional")
+GK_ATOM(overlay_scrollbars, "overlay-scrollbars")
+GK_ATOM(windows_accent_color_in_titlebar, "windows-accent-color-in-titlebar")
+GK_ATOM(windows_default_theme, "windows-default-theme")
+GK_ATOM(mac_graphite_theme, "mac-graphite-theme")
+GK_ATOM(mac_yosemite_theme, "mac-yosemite-theme")
+GK_ATOM(windows_compositor, "windows-compositor")
+GK_ATOM(windows_classic, "windows-classic")
+GK_ATOM(windows_glass, "windows-glass")
+GK_ATOM(touch_enabled, "touch-enabled")
+GK_ATOM(menubar_drag, "menubar-drag")
+GK_ATOM(swipe_animation_enabled, "swipe-animation-enabled")
+GK_ATOM(gtk_csd_available, "gtk-csd-available")
+GK_ATOM(gtk_csd_minimize_button, "gtk-csd-minimize-button")
+GK_ATOM(gtk_csd_maximize_button, "gtk-csd-maximize-button")
+GK_ATOM(gtk_csd_close_button, "gtk-csd-close-button")
+GK_ATOM(system_dark_theme, "system-dark-theme")
+
+// windows media query names
+GK_ATOM(windows_win7, "windows-win7")
+GK_ATOM(windows_win8, "windows-win8")
+GK_ATOM(windows_win10, "windows-win10")
+
+// And the same again, as media query keywords.
+GK_ATOM(_moz_scrollbar_start_backward, "-moz-scrollbar-start-backward")
+GK_ATOM(_moz_scrollbar_start_forward, "-moz-scrollbar-start-forward")
+GK_ATOM(_moz_scrollbar_end_backward, "-moz-scrollbar-end-backward")
+GK_ATOM(_moz_scrollbar_end_forward, "-moz-scrollbar-end-forward")
+GK_ATOM(_moz_scrollbar_thumb_proportional, "-moz-scrollbar-thumb-proportional")
+GK_ATOM(_moz_overlay_scrollbars, "-moz-overlay-scrollbars")
+GK_ATOM(_moz_windows_accent_color_in_titlebar, "-moz-windows-accent-color-in-titlebar")
+GK_ATOM(_moz_windows_default_theme, "-moz-windows-default-theme")
+GK_ATOM(_moz_mac_graphite_theme, "-moz-mac-graphite-theme")
+GK_ATOM(_moz_mac_yosemite_theme, "-moz-mac-yosemite-theme")
+GK_ATOM(_moz_windows_compositor, "-moz-windows-compositor")
+GK_ATOM(_moz_windows_classic, "-moz-windows-classic")
+GK_ATOM(_moz_windows_glass, "-moz-windows-glass")
+GK_ATOM(_moz_os_version, "-moz-os-version")
+GK_ATOM(_moz_touch_enabled, "-moz-touch-enabled")
+GK_ATOM(_moz_menubar_drag, "-moz-menubar-drag")
+GK_ATOM(_moz_device_pixel_ratio, "-moz-device-pixel-ratio")
+GK_ATOM(_moz_device_orientation, "-moz-device-orientation")
+GK_ATOM(_moz_is_resource_document, "-moz-is-resource-document")
+GK_ATOM(_moz_swipe_animation_enabled, "-moz-swipe-animation-enabled")
+GK_ATOM(_moz_gtk_csd_available, "-moz-gtk-csd-available")
+GK_ATOM(_moz_gtk_csd_minimize_button, "-moz-gtk-csd-minimize-button")
+GK_ATOM(_moz_gtk_csd_maximize_button, "-moz-gtk-csd-maximize-button")
+GK_ATOM(_moz_gtk_csd_close_button, "-moz-gtk-csd-close-button")
+GK_ATOM(_moz_system_dark_theme, "-moz-system-dark-theme")
+
+// application commands
+GK_ATOM(Back, "Back")
+GK_ATOM(Forward, "Forward")
+GK_ATOM(Reload, "Reload")
+GK_ATOM(Stop, "Stop")
+GK_ATOM(Search, "Search")
+GK_ATOM(Bookmarks, "Bookmarks")
+GK_ATOM(Home, "Home")
+GK_ATOM(NextTrack, "NextTrack")
+GK_ATOM(PreviousTrack, "PreviousTrack")
+GK_ATOM(MediaStop, "MediaStop")