mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-08 10:44:56 +00:00
Bug 1286183 - Improve SVGEffects' unlinking. r=mstange
This commit is contained in:
parent
0f6e33eb43
commit
ef55583835
@ -238,7 +238,16 @@ nsSVGRenderingObserverProperty::DoUpdate()
|
||||
NS_IMPL_CYCLE_COLLECTING_ADDREF(nsSVGFilterReference)
|
||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(nsSVGFilterReference)
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION(nsSVGFilterReference, mElement)
|
||||
NS_IMPL_CYCLE_COLLECTION_CLASS(nsSVGFilterReference)
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(nsSVGFilterReference)
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mElement)
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(nsSVGFilterReference)
|
||||
tmp->StopListening();
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(mElement);
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_END
|
||||
|
||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsSVGFilterReference)
|
||||
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsSVGIDRenderingObserver)
|
||||
@ -266,12 +275,21 @@ nsSVGFilterReference::DoUpdate()
|
||||
NS_IMPL_CYCLE_COLLECTING_ADDREF(nsSVGFilterChainObserver)
|
||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(nsSVGFilterChainObserver)
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_CLASS(nsSVGFilterChainObserver)
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(nsSVGFilterChainObserver)
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mReferences)
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(nsSVGFilterChainObserver)
|
||||
tmp->DetachReferences();
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(mReferences);
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_END
|
||||
|
||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsSVGFilterChainObserver)
|
||||
NS_INTERFACE_MAP_ENTRY(nsISupports)
|
||||
NS_INTERFACE_MAP_END
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION(nsSVGFilterChainObserver, mReferences)
|
||||
|
||||
nsSVGFilterChainObserver::nsSVGFilterChainObserver(const nsTArray<nsStyleFilter>& aFilters,
|
||||
nsIContent* aFilteredElement)
|
||||
{
|
||||
@ -287,9 +305,7 @@ nsSVGFilterChainObserver::nsSVGFilterChainObserver(const nsTArray<nsStyleFilter>
|
||||
|
||||
nsSVGFilterChainObserver::~nsSVGFilterChainObserver()
|
||||
{
|
||||
for (uint32_t i = 0; i < mReferences.Length(); i++) {
|
||||
mReferences[i]->DetachFromChainObserver();
|
||||
}
|
||||
DetachReferences();
|
||||
}
|
||||
|
||||
bool
|
||||
|
@ -271,6 +271,14 @@ protected:
|
||||
virtual void DoUpdate() = 0;
|
||||
|
||||
private:
|
||||
|
||||
void DetachReferences()
|
||||
{
|
||||
for (uint32_t i = 0; i < mReferences.Length(); i++) {
|
||||
mReferences[i]->DetachFromChainObserver();
|
||||
}
|
||||
}
|
||||
|
||||
nsTArray<RefPtr<nsSVGFilterReference>> mReferences;
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user