From 9453c52c9ac9ba64b09e39bd8b936af5b2c86b62 Mon Sep 17 00:00:00 2001 From: Cameron Kaiser Date: Mon, 15 Jan 2018 21:02:48 -0800 Subject: [PATCH] #457: M1412145 --- layout/style/nsCSSRules.cpp | 32 +++++++++++++++++++++++++++++--- layout/style/nsCSSRules.h | 1 + 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/layout/style/nsCSSRules.cpp b/layout/style/nsCSSRules.cpp index d4bf6029e..53a0aa1fb 100644 --- a/layout/style/nsCSSRules.cpp +++ b/layout/style/nsCSSRules.cpp @@ -210,8 +210,6 @@ ImportRule::~ImportRule() NS_IMPL_CYCLE_COLLECTING_ADDREF(ImportRule) NS_IMPL_CYCLE_COLLECTING_RELEASE(ImportRule) -NS_IMPL_CYCLE_COLLECTION(ImportRule, mMedia, mChildSheet) - // QueryInterface implementation for ImportRule NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(ImportRule) NS_INTERFACE_MAP_ENTRY(nsIDOMCSSRule) @@ -222,6 +220,21 @@ NS_INTERFACE_MAP_END IMPL_STYLE_RULE_INHERIT(ImportRule, Rule) +NS_IMPL_CYCLE_COLLECTION_CLASS(ImportRule) + +NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(ImportRule) + if (tmp->mChildSheet) { + tmp->mChildSheet->SetOwnerRule(nullptr); + tmp->mChildSheet = nullptr; + } + tmp->mMedia = nullptr; +NS_IMPL_CYCLE_COLLECTION_UNLINK_END + +NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(ImportRule) + NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mMedia) + NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mChildSheet) +NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END + #ifdef DEBUG /* virtual */ void ImportRule::List(FILE* out, int32_t aIndent) const @@ -611,7 +624,7 @@ NS_IMPL_ADDREF_INHERITED(MediaRule, GroupRule) NS_IMPL_RELEASE_INHERITED(MediaRule, GroupRule) // QueryInterface implementation for MediaRule -NS_INTERFACE_MAP_BEGIN(MediaRule) +NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(MediaRule) NS_INTERFACE_MAP_ENTRY(nsIDOMCSSRule) NS_INTERFACE_MAP_ENTRY(nsIDOMCSSGroupingRule) NS_INTERFACE_MAP_ENTRY(nsIDOMCSSConditionRule) @@ -620,6 +633,19 @@ NS_INTERFACE_MAP_BEGIN(MediaRule) 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 + /* virtual */ void MediaRule::SetStyleSheet(CSSStyleSheet* aSheet) { diff --git a/layout/style/nsCSSRules.h b/layout/style/nsCSSRules.h index 1c0e22894..1bc0de60b 100644 --- a/layout/style/nsCSSRules.h +++ b/layout/style/nsCSSRules.h @@ -53,6 +53,7 @@ private: ~MediaRule(); public: + NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(MediaRule, GroupRule) NS_DECL_ISUPPORTS_INHERITED // Rule methods