Bug 990160 - Cycle collect nsCSSRuleProcessor. r=bz

This commit is contained in:
Andrew McCreight 2014-06-19 14:36:53 -07:00
parent 303b54cc27
commit 368491119e
2 changed files with 30 additions and 4 deletions

View File

@ -1103,16 +1103,39 @@ nsCSSRuleProcessor::nsCSSRuleProcessor(const sheet_array_type& aSheets,
}
nsCSSRuleProcessor::~nsCSSRuleProcessor()
{
ClearSheets();
ClearRuleCascades();
}
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsCSSRuleProcessor)
NS_INTERFACE_MAP_ENTRY(nsIStyleRuleProcessor)
NS_INTERFACE_MAP_END
NS_IMPL_CYCLE_COLLECTING_ADDREF(nsCSSRuleProcessor)
NS_IMPL_CYCLE_COLLECTING_RELEASE(nsCSSRuleProcessor)
NS_IMPL_CYCLE_COLLECTION_CLASS(nsCSSRuleProcessor)
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(nsCSSRuleProcessor)
tmp->ClearSheets();
NS_IMPL_CYCLE_COLLECTION_UNLINK(mScopeElement)
NS_IMPL_CYCLE_COLLECTION_UNLINK_END
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(nsCSSRuleProcessor)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mSheets)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mScopeElement)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
void
nsCSSRuleProcessor::ClearSheets()
{
for (sheet_array_type::size_type i = mSheets.Length(); i-- != 0; ) {
mSheets[i]->DropRuleProcessor(this);
}
mSheets.Clear();
ClearRuleCascades();
}
NS_IMPL_ISUPPORTS(nsCSSRuleProcessor, nsIStyleRuleProcessor)
/* static */ nsresult
nsCSSRuleProcessor::Startup()
{

View File

@ -53,7 +53,8 @@ public:
mozilla::dom::Element* aScopeElement);
virtual ~nsCSSRuleProcessor();
NS_DECL_ISUPPORTS
NS_DECL_CYCLE_COLLECTING_ISUPPORTS
NS_DECL_CYCLE_COLLECTION_CLASS(nsCSSRuleProcessor)
public:
nsresult ClearRuleCascades();
@ -182,6 +183,8 @@ private:
nsCSSPseudoElements::Type aPseudoType,
mozilla::EventStates aStateMask);
void ClearSheets();
// The sheet order here is the same as in nsStyleSet::mSheets
sheet_array_type mSheets;