summaryrefslogtreecommitdiffstats
path: root/security/manager/ssl/tests/mochitest/browser/browser_clientAuth_fetch_from_extension.js
diff options
context:
space:
mode:
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.js59
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");
+});