diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 09:22:09 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 09:22:09 +0000 |
commit | 43a97878ce14b72f0981164f87f2e35e14151312 (patch) | |
tree | 620249daf56c0258faa40cbdcf9cfba06de2a846 /browser/components/sessionstore/test/browser_491168.js | |
parent | Initial commit. (diff) | |
download | firefox-upstream.tar.xz firefox-upstream.zip |
Adding upstream version 110.0.1.upstream/110.0.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'browser/components/sessionstore/test/browser_491168.js')
-rw-r--r-- | browser/components/sessionstore/test/browser_491168.js | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/browser/components/sessionstore/test/browser_491168.js b/browser/components/sessionstore/test/browser_491168.js new file mode 100644 index 0000000000..b8016e68de --- /dev/null +++ b/browser/components/sessionstore/test/browser_491168.js @@ -0,0 +1,113 @@ +"use strict"; + +const REFERRER1 = "http://example.org/?" + Date.now(); +const REFERRER2 = "http://example.org/?" + Math.random(); +const REFERRER3 = "http://example.org/?" + Math.random(); + +add_task(async function() { + function getExpectedReferrer(referrer) { + let defaultPolicy = Services.prefs.getIntPref( + "network.http.referer.defaultPolicy" + ); + ok( + [2, 3].indexOf(defaultPolicy) > -1, + "default referrer policy should be either strict-origin-when-cross-origin(2) or no-referrer-when-downgrade(3)" + ); + if (defaultPolicy == 2) { + return referrer.match(/https?:\/\/[^\/]+\/?/i)[0]; + } + return referrer; + } + + async function checkDocumentReferrer(referrer, msg) { + await SpecialPowers.spawn( + gBrowser.selectedBrowser, + [{ referrer, msg }], + async function(args) { + Assert.equal(content.document.referrer, args.referrer, args.msg); + } + ); + } + + let ReferrerInfo = Components.Constructor( + "@mozilla.org/referrer-info;1", + "nsIReferrerInfo", + "init" + ); + // Add a new tab. + let tab = (gBrowser.selectedTab = BrowserTestUtils.addTab( + gBrowser, + "about:blank" + )); + let browser = tab.linkedBrowser; + await promiseBrowserLoaded(browser); + + // Load a new URI with a specific referrer. + let referrerInfo1 = new ReferrerInfo( + Ci.nsIReferrerInfo.EMPTY, + true, + Services.io.newURI(REFERRER1) + ); + browser.loadURI("http://example.org", { + referrerInfo: referrerInfo1, + triggeringPrincipal: Services.scriptSecurityManager.createNullPrincipal({}), + }); + await promiseBrowserLoaded(browser); + + await TabStateFlusher.flush(browser); + let tabState = JSON.parse(ss.getTabState(tab)); + let actualReferrerInfo = E10SUtils.deserializeReferrerInfo( + tabState.entries[0].referrerInfo + ); + is( + actualReferrerInfo.originalReferrer.spec, + REFERRER1, + "Referrer retrieved via getTabState matches referrer set via loadURI." + ); + + let referrerInfo2 = new ReferrerInfo( + Ci.nsIReferrerInfo.EMPTY, + true, + Services.io.newURI(REFERRER2) + ); + + tabState.entries[0].referrerInfo = E10SUtils.serializeReferrerInfo( + referrerInfo2 + ); + await promiseTabState(tab, tabState); + + await checkDocumentReferrer( + getExpectedReferrer(REFERRER2), + "document.referrer matches referrer set via setTabState using referrerInfo." + ); + gBrowser.removeCurrentTab(); + + // Restore the closed tab. + tab = ss.undoCloseTab(window, 0); + await promiseTabRestored(tab); + + await checkDocumentReferrer( + getExpectedReferrer(REFERRER2), + "document.referrer is still correct after closing and reopening the tab." + ); + + tabState.entries[0].referrerInfo = null; + tabState.entries[0].referrer = REFERRER3; + await promiseTabState(tab, tabState); + + await checkDocumentReferrer( + getExpectedReferrer(REFERRER3), + "document.referrer matches referrer set via setTabState using referrer." + ); + gBrowser.removeCurrentTab(); + + // Restore the closed tab. + tab = ss.undoCloseTab(window, 0); + await promiseTabRestored(tab); + + await checkDocumentReferrer( + getExpectedReferrer(REFERRER3), + "document.referrer is still correct after closing and reopening the tab." + ); + gBrowser.removeCurrentTab(); +}); |