forked from mirrors/gecko-dev
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:
parent
e9cbe9727b
commit
4f13dddba3
2 changed files with 12 additions and 0 deletions
|
|
@ -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);
|
||||
});
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
});
|
||||
|
|
|
|||
Loading…
Reference in a new issue