From 377e85efedad396373852e98f5c346ca32f4cd44 Mon Sep 17 00:00:00 2001 From: Kris Maglione Date: Mon, 30 Nov 2015 17:56:01 -0800 Subject: [PATCH] Bug 1193837: Part 1 - Cache the last known inner window ID of remote browsers in parent process. r=billm --- toolkit/content/browser-child.js | 16 +++++++++++----- toolkit/content/widgets/browser.xml | 17 +++++++++++++++++ toolkit/content/widgets/remote-browser.xml | 7 +++++++ toolkit/modules/RemoteWebProgress.jsm | 1 + 4 files changed, 36 insertions(+), 5 deletions(-) diff --git a/toolkit/content/browser-child.js b/toolkit/content/browser-child.js index 327851e4896..11aca00401e 100644 --- a/toolkit/content/browser-child.js +++ b/toolkit/content/browser-child.js @@ -55,14 +55,19 @@ var WebProgressListener = { }, _setupJSON: function setupJSON(aWebProgress, aRequest) { + let innerWindowID = null; if (aWebProgress) { - let domWindowID; + let domWindowID = null; try { - domWindowID = aWebProgress && aWebProgress.DOMWindowID; + let utils = aWebProgress.DOMWindow.QueryInterface(Ci.nsIInterfaceRequestor) + .getInterface(Ci.nsIDOMWindowUtils); + domWindowID = utils.outerWindowID; + innerWindowID = utils.currentInnerWindowID; } catch (e) { // If nsDocShell::Destroy has already been called, then we'll - // get NS_NOINTERFACE when trying to get the DOM window ID. - domWindowID = null; + // get NS_NOINTERFACE when trying to get the DOM window. + // If there is no current inner window, we'll get + // NS_ERROR_NOT_AVAILABLE. } aWebProgress = { @@ -77,7 +82,8 @@ var WebProgressListener = { webProgress: aWebProgress || null, requestURI: this._requestSpec(aRequest, "URI"), originalRequestURI: this._requestSpec(aRequest, "originalURI"), - documentContentType: content.document && content.document.contentType + documentContentType: content.document && content.document.contentType, + innerWindowID, }; }, diff --git a/toolkit/content/widgets/browser.xml b/toolkit/content/widgets/browser.xml index 6d64b39acf1..328be7e146c 100644 --- a/toolkit/content/widgets/browser.xml +++ b/toolkit/content/widgets/browser.xml @@ -420,6 +420,22 @@ ]]> + + + + null false @@ -1181,6 +1197,7 @@ "_fullZoom", "_textZoom", "_isSyntheticDocument", + "_innerWindowID", ]); } diff --git a/toolkit/content/widgets/remote-browser.xml b/toolkit/content/widgets/remote-browser.xml index 70f913e103e..b1763640ed7 100644 --- a/toolkit/content/widgets/remote-browser.xml +++ b/toolkit/content/widgets/remote-browser.xml @@ -212,6 +212,13 @@ onget="return this._outerWindowID" readonly="true"/> + null + + + + diff --git a/toolkit/modules/RemoteWebProgress.jsm b/toolkit/modules/RemoteWebProgress.jsm index 8a5b8193df9..4cae1d76be3 100644 --- a/toolkit/modules/RemoteWebProgress.jsm +++ b/toolkit/modules/RemoteWebProgress.jsm @@ -235,6 +235,7 @@ RemoteWebProgressManager.prototype = { this._browser._mayEnableCharacterEncodingMenu = json.mayEnableCharacterEncodingMenu; this._browser._contentPrincipal = json.principal; this._browser._isSyntheticDocument = json.synthetic; + this._browser._innerWindowID = json.innerWindowID; } this._callProgressListeners("onLocationChange", webProgress, request, location, flags);