Bug 1449401 - Remove moz-math-anonymous ua-only pseudo. r=heycam

We do not expose it nor ever style it. Just use the parent style all the
time. This avoids problematic style resolution calls during reflow.

Differential Revision: https://phabricator.services.mozilla.com/D84358
This commit is contained in:
Emilio Cobos Álvarez 2020-07-21 22:35:46 +00:00
Родитель a33994587b
Коммит 5adefab54c
17 изменённых файлов: 32 добавлений и 218 удалений

Просмотреть файл

@ -763,9 +763,6 @@ var PageStyleActor = protocol.ActorClassWithSpec(pageStyleSpec, {
return this._nodeIsTextfieldLike(node); return this._nodeIsTextfieldLike(node);
case ":-moz-focus-inner": case ":-moz-focus-inner":
return this._nodeIsButtonLike(node); return this._nodeIsButtonLike(node);
case ":-moz-math-anonymous":
// This one should be internal, really.
return false;
case ":-moz-meter-bar": case ":-moz-meter-bar":
return node.nodeName == "METER"; return node.nodeName == "METER";
case ":-moz-progress-bar": case ":-moz-progress-bar":

Просмотреть файл

@ -23,7 +23,6 @@
":-moz-color-swatch", ":-moz-color-swatch",
":-moz-focus-inner", ":-moz-focus-inner",
":-moz-focus-outer", ":-moz-focus-outer",
":-moz-math-anonymous",
":-moz-meter-bar", ":-moz-meter-bar",
":-moz-placeholder", ":-moz-placeholder",
":-moz-progress-bar", ":-moz-progress-bar",

Просмотреть файл

@ -208,14 +208,6 @@ mtable[framespacing] > mtr > mtd {
padding: 0px; padding: 0px;
} }
/**************************************************************************/
/* This rule is used to give a ComputedStyle suitable for nsMathMLChars.
We don't actually style -moz-math-anonymous by default. */
/*
::-moz-math-anonymous {
}
*/
/**********************************************************************/ /**********************************************************************/
/* This is used when wrapping non-MathML inline elements inside math. */ /* This is used when wrapping non-MathML inline elements inside math. */
*|*::-moz-mathml-anonymous-block { *|*::-moz-mathml-anonymous-block {

Просмотреть файл

@ -1806,41 +1806,17 @@ void nsDisplayMathMLCharDebug::Paint(nsDisplayListBuilder* aBuilder,
void nsMathMLChar::Display(nsDisplayListBuilder* aBuilder, nsIFrame* aForFrame, void nsMathMLChar::Display(nsDisplayListBuilder* aBuilder, nsIFrame* aForFrame,
const nsDisplayListSet& aLists, uint32_t aIndex, const nsDisplayListSet& aLists, uint32_t aIndex,
const nsRect* aSelectedRect) { const nsRect* aSelectedRect) {
bool usingParentStyle = false;
ComputedStyle* computedStyle = mComputedStyle; ComputedStyle* computedStyle = mComputedStyle;
if (mDraw == DRAW_NORMAL) {
// normal drawing if there is nothing special about this char
// Use our parent element's style
usingParentStyle = true;
computedStyle = aForFrame->Style();
}
if (!computedStyle->StyleVisibility()->IsVisible()) { if (!computedStyle->StyleVisibility()->IsVisible()) {
return; return;
} }
const bool isSelected = aSelectedRect && !aSelectedRect->IsEmpty(); const bool isSelected = aSelectedRect && !aSelectedRect->IsEmpty();
// if the leaf computed style that we use for stretchy chars has a background
// color we use it -- this feature is mostly used for testing and debugging
// purposes. Normally, users will set the background on the container frame.
// paint the selection background -- beware MathML frames overlap a lot
if (isSelected) { if (isSelected) {
aLists.BorderBackground()->AppendNewToTop<nsDisplayMathMLSelectionRect>( aLists.BorderBackground()->AppendNewToTop<nsDisplayMathMLSelectionRect>(
aBuilder, aForFrame, *aSelectedRect); aBuilder, aForFrame, *aSelectedRect);
} else if (mRect.width && mRect.height) { } else if (mRect.width && mRect.height) {
if (!usingParentStyle &&
NS_GET_A(computedStyle->StyleBackground()->BackgroundColor(
computedStyle)) > 0) {
nsDisplayBackgroundImage::AppendBackgroundItemsToTop(
aBuilder, aForFrame, mRect + aBuilder->ToReferenceFrame(aForFrame),
aLists.BorderBackground(),
/* aAllowWillPaintBorderOptimization */ true, computedStyle);
}
// else
// our container frame will take care of painting its background
#if defined(DEBUG) && defined(SHOW_BOUNDING_BOX) #if defined(DEBUG) && defined(SHOW_BOUNDING_BOX)
// for visual debug // for visual debug
aLists.BorderBackground()->AppendNewToTop<nsDisplayMathMLCharDebug>( aLists.BorderBackground()->AppendNewToTop<nsDisplayMathMLCharDebug>(

Просмотреть файл

@ -86,23 +86,6 @@ nsMathMLFrame::UpdatePresentationData(uint32_t aFlagsValues,
return NS_OK; return NS_OK;
} }
// Helper to give a ComputedStyle suitable for doing the stretching of
// a MathMLChar. Frame classes that use this should ensure that the
// extra leaf ComputedStyle given to the MathMLChars are accessible to
// the Style System via the Get/Set AdditionalComputedStyle() APIs.
/* static */
void nsMathMLFrame::ResolveMathMLCharStyle(nsPresContext* aPresContext,
nsIContent* aContent,
ComputedStyle* aParentComputedStyle,
nsMathMLChar* aMathMLChar) {
PseudoStyleType pseudoType = PseudoStyleType::mozMathAnonymous; // savings
RefPtr<ComputedStyle> newComputedStyle;
newComputedStyle = aPresContext->StyleSet()->ResolvePseudoElementStyle(
*aContent->AsElement(), pseudoType, aParentComputedStyle);
aMathMLChar->SetComputedStyle(newComputedStyle);
}
/* static */ /* static */
void nsMathMLFrame::GetEmbellishDataFrom(nsIFrame* aFrame, void nsMathMLFrame::GetEmbellishDataFrom(nsIFrame* aFrame,
nsEmbellishData& aEmbellishData) { nsEmbellishData& aEmbellishData) {

Просмотреть файл

@ -90,13 +90,6 @@ class nsMathMLFrame : public nsIMathMLFrame {
bool IsMrowLike() override { return false; } bool IsMrowLike() override { return false; }
// helper to give a ComputedStyle suitable for doing the stretching to the
// MathMLChar. Frame classes that use this should make the extra ComputedStyle
// accessible to the Style System via Get/Set AdditionalmComputedStyle.
static void ResolveMathMLCharStyle(
nsPresContext* aPresContext, nsIContent* aContent,
mozilla::ComputedStyle* aParenComputedStyle, nsMathMLChar* aMathMLChar);
// helper to get the mEmbellishData of a frame // helper to get the mEmbellishData of a frame
// The MathML REC precisely defines an "embellished operator" as: // The MathML REC precisely defines an "embellished operator" as:
// - an <mo> element; // - an <mo> element;

Просмотреть файл

@ -85,10 +85,8 @@ nsresult nsMathMLmencloseFrame::AllocateMathMLChar(nsMencloseNotation mask) {
mRadicalCharIndex = i; mRadicalCharIndex = i;
} }
nsPresContext* presContext = PresContext();
mMathMLChar[i].SetData(Char); mMathMLChar[i].SetData(Char);
ResolveMathMLCharStyle(presContext, mContent, mComputedStyle, mMathMLChar[i].SetComputedStyle(Style());
&mMathMLChar[i]);
return NS_OK; return NS_OK;
} }
@ -694,24 +692,14 @@ nsresult nsMathMLmencloseFrame::AttributeChanged(int32_t aNameSpaceID,
aModType); aModType);
} }
////////////////// void nsMathMLmencloseFrame::DidSetComputedStyle(ComputedStyle* aOldStyle) {
// the Style System will use these to pass the proper ComputedStyle to our nsMathMLContainerFrame::DidSetComputedStyle(aOldStyle);
// MathMLChar for (auto& ch : mMathMLChar) {
ComputedStyle* nsMathMLmencloseFrame::GetAdditionalComputedStyle( ch.SetComputedStyle(Style());
int32_t aIndex) const { }
int32_t len = mMathMLChar.Length();
if (aIndex >= 0 && aIndex < len)
return mMathMLChar[aIndex].GetComputedStyle();
else
return nullptr;
} }
void nsMathMLmencloseFrame::SetAdditionalComputedStyle( //////////////////
int32_t aIndex, ComputedStyle* aComputedStyle) {
int32_t len = mMathMLChar.Length();
if (aIndex >= 0 && aIndex < len)
mMathMLChar[aIndex].SetComputedStyle(aComputedStyle);
}
class nsDisplayNotation final : public nsPaintedDisplayItem { class nsDisplayNotation final : public nsPaintedDisplayItem {
public: public:

Просмотреть файл

@ -63,10 +63,7 @@ class nsMathMLmencloseFrame : public nsMathMLContainerFrame {
virtual nsresult AttributeChanged(int32_t aNameSpaceID, nsAtom* aAttribute, virtual nsresult AttributeChanged(int32_t aNameSpaceID, nsAtom* aAttribute,
int32_t aModType) override; int32_t aModType) override;
virtual void SetAdditionalComputedStyle( void DidSetComputedStyle(ComputedStyle* aOldStyle) override;
int32_t aIndex, ComputedStyle* aComputedStyle) override;
virtual ComputedStyle* GetAdditionalComputedStyle(
int32_t aIndex) const override;
virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder, virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder,
const nsDisplayListSet& aLists) override; const nsDisplayListSet& aLists) override;

Просмотреть файл

@ -105,7 +105,7 @@ void nsMathMLmfencedFrame::CreateFencesAndSeparators(
if (!value.IsEmpty()) { if (!value.IsEmpty()) {
mOpenChar = new nsMathMLChar; mOpenChar = new nsMathMLChar;
mOpenChar->SetData(value); mOpenChar->SetData(value);
ResolveMathMLCharStyle(aPresContext, mContent, mComputedStyle, mOpenChar); mOpenChar->SetComputedStyle(Style());
} }
////////////// //////////////
@ -120,7 +120,7 @@ void nsMathMLmfencedFrame::CreateFencesAndSeparators(
if (!value.IsEmpty()) { if (!value.IsEmpty()) {
mCloseChar = new nsMathMLChar; mCloseChar = new nsMathMLChar;
mCloseChar->SetData(value); mCloseChar->SetData(value);
ResolveMathMLCharStyle(aPresContext, mContent, mComputedStyle, mCloseChar); mCloseChar->SetComputedStyle(Style());
} }
////////////// //////////////
@ -145,8 +145,7 @@ void nsMathMLmfencedFrame::CreateFencesAndSeparators(
sepChar = value[mSeparatorsCount - 1]; sepChar = value[mSeparatorsCount - 1];
} }
mSeparatorsChar[i].SetData(sepChar); mSeparatorsChar[i].SetData(sepChar);
ResolveMathMLCharStyle(aPresContext, mContent, mComputedStyle, mSeparatorsChar[i].SetComputedStyle(Style());
&mSeparatorsChar[i]);
} }
mSeparatorsCount = sepCount; mSeparatorsCount = sepCount;
} else { } else {
@ -630,60 +629,16 @@ nscoord nsMathMLmfencedFrame::FixInterFrameSpacing(ReflowOutput& aDesiredSize) {
return gap; return gap;
} }
// ---------------------- void nsMathMLmfencedFrame::DidSetComputedStyle(ComputedStyle* aOldStyle) {
// the Style System will use these to pass the proper ComputedStyle to our nsMathMLContainerFrame::DidSetComputedStyle(aOldStyle);
// MathMLChar
ComputedStyle* nsMathMLmfencedFrame::GetAdditionalComputedStyle(
int32_t aIndex) const {
int32_t openIndex = -1;
int32_t closeIndex = -1;
int32_t lastIndex = mSeparatorsCount - 1;
if (mOpenChar) { if (mOpenChar) {
lastIndex++; mOpenChar->SetComputedStyle(Style());
openIndex = lastIndex;
} }
if (mCloseChar) { if (mCloseChar) {
lastIndex++; mCloseChar->SetComputedStyle(Style());
closeIndex = lastIndex;
} }
if (aIndex < 0 || aIndex > lastIndex) { for (int32_t i = 0; i < mSeparatorsCount; ++i) {
return nullptr; mSeparatorsChar[i].SetComputedStyle(Style());
}
if (aIndex < mSeparatorsCount) {
return mSeparatorsChar[aIndex].GetComputedStyle();
} else if (aIndex == openIndex) {
return mOpenChar->GetComputedStyle();
} else if (aIndex == closeIndex) {
return mCloseChar->GetComputedStyle();
}
return nullptr;
}
void nsMathMLmfencedFrame::SetAdditionalComputedStyle(
int32_t aIndex, ComputedStyle* aComputedStyle) {
int32_t openIndex = -1;
int32_t closeIndex = -1;
int32_t lastIndex = mSeparatorsCount - 1;
if (mOpenChar) {
lastIndex++;
openIndex = lastIndex;
}
if (mCloseChar) {
lastIndex++;
closeIndex = lastIndex;
}
if (aIndex < 0 || aIndex > lastIndex) {
return;
}
if (aIndex < mSeparatorsCount) {
mSeparatorsChar[aIndex].SetComputedStyle(aComputedStyle);
} else if (aIndex == openIndex) {
mOpenChar->SetComputedStyle(aComputedStyle);
} else if (aIndex == closeIndex) {
mCloseChar->SetComputedStyle(aComputedStyle);
} }
} }

Просмотреть файл

@ -30,10 +30,7 @@ class nsMathMLmfencedFrame final : public nsMathMLContainerFrame {
void DestroyFrom(nsIFrame* aDestructRoot, void DestroyFrom(nsIFrame* aDestructRoot,
PostDestroyData& aPostDestroyData) override; PostDestroyData& aPostDestroyData) override;
virtual void SetAdditionalComputedStyle( void DidSetComputedStyle(ComputedStyle* aOldStyle) override;
int32_t aIndex, ComputedStyle* aComputedStyle) override;
virtual ComputedStyle* GetAdditionalComputedStyle(
int32_t aIndex) const override;
NS_IMETHOD NS_IMETHOD
InheritAutomaticData(nsIFrame* aParent) override; InheritAutomaticData(nsIFrame* aParent) override;

Просмотреть файл

@ -19,9 +19,6 @@ using namespace mozilla;
// <mo> -- operator, fence, or separator - implementation // <mo> -- operator, fence, or separator - implementation
// //
// additional ComputedStyle to be used by our MathMLChar.
#define NS_MATHML_CHAR_STYLE_CONTEXT_INDEX 0
nsIFrame* NS_NewMathMLmoFrame(PresShell* aPresShell, ComputedStyle* aStyle) { nsIFrame* NS_NewMathMLmoFrame(PresShell* aPresShell, ComputedStyle* aStyle) {
return new (aPresShell) nsMathMLmoFrame(aStyle, aPresShell->GetPresContext()); return new (aPresShell) nsMathMLmoFrame(aStyle, aPresShell->GetPresContext());
} }
@ -109,11 +106,10 @@ void nsMathMLmoFrame::ProcessTextData() {
} }
// don't bother doing anything special if we don't have a single child // don't bother doing anything special if we don't have a single child
nsPresContext* presContext = PresContext();
if (mFrames.GetLength() != 1) { if (mFrames.GetLength() != 1) {
data.Truncate(); // empty data to reset the char data.Truncate(); // empty data to reset the char
mMathMLChar.SetData(data); mMathMLChar.SetData(data);
ResolveMathMLCharStyle(presContext, mContent, mComputedStyle, &mMathMLChar); mMathMLChar.SetComputedStyle(Style());
return; return;
} }
@ -168,7 +164,7 @@ void nsMathMLmoFrame::ProcessTextData() {
(mEmbellishData.direction != NS_STRETCH_DIRECTION_UNSUPPORTED); (mEmbellishData.direction != NS_STRETCH_DIRECTION_UNSUPPORTED);
if (isMutable) mFlags |= NS_MATHML_OPERATOR_MUTABLE; if (isMutable) mFlags |= NS_MATHML_OPERATOR_MUTABLE;
ResolveMathMLCharStyle(presContext, mContent, mComputedStyle, &mMathMLChar); mMathMLChar.SetComputedStyle(Style());
} }
// get our 'form' and lookup in the Operator Dictionary to fetch // get our 'form' and lookup in the Operator Dictionary to fetch
@ -1052,25 +1048,7 @@ nsresult nsMathMLmoFrame::AttributeChanged(int32_t aNameSpaceID,
aModType); aModType);
} }
// ---------------------- void nsMathMLmoFrame::DidSetComputedStyle(ComputedStyle* aOldStyle) {
// No need to track the ComputedStyle given to our MathML char. nsMathMLTokenFrame::DidSetComputedStyle(aOldStyle);
// the Style System will use these to pass the proper ComputedStyle to our mMathMLChar.SetComputedStyle(Style());
// MathMLChar
ComputedStyle* nsMathMLmoFrame::GetAdditionalComputedStyle(
int32_t aIndex) const {
switch (aIndex) {
case NS_MATHML_CHAR_STYLE_CONTEXT_INDEX:
return mMathMLChar.GetComputedStyle();
default:
return nullptr;
}
}
void nsMathMLmoFrame::SetAdditionalComputedStyle(
int32_t aIndex, ComputedStyle* aComputedStyle) {
switch (aIndex) {
case NS_MATHML_CHAR_STYLE_CONTEXT_INDEX:
mMathMLChar.SetComputedStyle(aComputedStyle);
break;
}
} }

