From fce04b359166a26e6fbd64481106cc733e47128c Mon Sep 17 00:00:00 2001 From: Moonchild Date: Sat, 30 Mar 2024 19:31:09 +0100 Subject: [PATCH] Issue #2490 - Part 7: Push the nsIDOMCSSRule implementation up to css::Rule. --- layout/style/GroupRule.h | 2 +- layout/style/ImportRule.h | 7 +- layout/style/NameSpaceRule.h | 8 +- layout/style/Rule.h | 13 +- layout/style/StyleRule.cpp | 38 +-- layout/style/StyleRule.h | 6 +- layout/style/nsCSSRules.cpp | 451 ++++++++--------------------------- layout/style/nsCSSRules.h | 81 ++++--- 8 files changed, 171 insertions(+), 435 deletions(-) diff --git a/layout/style/GroupRule.h b/layout/style/GroupRule.h index d9770dd1ec..fe348e8bad 100644 --- a/layout/style/GroupRule.h +++ b/layout/style/GroupRule.h @@ -83,7 +83,7 @@ public: protected: // to help implement nsIDOMCSSRule - void AppendRulesToCssText(nsAString& aCssText); + void AppendRulesToCssText(nsAString& aCssText) const; // to implement common methods on nsIDOMCSSMediaRule and // nsIDOMCSSMozDocumentRule diff --git a/layout/style/ImportRule.h b/layout/style/ImportRule.h index 64c9aa301c..3e02f91939 100644 --- a/layout/style/ImportRule.h +++ b/layout/style/ImportRule.h @@ -57,12 +57,13 @@ public: virtual JSObject* WrapObject(JSContext* aCx, JS::Handle aGivenProto) override; - // nsIDOMCSSRule interface - NS_DECL_NSIDOMCSSRULE - // nsIDOMCSSImportRule interface NS_DECL_NSIDOMCSSIMPORTRULE + // WebIDL interface + uint16_t Type() const override; + void GetCssTextImpl(nsAString& aCssText) const override; + private: nsString mURLSpec; RefPtr mMedia; diff --git a/layout/style/NameSpaceRule.h b/layout/style/NameSpaceRule.h index 383fe32b8e..c78cb108da 100644 --- a/layout/style/NameSpaceRule.h +++ b/layout/style/NameSpaceRule.h @@ -45,20 +45,22 @@ public: virtual void List(FILE* out = stdout, int32_t aIndent = 0) const override; #endif virtual int32_t GetType() const override; + using Rule::GetType; virtual already_AddRefed Clone() const override; nsIAtom* GetPrefix() const { return mPrefix; } void GetURLSpec(nsString& aURLSpec) const { aURLSpec = mURLSpec; } + // WebIDL interface + uint16_t Type() const override; + void GetCssTextImpl(nsAString& aCssText) const override; + virtual size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const override MOZ_MUST_OVERRIDE; virtual JSObject* WrapObject(JSContext* aCx, JS::Handle aGivenProto) override; - // nsIDOMCSSRule interface - NS_DECL_NSIDOMCSSRULE - private: nsCOMPtr mPrefix; nsString mURLSpec; diff --git a/layout/style/Rule.h b/layout/style/Rule.h index 61ffaa0e86..08589a57bd 100644 --- a/layout/style/Rule.h +++ b/layout/style/Rule.h @@ -60,6 +60,9 @@ public: // sense that it doesn't have any outgoing owning edges. virtual bool IsCCLeaf() const MOZ_MUST_OVERRIDE; + // nsIDOMCSSRule interface + NS_DECL_NSIDOMCSSRULE + #ifdef DEBUG virtual void List(FILE* out = stdout, int32_t aIndent = 0) const = 0; #endif @@ -118,17 +121,15 @@ public: // supposed to have a DOM rule representation (and our code wouldn't work). virtual nsIDOMCSSRule* GetDOMRule() = 0; - // to implement methods on nsIDOMCSSRule - NS_IMETHOD GetParentRule(nsIDOMCSSRule** aParentRule) override; - NS_IMETHOD GetParentStyleSheet(nsIDOMCSSStyleSheet** aSheet) override; - virtual Rule* GetCSSRule() override; - using nsIDOMCSSRule::GetType; - // This is pure virtual because all of Rule's data members are non-owning and // thus measured elsewhere. virtual size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const MOZ_MUST_OVERRIDE = 0; + // WebIDL interface, aka helpers for nsIDOMCSSRule implementation. + virtual uint16_t Type() const = 0; + virtual void GetCssTextImpl(nsAString& aCssText) const = 0; + protected: // True if we're known-live for cycle collection purposes. bool IsKnownLive() const; diff --git a/layout/style/StyleRule.cpp b/layout/style/StyleRule.cpp index 407db13009..b04794c34b 100644 --- a/layout/style/StyleRule.cpp +++ b/layout/style/StyleRule.cpp @@ -1227,30 +1227,10 @@ DOMCSSDeclarationImpl::DocToUpdate() namespace mozilla { namespace css { -NS_IMETHODIMP -StyleRule::GetType(uint16_t* aType) +uint16_t +StyleRule::Type() const { - *aType = nsIDOMCSSRule::STYLE_RULE; - - return NS_OK; -} - -NS_IMETHODIMP -StyleRule::GetParentStyleSheet(nsIDOMCSSStyleSheet** aSheet) -{ - return Rule::GetParentStyleSheet(aSheet); -} - -NS_IMETHODIMP -StyleRule::GetParentRule(nsIDOMCSSRule** aParentRule) -{ - return Rule::GetParentRule(aParentRule); -} - -css::Rule* -StyleRule::GetCSSRule() -{ - return this; + return nsIDOMCSSRule::STYLE_RULE; } NS_IMETHODIMP @@ -1435,8 +1415,8 @@ StyleRule::List(FILE* out, int32_t aIndent) const } #endif -NS_IMETHODIMP -StyleRule::GetCssText(nsAString& aCssText) +void +StyleRule::GetCssTextImpl(nsAString& aCssText) const { if (mSelector) { mSelector->ToString(aCssText, GetStyleSheet()); @@ -1452,14 +1432,6 @@ StyleRule::GetCssText(nsAString& aCssText) } aCssText.Append(char16_t(' ')); aCssText.Append(char16_t('}')); - return NS_OK; -} - -NS_IMETHODIMP -StyleRule::SetCssText(const nsAString& aCssText) -{ - // XXX TBI - need to re-parse rule & declaration - return NS_OK; } NS_IMETHODIMP diff --git a/layout/style/StyleRule.h b/layout/style/StyleRule.h index 68cdb25dc0..2e74d16e86 100644 --- a/layout/style/StyleRule.h +++ b/layout/style/StyleRule.h @@ -342,12 +342,15 @@ public: NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_INHERITED(StyleRule, Rule) virtual bool IsCCLeaf() const override; - NS_DECL_NSIDOMCSSRULE NS_DECL_NSIDOMCSSSTYLERULE // nsICSSStyleRuleDOMWrapper NS_IMETHOD GetCSSStyleRule(StyleRule **aResult) override; + // WebIDL interface + uint16_t Type() const override; + void GetCssTextImpl(nsAString& aCssText) const override; + // null for style attribute nsCSSSelectorList* Selector() { return mSelector; } @@ -356,6 +359,7 @@ public: void SetDeclaration(Declaration* aDecl); virtual int32_t GetType() const override; + using Rule::GetType; virtual already_AddRefed Clone() const override; diff --git a/layout/style/nsCSSRules.cpp b/layout/style/nsCSSRules.cpp index b01cd7988b..7ba72623f8 100644 --- a/layout/style/nsCSSRules.cpp +++ b/layout/style/nsCSSRules.cpp @@ -142,6 +142,28 @@ Rule::GetCSSRule() return this; } +NS_IMETHODIMP +Rule::GetType(uint16_t* aType) +{ + *aType = Type(); + return NS_OK; +} + +NS_IMETHODIMP +Rule::SetCssText(const nsAString& aCssText) +{ + // We used to throw for some rule types, but not all. Specifically, we did + // not throw for StyleRule. Let's just always not throw. + return NS_OK; +} + +NS_IMETHODIMP +Rule::GetCssText(nsAString& aCssText) +{ + GetCssTextImpl(aCssText); + return NS_OK; +} + // ------------------------------- // Style Rule List for group rules // @@ -334,16 +356,14 @@ ImportRule::SetSheet(CSSStyleSheet* aSheet) mMedia = mChildSheet->Media(); } -NS_IMETHODIMP -ImportRule::GetType(uint16_t* aType) +uint16_t +ImportRule::Type() const { - NS_ENSURE_ARG_POINTER(aType); - *aType = nsIDOMCSSRule::IMPORT_RULE; - return NS_OK; + return nsIDOMCSSRule::IMPORT_RULE; } -NS_IMETHODIMP -ImportRule::GetCssText(nsAString& aCssText) +void +ImportRule::GetCssTextImpl(nsAString& aCssText) const { aCssText.AssignLiteral("@import url("); nsStyleUtil::AppendEscapedCSSString(mURLSpec, aCssText); @@ -357,31 +377,6 @@ ImportRule::GetCssText(nsAString& aCssText) } } aCssText.Append(';'); - return NS_OK; -} - -NS_IMETHODIMP -ImportRule::SetCssText(const nsAString& aCssText) -{ - return NS_ERROR_NOT_IMPLEMENTED; -} - -NS_IMETHODIMP -ImportRule::GetParentStyleSheet(nsIDOMCSSStyleSheet** aSheet) -{ - return Rule::GetParentStyleSheet(aSheet); -} - -NS_IMETHODIMP -ImportRule::GetParentRule(nsIDOMCSSRule** aParentRule) -{ - return Rule::GetParentRule(aParentRule); -} - -css::Rule* -ImportRule::GetCSSRule() -{ - return Rule::GetCSSRule(); } NS_IMETHODIMP @@ -589,7 +584,7 @@ GroupRule::InsertStyleRuleAt(uint32_t aIndex, Rule* aRule) } void -GroupRule::AppendRulesToCssText(nsAString& aCssText) +GroupRule::AppendRulesToCssText(nsAString& aCssText) const { aCssText.AppendLiteral(" {\n"); @@ -768,45 +763,18 @@ MediaRule::SetMedia(nsMediaList* aMedia) return NS_OK; } -// nsIDOMCSSRule methods -NS_IMETHODIMP -MediaRule::GetType(uint16_t* aType) +uint16_t +MediaRule::Type() const { - *aType = nsIDOMCSSRule::MEDIA_RULE; - return NS_OK; + return nsIDOMCSSRule::MEDIA_RULE; } -NS_IMETHODIMP -MediaRule::GetCssText(nsAString& aCssText) +void +MediaRule::GetCssTextImpl(nsAString& aCssText) const { aCssText.AssignLiteral("@media "); AppendConditionText(aCssText); GroupRule::AppendRulesToCssText(aCssText); - return NS_OK; -} - -NS_IMETHODIMP -MediaRule::SetCssText(const nsAString& aCssText) -{ - return NS_ERROR_NOT_IMPLEMENTED; -} - -NS_IMETHODIMP -MediaRule::GetParentStyleSheet(nsIDOMCSSStyleSheet** aSheet) -{ - return GroupRule::GetParentStyleSheet(aSheet); -} - -NS_IMETHODIMP -MediaRule::GetParentRule(nsIDOMCSSRule** aParentRule) -{ - return GroupRule::GetParentRule(aParentRule); -} - -css::Rule* -MediaRule::GetCSSRule() -{ - return Rule::GetCSSRule(); } // nsIDOMCSSGroupingRule methods @@ -894,7 +862,7 @@ MediaRule::WrapObject(JSContext* aCx, JS::Handle aGivenProto) } void -MediaRule::AppendConditionText(nsAString& aOutput) +MediaRule::AppendConditionText(nsAString& aOutput) const { if (mMedia) { nsAutoString mediaText; @@ -984,46 +952,19 @@ DocumentRule::Clone() const return clone.forget(); } -// nsIDOMCSSRule methods -NS_IMETHODIMP -DocumentRule::GetType(uint16_t* aType) +uint16_t +DocumentRule::Type() const { // XXX What should really happen here? - *aType = nsIDOMCSSRule::UNKNOWN_RULE; - return NS_OK; + return nsIDOMCSSRule::UNKNOWN_RULE; } -NS_IMETHODIMP -DocumentRule::GetCssText(nsAString& aCssText) +void +DocumentRule::GetCssTextImpl(nsAString& aCssText) const { aCssText.AssignLiteral("@-moz-document "); AppendConditionText(aCssText); GroupRule::AppendRulesToCssText(aCssText); - return NS_OK; -} - -NS_IMETHODIMP -DocumentRule::SetCssText(const nsAString& aCssText) -{ - return NS_ERROR_NOT_IMPLEMENTED; -} - -NS_IMETHODIMP -DocumentRule::GetParentStyleSheet(nsIDOMCSSStyleSheet** aSheet) -{ - return GroupRule::GetParentStyleSheet(aSheet); -} - -NS_IMETHODIMP -DocumentRule::GetParentRule(nsIDOMCSSRule** aParentRule) -{ - return GroupRule::GetParentRule(aParentRule); -} - -css::Rule* -DocumentRule::GetCSSRule() -{ - return Rule::GetCSSRule(); } // nsIDOMCSSGroupingRule methods @@ -1144,7 +1085,7 @@ DocumentRule::WrapObject(JSContext* aCx, } void -DocumentRule::AppendConditionText(nsAString& aCssText) +DocumentRule::AppendConditionText(nsAString& aCssText) const { for (URL *url = mURLs; url; url = url->next) { switch (url->func) { @@ -1256,15 +1197,14 @@ NameSpaceRule::Clone() const return clone.forget(); } -NS_IMETHODIMP -NameSpaceRule::GetType(uint16_t* aType) +uint16_t +NameSpaceRule::Type() const { - *aType = nsIDOMCSSRule::NAMESPACE_RULE; - return NS_OK; + return nsIDOMCSSRule::NAMESPACE_RULE; } -NS_IMETHODIMP -NameSpaceRule::GetCssText(nsAString& aCssText) +void +NameSpaceRule::GetCssTextImpl(nsAString& aCssText) const { aCssText.AssignLiteral("@namespace "); if (mPrefix) { @@ -1273,31 +1213,6 @@ NameSpaceRule::GetCssText(nsAString& aCssText) aCssText.AppendLiteral("url("); nsStyleUtil::AppendEscapedCSSString(mURLSpec, aCssText); aCssText.AppendLiteral(");"); - return NS_OK; -} - -NS_IMETHODIMP -NameSpaceRule::SetCssText(const nsAString& aCssText) -{ - return NS_ERROR_NOT_IMPLEMENTED; -} - -NS_IMETHODIMP -NameSpaceRule::GetParentStyleSheet(nsIDOMCSSStyleSheet** aSheet) -{ - return Rule::GetParentStyleSheet(aSheet); -} - -NS_IMETHODIMP -NameSpaceRule::GetParentRule(nsIDOMCSSRule** aParentRule) -{ - return Rule::GetParentRule(aParentRule); -} - -css::Rule* -NameSpaceRule::GetCSSRule() -{ - return Rule::GetCSSRule(); } /* virtual */ size_t @@ -1448,7 +1363,14 @@ nsCSSFontFaceStyleDecl::GetPropertyValue(nsCSSFontDesc aFontDescID, NS_IMETHODIMP -nsCSSFontFaceStyleDecl::GetCssText(nsAString & aCssText) +nsCSSFontFaceStyleDecl::GetCssText(nsAString& aCssText) +{ + GetCssTextImpl(aCssText); + return NS_OK; +} + +void +nsCSSFontFaceStyleDecl::GetCssTextImpl(nsAString& aCssText) const { nsAutoString descStr; @@ -1467,7 +1389,6 @@ nsCSSFontFaceStyleDecl::GetCssText(nsAString & aCssText) aCssText.AppendLiteral(";\n"); } } - return NS_OK; } NS_IMETHODIMP @@ -1719,47 +1640,21 @@ nsCSSFontFaceRule::GetType() const return Rule::FONT_FACE_RULE; } -NS_IMETHODIMP -nsCSSFontFaceRule::GetType(uint16_t* aType) +uint16_t +nsCSSFontFaceRule::Type() const { - *aType = nsIDOMCSSRule::FONT_FACE_RULE; - return NS_OK; + return nsIDOMCSSRule::FONT_FACE_RULE; } -NS_IMETHODIMP -nsCSSFontFaceRule::GetCssText(nsAString& aCssText) +void +nsCSSFontFaceRule::GetCssTextImpl(nsAString& aCssText) const { nsAutoString propText; - mDecl.GetCssText(propText); + mDecl.GetCssTextImpl(propText); aCssText.AssignLiteral("@font-face {\n"); aCssText.Append(propText); aCssText.Append('}'); - return NS_OK; -} - -NS_IMETHODIMP -nsCSSFontFaceRule::SetCssText(const nsAString& aCssText) -{ - return NS_ERROR_NOT_IMPLEMENTED; // bug 443978 -} - -NS_IMETHODIMP -nsCSSFontFaceRule::GetParentStyleSheet(nsIDOMCSSStyleSheet** aSheet) -{ - return Rule::GetParentStyleSheet(aSheet); -} - -NS_IMETHODIMP -nsCSSFontFaceRule::GetParentRule(nsIDOMCSSRule** aParentRule) -{ - return Rule::GetParentRule(aParentRule); -} - -css::Rule* -nsCSSFontFaceRule::GetCSSRule() -{ - return Rule::GetCSSRule(); } NS_IMETHODIMP @@ -1928,43 +1823,16 @@ nsCSSFontFeatureValuesRule::GetType() const return Rule::FONT_FEATURE_VALUES_RULE; } -NS_IMETHODIMP -nsCSSFontFeatureValuesRule::GetType(uint16_t* aType) +uint16_t +nsCSSFontFeatureValuesRule::Type() const { - *aType = nsIDOMCSSRule::FONT_FEATURE_VALUES_RULE; - return NS_OK; + return nsIDOMCSSRule::FONT_FEATURE_VALUES_RULE; } -NS_IMETHODIMP -nsCSSFontFeatureValuesRule::GetCssText(nsAString& aCssText) +void +nsCSSFontFeatureValuesRule::GetCssTextImpl(nsAString& aCssText) const { FontFeatureValuesRuleToString(mFamilyList, mFeatureValues, aCssText); - return NS_OK; -} - -NS_IMETHODIMP -nsCSSFontFeatureValuesRule::SetCssText(const nsAString& aCssText) -{ - // FIXME: implement??? - return NS_ERROR_NOT_IMPLEMENTED; -} - -NS_IMETHODIMP -nsCSSFontFeatureValuesRule::GetParentStyleSheet(nsIDOMCSSStyleSheet** aSheet) -{ - return Rule::GetParentStyleSheet(aSheet); -} - -NS_IMETHODIMP -nsCSSFontFeatureValuesRule::GetParentRule(nsIDOMCSSRule** aParentRule) -{ - return Rule::GetParentRule(aParentRule); -} - -css::Rule* -nsCSSFontFeatureValuesRule::GetCSSRule() -{ - return Rule::GetCSSRule(); } NS_IMETHODIMP @@ -2228,15 +2096,14 @@ nsCSSKeyframeRule::GetType() const return Rule::KEYFRAME_RULE; } -NS_IMETHODIMP -nsCSSKeyframeRule::GetType(uint16_t* aType) +uint16_t +nsCSSKeyframeRule::Type() const { - *aType = nsIDOMCSSRule::KEYFRAME_RULE; - return NS_OK; + return nsIDOMCSSRule::KEYFRAME_RULE; } -NS_IMETHODIMP -nsCSSKeyframeRule::GetCssText(nsAString& aCssText) +void +nsCSSKeyframeRule::GetCssTextImpl(nsAString& aCssText) const { DoGetKeyText(aCssText); aCssText.AppendLiteral(" { "); @@ -2244,32 +2111,6 @@ nsCSSKeyframeRule::GetCssText(nsAString& aCssText) mDeclaration->ToString(tmp); aCssText.Append(tmp); aCssText.AppendLiteral(" }"); - return NS_OK; -} - -NS_IMETHODIMP -nsCSSKeyframeRule::SetCssText(const nsAString& aCssText) -{ - // FIXME: implement??? - return NS_ERROR_NOT_IMPLEMENTED; -} - -NS_IMETHODIMP -nsCSSKeyframeRule::GetParentStyleSheet(nsIDOMCSSStyleSheet** aSheet) -{ - return Rule::GetParentStyleSheet(aSheet); -} - -NS_IMETHODIMP -nsCSSKeyframeRule::GetParentRule(nsIDOMCSSRule** aParentRule) -{ - return Rule::GetParentRule(aParentRule); -} - -css::Rule* -nsCSSKeyframeRule::GetCSSRule() -{ - return Rule::GetCSSRule(); } NS_IMETHODIMP @@ -2437,15 +2278,14 @@ nsCSSKeyframesRule::GetType() const return Rule::KEYFRAMES_RULE; } -NS_IMETHODIMP -nsCSSKeyframesRule::GetType(uint16_t* aType) +uint16_t +nsCSSKeyframesRule::Type() const { - *aType = nsIDOMCSSRule::KEYFRAMES_RULE; - return NS_OK; + return nsIDOMCSSRule::KEYFRAMES_RULE; } -NS_IMETHODIMP -nsCSSKeyframesRule::GetCssText(nsAString& aCssText) +void +nsCSSKeyframesRule::GetCssTextImpl(nsAString& aCssText) const { aCssText.AssignLiteral("@keyframes "); aCssText.Append(mName); @@ -2457,32 +2297,6 @@ nsCSSKeyframesRule::GetCssText(nsAString& aCssText) aCssText.Append('\n'); } aCssText.Append('}'); - return NS_OK; -} - -NS_IMETHODIMP -nsCSSKeyframesRule::SetCssText(const nsAString& aCssText) -{ - // FIXME: implement??? - return NS_ERROR_NOT_IMPLEMENTED; -} - -NS_IMETHODIMP -nsCSSKeyframesRule::GetParentStyleSheet(nsIDOMCSSStyleSheet** aSheet) -{ - return GroupRule::GetParentStyleSheet(aSheet); -} - -NS_IMETHODIMP -nsCSSKeyframesRule::GetParentRule(nsIDOMCSSRule** aParentRule) -{ - return GroupRule::GetParentRule(aParentRule); -} - -css::Rule* -nsCSSKeyframesRule::GetCSSRule() -{ - return GroupRule::GetCSSRule(); } NS_IMETHODIMP @@ -2804,47 +2618,20 @@ nsCSSPageRule::GetType() const return Rule::PAGE_RULE; } -NS_IMETHODIMP -nsCSSPageRule::GetType(uint16_t* aType) +uint16_t +nsCSSPageRule::Type() const { - *aType = nsIDOMCSSRule::PAGE_RULE; - return NS_OK; + return nsIDOMCSSRule::PAGE_RULE; } -NS_IMETHODIMP -nsCSSPageRule::GetCssText(nsAString& aCssText) +void +nsCSSPageRule::GetCssTextImpl(nsAString& aCssText) const { aCssText.AppendLiteral("@page { "); nsAutoString tmp; mDeclaration->ToString(tmp); aCssText.Append(tmp); aCssText.AppendLiteral(" }"); - return NS_OK; -} - -NS_IMETHODIMP -nsCSSPageRule::SetCssText(const nsAString& aCssText) -{ - // FIXME: implement??? - return NS_ERROR_NOT_IMPLEMENTED; -} - -NS_IMETHODIMP -nsCSSPageRule::GetParentStyleSheet(nsIDOMCSSStyleSheet** aSheet) -{ - return Rule::GetParentStyleSheet(aSheet); -} - -NS_IMETHODIMP -nsCSSPageRule::GetParentRule(nsIDOMCSSRule** aParentRule) -{ - return Rule::GetParentRule(aParentRule); -} - -css::Rule* -nsCSSPageRule::GetCSSRule() -{ - return Rule::GetCSSRule(); } NS_IMETHODIMP @@ -2959,45 +2746,18 @@ NS_INTERFACE_MAP_BEGIN(CSSSupportsRule) NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(CSSSupportsRule) NS_INTERFACE_MAP_END_INHERITING(GroupRule) -// nsIDOMCSSRule methods -NS_IMETHODIMP -CSSSupportsRule::GetType(uint16_t* aType) +uint16_t +CSSSupportsRule::Type() const { - *aType = nsIDOMCSSRule::SUPPORTS_RULE; - return NS_OK; + return nsIDOMCSSRule::SUPPORTS_RULE; } -NS_IMETHODIMP -CSSSupportsRule::GetCssText(nsAString& aCssText) +void +CSSSupportsRule::GetCssTextImpl(nsAString& aCssText) const { aCssText.AssignLiteral("@supports "); aCssText.Append(mCondition); css::GroupRule::AppendRulesToCssText(aCssText); - return NS_OK; -} - -NS_IMETHODIMP -CSSSupportsRule::SetCssText(const nsAString& aCssText) -{ - return NS_ERROR_NOT_IMPLEMENTED; -} - -NS_IMETHODIMP -CSSSupportsRule::GetParentStyleSheet(nsIDOMCSSStyleSheet** aSheet) -{ - return css::GroupRule::GetParentStyleSheet(aSheet); -} - -NS_IMETHODIMP -CSSSupportsRule::GetParentRule(nsIDOMCSSRule** aParentRule) -{ - return css::GroupRule::GetParentRule(aParentRule); -} - -css::Rule* -CSSSupportsRule::GetCSSRule() -{ - return css::GroupRule::GetCSSRule(); } // nsIDOMCSSGroupingRule methods @@ -3129,16 +2889,14 @@ nsCSSCounterStyleRule::GetType() const return Rule::COUNTER_STYLE_RULE; } -// nsIDOMCSSRule methods -NS_IMETHODIMP -nsCSSCounterStyleRule::GetType(uint16_t* aType) +uint16_t +nsCSSCounterStyleRule::Type() const { - *aType = nsIDOMCSSRule::COUNTER_STYLE_RULE; - return NS_OK; + return nsIDOMCSSRule::COUNTER_STYLE_RULE; } -NS_IMETHODIMP -nsCSSCounterStyleRule::GetCssText(nsAString& aCssText) +void +nsCSSCounterStyleRule::GetCssTextImpl(nsAString& aCssText) const { aCssText.AssignLiteral(u"@counter-style "); nsStyleUtil::AppendEscapedCSSIdent(mName, aCssText); @@ -3148,7 +2906,10 @@ nsCSSCounterStyleRule::GetCssText(nsAString& aCssText) id = nsCSSCounterDesc(id + 1)) { if (mValues[id].GetUnit() != eCSSUnit_Null) { nsAutoString tmp; - (this->*kGetters[id])(tmp); + // This is annoying. We want to be a const method, but kGetters stores + // XPCOM method pointers, which aren't const methods. The thing is, + // none of those mutate "this". So it's OK to cast away const here. + (const_cast(this)->*kGetters[id])(tmp); aCssText.AppendLiteral(u" "); AppendASCIItoUTF16(nsCSSProps::GetStringValue(id), aCssText); aCssText.AppendLiteral(u": "); @@ -3157,32 +2918,6 @@ nsCSSCounterStyleRule::GetCssText(nsAString& aCssText) } } aCssText.AppendLiteral(u"}"); - return NS_OK; -} - -NS_IMETHODIMP -nsCSSCounterStyleRule::SetCssText(const nsAString& aCssText) -{ - // FIXME: implement??? - return NS_ERROR_NOT_IMPLEMENTED; -} - -NS_IMETHODIMP -nsCSSCounterStyleRule::GetParentStyleSheet(nsIDOMCSSStyleSheet** aSheet) -{ - return Rule::GetParentStyleSheet(aSheet); -} - -NS_IMETHODIMP -nsCSSCounterStyleRule::GetParentRule(nsIDOMCSSRule** aParentRule) -{ - return Rule::GetParentRule(aParentRule); -} - -css::Rule* -nsCSSCounterStyleRule::GetCSSRule() -{ - return Rule::GetCSSRule(); } // nsIDOMCSSCounterStyleRule methods diff --git a/layout/style/nsCSSRules.h b/layout/style/nsCSSRules.h index 628cd07a92..847bfe847e 100644 --- a/layout/style/nsCSSRules.h +++ b/layout/style/nsCSSRules.h @@ -65,15 +65,13 @@ public: #endif virtual void SetStyleSheet(mozilla::CSSStyleSheet* aSheet) override; //override GroupRule virtual int32_t GetType() const override; + using Rule::GetType; virtual already_AddRefed Clone() const override; virtual nsIDOMCSSRule* GetDOMRule() override { return this; } - // nsIDOMCSSRule interface - NS_DECL_NSIDOMCSSRULE - // nsIDOMCSSGroupingRule interface NS_DECL_NSIDOMCSSGROUPINGRULE @@ -89,7 +87,11 @@ public: // @media rule methods nsresult SetMedia(nsMediaList* aMedia); - + + // WebIDL interface + uint16_t Type() const override; + void GetCssTextImpl(nsAString& aCssText) const override; + virtual size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const override MOZ_MUST_OVERRIDE; @@ -97,7 +99,7 @@ public: JS::Handle aGivenProto) override; protected: - void AppendConditionText(nsAString& aOutput); + void AppendConditionText(nsAString& aOutput) const; RefPtr mMedia; }; @@ -119,15 +121,13 @@ public: virtual void List(FILE* out = stdout, int32_t aIndent = 0) const override; #endif virtual int32_t GetType() const override; + using Rule::GetType; virtual already_AddRefed Clone() const override; virtual nsIDOMCSSRule* GetDOMRule() override { return this; } - // nsIDOMCSSRule interface - NS_DECL_NSIDOMCSSRULE - // nsIDOMCSSGroupingRule interface NS_DECL_NSIDOMCSSGROUPINGRULE @@ -167,6 +167,10 @@ public: void SetURLs(URL *aURLs) { mURLs = aURLs; } + // WebIDL interface + uint16_t Type() const override; + void GetCssTextImpl(nsAString& aCssText) const override; + virtual size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const override MOZ_MUST_OVERRIDE; @@ -174,7 +178,7 @@ public: JS::Handle aGivenProto) override; protected: - void AppendConditionText(nsAString& aOutput); + void AppendConditionText(nsAString& aOutput) const; nsAutoPtr mURLs; // linked list of |struct URL| above. }; @@ -228,6 +232,9 @@ protected: mozilla::CSSFontFaceDescriptors mDescriptors; + // The actual implementation of GetCssText, so we can make it const. + void GetCssTextImpl(nsAString& aCssText) const; + private: // NOT TO BE IMPLEMENTED // This object cannot be allocated on its own, only as part of @@ -263,17 +270,19 @@ public: virtual void List(FILE* out = stdout, int32_t aIndent = 0) const override; #endif virtual int32_t GetType() const override; + using Rule::GetType; virtual already_AddRefed Clone() const override; - // nsIDOMCSSRule interface - NS_DECL_NSIDOMCSSRULE - // nsIDOMCSSFontFaceRule interface NS_DECL_NSIDOMCSSFONTFACERULE void SetDesc(nsCSSFontDesc aDescID, nsCSSValue const & aValue); void GetDesc(nsCSSFontDesc aDescID, nsCSSValue & aValue); + // WebIDL interface + uint16_t Type() const override; + void GetCssTextImpl(nsAString& aCssText) const override; + virtual size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const override; virtual JSObject* WrapObject(JSContext* aCx, @@ -338,14 +347,16 @@ public: virtual void List(FILE* out = stdout, int32_t aIndent = 0) const override; #endif virtual int32_t GetType() const override; + using Rule::GetType; virtual already_AddRefed Clone() const override; - // nsIDOMCSSRule interface - NS_DECL_NSIDOMCSSRULE - // nsIDOMCSSFontFaceRule interface NS_DECL_NSIDOMCSSFONTFEATUREVALUESRULE + // WebIDL interface + uint16_t Type() const override; + void GetCssTextImpl(nsAString& aCssText) const override; + const mozilla::FontFamilyList& GetFamilyList() { return mFamilyList; } void SetFamilyList(const mozilla::FontFamilyList& aFamilyList); @@ -426,14 +437,16 @@ public: virtual void List(FILE* out = stdout, int32_t aIndent = 0) const override; #endif virtual int32_t GetType() const override; + using Rule::GetType; virtual already_AddRefed Clone() const override; - // nsIDOMCSSRule interface - NS_DECL_NSIDOMCSSRULE - // nsIDOMCSSKeyframeRule interface NS_DECL_NSIDOMCSSKEYFRAMERULE + // WebIDL interface + uint16_t Type() const override; + void GetCssTextImpl(nsAString& aCssText) const override; + const nsTArray& GetKeys() const { return mKeys; } mozilla::css::Declaration* Declaration() { return mDeclaration; } @@ -474,18 +487,20 @@ public: virtual void List(FILE* out = stdout, int32_t aIndent = 0) const override; #endif virtual int32_t GetType() const override; + using Rule::GetType; virtual already_AddRefed Clone() const override; virtual nsIDOMCSSRule* GetDOMRule() override { return this; } - // nsIDOMCSSRule interface - NS_DECL_NSIDOMCSSRULE - // nsIDOMCSSKeyframesRule interface NS_DECL_NSIDOMCSSKEYFRAMESRULE + // WebIDL interface + uint16_t Type() const override; + void GetCssTextImpl(nsAString& aCssText) const override; + // rest of GroupRule virtual bool UseForPresentation(nsPresContext* aPresContext, nsMediaQueryResultCacheKey& aKey) override; @@ -557,14 +572,16 @@ public: virtual void List(FILE* out = stdout, int32_t aIndent = 0) const override; #endif virtual int32_t GetType() const override; + using Rule::GetType; virtual already_AddRefed Clone() const override; - // nsIDOMCSSRule interface - NS_DECL_NSIDOMCSSRULE - // nsIDOMCSSPageRule interface NS_DECL_NSIDOMCSSPAGERULE + // WebIDL interface + uint16_t Type() const override; + void GetCssTextImpl(nsAString& aCssText) const override; + mozilla::css::Declaration* Declaration() { return mDeclaration; } void ChangeDeclaration(mozilla::css::Declaration* aDeclaration); @@ -594,6 +611,7 @@ public: virtual void List(FILE* out = stdout, int32_t aIndent = 0) const override; #endif virtual int32_t GetType() const override; + using Rule::GetType; virtual already_AddRefed Clone() const override; virtual bool UseForPresentation(nsPresContext* aPresContext, nsMediaQueryResultCacheKey& aKey) override; @@ -604,9 +622,6 @@ public: NS_DECL_ISUPPORTS_INHERITED - // nsIDOMCSSRule interface - NS_DECL_NSIDOMCSSRULE - // nsIDOMCSSGroupingRule interface NS_DECL_NSIDOMCSSGROUPINGRULE @@ -616,6 +631,10 @@ public: // nsIDOMCSSSupportsRule interface NS_DECL_NSIDOMCSSSUPPORTSRULE + // WebIDL interface + uint16_t Type() const override; + void GetCssTextImpl(nsAString& aCssText) const override; + virtual size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const override; virtual JSObject* WrapObject(JSContext* aCx, JS::Handle aGivenProto) override; @@ -656,14 +675,16 @@ public: virtual void List(FILE* out = stdout, int32_t aIndent = 0) const override; #endif virtual int32_t GetType() const override; + using Rule::GetType; virtual already_AddRefed Clone() const override; - // nsIDOMCSSRule interface - NS_DECL_NSIDOMCSSRULE - // nsIDOMCSSCounterStyleRule NS_DECL_NSIDOMCSSCOUNTERSTYLERULE + // WebIDL interface + uint16_t Type() const override; + void GetCssTextImpl(nsAString& aCssText) const override; + // This function is only used to check whether a non-empty value, which has // been accepted by parser, is valid for the given system and descriptor. static bool CheckDescValue(int32_t aSystem,