/* Any copyright is dedicated to the Public Domain. https://creativecommons.org/publicdomain/zero/1.0/ */ "use strict"; const TEST_PATH = getRootDirectory(gTestPath).replace( "chrome://mochitests/content", // eslint-disable-next-line @microsoft/sdl/no-insecure-url "http://example.com" ); async function runTest(code, hasBody) { const url = `${TEST_PATH}file_status_code.sjs?code=${code}&body=${hasBody ? "1" : "0"}`; const desc = `${code} ${hasBody ? "with" : "without"} body`; const tab = await BrowserTestUtils.openNewForegroundTab( gBrowser, "about:blank" ); const browser = tab.linkedBrowser; const loaded = Promise.race([ BrowserTestUtils.waitForErrorPage(browser), BrowserTestUtils.browserLoaded(browser), ]); BrowserTestUtils.startLoadingURIString(browser, url); await loaded; is(browser.currentURI.scheme, "https", `Should remain on HTTPS for ${desc}`); await SpecialPowers.spawn( browser, [code, hasBody], async function (statusCode, withBody) { const innerHTML = content.document.body.innerHTML; ok( !innerHTML.includes("about-httpsonly-title-alert"), `Should not show HTTPS-Only error page for ${statusCode}` ); if (withBody) { ok( innerHTML.includes(`status=${statusCode}`), `Should show response body for ${statusCode}` ); } } ); BrowserTestUtils.removeTab(tab); } add_task(async function test_status_code() { await SpecialPowers.pushPrefEnv({ set: [["dom.security.https_only_mode", true]], }); for (const code of [200, 400, 404, 500, 503]) { await runTest(code, true); await runTest(code, false); } });