Просмотреть файл

@ -26,15 +26,12 @@ class nsMathMLmoFrame final : public nsMathMLTokenFrame {
friend nsIFrame* NS_NewMathMLmoFrame(mozilla::PresShell* aPresShell, friend nsIFrame* NS_NewMathMLmoFrame(mozilla::PresShell* aPresShell,
ComputedStyle* aStyle); ComputedStyle* aStyle);
virtual eMathMLFrameType GetMathMLFrameType() override; eMathMLFrameType GetMathMLFrameType() override;
virtual void SetAdditionalComputedStyle( void DidSetComputedStyle(ComputedStyle* aOldStyle) override;
int32_t aIndex, ComputedStyle* aComputedStyle) override;
virtual ComputedStyle* GetAdditionalComputedStyle(
int32_t aIndex) const override;
virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder, void BuildDisplayList(nsDisplayListBuilder* aBuilder,
const nsDisplayListSet& aLists) override; const nsDisplayListSet& aLists) override;
NS_IMETHOD NS_IMETHOD
InheritAutomaticData(nsIFrame* aParent) override; InheritAutomaticData(nsIFrame* aParent) override;

Просмотреть файл

@ -18,9 +18,6 @@ using namespace mozilla;
// <mroot> -- form a radical - implementation // <mroot> -- form a radical - implementation
// //
// additional ComputedStyle to be used by our MathMLChar.
#define NS_SQR_CHAR_STYLE_CONTEXT_INDEX 0
static const char16_t kSqrChar = char16_t(0x221A); static const char16_t kSqrChar = char16_t(0x221A);
nsIFrame* NS_NewMathMLmrootFrame(PresShell* aPresShell, ComputedStyle* aStyle) { nsIFrame* NS_NewMathMLmrootFrame(PresShell* aPresShell, ComputedStyle* aStyle) {
@ -42,15 +39,10 @@ void nsMathMLmrootFrame::Init(nsIContent* aContent, nsContainerFrame* aParent,
nsIFrame* aPrevInFlow) { nsIFrame* aPrevInFlow) {
nsMathMLContainerFrame::Init(aContent, aParent, aPrevInFlow); nsMathMLContainerFrame::Init(aContent, aParent, aPrevInFlow);
nsPresContext* presContext = PresContext();
// No need to track the ComputedStyle given to our MathML char.
// The Style System will use Get/SetAdditionalComputedStyle() to keep it
// up-to-date if dynamic changes arise.
nsAutoString sqrChar; nsAutoString sqrChar;
sqrChar.Assign(kSqrChar); sqrChar.Assign(kSqrChar);
mSqrChar.SetData(sqrChar); mSqrChar.SetData(sqrChar);
ResolveMathMLCharStyle(presContext, mContent, mComputedStyle, &mSqrChar); mSqrChar.SetComputedStyle(Style());
} }
NS_IMETHODIMP NS_IMETHODIMP
@ -373,24 +365,7 @@ void nsMathMLmrootFrame::GetIntrinsicISizeMetrics(gfxContext* aRenderingContext,
aDesiredSize.mBoundingMetrics.rightBearing = width; aDesiredSize.mBoundingMetrics.rightBearing = width;
} }
// ---------------------- void nsMathMLmrootFrame::DidSetComputedStyle(ComputedStyle* aOldStyle) {
// the Style System will use these to pass the proper ComputedStyle to our nsMathMLContainerFrame::DidSetComputedStyle(aOldStyle);
// MathMLChar mSqrChar.SetComputedStyle(Style());
ComputedStyle* nsMathMLmrootFrame::GetAdditionalComputedStyle(
int32_t aIndex) const {
switch (aIndex) {
case NS_SQR_CHAR_STYLE_CONTEXT_INDEX:
return mSqrChar.GetComputedStyle();
default:
return nullptr;
}
}
void nsMathMLmrootFrame::SetAdditionalComputedStyle(
int32_t aIndex, ComputedStyle* aComputedStyle) {
switch (aIndex) {
case NS_SQR_CHAR_STYLE_CONTEXT_INDEX:
mSqrChar.SetComputedStyle(aComputedStyle);
break;
}
} }

