Bug 1355394 part 1 - Add separate CSSSupportsRule base class. r?heycam
MozReview-Commit-ID: 3rCRn6YQ8Gx
--- a/dom/bindings/Bindings.conf
+++ b/dom/bindings/Bindings.conf
@@ -253,21 +253,16 @@ DOMInterfaces = {
'nativeType': 'mozilla::BindingStyleRule',
},
'CSSStyleSheet': {
'nativeType': 'mozilla::StyleSheet',
'binaryNames': { 'ownerRule': 'DOMOwnerRule' },
},
-'CSSSupportsRule': {
- 'nativeType': 'mozilla::CSSSupportsRule',
- 'headerFile': 'nsCSSRules.h',
-},
-
'CSSValue': {
'concrete': False
},
'CSSValueList': {
'nativeType': 'nsDOMCSSValueList'
},
new file mode 100644
--- /dev/null
+++ b/layout/style/CSSSupportsRule.cpp
@@ -0,0 +1,60 @@
+/* -*- 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/. */
+
+#include "mozilla/dom/CSSSupportsRule.h"
+
+#include "mozilla/dom/CSSSupportsRuleBinding.h"
+
+using namespace mozilla::css;
+
+namespace mozilla {
+namespace dom {
+
+NS_IMPL_ADDREF_INHERITED(CSSSupportsRule, css::ConditionRule)
+NS_IMPL_RELEASE_INHERITED(CSSSupportsRule, css::ConditionRule)
+
+// QueryInterface implementation for CSSSupportsRule
+NS_INTERFACE_MAP_BEGIN(CSSSupportsRule)
+ NS_INTERFACE_MAP_ENTRY(nsIDOMCSSGroupingRule)
+ NS_INTERFACE_MAP_ENTRY(nsIDOMCSSConditionRule)
+ NS_INTERFACE_MAP_ENTRY(nsIDOMCSSSupportsRule)
+NS_INTERFACE_MAP_END_INHERITING(ConditionRule)
+
+// nsIDOMCSSGroupingRule methods
+NS_IMETHODIMP
+CSSSupportsRule::GetCssRules(nsIDOMCSSRuleList** aRuleList)
+{
+ return GroupRule::GetCssRules(aRuleList);
+}
+
+NS_IMETHODIMP
+CSSSupportsRule::InsertRule(const nsAString & aRule, uint32_t aIndex, uint32_t* _retval)
+{
+ return GroupRule::InsertRule(aRule, aIndex, _retval);
+}
+
+NS_IMETHODIMP
+CSSSupportsRule::DeleteRule(uint32_t aIndex)
+{
+ return GroupRule::DeleteRule(aIndex);
+}
+
+void
+CSSSupportsRule::SetConditionText(const nsAString& aConditionText,
+ ErrorResult& aRv)
+{
+ aRv = SetConditionText(aConditionText);
+}
+
+/* virtual */ JSObject*
+CSSSupportsRule::WrapObject(JSContext* aCx,
+ JS::Handle<JSObject*> aGivenProto)
+{
+ return CSSSupportsRuleBinding::Wrap(aCx, this, aGivenProto);
+}
+
+} // namespace dom
+} // namespace mozilla
new file mode 100644
--- /dev/null
+++ b/layout/style/CSSSupportsRule.h
@@ -0,0 +1,51 @@
+/* -*- 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/. */
+
+#ifndef mozilla_dom_CSSSupportsRule_h
+#define mozilla_dom_CSSSupportsRule_h
+
+#include "mozilla/css/GroupRule.h"
+#include "nsIDOMCSSSupportsRule.h"
+
+namespace mozilla {
+namespace dom {
+
+class CSSSupportsRule : public css::ConditionRule
+ , public nsIDOMCSSSupportsRule
+{
+protected:
+ using ConditionRule::ConditionRule;
+ virtual ~CSSSupportsRule() {}
+
+public:
+ NS_DECL_ISUPPORTS_INHERITED
+
+ int32_t GetType() const override { return css::Rule::SUPPORTS_RULE; }
+ using Rule::GetType;
+
+ // nsIDOMCSSGroupingRule interface
+ NS_DECL_NSIDOMCSSGROUPINGRULE
+
+ // nsIDOMCSSConditionRule interface
+ NS_IMETHOD SetConditionText(const nsAString& aConditionText) override = 0;
+
+ // nsIDOMCSSSupportsRule interface
+ NS_DECL_NSIDOMCSSSUPPORTSRULE
+
+ // WebIDL interface
+ uint16_t Type() const override { return nsIDOMCSSRule::SUPPORTS_RULE; }
+ // Our XPCOM GetConditionText is OK
+ void SetConditionText(const nsAString& aConditionText,
+ ErrorResult& aRv) final;
+
+ JSObject* WrapObject(JSContext* aCx,
+ JS::Handle<JSObject*> aGivenProto) override;
+};
+
+} // namespace dom
+} // namespace mozilla
+
+#endif // mozilla_dom_CSSSupportsRule_h
--- a/layout/style/moz.build
+++ b/layout/style/moz.build
@@ -129,16 +129,17 @@ EXPORTS.mozilla += [
EXPORTS.mozilla.dom += [
'CSS.h',
'CSSLexer.h',
'CSSMediaRule.h',
'CSSNamespaceRule.h',
'CSSPageRule.h',
'CSSRuleList.h',
+ 'CSSSupportsRule.h',
'CSSValue.h',
'FontFace.h',
'FontFaceSet.h',
'FontFaceSetIterator.h',
'MediaList.h',
'MediaQueryList.h',
]
@@ -160,16 +161,17 @@ UNIFIED_SOURCES += [
'BindingStyleRule.cpp',
'CounterStyleManager.cpp',
'CSS.cpp',
'CSSLexer.cpp',
'CSSMediaRule.cpp',
'CSSPageRule.cpp',
'CSSRuleList.cpp',
'CSSStyleSheet.cpp',
+ 'CSSSupportsRule.cpp',
'CSSVariableDeclarations.cpp',
'CSSVariableResolver.cpp',
'CSSVariableValues.cpp',
'Declaration.cpp',
'DocumentStyleRootIterator.cpp',
'ErrorReporter.cpp',
'FontFace.cpp',
'FontFaceSet.cpp',
--- a/layout/style/nsCSSRules.cpp
+++ b/layout/style/nsCSSRules.cpp
@@ -31,17 +31,16 @@
#include "nsContentUtils.h"
#include "nsError.h"
#include "nsStyleUtil.h"
#include "mozilla/DeclarationBlockInlines.h"
#include "nsCSSParser.h"
#include "nsDOMClassInfoID.h"
#include "mozilla/dom/CSSStyleDeclarationBinding.h"
#include "mozilla/dom/CSSImportRuleBinding.h"
-#include "mozilla/dom/CSSSupportsRuleBinding.h"
#include "mozilla/dom/CSSMozDocumentRuleBinding.h"
#include "mozilla/dom/CSSFontFaceRuleBinding.h"
#include "mozilla/dom/CSSFontFeatureValuesRuleBinding.h"
#include "mozilla/dom/CSSKeyframeRuleBinding.h"
#include "mozilla/dom/CSSKeyframesRuleBinding.h"
#include "mozilla/dom/CSSCounterStyleRuleBinding.h"
#include "StyleRule.h"
#include "nsFont.h"
@@ -2267,28 +2266,28 @@ nsCSSPageRule::SizeOfIncludingThis(Mallo
return aMallocSizeOf(this);
}
namespace mozilla {
CSSSupportsRule::CSSSupportsRule(bool aConditionMet,
const nsString& aCondition,
uint32_t aLineNumber, uint32_t aColumnNumber)
- : css::ConditionRule(aLineNumber, aColumnNumber)
+ : dom::CSSSupportsRule(aLineNumber, aColumnNumber)
, mUseGroup(aConditionMet)
, mCondition(aCondition)
{
}
CSSSupportsRule::~CSSSupportsRule()
{
}
CSSSupportsRule::CSSSupportsRule(const CSSSupportsRule& aCopy)
- : css::ConditionRule(aCopy),
+ : dom::CSSSupportsRule(aCopy),
mUseGroup(aCopy.mUseGroup),
mCondition(aCopy.mCondition)
{
}
#ifdef DEBUG
/* virtual */ void
CSSSupportsRule::List(FILE* out, int32_t aIndent) const
@@ -2302,22 +2301,16 @@ CSSSupportsRule::List(FILE* out, int32_t
indentStr.get(), NS_ConvertUTF16toUTF8(mCondition).get());
css::GroupRule::List(out, aIndent);
fprintf_stderr(out, "%s}\n", indentStr.get());
}
#endif
-/* virtual */ int32_t
-CSSSupportsRule::GetType() const
-{
- return Rule::SUPPORTS_RULE;
-}
-
/* virtual */ already_AddRefed<mozilla::css::Rule>
CSSSupportsRule::Clone() const
{
RefPtr<css::Rule> clone = new CSSSupportsRule(*this);
return clone.forget();
}
/* virtual */ bool
@@ -2327,91 +2320,49 @@ CSSSupportsRule::UseForPresentation(nsPr
return mUseGroup;
}
NS_IMPL_ADDREF_INHERITED(CSSSupportsRule, css::ConditionRule)
NS_IMPL_RELEASE_INHERITED(CSSSupportsRule, css::ConditionRule)
// QueryInterface implementation for CSSSupportsRule
NS_INTERFACE_MAP_BEGIN(CSSSupportsRule)
- NS_INTERFACE_MAP_ENTRY(nsIDOMCSSGroupingRule)
- NS_INTERFACE_MAP_ENTRY(nsIDOMCSSConditionRule)
- NS_INTERFACE_MAP_ENTRY(nsIDOMCSSSupportsRule)
-NS_INTERFACE_MAP_END_INHERITING(ConditionRule)
-
-uint16_t
-CSSSupportsRule::Type() const
-{
- return nsIDOMCSSRule::SUPPORTS_RULE;
-}
+NS_INTERFACE_MAP_END_INHERITING(dom::CSSSupportsRule)
void
CSSSupportsRule::GetCssTextImpl(nsAString& aCssText) const
{
aCssText.AssignLiteral("@supports ");
aCssText.Append(mCondition);
css::GroupRule::AppendRulesToCssText(aCssText);
}
-// nsIDOMCSSGroupingRule methods
-NS_IMETHODIMP
-CSSSupportsRule::GetCssRules(nsIDOMCSSRuleList* *aRuleList)
-{
- return css::GroupRule::GetCssRules(aRuleList);
-}
-
-NS_IMETHODIMP
-CSSSupportsRule::InsertRule(const nsAString & aRule, uint32_t aIndex, uint32_t* _retval)
-{
- return css::GroupRule::InsertRule(aRule, aIndex, _retval);
-}
-
-NS_IMETHODIMP
-CSSSupportsRule::DeleteRule(uint32_t aIndex)
-{
- return css::GroupRule::DeleteRule(aIndex);
-}
-
// nsIDOMCSSConditionRule methods
NS_IMETHODIMP
CSSSupportsRule::GetConditionText(nsAString& aConditionText)
{
aConditionText.Assign(mCondition);
return NS_OK;
}
NS_IMETHODIMP
CSSSupportsRule::SetConditionText(const nsAString& aConditionText)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
-void
-CSSSupportsRule::SetConditionText(const nsAString& aConditionText,
- ErrorResult& aRv)
-{
- aRv.Throw(NS_ERROR_NOT_IMPLEMENTED);
-}
-
/* virtual */ size_t
CSSSupportsRule::SizeOfIncludingThis(MallocSizeOf aMallocSizeOf) const
{
size_t n = aMallocSizeOf(this);
n += css::GroupRule::SizeOfExcludingThis(aMallocSizeOf);
n += mCondition.SizeOfExcludingThisIfUnshared(aMallocSizeOf);
return n;
}
-/* virtual */ JSObject*
-CSSSupportsRule::WrapObject(JSContext* aCx,
- JS::Handle<JSObject*> aGivenProto)
-{
- return CSSSupportsRuleBinding::Wrap(aCx, this, aGivenProto);
-}
-
} // namespace mozilla
// -------------------------------------------
// nsCSSCounterStyleRule
//
nsCSSCounterStyleRule::nsCSSCounterStyleRule(const nsCSSCounterStyleRule& aCopy)
: Rule(aCopy)
--- a/layout/style/nsCSSRules.h
+++ b/layout/style/nsCSSRules.h
@@ -14,16 +14,17 @@
#include "gfxFontFeatures.h"
#include "mozilla/Attributes.h"
#include "mozilla/MemoryReporting.h"
#include "mozilla/Move.h"
#include "mozilla/SheetType.h"
#include "mozilla/css/GroupRule.h"
#include "mozilla/dom/CSSMediaRule.h"
#include "mozilla/dom/CSSPageRule.h"
+#include "mozilla/dom/CSSSupportsRule.h"
#include "nsAutoPtr.h"
#include "nsCSSPropertyID.h"
#include "nsCSSValue.h"
#include "nsDOMCSSDeclaration.h"
#include "nsIDOMCSSConditionRule.h"
#include "nsIDOMCSSCounterStyleRule.h"
#include "nsIDOMCSSFontFeatureValuesRule.h"
#include "nsIDOMCSSGroupingRule.h"
@@ -441,57 +442,42 @@ public:
private:
RefPtr<mozilla::css::Declaration> mDeclaration;
// lazily created when needed:
RefPtr<nsCSSPageStyleDeclaration> mDOMDeclaration;
};
namespace mozilla {
-class CSSSupportsRule final : public css::ConditionRule,
- public nsIDOMCSSSupportsRule
+class CSSSupportsRule final : public dom::CSSSupportsRule
{
public:
CSSSupportsRule(bool aConditionMet, const nsString& aCondition,
uint32_t aLineNumber, uint32_t aColumnNumber);
CSSSupportsRule(const CSSSupportsRule& aCopy);
// Rule methods
#ifdef DEBUG
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<mozilla::css::Rule> Clone() const override;
virtual bool UseForPresentation(nsPresContext* aPresContext,
nsMediaQueryResultCacheKey& aKey) override;
NS_DECL_ISUPPORTS_INHERITED
- // nsIDOMCSSGroupingRule interface
- NS_DECL_NSIDOMCSSGROUPINGRULE
-
// nsIDOMCSSConditionRule interface
NS_DECL_NSIDOMCSSCONDITIONRULE
- // nsIDOMCSSSupportsRule interface
- NS_DECL_NSIDOMCSSSUPPORTSRULE
-
// WebIDL interface
- uint16_t Type() const override;
void GetCssTextImpl(nsAString& aCssText) const override;
- // Our XPCOM GetConditionText is OK
- virtual void SetConditionText(const nsAString& aConditionText,
- ErrorResult& aRv) override;
+ using dom::CSSSupportsRule::SetConditionText;
virtual size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const override;
- virtual JSObject* WrapObject(JSContext* aCx,
- JS::Handle<JSObject*> aGivenProto) override;
-
protected:
virtual ~CSSSupportsRule();
bool mUseGroup;
nsString mCondition;
};
} // namespace mozilla