forked from mirrors/gecko-dev
Backed out changeset 8781a0d1254d (bug 1810141) Backed out changeset 131037295784 (bug 1810141) Backed out changeset 3852fbe290f4 (bug 1810141) Backed out changeset 118f131a524a (bug 1810141) Backed out changeset ab5d76846e10 (bug 1810141) Backed out changeset dce3aa683445 (bug 1810141) Backed out changeset 4dc41d90dbb3 (bug 1810141) Backed out changeset 50b57ba1a061 (bug 1810141) Backed out changeset 569de94781e4 (bug 1810141)
153 lines
4.9 KiB
JavaScript
153 lines
4.9 KiB
JavaScript
const TEST_PAGE =
|
|
"https://example.org/browser/browser/base/content/test/general/dummy_page.html";
|
|
const TEST_REFERRER = "http://mochi.test:8888/";
|
|
|
|
const ReferrerInfo = Components.Constructor(
|
|
"@mozilla.org/referrer-info;1",
|
|
"nsIReferrerInfo",
|
|
"init"
|
|
);
|
|
|
|
let referrerInfo = new ReferrerInfo(
|
|
Ci.nsIReferrerInfo.ORIGIN,
|
|
true,
|
|
Services.io.newURI(TEST_REFERRER)
|
|
);
|
|
let deReferrerInfo = E10SUtils.serializeReferrerInfo(referrerInfo);
|
|
|
|
var checkResult = async function(isRemote, browserKey, uri) {
|
|
is(
|
|
gBrowser.selectedBrowser.isRemoteBrowser,
|
|
isRemote,
|
|
"isRemoteBrowser should be correct"
|
|
);
|
|
|
|
is(
|
|
gBrowser.selectedBrowser.permanentKey,
|
|
browserKey,
|
|
"browser.permanentKey should be correct"
|
|
);
|
|
|
|
if (SpecialPowers.Services.appinfo.sessionHistoryInParent) {
|
|
let sessionHistory =
|
|
gBrowser.selectedBrowser.browsingContext.sessionHistory;
|
|
let entry = sessionHistory.getEntryAtIndex(sessionHistory.count - 1);
|
|
let args = { uri, referrerInfo: deReferrerInfo, isRemote };
|
|
Assert.equal(entry.URI.spec, args.uri, "Uri should be correct");
|
|
|
|
// Main process like about:mozilla does not trigger the real network request.
|
|
// So we don't store referrerInfo in sessionHistory in that case.
|
|
// Besides, the referrerInfo stored in sessionHistory was computed, we only
|
|
// check pre-computed things.
|
|
if (args.isRemote) {
|
|
let resultReferrerInfo = entry.referrerInfo;
|
|
let expectedReferrerInfo = E10SUtils.deserializeReferrerInfo(
|
|
args.referrerInfo
|
|
);
|
|
|
|
Assert.equal(
|
|
resultReferrerInfo.originalReferrer.spec,
|
|
expectedReferrerInfo.originalReferrer.spec,
|
|
"originalReferrer should be correct"
|
|
);
|
|
Assert.equal(
|
|
resultReferrerInfo.sendReferrer,
|
|
expectedReferrerInfo.sendReferrer,
|
|
"sendReferrer should be correct"
|
|
);
|
|
Assert.equal(
|
|
resultReferrerInfo.referrerPolicy,
|
|
expectedReferrerInfo.referrerPolicy,
|
|
"referrerPolicy should be correct"
|
|
);
|
|
} else {
|
|
Assert.equal(entry.referrerInfo, null, "ReferrerInfo should be correct");
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
await SpecialPowers.spawn(
|
|
gBrowser.selectedBrowser,
|
|
[{ uri, referrerInfo: deReferrerInfo, isRemote }],
|
|
async function(args) {
|
|
let webNav = content.docShell.QueryInterface(Ci.nsIWebNavigation);
|
|
let sessionHistory = webNav.sessionHistory;
|
|
let entry = sessionHistory.legacySHistory.getEntryAtIndex(
|
|
sessionHistory.count - 1
|
|
);
|
|
|
|
var { E10SUtils } = SpecialPowers.ChromeUtils.import(
|
|
"resource://gre/modules/E10SUtils.jsm"
|
|
);
|
|
|
|
Assert.equal(entry.URI.spec, args.uri, "Uri should be correct");
|
|
|
|
// Main process like about:mozilla does not trigger the real network request.
|
|
// So we don't store referrerInfo in sessionHistory in that case.
|
|
// Besides, the referrerInfo stored in sessionHistory was computed, we only
|
|
// check pre-computed things.
|
|
if (args.isRemote) {
|
|
let resultReferrerInfo = entry.referrerInfo;
|
|
let expectedReferrerInfo = E10SUtils.deserializeReferrerInfo(
|
|
args.referrerInfo
|
|
);
|
|
|
|
Assert.equal(
|
|
resultReferrerInfo.originalReferrer.spec,
|
|
expectedReferrerInfo.originalReferrer.spec,
|
|
"originalReferrer should be correct"
|
|
);
|
|
Assert.equal(
|
|
resultReferrerInfo.sendReferrer,
|
|
expectedReferrerInfo.sendReferrer,
|
|
"sendReferrer should be correct"
|
|
);
|
|
Assert.equal(
|
|
resultReferrerInfo.referrerPolicy,
|
|
expectedReferrerInfo.referrerPolicy,
|
|
"referrerPolicy should be correct"
|
|
);
|
|
} else {
|
|
Assert.equal(
|
|
entry.referrerInfo,
|
|
null,
|
|
"ReferrerInfo should be correct"
|
|
);
|
|
}
|
|
}
|
|
);
|
|
};
|
|
var waitForLoad = async function(uri) {
|
|
info("waitForLoad " + uri);
|
|
let loadURIOptions = {
|
|
triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal(),
|
|
referrerInfo,
|
|
};
|
|
gBrowser.selectedBrowser.webNavigation.loadURI(uri, loadURIOptions);
|
|
|
|
await BrowserTestUtils.browserStopped(gBrowser, uri);
|
|
};
|
|
|
|
// Tests referrerInfo when navigating from a page in the remote process to main
|
|
// process and vice versa.
|
|
add_task(async function test_navigation() {
|
|
// Navigate from non remote to remote
|
|
gBrowser.selectedTab = BrowserTestUtils.addTab(gBrowser, "about:blank");
|
|
let testURI = TEST_PAGE;
|
|
let { permanentKey } = gBrowser.selectedBrowser;
|
|
await waitForLoad(testURI);
|
|
await checkResult(true, permanentKey, testURI);
|
|
gBrowser.removeCurrentTab();
|
|
|
|
// Navigate from remote to non-remote
|
|
gBrowser.selectedTab = BrowserTestUtils.addTab(gBrowser, TEST_PAGE);
|
|
// Wait for the non-blank page to finish loading
|
|
await BrowserTestUtils.browserStopped(gBrowser, TEST_PAGE);
|
|
testURI = "about:mozilla";
|
|
permanentKey = gBrowser.selectedBrowser.permanentKey;
|
|
await waitForLoad(testURI);
|
|
await checkResult(false, permanentKey, testURI);
|
|
|
|
gBrowser.removeCurrentTab();
|
|
});
|