Bug 1203813 - Make nsHelperAppDlg dialog be parented by top-level nsIDOMWindow. r?mrbkap draft
authorMike Conley <mconley@mozilla.com>
Thu, 27 Oct 2016 02:47:32 -0400
changeset 430126 c36f3543c55775953801686ee4f43b59f0e3d598
parent 429874 0b4193f7735b94308e97103adfbe7200d72524c0
child 535129 8f9eab74b1623a86dc1661fdf1161d1664132f8a
push id33744
push usermconley@mozilla.com
push dateThu, 27 Oct 2016 06:48:09 +0000
reviewersmrbkap
bugs1203813
milestone52.0a1
Bug 1203813 - Make nsHelperAppDlg dialog be parented by top-level nsIDOMWindow. r?mrbkap MozReview-Commit-ID: LUK01OptZgG
toolkit/mozapps/downloads/nsHelperAppDlg.js
--- a/toolkit/mozapps/downloads/nsHelperAppDlg.js
+++ b/toolkit/mozapps/downloads/nsHelperAppDlg.js
@@ -158,21 +158,25 @@ nsUnknownContentTypeDialog.prototype = {
   },
 
   // When opening from new tab, if tab closes while dialog is opening,
   // (which is a race condition on the XUL file being cached and the timer
   // in nsExternalHelperAppService), the dialog gets a blur and doesn't
   // activate the OK button.  So we wait a bit before doing opening it.
   reallyShow: function() {
     try {
-      var ir = this.mContext.QueryInterface(Components.interfaces.nsIInterfaceRequestor);
-      var dwi = ir.getInterface(Components.interfaces.nsIDOMWindow);
-      var ww = Components.classes["@mozilla.org/embedcomp/window-watcher;1"]
+      let ir = this.mContext.QueryInterface(Components.interfaces.nsIInterfaceRequestor);
+      let docShell = ir.getInterface(Components.interfaces.nsIDocShell);
+      let rootWin = docShell.QueryInterface(Ci.nsIDocShellTreeItem)
+                                 .rootTreeItem
+                                 .QueryInterface(Ci.nsIInterfaceRequestor)
+                                 .getInterface(Ci.nsIDOMWindow);
+      let ww = Components.classes["@mozilla.org/embedcomp/window-watcher;1"]
                          .getService(Components.interfaces.nsIWindowWatcher);
-      this.mDialog = ww.openWindow(dwi,
+      this.mDialog = ww.openWindow(rootWin,
                                    "chrome://mozapps/content/downloads/unknownContentType.xul",
                                    null,
                                    "chrome,centerscreen,titlebar,dialog=yes,dependent",
                                    null);
     } catch (ex) {
       // The containing window may have gone away.  Break reference
       // cycles and stop doing the download.
       this.mLauncher.cancel(Components.results.NS_BINDING_ABORTED);