mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-04 14:58:37 +09:00
Issue #2490 - Part 1: Make all CSS rules cycle-collected.
This commit is contained in:
parent
73edd3878f
commit
d6ec56a4c4
11 changed files with 237 additions and 85 deletions
|
|
@ -144,7 +144,7 @@ public:
|
|||
}
|
||||
}
|
||||
|
||||
bool PreservingWrapper()
|
||||
bool PreservingWrapper() const
|
||||
{
|
||||
return HasWrapperFlag(WRAPPER_BIT_PRESERVED);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1238,8 +1238,10 @@ CSSStyleSheet::TraverseInner(nsCycleCollectionTraversalCallback &cb)
|
|||
|
||||
const nsCOMArray<css::Rule>& rules = mInner->mOrderedRules;
|
||||
for (int32_t i = 0, count = rules.Count(); i < count; ++i) {
|
||||
NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(cb, "mOrderedRules[i]");
|
||||
cb.NoteXPCOMChild(rules[i]->GetExistingDOMRule());
|
||||
if (!rules[i]->IsCCLeaf()) {
|
||||
NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(cb, "mOrderedRules[i]");
|
||||
cb.NoteXPCOMChild(rules[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -96,6 +96,8 @@ public:
|
|||
|
||||
NS_DECLARE_STATIC_IID_ACCESSOR(NS_CSS_DECLARATION_IMPL_CID)
|
||||
|
||||
// If this ever becomes cycle-collected, please change the CC implementation
|
||||
// for StyleRule to traverse it.
|
||||
NS_DECL_ISUPPORTS
|
||||
|
||||
private:
|
||||
|
|
|
|||
|
|
@ -38,8 +38,9 @@ protected:
|
|||
virtual ~GroupRule();
|
||||
public:
|
||||
|
||||
NS_DECL_CYCLE_COLLECTION_CLASS(GroupRule)
|
||||
NS_DECL_CYCLE_COLLECTING_ISUPPORTS
|
||||
NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(GroupRule, Rule)
|
||||
NS_DECL_ISUPPORTS_INHERITED
|
||||
virtual bool IsCCLeaf() const override;
|
||||
|
||||
// implement part of Rule
|
||||
DECL_STYLE_RULE_INHERIT_NO_DOMRULE
|
||||
|
|
|
|||
|
|
@ -34,8 +34,9 @@ private:
|
|||
ImportRule(const ImportRule& aCopy);
|
||||
~ImportRule();
|
||||
public:
|
||||
NS_DECL_CYCLE_COLLECTION_CLASS_AMBIGUOUS(ImportRule, mozilla::css::Rule)
|
||||
NS_DECL_CYCLE_COLLECTING_ISUPPORTS
|
||||
NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(ImportRule, Rule)
|
||||
NS_DECL_ISUPPORTS_INHERITED
|
||||
virtual bool IsCCLeaf() const override;
|
||||
|
||||
DECL_STYLE_RULE_INHERIT
|
||||
|
||||
|
|
|
|||
|
|
@ -37,7 +37,8 @@ private:
|
|||
public:
|
||||
NS_DECLARE_STATIC_IID_ACCESSOR(NS_CSS_NAMESPACE_RULE_IMPL_CID)
|
||||
|
||||
NS_DECL_ISUPPORTS
|
||||
NS_DECL_ISUPPORTS_INHERITED
|
||||
virtual bool IsCCLeaf() const override;
|
||||
|
||||
// Rule methods
|
||||
DECL_STYLE_RULE_INHERIT
|
||||
|
|
|
|||
|
|
@ -52,6 +52,12 @@ protected:
|
|||
|
||||
public:
|
||||
|
||||
NS_DECL_CYCLE_COLLECTING_ISUPPORTS
|
||||
NS_DECL_CYCLE_COLLECTION_SKIPPABLE_CLASS(Rule)
|
||||
// Return true if this rule is known to be a cycle collection leaf, in the
|
||||
// sense that it doesn't have any outgoing owning edges.
|
||||
virtual bool IsCCLeaf() const MOZ_MUST_OVERRIDE;
|
||||
|
||||
#ifdef DEBUG
|
||||
virtual void List(FILE* out = stdout, int32_t aIndent = 0) const = 0;
|
||||
#endif
|
||||
|
|
@ -124,6 +130,9 @@ public:
|
|||
const MOZ_MUST_OVERRIDE = 0;
|
||||
|
||||
protected:
|
||||
// True if we're known-live for cycle collection purposes.
|
||||
bool IsKnownLive() const;
|
||||
|
||||
// This is sometimes null (e.g., for style attributes).
|
||||
CSSStyleSheet* mSheet;
|
||||
// When the parent GroupRule is destroyed, it will call SetParentRule(nullptr)
|
||||
|
|
|
|||
|
|
@ -1460,8 +1460,15 @@ StyleRule::StyleRule(const StyleRule& aCopy)
|
|||
StyleRule::~StyleRule()
|
||||
{
|
||||
delete mSelector;
|
||||
DropReferences();
|
||||
}
|
||||
|
||||
void
|
||||
StyleRule::DropReferences()
|
||||
{
|
||||
if (mDOMRule) {
|
||||
mDOMRule->DOMDeclaration()->DropReference();
|
||||
mDOMRule = nullptr;
|
||||
}
|
||||
|
||||
if (mDeclaration) {
|
||||
|
|
@ -1470,18 +1477,36 @@ StyleRule::~StyleRule()
|
|||
}
|
||||
|
||||
// QueryInterface implementation for StyleRule
|
||||
NS_INTERFACE_MAP_BEGIN(StyleRule)
|
||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(StyleRule)
|
||||
if (aIID.Equals(NS_GET_IID(mozilla::css::StyleRule))) {
|
||||
*aInstancePtr = this;
|
||||
NS_ADDREF_THIS();
|
||||
return NS_OK;
|
||||
}
|
||||
else
|
||||
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, mozilla::css::Rule)
|
||||
NS_INTERFACE_MAP_END
|
||||
NS_INTERFACE_MAP_END_INHERITING(Rule)
|
||||
|
||||
NS_IMPL_ADDREF(StyleRule)
|
||||
NS_IMPL_RELEASE(StyleRule)
|
||||
NS_IMPL_ADDREF_INHERITED(StyleRule, Rule)
|
||||
NS_IMPL_RELEASE_INHERITED(StyleRule, Rule)
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_CLASS(StyleRule)
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(StyleRule, Rule)
|
||||
tmp->DropReferences();
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_END
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(StyleRule, Rule)
|
||||
// Keep this in sync with IsCCLeaf.
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mDOMRule)
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
|
||||
|
||||
bool
|
||||
StyleRule::IsCCLeaf() const
|
||||
{
|
||||
if (!Rule::IsCCLeaf()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return !mDOMRule || !mDOMRule->DOMDeclaration()->PreservingWrapper();
|
||||
}
|
||||
|
||||
/* virtual */ int32_t
|
||||
StyleRule::GetType() const
|
||||
|
|
|
|||
|
|
@ -334,7 +334,9 @@ private:
|
|||
public:
|
||||
NS_DECLARE_STATIC_IID_ACCESSOR(NS_CSS_STYLE_RULE_IMPL_CID)
|
||||
|
||||
NS_DECL_ISUPPORTS
|
||||
NS_DECL_ISUPPORTS_INHERITED
|
||||
NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(StyleRule, Rule)
|
||||
virtual bool IsCCLeaf() const override;
|
||||
|
||||
// null for style attribute
|
||||
nsCSSSelectorList* Selector() { return mSelector; }
|
||||
|
|
@ -366,6 +368,10 @@ public:
|
|||
private:
|
||||
~StyleRule();
|
||||
|
||||
// Drop our references to mDeclaration and mRule, and let them know we're
|
||||
// doing that.
|
||||
void DropReferences();
|
||||
|
||||
private:
|
||||
nsCSSSelectorList* mSelector; // null for style attribute
|
||||
RefPtr<Declaration> mDeclaration;
|
||||
|
|
|
|||
|
|
@ -37,6 +37,7 @@
|
|||
#include "nsFont.h"
|
||||
#include "nsIURI.h"
|
||||
#include "mozAutoDocUpdate.h"
|
||||
#include "nsCCUncollectableMarker.h"
|
||||
|
||||
using namespace mozilla;
|
||||
using namespace mozilla::dom;
|
||||
|
|
@ -55,6 +56,52 @@ IMPL_STYLE_RULE_INHERIT_GET_DOM_RULE_WEAK(class_, super_)
|
|||
namespace mozilla {
|
||||
namespace css {
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTING_ADDREF(Rule)
|
||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(Rule)
|
||||
|
||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(Rule)
|
||||
NS_INTERFACE_MAP_ENTRY(nsISupports)
|
||||
NS_INTERFACE_MAP_END
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_0(Rule)
|
||||
|
||||
bool
|
||||
Rule::IsCCLeaf() const
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
Rule::IsKnownLive() const
|
||||
{
|
||||
StyleSheet* sheet = GetStyleSheet();
|
||||
if (!sheet) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!sheet->IsOwnedByDocument()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return nsCCUncollectableMarker::InGeneration(
|
||||
sheet->GetAssociatedDocument()->GetMarkedCCGeneration());
|
||||
}
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_CAN_SKIP_BEGIN(Rule)
|
||||
return tmp->IsCCLeaf() || tmp->IsKnownLive();
|
||||
NS_IMPL_CYCLE_COLLECTION_CAN_SKIP_END
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_CAN_SKIP_IN_CC_BEGIN(Rule)
|
||||
// Note that we can't make use of IsKnownLive() here directly, because we may
|
||||
// be subclassed by something that needs tracing. Once we have a wrapper
|
||||
// cache we should be able to do better here.
|
||||
return tmp->IsCCLeaf();
|
||||
NS_IMPL_CYCLE_COLLECTION_CAN_SKIP_IN_CC_END
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_CAN_SKIP_THIS_BEGIN(Rule)
|
||||
return tmp->IsCCLeaf() || tmp->IsKnownLive();
|
||||
NS_IMPL_CYCLE_COLLECTION_CAN_SKIP_THIS_END
|
||||
|
||||
/* virtual */ void
|
||||
Rule::SetStyleSheet(CSSStyleSheet* aSheet)
|
||||
{
|
||||
|
|
@ -199,16 +246,22 @@ ImportRule::~ImportRule()
|
|||
}
|
||||
}
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTING_ADDREF(ImportRule)
|
||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(ImportRule)
|
||||
NS_IMPL_ADDREF_INHERITED(ImportRule, Rule)
|
||||
NS_IMPL_RELEASE_INHERITED(ImportRule, Rule)
|
||||
|
||||
bool
|
||||
ImportRule::IsCCLeaf() const
|
||||
{
|
||||
// We're not a leaf.
|
||||
return false;
|
||||
}
|
||||
|
||||
// QueryInterface implementation for ImportRule
|
||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(ImportRule)
|
||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(ImportRule)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIDOMCSSRule)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIDOMCSSImportRule)
|
||||
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, mozilla::css::Rule)
|
||||
NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(CSSImportRule)
|
||||
NS_INTERFACE_MAP_END
|
||||
NS_INTERFACE_MAP_END_INHERITING(Rule)
|
||||
|
||||
IMPL_STYLE_RULE_INHERIT(ImportRule, Rule)
|
||||
|
||||
|
|
@ -393,11 +446,18 @@ GroupRule::~GroupRule()
|
|||
}
|
||||
}
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTING_ADDREF(GroupRule)
|
||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(GroupRule)
|
||||
NS_IMPL_ADDREF_INHERITED(GroupRule, Rule)
|
||||
NS_IMPL_RELEASE_INHERITED(GroupRule, Rule)
|
||||
|
||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(GroupRule)
|
||||
NS_INTERFACE_MAP_END
|
||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(GroupRule)
|
||||
NS_INTERFACE_MAP_END_INHERITING(Rule)
|
||||
|
||||
bool
|
||||
GroupRule::IsCCLeaf() const
|
||||
{
|
||||
// Let's not worry for now about sorting out whether we're a leaf or not.
|
||||
return false;
|
||||
}
|
||||
|
||||
static bool
|
||||
SetStyleSheetReference(Rule* aRule, void* aSheet)
|
||||
|
|
@ -409,7 +469,7 @@ SetStyleSheetReference(Rule* aRule, void* aSheet)
|
|||
|
||||
NS_IMPL_CYCLE_COLLECTION_CLASS(GroupRule)
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(GroupRule)
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(GroupRule, Rule)
|
||||
tmp->mRules.EnumerateForwards(SetParentRuleReference, nullptr);
|
||||
// If tmp does not have a stylesheet, neither do its descendants. In that
|
||||
// case, don't try to null out their stylesheet, to avoid O(N^2) behavior in
|
||||
|
|
@ -427,11 +487,13 @@ NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(GroupRule)
|
|||
}
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_END
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(GroupRule)
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(GroupRule, Rule)
|
||||
const nsCOMArray<Rule>& rules = tmp->mRules;
|
||||
for (int32_t i = 0, count = rules.Count(); i < count; ++i) {
|
||||
NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(cb, "mRules[i]");
|
||||
cb.NoteXPCOMChild(rules[i]->GetExistingDOMRule());
|
||||
if (!rules[i]->IsCCLeaf()) {
|
||||
NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(cb, "mRules[i]");
|
||||
cb.NoteXPCOMChild(rules[i]);
|
||||
}
|
||||
}
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mRuleCollection)
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
|
||||
|
|
@ -624,22 +686,11 @@ NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(MediaRule)
|
|||
NS_INTERFACE_MAP_ENTRY(nsIDOMCSSGroupingRule)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIDOMCSSConditionRule)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIDOMCSSMediaRule)
|
||||
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, mozilla::css::Rule)
|
||||
NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(CSSMediaRule)
|
||||
NS_INTERFACE_MAP_END_INHERITING(GroupRule)
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_CLASS(MediaRule)
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(MediaRule, GroupRule)
|
||||
if (tmp->mMedia) {
|
||||
tmp->mMedia->SetStyleSheet(nullptr);
|
||||
tmp->mMedia = nullptr;
|
||||
}
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_END
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(MediaRule, GroupRule)
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mMedia)
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
|
||||
NS_IMPL_CYCLE_COLLECTION_INHERITED(MediaRule, GroupRule,
|
||||
mMedia)
|
||||
|
||||
/* virtual */ void
|
||||
MediaRule::SetStyleSheet(CSSStyleSheet* aSheet)
|
||||
|
|
@ -1110,10 +1161,12 @@ NameSpaceRule::~NameSpaceRule()
|
|||
{
|
||||
}
|
||||
|
||||
NS_IMPL_ADDREF(NameSpaceRule)
|
||||
NS_IMPL_RELEASE(NameSpaceRule)
|
||||
NS_IMPL_ADDREF_INHERITED(NameSpaceRule, Rule)
|
||||
NS_IMPL_RELEASE_INHERITED(NameSpaceRule, Rule)
|
||||
|
||||
// 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;
|
||||
|
|
@ -1122,9 +1175,14 @@ NS_INTERFACE_MAP_BEGIN(NameSpaceRule)
|
|||
}
|
||||
else
|
||||
NS_INTERFACE_MAP_ENTRY(nsIDOMCSSRule)
|
||||
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, mozilla::css::Rule)
|
||||
NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(CSSNameSpaceRule)
|
||||
NS_INTERFACE_MAP_END
|
||||
NS_INTERFACE_MAP_END_INHERITING(Rule)
|
||||
|
||||
bool
|
||||
NameSpaceRule::IsCCLeaf() const
|
||||
{
|
||||
return Rule::IsCCLeaf();
|
||||
}
|
||||
|
||||
IMPL_STYLE_RULE_INHERIT(NameSpaceRule, Rule)
|
||||
|
||||
|
|
@ -1539,35 +1597,52 @@ nsCSSFontFaceRule::Clone() const
|
|||
return clone.forget();
|
||||
}
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTING_ADDREF(nsCSSFontFaceRule)
|
||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(nsCSSFontFaceRule)
|
||||
NS_IMPL_ADDREF_INHERITED(nsCSSFontFaceRule, mozilla::css::Rule)
|
||||
NS_IMPL_RELEASE_INHERITED(nsCSSFontFaceRule, mozilla::css::Rule)
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_CLASS(nsCSSFontFaceRule)
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_TRACE_BEGIN(nsCSSFontFaceRule)
|
||||
NS_IMPL_CYCLE_COLLECTION_TRACE_BEGIN_INHERITED(nsCSSFontFaceRule,
|
||||
mozilla::css::Rule)
|
||||
// Keep this in sync with IsCCLeaf.
|
||||
|
||||
// Trace the wrapper for our declaration. This just expands out
|
||||
// NS_IMPL_CYCLE_COLLECTION_TRACE_PRESERVED_WRAPPER which we can't use
|
||||
// directly because the wrapper is on the declaration, not on us.
|
||||
tmp->mDecl.TraceWrapper(aCallbacks, aClosure);
|
||||
NS_IMPL_CYCLE_COLLECTION_TRACE_END
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(nsCSSFontFaceRule)
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(nsCSSFontFaceRule,
|
||||
mozilla::css::Rule)
|
||||
// Keep this in sync with IsCCLeaf.
|
||||
|
||||
// Unlink the wrapper for our declaraton. This just expands out
|
||||
// NS_IMPL_CYCLE_COLLECTION_UNLINK_PRESERVED_WRAPPER which we can't use
|
||||
// directly because the wrapper is on the declaration, not on us.
|
||||
tmp->mDecl.ReleaseWrapper(static_cast<nsISupports*>(p));
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_END
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(nsCSSFontFaceRule)
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(nsCSSFontFaceRule,
|
||||
mozilla::css::Rule)
|
||||
// Keep this in sync with IsCCLeaf.
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
|
||||
|
||||
bool
|
||||
nsCSSFontFaceRule::IsCCLeaf() const
|
||||
{
|
||||
if (!Rule::IsCCLeaf()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return !mDecl.PreservingWrapper();
|
||||
}
|
||||
|
||||
// QueryInterface implementation for nsCSSFontFaceRule
|
||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsCSSFontFaceRule)
|
||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(nsCSSFontFaceRule)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIDOMCSSFontFaceRule)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIDOMCSSRule)
|
||||
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, mozilla::css::Rule)
|
||||
NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(CSSFontFaceRule)
|
||||
NS_INTERFACE_MAP_END
|
||||
NS_INTERFACE_MAP_END_INHERITING(Rule)
|
||||
|
||||
IMPL_STYLE_RULE_INHERIT(nsCSSFontFaceRule, Rule)
|
||||
|
||||
|
|
@ -1702,16 +1777,23 @@ nsCSSFontFeatureValuesRule::Clone() const
|
|||
return clone.forget();
|
||||
}
|
||||
|
||||
NS_IMPL_ADDREF(nsCSSFontFeatureValuesRule)
|
||||
NS_IMPL_RELEASE(nsCSSFontFeatureValuesRule)
|
||||
NS_IMPL_ADDREF_INHERITED(nsCSSFontFeatureValuesRule, mozilla::css::Rule)
|
||||
NS_IMPL_RELEASE_INHERITED(nsCSSFontFeatureValuesRule, mozilla::css::Rule)
|
||||
|
||||
// QueryInterface implementation for nsCSSFontFeatureValuesRule
|
||||
// If this ever gets its own cycle-collection bits, reevaluate our IsCCLeaf
|
||||
// implementation.
|
||||
NS_INTERFACE_MAP_BEGIN(nsCSSFontFeatureValuesRule)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIDOMCSSFontFeatureValuesRule)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIDOMCSSRule)
|
||||
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, mozilla::css::Rule)
|
||||
NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(CSSFontFeatureValuesRule)
|
||||
NS_INTERFACE_MAP_END
|
||||
NS_INTERFACE_MAP_END_INHERITING(mozilla::css::Rule)
|
||||
|
||||
bool
|
||||
nsCSSFontFeatureValuesRule::IsCCLeaf() const
|
||||
{
|
||||
return Rule::IsCCLeaf();
|
||||
}
|
||||
|
||||
IMPL_STYLE_RULE_INHERIT(nsCSSFontFeatureValuesRule, Rule)
|
||||
|
||||
|
|
@ -2037,28 +2119,35 @@ nsCSSKeyframeRule::Clone() const
|
|||
return clone.forget();
|
||||
}
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTING_ADDREF(nsCSSKeyframeRule)
|
||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(nsCSSKeyframeRule)
|
||||
NS_IMPL_ADDREF_INHERITED(nsCSSKeyframeRule, mozilla::css::Rule)
|
||||
NS_IMPL_RELEASE_INHERITED(nsCSSKeyframeRule, mozilla::css::Rule)
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_CLASS(nsCSSKeyframeRule)
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(nsCSSKeyframeRule)
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(nsCSSKeyframeRule, mozilla::css::Rule)
|
||||
if (tmp->mDOMDeclaration) {
|
||||
tmp->mDOMDeclaration->DropReference();
|
||||
tmp->mDOMDeclaration = nullptr;
|
||||
}
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_END
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(nsCSSKeyframeRule)
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(nsCSSKeyframeRule, mozilla::css::Rule)
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mDOMDeclaration)
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
|
||||
|
||||
bool
|
||||
nsCSSKeyframeRule::IsCCLeaf() const
|
||||
{
|
||||
// Let's not worry about figuring out whether we're a leaf or not.
|
||||
return false;
|
||||
}
|
||||
|
||||
// QueryInterface implementation for nsCSSKeyframeRule
|
||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsCSSKeyframeRule)
|
||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(nsCSSKeyframeRule)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIDOMCSSKeyframeRule)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIDOMCSSRule)
|
||||
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, mozilla::css::Rule)
|
||||
NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(CSSKeyframeRule)
|
||||
NS_INTERFACE_MAP_END
|
||||
NS_INTERFACE_MAP_END_INHERITING(mozilla::css::Rule)
|
||||
|
||||
IMPL_STYLE_RULE_INHERIT_GET_DOM_RULE_WEAK(nsCSSKeyframeRule, Rule)
|
||||
|
||||
|
|
@ -2263,7 +2352,6 @@ NS_IMPL_RELEASE_INHERITED(nsCSSKeyframesRule, css::GroupRule)
|
|||
NS_INTERFACE_MAP_BEGIN(nsCSSKeyframesRule)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIDOMCSSRule)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIDOMCSSKeyframesRule)
|
||||
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, mozilla::css::Rule)
|
||||
NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(CSSKeyframesRule)
|
||||
NS_INTERFACE_MAP_END_INHERITING(GroupRule)
|
||||
|
||||
|
|
@ -2594,28 +2682,35 @@ nsCSSPageRule::Clone() const
|
|||
return clone.forget();
|
||||
}
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTING_ADDREF(nsCSSPageRule)
|
||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(nsCSSPageRule)
|
||||
NS_IMPL_ADDREF_INHERITED(nsCSSPageRule, mozilla::css::Rule)
|
||||
NS_IMPL_RELEASE_INHERITED(nsCSSPageRule, mozilla::css::Rule)
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_CLASS(nsCSSPageRule)
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(nsCSSPageRule)
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(nsCSSPageRule, mozilla::css::Rule)
|
||||
if (tmp->mDOMDeclaration) {
|
||||
tmp->mDOMDeclaration->DropReference();
|
||||
tmp->mDOMDeclaration = nullptr;
|
||||
}
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_END
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(nsCSSPageRule)
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(nsCSSPageRule, mozilla::css::Rule)
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mDOMDeclaration)
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
|
||||
|
||||
bool
|
||||
nsCSSPageRule::IsCCLeaf() const
|
||||
{
|
||||
// Let's not worry about figuring out whether we're a leaf or not.
|
||||
return false;
|
||||
}
|
||||
|
||||
// QueryInterface implementation for nsCSSPageRule
|
||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsCSSPageRule)
|
||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(nsCSSPageRule)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIDOMCSSPageRule)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIDOMCSSRule)
|
||||
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, mozilla::css::Rule)
|
||||
NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(CSSPageRule)
|
||||
NS_INTERFACE_MAP_END
|
||||
NS_INTERFACE_MAP_END_INHERITING(mozilla::css::Rule)
|
||||
|
||||
IMPL_STYLE_RULE_INHERIT_GET_DOM_RULE_WEAK(nsCSSPageRule, Rule)
|
||||
|
||||
|
|
@ -2786,7 +2881,6 @@ NS_INTERFACE_MAP_BEGIN(CSSSupportsRule)
|
|||
NS_INTERFACE_MAP_ENTRY(nsIDOMCSSGroupingRule)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIDOMCSSConditionRule)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIDOMCSSSupportsRule)
|
||||
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, mozilla::css::Rule)
|
||||
NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(CSSSupportsRule)
|
||||
NS_INTERFACE_MAP_END_INHERITING(GroupRule)
|
||||
|
||||
|
|
@ -2907,16 +3001,23 @@ nsCSSCounterStyleRule::kGetters[] = {
|
|||
#undef CSS_COUNTER_DESC
|
||||
};
|
||||
|
||||
NS_IMPL_ADDREF(nsCSSCounterStyleRule)
|
||||
NS_IMPL_RELEASE(nsCSSCounterStyleRule)
|
||||
NS_IMPL_ADDREF_INHERITED(nsCSSCounterStyleRule, mozilla::css::Rule)
|
||||
NS_IMPL_RELEASE_INHERITED(nsCSSCounterStyleRule, mozilla::css::Rule)
|
||||
|
||||
// QueryInterface implementation for nsCSSCounterStyleRule
|
||||
// If this ever gets its own cycle-collection bits, reevaluate our IsCCLeaf
|
||||
// implementation.
|
||||
NS_INTERFACE_MAP_BEGIN(nsCSSCounterStyleRule)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIDOMCSSRule)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIDOMCSSCounterStyleRule)
|
||||
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, mozilla::css::Rule)
|
||||
NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(CSSCounterStyleRule)
|
||||
NS_INTERFACE_MAP_END
|
||||
NS_INTERFACE_MAP_END_INHERITING(mozilla::css::Rule)
|
||||
|
||||
bool
|
||||
nsCSSCounterStyleRule::IsCCLeaf() const
|
||||
{
|
||||
return Rule::IsCCLeaf();
|
||||
}
|
||||
|
||||
IMPL_STYLE_RULE_INHERIT(nsCSSCounterStyleRule, css::Rule)
|
||||
|
||||
|
|
|
|||
|
|
@ -248,9 +248,9 @@ public:
|
|||
// copy everything except our reference count
|
||||
: mozilla::css::Rule(aCopy), mDecl(aCopy.mDecl) {}
|
||||
|
||||
NS_DECL_CYCLE_COLLECTING_ISUPPORTS
|
||||
NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_AMBIGUOUS(nsCSSFontFaceRule,
|
||||
mozilla::css::Rule)
|
||||
NS_DECL_ISUPPORTS_INHERITED
|
||||
NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_INHERITED(nsCSSFontFaceRule, mozilla::css::Rule)
|
||||
virtual bool IsCCLeaf() const override;
|
||||
|
||||
// Rule methods
|
||||
DECL_STYLE_RULE_INHERIT
|
||||
|
|
@ -315,7 +315,8 @@ public:
|
|||
mFamilyList(aCopy.mFamilyList),
|
||||
mFeatureValues(aCopy.mFeatureValues) {}
|
||||
|
||||
NS_DECL_ISUPPORTS
|
||||
NS_DECL_ISUPPORTS_INHERITED
|
||||
virtual bool IsCCLeaf() const override;
|
||||
|
||||
// Rule methods
|
||||
DECL_STYLE_RULE_INHERIT
|
||||
|
|
@ -398,8 +399,9 @@ private:
|
|||
nsCSSKeyframeRule(const nsCSSKeyframeRule& aCopy);
|
||||
~nsCSSKeyframeRule();
|
||||
public:
|
||||
NS_DECL_CYCLE_COLLECTING_ISUPPORTS
|
||||
NS_DECL_CYCLE_COLLECTION_CLASS_AMBIGUOUS(nsCSSKeyframeRule, mozilla::css::Rule)
|
||||
NS_DECL_ISUPPORTS_INHERITED
|
||||
NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(nsCSSKeyframeRule, mozilla::css::Rule)
|
||||
virtual bool IsCCLeaf() const override;
|
||||
|
||||
// Rule methods
|
||||
DECL_STYLE_RULE_INHERIT
|
||||
|
|
@ -526,8 +528,9 @@ private:
|
|||
nsCSSPageRule(const nsCSSPageRule& aCopy);
|
||||
~nsCSSPageRule();
|
||||
public:
|
||||
NS_DECL_CYCLE_COLLECTING_ISUPPORTS
|
||||
NS_DECL_CYCLE_COLLECTION_CLASS_AMBIGUOUS(nsCSSPageRule, nsIDOMCSSPageRule)
|
||||
NS_DECL_ISUPPORTS_INHERITED
|
||||
NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(nsCSSPageRule, mozilla::css::Rule)
|
||||
virtual bool IsCCLeaf() const override;
|
||||
|
||||
// Rule methods
|
||||
DECL_STYLE_RULE_INHERIT
|
||||
|
|
@ -623,7 +626,8 @@ private:
|
|||
~nsCSSCounterStyleRule();
|
||||
|
||||
public:
|
||||
NS_DECL_ISUPPORTS
|
||||
NS_DECL_ISUPPORTS_INHERITED
|
||||
virtual bool IsCCLeaf() const override;
|
||||
|
||||
// Rule methods
|
||||
DECL_STYLE_RULE_INHERIT
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue