Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
- Manifest: dom/webauthn/tests/browser/browser.toml
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
"use strict";
add_virtual_authenticator();
let expectSecurityError = expectError("Security");
async function test_webauthn_with_cert_override(
aTestDomain,
aExpectSecurityError
) {
let certOverrideService = Cc[
"@mozilla.org/security/certoverride;1"
].getService(Ci.nsICertOverrideService);
let testURL = "https://" + aTestDomain;
let certErrorLoaded;
let tab = await BrowserTestUtils.openNewForegroundTab(
gBrowser,
() => {
gBrowser.selectedTab = BrowserTestUtils.addTab(gBrowser, testURL);
let browser = gBrowser.selectedBrowser;
certErrorLoaded = BrowserTestUtils.waitForErrorPage(browser);
},
false
);
info("Waiting for cert error page.");
await certErrorLoaded;
let loaded = BrowserTestUtils.browserLoaded(tab.linkedBrowser);
info("Adding certificate error override.");
await SpecialPowers.spawn(tab.linkedBrowser, [], async function () {
let doc = content.document;
let exceptionButton = doc.getElementById("exceptionDialogButton");
exceptionButton.click();
});
info("Waiting for page load.");
await loaded;
await SpecialPowers.spawn(tab.linkedBrowser, [], async function () {
let doc = content.document;
ok(
!doc.documentURI.startsWith("about:certerror"),
"Exception has been added."
);
});
let makeCredPromise = promiseWebAuthnMakeCredential(tab, "none", "preferred");
if (aExpectSecurityError) {
await makeCredPromise.then(arrivingHereIsBad).catch(expectSecurityError);
ok(
true,
"Calling navigator.credentials.create() results in a security error"
);
} else {
await makeCredPromise.catch(arrivingHereIsBad);
ok(true, "Calling navigator.credentials.create() is allowed");
}
let getAssertionPromise = promiseWebAuthnGetAssertionDiscoverable(tab);
if (aExpectSecurityError) {
await getAssertionPromise
.then(arrivingHereIsBad)
.catch(expectSecurityError);
ok(true, "Calling navigator.credentials.get() results in a security error");
} else {
await getAssertionPromise.catch(arrivingHereIsBad);
ok(true, "Calling navigator.credentials.get() results in a security error");
}
certOverrideService.clearValidityOverride(aTestDomain, -1, {});
loaded = BrowserTestUtils.waitForErrorPage(tab.linkedBrowser);
BrowserCommands.reloadSkipCache();
await loaded;
BrowserTestUtils.removeTab(gBrowser.selectedTab);
}
add_task(() => test_webauthn_with_cert_override("expired.example.com", false));
add_task(() => test_webauthn_with_cert_override("untrusted.example.com", true));
add_task(() =>
test_webauthn_with_cert_override("no-subject-alt-name.example.com", true)
);