Bug 880101 - part 1 - Add test that forces the gBrowser constructor a little too early; r=gavin

This commit is contained in:
Tim Taubert 2013-08-09 04:51:27 +02:00
parent 1a0d4f30d2
commit 7576aec33a
2 changed files with 51 additions and 0 deletions

View File

@ -184,6 +184,7 @@ MOCHITEST_BROWSER_FILES = \
browser_bug822367.js \
browser_bug832435.js \
browser_bug839103.js \
browser_bug880101.js \
browser_bug882977.js \
browser_bug887515.js \
browser_canonizeURL.js \

View File

@ -0,0 +1,50 @@
/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */
const URL = "about:robots";
function test() {
let win;
let listener = {
onLocationChange: (webProgress, request, uri, flags) => {
ok(webProgress.isTopLevel, "Received onLocationChange from top frame");
is(uri.spec, URL, "Received onLocationChange for correct URL");
finish();
}
};
waitForExplicitFinish();
// Remove the listener and window when we're done.
registerCleanupFunction(() => {
win.gBrowser.removeProgressListener(listener);
win.close();
});
// Wait for the newly opened window.
whenNewWindowOpened(w => win = w);
// Open a link in a new window.
openLinkIn(URL, "window", {});
// On the next tick, but before the window has finished loading, access the
// window's gBrowser property to force the tabbrowser constructor early.
(function tryAddProgressListener() {
executeSoon(() => {
try {
win.gBrowser.addProgressListener(listener);
} catch (e) {
// win.gBrowser wasn't ready, yet. Try again in a tick.
tryAddProgressListener();
}
});
})();
}
function whenNewWindowOpened(cb) {
Services.obs.addObserver(function obs(win) {
Services.obs.removeObserver(obs, "domwindowopened");
cb(win);
}, "domwindowopened", false);
}