Bug 1342927 - Don't fire MozTabChildNotReady if DocShell has become inactive or frameloader owner has dropped us. r?billm
MozReview-Commit-ID: 4lU5iFFv13V
--- a/dom/ipc/TabParent.cpp
+++ b/dom/ipc/TabParent.cpp
@@ -3347,16 +3347,36 @@ TabParent::DispatchTabChildNotReadyEvent
if (mHasPresented) {
// We shouldn't dispatch this event because clearly the
// TabChild _became_ ready by the time we were told to
// dispatch.
return;
}
+ if (!mDocShellIsActive) {
+ return;
+ }
+
+ RefPtr<nsFrameLoader> frameLoader = GetFrameLoader(true);
+ if (!frameLoader) {
+ return;
+ }
+
+ nsCOMPtr<Element> frameElement(mFrameElement);
+ nsCOMPtr<nsIFrameLoaderOwner> owner = do_QueryInterface(frameElement);
+ if (!owner) {
+ return;
+ }
+
+ RefPtr<nsFrameLoader> currentFrameLoader = owner->GetFrameLoader();
+ if (currentFrameLoader != frameLoader) {
+ return;
+ }
+
RefPtr<Event> event = NS_NewDOMEvent(mFrameElement, nullptr, nullptr);
event->InitEvent(NS_LITERAL_STRING("MozTabChildNotReady"), true, false);
event->SetTrusted(true);
event->WidgetEventPtr()->mFlags.mOnlyChromeDispatch = true;
bool dummy;
mFrameElement->DispatchEvent(event, &dummy);
}