Bug 1345698 part 4 - Create a new CSSNamespaceRule as a base class. r?heycam
MozReview-Commit-ID: 5QvGWfb18cY
--- a/dom/bindings/Bindings.conf
+++ b/dom/bindings/Bindings.conf
@@ -236,20 +236,16 @@ DOMInterfaces = {
'wrapperCache': False
},
'CSSMozDocumentRule': {
'nativeType': 'mozilla::css::DocumentRule',
'headerFile': 'nsCSSRules.h',
},
-'CSSNamespaceRule': {
- 'nativeType': 'mozilla::css::NameSpaceRule',
-},
-
'CSSPageRule': {
'nativeType': 'nsCSSPageRule',
'headerFile': 'nsCSSRules.h',
},
'CSSPrimitiveValue': {
'nativeType': 'nsROCSSPrimitiveValue',
},
new file mode 100644
--- /dev/null
+++ b/layout/style/CSSNamespaceRule.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_CSSNamespaceRule_h
+#define mozilla_dom_CSSNamespaceRule_h
+
+#include "mozilla/css/Rule.h"
+#include "mozilla/dom/CSSNamespaceRuleBinding.h"
+
+class nsIAtom;
+
+namespace mozilla {
+namespace dom {
+
+class CSSNamespaceRule : public css::Rule
+{
+protected:
+ using Rule::Rule;
+
+public:
+ bool IsCCLeaf() const final {
+ return Rule::IsCCLeaf();
+ }
+ int32_t GetType() const final {
+ return Rule::NAMESPACE_RULE;
+ }
+ using Rule::GetType;
+
+ virtual nsIAtom* GetPrefix() const = 0;
+ virtual void GetURLSpec(nsString& aURLSpec) const = 0;
+
+ // WebIDL interfaces
+ uint16_t Type() const final {
+ return nsIDOMCSSRule::NAMESPACE_RULE;
+ }
+
+ size_t SizeOfIncludingThis(MallocSizeOf aMallocSizeOf) const = 0;
+
+ JSObject* WrapObject(JSContext* aCx,
+ JS::Handle<JSObject*> aGivenProto) final {
+ return CSSNamespaceRuleBinding::Wrap(aCx, this, aGivenProto);
+ }
+};
+
+} // namespace dom
+} // namespace mozilla
+
+#endif // mozilla_dom_CSSNamespaceRule_h
--- a/layout/style/NameSpaceRule.h
+++ b/layout/style/NameSpaceRule.h
@@ -5,65 +5,56 @@
/* class for CSS @namespace rules */
#ifndef mozilla_css_NameSpaceRule_h__
#define mozilla_css_NameSpaceRule_h__
#include "mozilla/Attributes.h"
#include "mozilla/MemoryReporting.h"
-#include "mozilla/css/Rule.h"
+#include "mozilla/dom/CSSNamespaceRule.h"
#include "nsIDOMCSSRule.h"
class nsIAtom;
// IID for the NameSpaceRule class {f0b0dbe1-5031-4a21-b06a-dc141ef2af98}
#define NS_CSS_NAMESPACE_RULE_IMPL_CID \
{0xf0b0dbe1, 0x5031, 0x4a21, {0xb0, 0x6a, 0xdc, 0x14, 0x1e, 0xf2, 0xaf, 0x98}}
namespace mozilla {
namespace css {
-class NameSpaceRule final : public Rule
+class NameSpaceRule final : public dom::CSSNamespaceRule
{
public:
NameSpaceRule(nsIAtom* aPrefix, const nsString& aURLSpec,
uint32_t aLineNumber, uint32_t aColumnNumber);
private:
// for |Clone|
NameSpaceRule(const NameSpaceRule& aCopy);
~NameSpaceRule();
public:
NS_DECLARE_STATIC_IID_ACCESSOR(NS_CSS_NAMESPACE_RULE_IMPL_CID)
NS_DECL_ISUPPORTS_INHERITED
- virtual bool IsCCLeaf() const override;
#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<Rule> Clone() const override;
- nsIAtom* GetPrefix() const { return mPrefix; }
-
- void GetURLSpec(nsString& aURLSpec) const { aURLSpec = mURLSpec; }
+ nsIAtom* GetPrefix() const final { return mPrefix; }
+ void GetURLSpec(nsString& aURLSpec) const final { 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<JSObject*> aGivenProto) override;
+ size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const final;
private:
nsCOMPtr<nsIAtom> mPrefix;
nsString mURLSpec;
};
NS_DEFINE_STATIC_IID_ACCESSOR(NameSpaceRule, NS_CSS_NAMESPACE_RULE_IMPL_CID)
--- a/layout/style/moz.build
+++ b/layout/style/moz.build
@@ -123,16 +123,17 @@ EXPORTS.mozilla += [
'StyleSheetInfo.h',
'StyleSheetInlines.h',
]
EXPORTS.mozilla.dom += [
'CSS.h',
'CSSLexer.h',
'CSSMediaRule.h',
+ 'CSSNamespaceRule.h',
'CSSRuleList.h',
'CSSValue.h',
'FontFace.h',
'FontFaceSet.h',
'FontFaceSetIterator.h',
'MediaList.h',
'MediaQueryList.h',
]
--- a/layout/style/nsCSSRules.cpp
+++ b/layout/style/nsCSSRules.cpp
@@ -29,17 +29,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/CSSNamespaceRuleBinding.h"
#include "mozilla/dom/CSSImportRuleBinding.h"
#include "mozilla/dom/CSSSupportsRuleBinding.h"
#include "mozilla/dom/CSSMozDocumentRuleBinding.h"
#include "mozilla/dom/CSSPageRuleBinding.h"
#include "mozilla/dom/CSSFontFaceRuleBinding.h"
#include "mozilla/dom/CSSFontFeatureValuesRuleBinding.h"
#include "mozilla/dom/CSSKeyframeRuleBinding.h"
#include "mozilla/dom/CSSKeyframesRuleBinding.h"
@@ -768,53 +767,47 @@ DocumentRule::AppendConditionText(nsAStr
}
// -------------------------------------------
// NameSpaceRule
//
NameSpaceRule::NameSpaceRule(nsIAtom* aPrefix, const nsString& aURLSpec,
uint32_t aLineNumber, uint32_t aColumnNumber)
- : Rule(aLineNumber, aColumnNumber),
+ : CSSNamespaceRule(aLineNumber, aColumnNumber),
mPrefix(aPrefix),
mURLSpec(aURLSpec)
{
}
NameSpaceRule::NameSpaceRule(const NameSpaceRule& aCopy)
- : Rule(aCopy),
+ : CSSNamespaceRule(aCopy),
mPrefix(aCopy.mPrefix),
mURLSpec(aCopy.mURLSpec)
{
}
NameSpaceRule::~NameSpaceRule()
{
}
-NS_IMPL_ADDREF_INHERITED(NameSpaceRule, Rule)
-NS_IMPL_RELEASE_INHERITED(NameSpaceRule, Rule)
+NS_IMPL_ADDREF_INHERITED(NameSpaceRule, CSSNamespaceRule)
+NS_IMPL_RELEASE_INHERITED(NameSpaceRule, CSSNamespaceRule)
// QueryInterface implementation for NameSpaceRule
// If this ever gets its own cycle-collection bits, reevaluate our IsCCLeaf
// implementation.
NS_INTERFACE_MAP_BEGIN(NameSpaceRule)
if (aIID.Equals(NS_GET_IID(css::NameSpaceRule))) {
*aInstancePtr = this;
NS_ADDREF_THIS();
return NS_OK;
}
else
-NS_INTERFACE_MAP_END_INHERITING(Rule)
-
-bool
-NameSpaceRule::IsCCLeaf() const
-{
- return Rule::IsCCLeaf();
-}
+NS_INTERFACE_MAP_END_INHERITING(CSSNamespaceRule)
#ifdef DEBUG
/* virtual */ void
NameSpaceRule::List(FILE* out, int32_t aIndent) const
{
nsAutoCString str;
for (int32_t indent = aIndent; --indent >= 0; ) {
str.AppendLiteral(" ");
@@ -832,35 +825,23 @@ NameSpaceRule::List(FILE* out, int32_t a
str.AppendLiteral("url(\"");
AppendUTF16toUTF8(mURLSpec, str);
str.AppendLiteral("\")\n");
fprintf_stderr(out, "%s", str.get());
}
#endif
-/* virtual */ int32_t
-NameSpaceRule::GetType() const
-{
- return Rule::NAMESPACE_RULE;
-}
-
/* virtual */ already_AddRefed<Rule>
NameSpaceRule::Clone() const
{
RefPtr<Rule> clone = new NameSpaceRule(*this);
return clone.forget();
}
-uint16_t
-NameSpaceRule::Type() const
-{
- return nsIDOMCSSRule::NAMESPACE_RULE;
-}
-
void
NameSpaceRule::GetCssTextImpl(nsAString& aCssText) const
{
aCssText.AssignLiteral("@namespace ");
if (mPrefix) {
aCssText.Append(nsDependentAtomString(mPrefix) + NS_LITERAL_STRING(" "));
}
aCssText.AppendLiteral("url(");
@@ -874,23 +855,16 @@ NameSpaceRule::SizeOfIncludingThis(Mallo
return aMallocSizeOf(this);
// Measurement of the following members may be added later if DMD finds it is
// worthwhile:
// - mPrefix
// - mURLSpec
}
-/* virtual */ JSObject*
-NameSpaceRule::WrapObject(JSContext* aCx,
- JS::Handle<JSObject*> aGivenProto)
-{
- return CSSNamespaceRuleBinding::Wrap(aCx, this, aGivenProto);
-}
-
} // namespace css
} // namespace mozilla
// -------------------------------------------
// nsCSSFontFaceStyleDecl and related routines
//
// Mapping from nsCSSFontDesc codes to CSSFontFaceDescriptors fields.