diff options
Diffstat (limited to 'security/manager/ssl/tests/mochitest/browser/browser_clientAuth_fetch_from_extension.js')
-rw-r--r-- | security/manager/ssl/tests/mochitest/browser/browser_clientAuth_fetch_from_extension.js | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/security/manager/ssl/tests/mochitest/browser/browser_clientAuth_fetch_from_extension.js b/security/manager/ssl/tests/mochitest/browser/browser_clientAuth_fetch_from_extension.js new file mode 100644 index 0000000000..4f9a45f03c --- /dev/null +++ b/security/manager/ssl/tests/mochitest/browser/browser_clientAuth_fetch_from_extension.js @@ -0,0 +1,59 @@ +/* Any copyright is dedicated to the Public Domain. + * https://creativecommons.org/publicdomain/zero/1.0/ */ + +/* global browser */ + +"use strict"; + +let certDialogShown = false; +function onCertDialogLoaded(subject) { + certDialogShown = true; + // eslint-disable-next-line mozilla/no-arbitrary-setTimeout + setTimeout(() => { + subject.acceptDialog(); + }, 0); +} + +Services.obs.addObserver(onCertDialogLoaded, "cert-dialog-loaded"); + +function clearClientCertsDecision() { + let cars = Cc["@mozilla.org/security/clientAuthRememberService;1"].getService( + Ci.nsIClientAuthRememberService + ); + cars.clearRememberedDecisions(); +} + +registerCleanupFunction(() => { + Services.obs.removeObserver(onCertDialogLoaded, "cert-dialog-loaded"); + // Make sure we don't affect other tests. + clearClientCertsDecision(); +}); + +add_task(async function () { + await SpecialPowers.pushPrefEnv({ + set: [["security.default_personal_cert", "Ask Every Time"]], + }); + + clearClientCertsDecision(); + + let extension = ExtensionTestUtils.loadExtension({ + manifest: { + permissions: ["<all_urls>"], + }, + + async background() { + try { + await fetch("https://requireclientcert.example.com/"); + browser.test.notifyPass("cert_dialog_shown"); + } catch (error) { + browser.test.fail(`${error} :: ${error.stack}`); + browser.test.notifyFail("cert_dialog_shown"); + } + }, + }); + + await extension.startup(); + await extension.awaitFinish("cert_dialog_shown"); + await extension.unload(); + ok(certDialogShown, "Cert dialog was shown"); +}); |