Source code

Revision control

Copy as Markdown

Other Tools

/* Any copyright is dedicated to the Public Domain.
/**
* Helper function for encoding override tests, loads URL, runs check1,
* forces encoding detection, runs check2.
*/
function runCharsetTest(url, check1, check2) {
waitForExplicitFinish();
BrowserTestUtils.openNewForegroundTab(gBrowser, url, true).then(afterOpen);
function afterOpen() {
BrowserTestUtils.browserLoaded(gBrowser.selectedBrowser).then(
afterChangeCharset
);
SpecialPowers.spawn(gBrowser.selectedBrowser, [], check1).then(() => {
BrowserCommands.forceEncodingDetection();
});
}
function afterChangeCharset() {
SpecialPowers.spawn(gBrowser.selectedBrowser, [], check2).then(() => {
gBrowser.removeCurrentTab();
finish();
});
}
}
/**
* Helper function for charset tests. It loads |url| in a new tab,
* runs |check|.
*/
function runCharsetCheck(url, check) {
waitForExplicitFinish();
BrowserTestUtils.openNewForegroundTab(gBrowser, url, true).then(afterOpen);
function afterOpen() {
SpecialPowers.spawn(gBrowser.selectedBrowser, [], check).then(() => {
gBrowser.removeCurrentTab();
finish();
});
}
}
async function pushState(url, frameId) {
info(
`Doing a pushState, expecting to load ${url} ${
frameId ? "in an iframe" : ""
}`
);
let browser = gBrowser.selectedBrowser;
let bc = browser.browsingContext;
if (frameId) {
bc = await SpecialPowers.spawn(bc, [frameId], function (id) {
return content.document.getElementById(id).browsingContext;
});
}
let loaded = BrowserTestUtils.waitForLocationChange(gBrowser, url);
await SpecialPowers.spawn(bc, [url], function (url) {
content.history.pushState({}, "", url);
});
await loaded;
info(`Loaded ${url} ${frameId ? "in an iframe" : ""}`);
}
async function loadURI(url) {
info(`Doing a top-level loadURI, expecting to load ${url}`);
let browser = gBrowser.selectedBrowser;
let loaded = BrowserTestUtils.browserLoaded(browser, false, url);
BrowserTestUtils.startLoadingURIString(browser, url);
await loaded;
info(`Loaded ${url}`);
}
async function followLink(url, frameId) {
info(
`Creating and following a link to ${url} ${frameId ? "in an iframe" : ""}`
);
let browser = gBrowser.selectedBrowser;
let bc = browser.browsingContext;
if (frameId) {
bc = await SpecialPowers.spawn(bc, [frameId], function (id) {
return content.document.getElementById(id).browsingContext;
});
}
let loaded = BrowserTestUtils.browserLoaded(browser, !!frameId, url);
await SpecialPowers.spawn(bc, [url], function (url) {
let a = content.document.createElement("a");
a.href = url;
content.document.body.appendChild(a);
a.click();
});
await loaded;
info(`Loaded ${url} ${frameId ? "in an iframe" : ""}`);
}
async function goForward(url, useFrame = false) {
info(
`Clicking the forward button, expecting to load ${url} ${
useFrame ? "in an iframe" : ""
}`
);
let loaded = BrowserTestUtils.waitForLocationChange(gBrowser, url);
let forwardButton = document.getElementById("forward-button");
forwardButton.click();
await loaded;
info(`Loaded ${url} ${useFrame ? "in an iframe" : ""}`);
}
async function goBack(url, useFrame = false) {
info(
`Clicking the back button, expecting to load ${url} ${
useFrame ? "in an iframe" : ""
}`
);
let loaded = BrowserTestUtils.waitForLocationChange(gBrowser, url);
let backButton = document.getElementById("back-button");
backButton.click();
await loaded;
info(`Loaded ${url} ${useFrame ? "in an iframe" : ""}`);
}
function assertBackForwardState(canGoBack, canGoForward) {
let backButton = document.getElementById("back-button");
let forwardButton = document.getElementById("forward-button");
is(
backButton.disabled,
!canGoBack,
`${gBrowser.currentURI.spec}: back button is ${
canGoBack ? "not" : ""
} disabled`
);
is(
forwardButton.disabled,
!canGoForward,
`${gBrowser.currentURI.spec}: forward button is ${
canGoForward ? "not" : ""
} disabled`
);
}
class SHListener {
static NewEntry = 0;
static Reload = 1;
static GotoIndex = 2;
static Purge = 3;
static ReplaceEntry = 4;
static async waitForHistory(history, event) {
return new Promise(resolve => {
let listener = {
OnHistoryNewEntry: () => {},
OnHistoryReload: () => {
return true;
},
OnHistoryGotoIndex: () => {},
OnHistoryPurge: () => {},
OnHistoryReplaceEntry: () => {},
QueryInterface: ChromeUtils.generateQI([
"nsISHistoryListener",
"nsISupportsWeakReference",
]),
};
function finish() {
history.removeSHistoryListener(listener);
resolve();
}
switch (event) {
case this.NewEntry:
listener.OnHistoryNewEntry = finish;
break;
case this.Reload:
listener.OnHistoryReload = () => {
finish();
return true;
};
break;
case this.GotoIndex:
listener.OnHistoryGotoIndex = finish;
break;
case this.Purge:
listener.OnHistoryPurge = finish;
break;
case this.ReplaceEntry:
listener.OnHistoryReplaceEntry = finish;
break;
}
history.addSHistoryListener(listener);
});
}
}