Просмотреть файл

@ -26,10 +26,7 @@ class nsMathMLmrootFrame final : public nsMathMLContainerFrame {
friend nsIFrame* NS_NewMathMLmrootFrame(mozilla::PresShell* aPresShell, friend nsIFrame* NS_NewMathMLmrootFrame(mozilla::PresShell* aPresShell,
ComputedStyle* aStyle); ComputedStyle* aStyle);
virtual void SetAdditionalComputedStyle( void DidSetComputedStyle(ComputedStyle* aOldStyle) override;
int32_t aIndex, ComputedStyle* aComputedStyle) override;
virtual ComputedStyle* GetAdditionalComputedStyle(
int32_t aIndex) const override;
virtual void Init(nsIContent* aContent, nsContainerFrame* aParent, virtual void Init(nsIContent* aContent, nsContainerFrame* aParent,
nsIFrame* aPrevInFlow) override; nsIFrame* aPrevInFlow) override;

Просмотреть файл

@ -55,14 +55,6 @@ CSS_PSEUDO_ELEMENT(selection, ":selection",
CSS_PSEUDO_ELEMENT(mozFocusInner, ":-moz-focus-inner", 0) CSS_PSEUDO_ELEMENT(mozFocusInner, ":-moz-focus-inner", 0)
CSS_PSEUDO_ELEMENT(mozFocusOuter, ":-moz-focus-outer", 0) CSS_PSEUDO_ELEMENT(mozFocusOuter, ":-moz-focus-outer", 0)
// FIXME(emilio): It's unclear why this needs to exist at all, we don't ever
// style them.
//
// This is a pseudo instead of an anon box because of how the
// AdditionalComputedStyle APIs work.
CSS_PSEUDO_ELEMENT(mozMathAnonymous, ":-moz-math-anonymous",
CSS_PSEUDO_ELEMENT_ENABLED_IN_UA_SHEETS)
// HTML5 Forms pseudo elements // HTML5 Forms pseudo elements
CSS_PSEUDO_ELEMENT(mozNumberWrapper, ":-moz-number-wrapper", CSS_PSEUDO_ELEMENT(mozNumberWrapper, ":-moz-number-wrapper",
CSS_PSEUDO_ELEMENT_SUPPORTS_USER_ACTION_STATE | CSS_PSEUDO_ELEMENT_SUPPORTS_USER_ACTION_STATE |

Просмотреть файл

@ -9,7 +9,6 @@ const NON_CONTENT_ACCESIBLE_PSEUDOS = [
"::-moz-number-spin-down", "::-moz-number-spin-down",
"::-moz-number-spin-box", "::-moz-number-spin-box",
"::-moz-number-text", "::-moz-number-text",
"::-moz-math-anonymous",
":-moz-native-anonymous", ":-moz-native-anonymous",
":-moz-use-shadow-tree-root", ":-moz-use-shadow-tree-root",

Просмотреть файл

@ -2463,7 +2463,6 @@ STATIC_ATOMS = [
PseudoElementAtom("PseudoElement_selection", ":selection"), PseudoElementAtom("PseudoElement_selection", ":selection"),
PseudoElementAtom("PseudoElement_mozFocusInner", ":-moz-focus-inner"), PseudoElementAtom("PseudoElement_mozFocusInner", ":-moz-focus-inner"),
PseudoElementAtom("PseudoElement_mozFocusOuter", ":-moz-focus-outer"), PseudoElementAtom("PseudoElement_mozFocusOuter", ":-moz-focus-outer"),
PseudoElementAtom("PseudoElement_mozMathAnonymous", ":-moz-math-anonymous"),
PseudoElementAtom("PseudoElement_mozNumberWrapper", ":-moz-number-wrapper"), PseudoElementAtom("PseudoElement_mozNumberWrapper", ":-moz-number-wrapper"),
PseudoElementAtom("PseudoElement_mozNumberSpinBox", ":-moz-number-spin-box"), PseudoElementAtom("PseudoElement_mozNumberSpinBox", ":-moz-number-spin-box"),
PseudoElementAtom("PseudoElement_mozNumberSpinUp", ":-moz-number-spin-up"), PseudoElementAtom("PseudoElement_mozNumberSpinUp", ":-moz-number-spin-up"),