diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 14:29:10 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 14:29:10 +0000 |
commit | 2aa4a82499d4becd2284cdb482213d541b8804dd (patch) | |
tree | b80bf8bf13c3766139fbacc530efd0dd9d54394c /browser/base/content/test/about/browser_aboutNetError.js | |
parent | Initial commit. (diff) | |
download | firefox-upstream.tar.xz firefox-upstream.zip |
Adding upstream version 86.0.1.upstream/86.0.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'browser/base/content/test/about/browser_aboutNetError.js')
-rw-r--r-- | browser/base/content/test/about/browser_aboutNetError.js | 302 |
1 files changed, 302 insertions, 0 deletions
diff --git a/browser/base/content/test/about/browser_aboutNetError.js b/browser/base/content/test/about/browser_aboutNetError.js new file mode 100644 index 0000000000..c265a5eb52 --- /dev/null +++ b/browser/base/content/test/about/browser_aboutNetError.js @@ -0,0 +1,302 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +const SSL3_PAGE = "https://ssl3.example.com/"; +const TLS10_PAGE = "https://tls1.example.com/"; +const TLS12_PAGE = "https://tls12.example.com/"; + +// This includes all the cipher suite prefs we have. +const CIPHER_SUITE_PREFS = [ + "security.ssl3.dhe_rsa_aes_128_sha", + "security.ssl3.dhe_rsa_aes_256_sha", + "security.ssl3.ecdhe_ecdsa_aes_128_gcm_sha256", + "security.ssl3.ecdhe_ecdsa_aes_128_sha", + "security.ssl3.ecdhe_ecdsa_aes_256_gcm_sha384", + "security.ssl3.ecdhe_ecdsa_aes_256_sha", + "security.ssl3.ecdhe_ecdsa_chacha20_poly1305_sha256", + "security.ssl3.ecdhe_rsa_aes_128_gcm_sha256", + "security.ssl3.ecdhe_rsa_aes_128_sha", + "security.ssl3.ecdhe_rsa_aes_256_gcm_sha384", + "security.ssl3.ecdhe_rsa_aes_256_sha", + "security.ssl3.ecdhe_rsa_chacha20_poly1305_sha256", + "security.ssl3.rsa_aes_128_sha", + "security.ssl3.rsa_aes_256_sha", + "security.ssl3.rsa_aes_128_gcm_sha256", + "security.ssl3.rsa_aes_256_gcm_sha384", + "security.ssl3.rsa_des_ede3_sha", + "security.tls13.aes_128_gcm_sha256", + "security.tls13.aes_256_gcm_sha384", + "security.tls13.chacha20_poly1305_sha256", +]; + +function resetPrefs() { + Services.prefs.clearUserPref("security.tls.version.min"); + Services.prefs.clearUserPref("security.tls.version.max"); + Services.prefs.clearUserPref("security.tls.version.enable-deprecated"); + Services.prefs.clearUserPref("security.certerrors.tls.version.show-override"); +} + +add_task(async function resetToDefaultConfig() { + info( + "Change TLS config to cause page load to fail, check that reset button is shown and that it works" + ); + + // Just twiddling version will trigger the TLS 1.0 offer. So to test the + // broader UX, disable all cipher suites to trigger SSL_ERROR_SSL_DISABLED. + // This can be removed when security.tls.version.enable-deprecated is. + CIPHER_SUITE_PREFS.forEach(suitePref => { + Services.prefs.setBoolPref(suitePref, false); + }); + + // Set ourselves up for a TLS error. + Services.prefs.setIntPref("security.tls.version.min", 1); // TLS 1.0 + Services.prefs.setIntPref("security.tls.version.max", 1); + + let browser; + let pageLoaded; + await BrowserTestUtils.openNewForegroundTab( + gBrowser, + () => { + gBrowser.selectedTab = BrowserTestUtils.addTab(gBrowser, TLS12_PAGE); + browser = gBrowser.selectedBrowser; + pageLoaded = BrowserTestUtils.waitForErrorPage(browser); + }, + false + ); + + info("Loading and waiting for the net error"); + await pageLoaded; + + // Setup an observer for the target page. + const finalLoadComplete = BrowserTestUtils.browserLoaded( + browser, + false, + TLS12_PAGE + ); + + await SpecialPowers.spawn(browser, [], async function() { + const doc = content.document; + ok( + doc.documentURI.startsWith("about:neterror"), + "Should be showing error page" + ); + + const prefResetButton = doc.getElementById("prefResetButton"); + ok( + ContentTaskUtils.is_visible(prefResetButton), + "prefResetButton should be visible" + ); + is( + prefResetButton.getAttribute("autofocus"), + "true", + "prefResetButton has autofocus" + ); + prefResetButton.click(); + }); + + info("Waiting for the page to load after the click"); + await finalLoadComplete; + + CIPHER_SUITE_PREFS.forEach(suitePref => { + Services.prefs.clearUserPref(suitePref); + }); + resetPrefs(); + BrowserTestUtils.removeTab(gBrowser.selectedTab); +}); + +add_task(async function checkLearnMoreLink() { + info("Load an unsupported TLS page and check for a learn more link"); + + // Set ourselves up for TLS error + Services.prefs.setIntPref("security.tls.version.min", 3); + Services.prefs.setIntPref("security.tls.version.max", 4); + + let browser; + let pageLoaded; + await BrowserTestUtils.openNewForegroundTab( + gBrowser, + () => { + gBrowser.selectedTab = BrowserTestUtils.addTab(gBrowser, TLS10_PAGE); + browser = gBrowser.selectedBrowser; + pageLoaded = BrowserTestUtils.waitForErrorPage(browser); + }, + false + ); + + info("Loading and waiting for the net error"); + await pageLoaded; + + const baseURL = Services.urlFormatter.formatURLPref("app.support.baseURL"); + + await SpecialPowers.spawn(browser, [baseURL], function(_baseURL) { + const doc = content.document; + ok( + doc.documentURI.startsWith("about:neterror"), + "Should be showing error page" + ); + + const learnMoreLink = doc.getElementById("learnMoreLink"); + ok( + ContentTaskUtils.is_visible(learnMoreLink), + "Learn More link is visible" + ); + is(learnMoreLink.getAttribute("href"), _baseURL + "connection-not-secure"); + }); + + resetPrefs(); + BrowserTestUtils.removeTab(gBrowser.selectedTab); +}); + +add_task(async function checkEnable10() { + info( + "Load a page with a deprecated TLS version, an option to enable TLS 1.0 is offered and it works" + ); + + Services.prefs.setIntPref("security.tls.version.min", 3); + // Disable TLS 1.3 so that we trigger a SSL_ERROR_UNSUPPORTED_VERSION. + // As NSS generates an alert rather than negotiating a lower version + // if we use the supported_versions extension from TLS 1.3. + Services.prefs.setIntPref("security.tls.version.max", 3); + + let browser; + let pageLoaded; + await BrowserTestUtils.openNewForegroundTab( + gBrowser, + () => { + gBrowser.selectedTab = BrowserTestUtils.addTab(gBrowser, TLS10_PAGE); + browser = gBrowser.selectedBrowser; + pageLoaded = BrowserTestUtils.waitForErrorPage(browser); + }, + false + ); + + info("Loading and waiting for the net error"); + await pageLoaded; + + // Setup an observer for the target page. + const finalLoadComplete = BrowserTestUtils.browserLoaded( + browser, + false, + TLS10_PAGE + ); + + await SpecialPowers.spawn(browser, [], async function() { + const doc = content.document; + ok( + doc.documentURI.startsWith("about:neterror"), + "Should be showing error page" + ); + + const enableTls10Button = doc.getElementById("enableTls10Button"); + ok( + ContentTaskUtils.is_visible(enableTls10Button), + "Option to re-enable TLS 1.0 is visible" + ); + enableTls10Button.click(); + + // It should not also offer to reset preferences instead. + const prefResetButton = doc.getElementById("prefResetButton"); + ok( + !ContentTaskUtils.is_visible(prefResetButton), + "prefResetButton should NOT be visible" + ); + }); + + info("Waiting for the TLS 1.0 page to load after the click"); + await finalLoadComplete; + + resetPrefs(); + BrowserTestUtils.removeTab(gBrowser.selectedTab); +}); + +add_task(async function dontOffer10WhenAlreadyEnabled() { + info("An option to enable TLS 1.0 is not offered if already enabled"); + + Services.prefs.setIntPref("security.tls.version.min", 3); + Services.prefs.setIntPref("security.tls.version.max", 3); + Services.prefs.setBoolPref("security.tls.version.enable-deprecated", true); + + let browser; + let pageLoaded; + await BrowserTestUtils.openNewForegroundTab( + gBrowser, + () => { + gBrowser.selectedTab = BrowserTestUtils.addTab(gBrowser, SSL3_PAGE); + browser = gBrowser.selectedBrowser; + pageLoaded = BrowserTestUtils.waitForErrorPage(browser); + }, + false + ); + + info("Loading and waiting for the net error"); + await pageLoaded; + + await SpecialPowers.spawn(browser, [], async function() { + const doc = content.document; + ok( + doc.documentURI.startsWith("about:neterror"), + "Should be showing error page" + ); + + const enableTls10Button = doc.getElementById("enableTls10Button"); + ok( + !ContentTaskUtils.is_visible(enableTls10Button), + "Option to re-enable TLS 1.0 is not visible" + ); + + // It should offer to reset preferences instead. + const prefResetButton = doc.getElementById("prefResetButton"); + ok( + ContentTaskUtils.is_visible(prefResetButton), + "prefResetButton should be visible" + ); + }); + + resetPrefs(); + BrowserTestUtils.removeTab(gBrowser.selectedTab); +}); + +add_task(async function overrideUIPref() { + info("TLS 1.0 override option isn't shown when the pref is set to false"); + + Services.prefs.setIntPref("security.tls.version.min", 3); + Services.prefs.setIntPref("security.tls.version.max", 3); + Services.prefs.setBoolPref( + "security.certerrors.tls.version.show-override", + false + ); + + let browser; + let pageLoaded; + await BrowserTestUtils.openNewForegroundTab( + gBrowser, + () => { + gBrowser.selectedTab = BrowserTestUtils.addTab(gBrowser, TLS10_PAGE); + browser = gBrowser.selectedBrowser; + pageLoaded = BrowserTestUtils.waitForErrorPage(browser); + }, + false + ); + + info("Loading and waiting for the net error"); + await pageLoaded; + + await ContentTask.spawn(browser, null, async function() { + const doc = content.document; + ok( + doc.documentURI.startsWith("about:neterror"), + "Should be showing error page" + ); + + const enableTls10Button = doc.getElementById("enableTls10Button"); + ok( + !ContentTaskUtils.is_visible(enableTls10Button), + "Option to re-enable TLS 1.0 is not visible" + ); + }); + + resetPrefs(); + BrowserTestUtils.removeTab(gBrowser.selectedTab); +}); |