зеркало из https://github.com/mozilla/gecko-dev.git
Bug 793517 - Make nsDOMEventTargetHelper to unmark listeners during canSkip, r=mccr8
This commit is contained in:
Родитель
2dfcb99d63
Коммит
9b91f77333
|
@ -43,6 +43,23 @@ NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(nsDOMEventTargetHelper)
|
||||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_NSCOMPTR(mListenerManager)
|
NS_IMPL_CYCLE_COLLECTION_UNLINK_NSCOMPTR(mListenerManager)
|
||||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_END
|
NS_IMPL_CYCLE_COLLECTION_UNLINK_END
|
||||||
|
|
||||||
|
NS_IMPL_CYCLE_COLLECTION_CAN_SKIP_BEGIN(nsDOMEventTargetHelper)
|
||||||
|
if (tmp->IsBlack()) {
|
||||||
|
if (tmp->mListenerManager) {
|
||||||
|
tmp->mListenerManager->UnmarkGrayJSListeners();
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
NS_IMPL_CYCLE_COLLECTION_CAN_SKIP_END
|
||||||
|
|
||||||
|
NS_IMPL_CYCLE_COLLECTION_CAN_SKIP_IN_CC_BEGIN(nsDOMEventTargetHelper)
|
||||||
|
return tmp->IsBlack();
|
||||||
|
NS_IMPL_CYCLE_COLLECTION_CAN_SKIP_IN_CC_END
|
||||||
|
|
||||||
|
NS_IMPL_CYCLE_COLLECTION_CAN_SKIP_THIS_BEGIN(nsDOMEventTargetHelper)
|
||||||
|
return tmp->IsBlack();
|
||||||
|
NS_IMPL_CYCLE_COLLECTION_CAN_SKIP_THIS_END
|
||||||
|
|
||||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsDOMEventTargetHelper)
|
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsDOMEventTargetHelper)
|
||||||
NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY
|
NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY
|
||||||
NS_INTERFACE_MAP_ENTRY(nsISupports)
|
NS_INTERFACE_MAP_ENTRY(nsISupports)
|
||||||
|
|
|
@ -26,7 +26,7 @@ public:
|
||||||
nsDOMEventTargetHelper() : mOwner(nullptr), mHasOrHasHadOwner(false) {}
|
nsDOMEventTargetHelper() : mOwner(nullptr), mHasOrHasHadOwner(false) {}
|
||||||
virtual ~nsDOMEventTargetHelper();
|
virtual ~nsDOMEventTargetHelper();
|
||||||
NS_DECL_CYCLE_COLLECTING_ISUPPORTS
|
NS_DECL_CYCLE_COLLECTING_ISUPPORTS
|
||||||
NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(nsDOMEventTargetHelper)
|
NS_DECL_CYCLE_COLLECTION_SKIPPABLE_SCRIPT_HOLDER_CLASS(nsDOMEventTargetHelper)
|
||||||
|
|
||||||
NS_DECL_NSIDOMEVENTTARGET
|
NS_DECL_NSIDOMEVENTTARGET
|
||||||
void AddEventListener(const nsAString& aType,
|
void AddEventListener(const nsAString& aType,
|
||||||
|
|
|
@ -70,7 +70,16 @@ NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(nsJSEventListener)
|
||||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_NSCOMPTR(mContext)
|
NS_IMPL_CYCLE_COLLECTION_UNLINK_NSCOMPTR(mContext)
|
||||||
}
|
}
|
||||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_END
|
NS_IMPL_CYCLE_COLLECTION_UNLINK_END
|
||||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(nsJSEventListener)
|
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INTERNAL(nsJSEventListener)
|
||||||
|
if (NS_UNLIKELY(cb.WantDebugInfo()) && tmp->mEventName) {
|
||||||
|
nsAutoCString name;
|
||||||
|
name.AppendLiteral("nsJSEventListener handlerName=");
|
||||||
|
name.Append(
|
||||||
|
NS_ConvertUTF16toUTF8(nsDependentAtomString(tmp->mEventName)).get());
|
||||||
|
cb.DescribeRefCountedNode(tmp->mRefCnt.get(), name.get());
|
||||||
|
} else {
|
||||||
|
NS_IMPL_CYCLE_COLLECTION_DESCRIBE(nsJSEventListener, tmp->mRefCnt.get())
|
||||||
|
}
|
||||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR(mContext)
|
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR(mContext)
|
||||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_SCRIPT_OBJECTS
|
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_SCRIPT_OBJECTS
|
||||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
|
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
|
||||||
|
|
Загрузка…
Ссылка в новой задаче