Bug 1355354 - Keep a reference to the progress listener to keep it from being gc'ed prematurely. r=mossop

MozReview-Commit-ID: A6WM1Bj3Z5L

--HG--
extra : rebase_source : d4c7d43ca1bc16149ee532c5ab2bf0739bc5011d
This commit is contained in:
Brendan Dahl 2018-01-16 11:26:40 -08:00
parent e9cbe9727b
commit 4f13dddba3
2 changed files with 12 additions and 0 deletions

View file

@ -12,6 +12,10 @@ Components.utils.import("resource://gre/modules/osfile.jsm");
const Ci = Components.interfaces;
// Refrences to the progress listeners to keep them from being gc'ed
// before they are called.
const progressListeners = new Map();
function loadContentWindow(webNavigation, uri) {
return new Promise((resolve, reject) => {
webNavigation.loadURI(uri, Ci.nsIWebNavigation.LOAD_FLAGS_NONE, null, null, null);
@ -31,6 +35,7 @@ function loadContentWindow(webNavigation, uri) {
}
let contentWindow = docShell.QueryInterface(Ci.nsIInterfaceRequestor)
.getInterface(Ci.nsIDOMWindow);
progressListeners.delete(progressListener);
webProgress.removeProgressListener(progressListener);
contentWindow.addEventListener("load", (event) => {
resolve(contentWindow);
@ -39,6 +44,7 @@ function loadContentWindow(webNavigation, uri) {
QueryInterface: XPCOMUtils.generateQI(["nsIWebProgressListener",
"nsISupportsWeakReference"])
};
progressListeners.set(progressListener, progressListener);
webProgress.addProgressListener(progressListener,
Ci.nsIWebProgress.NOTIFY_LOCATION);
});

View file

@ -15,6 +15,10 @@ const HEADLESS_URL = `${BASE}/headless.html`;
const HEADLESS_BUTTON_URL = `${BASE}/headless_button.html`;
registerCleanupFunction(() => { server.stop(() => {})});
// Refrences to the progress listeners to keep them from being gc'ed
// before they are called.
const progressListeners = new Map();
function loadContentWindow(webNavigation, uri) {
return new Promise((resolve, reject) => {
webNavigation.loadURI(uri, Ci.nsIWebNavigation.LOAD_FLAGS_NONE, null, null, null);
@ -37,6 +41,7 @@ function loadContentWindow(webNavigation, uri) {
let contentWindow = docShell.QueryInterface(Ci.nsIInterfaceRequestor)
.getInterface(Ci.nsIDOMWindow);
webProgress.removeProgressListener(progressListener);
progressListeners.delete(progressListener);
contentWindow.addEventListener("load", (event) => {
resolve(contentWindow);
}, { once: true });
@ -44,6 +49,7 @@ function loadContentWindow(webNavigation, uri) {
QueryInterface: XPCOMUtils.generateQI(["nsIWebProgressListener",
"nsISupportsWeakReference"])
};
progressListeners.set(progressListener, progressListener);
webProgress.addProgressListener(progressListener,
Ci.nsIWebProgress.NOTIFY_LOCATION);
});