Bug 1345698 part 4 - Create a new CSSNamespaceRule as a base class. r?heycam draft
authorXidorn Quan <me@upsuper.org>
Tue, 14 Mar 2017 18:50:28 +1100
changeset 499000 4b33856eab09a570239f5eef46d2257db88722a5
parent 498999 5a99fdea08967222e6281860f119d909887f9a50
child 499001 6697437d21652c2148ad4eb84f4d57247590266f
push id49308
push userxquan@mozilla.com
push dateWed, 15 Mar 2017 09:29:13 +0000
reviewersheycam
bugs1345698
milestone55.0a1
Bug 1345698 part 4 - Create a new CSSNamespaceRule as a base class. r?heycam MozReview-Commit-ID: 5QvGWfb18cY
dom/bindings/Bindings.conf
layout/style/CSSNamespaceRule.h
layout/style/NameSpaceRule.h
layout/style/moz.build
layout/style/nsCSSRules.cpp
--- 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.