mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-27 21:00:50 +00:00
Bug 1318506 - Label AsyncEventDispatcher runnables with DocGroup (r=ehsan)
I still don't completely understand why we sometimes need to use the global and sometimes the node. As far as I understand it: - Not all event targets are nodes, so the node code can't always be used. - The nsINode::GetOwnerGlobal implementation uses GetScriptHandlingObject, which returns null in some cases where GetScopeObject doesn't. Here is one: http://searchfox.org/mozilla-central/rev/62db1c9021cfbde9fa5e6e9601de16c21f4c7ce4/dom/base/nsDocument.cpp#4627 MozReview-Commit-ID: DdLWeQJIWZx
This commit is contained in:
parent
563f66dae7
commit
e4426ae30f
@ -66,6 +66,18 @@ nsresult
|
||||
AsyncEventDispatcher::PostDOMEvent()
|
||||
{
|
||||
RefPtr<AsyncEventDispatcher> ensureDeletionWhenFailing = this;
|
||||
if (NS_IsMainThread()) {
|
||||
if (nsCOMPtr<nsIGlobalObject> global = mTarget->GetOwnerGlobal()) {
|
||||
return global->Dispatch("AsyncEvent", TaskCategory::Other, ensureDeletionWhenFailing.forget());
|
||||
}
|
||||
|
||||
// Sometimes GetOwnerGlobal returns null because it uses
|
||||
// GetScriptHandlingObject rather than GetScopeObject.
|
||||
if (nsCOMPtr<nsINode> node = do_QueryInterface(mTarget)) {
|
||||
nsCOMPtr<nsIDocument> doc = node->OwnerDoc();
|
||||
return doc->Dispatch("AsyncEvent", TaskCategory::Other, ensureDeletionWhenFailing.forget());
|
||||
}
|
||||
}
|
||||
return NS_DispatchToCurrentThread(this);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user