blob: d3d80c6c5b90bce995a69868def91783f080eb8e [file] [log] [blame]
<!DOCTYPE html>
<title>Credential Manager: End-to-end tests for create() with a virtual authenticator.</title>
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
<body>
<script type="module">
import {ACCEPTABLE_CREDENTIAL, ACCEPTABLE_CREDENTIAL_ID, authenticatorSetup, MAKE_CREDENTIAL_OPTIONS, deepCopy} from './resources/test-inputs.js';
import {TestAuthenticatorManager} from './resources/virtual-navigator-credentials.js';
const manager = new TestAuthenticatorManager;
if (document.location.host != "subdomain.example.test:8443") {
document.location = "https://subdomain.example.test:8443/credentialmanager/credentialscontainer-create-with-virtual-authenticator.html";
promise_test(_ => new Promise(_ => {}), "Stall tests on the wrong host.");
}
authenticatorSetup(manager, "CTAP2_0", () => {
promise_test(async t => {
let authenticators = await manager.authenticators();
assert_equals(authenticators.length, 1);
let testAuthenticator = authenticators[0];
assert_true(await testAuthenticator.generateAndRegisterKey(ACCEPTABLE_CREDENTIAL_ID, "subdomain.example.test"));
var customMakeCredOptions = deepCopy(MAKE_CREDENTIAL_OPTIONS);
customMakeCredOptions.excludeCredentials = [ACCEPTABLE_CREDENTIAL];
return promise_rejects_dom(t, "InvalidStateError",
navigator.credentials.create({ publicKey : customMakeCredOptions}));
}, "navigator.credentials.create() re-registration returns InvalidStateError");
promise_test(async t => {
var customMakeCredOptions = deepCopy(MAKE_CREDENTIAL_OPTIONS);
customMakeCredOptions.rp.id = "";
return promise_rejects_dom(t, "SecurityError",
navigator.credentials.create({ publicKey : customMakeCredOptions}));
}, "navigator.credentials.create() with empty rpId returns SecurityError");
promise_test(async t => {
var customMakeCredOptions = deepCopy(MAKE_CREDENTIAL_OPTIONS);
customMakeCredOptions.authenticatorSelection.requireResidentKey = true;
return navigator.credentials.create({ publicKey : customMakeCredOptions });
}, "navigator.credentials.create() with requireResidentKey is supported");
promise_test(async t => {
var customMakeCredOptions = deepCopy(MAKE_CREDENTIAL_OPTIONS);
customMakeCredOptions.authenticatorSelection.requireResidentKey = false;
customMakeCredOptions.authenticatorSelection.residentKey = "required";
return navigator.credentials.create({ publicKey : customMakeCredOptions });
}, "navigator.credentials.create() resident_key overrides resident_key_required");
promise_test(async t => {
var customMakeCredOptions = deepCopy(MAKE_CREDENTIAL_OPTIONS);
customMakeCredOptions.authenticatorSelection.residentKey = "required";
return navigator.credentials.create({ publicKey : customMakeCredOptions });
}, "navigator.credentials.create() with resident_key is supported");
promise_test(async t => {
var customMakeCredOptions = deepCopy(MAKE_CREDENTIAL_OPTIONS);
customMakeCredOptions.authenticatorSelection.resident_key = "foobarbaz";
return navigator.credentials.create({ publicKey : customMakeCredOptions });
}, "navigator.credentials.create() invalid resident_key value is ignored");
promise_test(async t => {
const authAbortController = new AbortController();
const authAbortSignal = authAbortController.signal;
return navigator.credentials.create({ publicKey : MAKE_CREDENTIAL_OPTIONS, signal : authAbortSignal});
}, "navigator.credentials.create() with abort signal flag not set");
promise_test(async t => {
const authAbortController = new AbortController();
const authAbortSignal = authAbortController.signal;
authAbortController.abort();
const promise = navigator.credentials.create({ publicKey : MAKE_CREDENTIAL_OPTIONS, signal : authAbortSignal});
return promise_rejects_dom(t, "AbortError", promise);
}, "navigator.credentials.create() with abort signal flag set before sending request");
promise_test(async t => {
const authAbortController = new AbortController();
const authAbortSignal = authAbortController.signal;
const promise = navigator.credentials.create({ publicKey : MAKE_CREDENTIAL_OPTIONS, signal : authAbortSignal});
authAbortController.abort();
return promise_rejects_dom(t, "AbortError", promise);
}, "navigator.credentials.create() with abort signal flag is set after sending request");
promise_test(async t => {
const authAbortController = new AbortController();
const authAbortSignal = authAbortController.signal;
const promise = await navigator.credentials.create({ publicKey : MAKE_CREDENTIAL_OPTIONS, signal : authAbortSignal});
authAbortController.abort();
return promise;
}, "navigator.credentials.create() with abort signal flag is set after promise resolved");
}, {});
</script>