Bug 1342927 - Don't fire MozTabChildNotReady if DocShell has become inactive or frameloader owner has dropped us. r?billm draft
authorMike Conley <mconley@mozilla.com>
Sun, 05 Mar 2017 13:25:42 -0500
changeset 494221 9c87296aae382c6813d32358aa59b82531a403cf
parent 494170 92536597298844d18f16541341030afe3c790a0f
child 494222 195fa092e0f24add5bc97a26982dcad0084e900c
push id47973
push usermconley@mozilla.com
push dateMon, 06 Mar 2017 21:13:44 +0000
reviewersbillm
bugs1342927
milestone54.0a1
Bug 1342927 - Don't fire MozTabChildNotReady if DocShell has become inactive or frameloader owner has dropped us. r?billm MozReview-Commit-ID: 4lU5iFFv13V
dom/ipc/TabParent.cpp
--- 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);
 }