Source code
Revision control
Copy as Markdown
Other Tools
Test Info: Warnings
- This test has a WPT meta file that expects 9 subtest issues.
- This WPT test may be referenced by the following Test IDs:
- /credential-management/credentialscontainer-create-basics.https.html - WPT Dashboard Interop Dashboard
<!DOCTYPE html>
<title>Credential Management API: create() basics.</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
promise_test(function(t) {
return promise_rejects_dom(t, "NotSupportedError",
navigator.credentials.create());
}, "navigator.credentials.create() with no argument.");
promise_test(function(t) {
return promise_rejects_dom(t, "NotSupportedError",
navigator.credentials.create({}));
}, "navigator.credentials.create() with empty argument.");
promise_test(function(t) {
var credential_data = {
id: 'id',
password: 'pencil',
};
return navigator.credentials.create({password: credential_data})
.then(function(credential) {
assert_equals(credential.id, 'id');
assert_equals(credential.name, '');
assert_equals(credential.iconURL, '');
assert_equals(credential.type, 'password');
assert_equals(credential.password, 'pencil');
});
}, "navigator.credentials.create() with valid PasswordCredentialData");
promise_test(function(t) {
var f = document.createElement('form');
f.innerHTML = "<input type='text' name='theId' value='musterman' autocomplete='username'>"
+ "<input type='text' name='thePassword' value='sekrit' autocomplete='current-password'>"
+ "<input type='text' name='theExtraField' value='extra'>"
+ "<input type='text' name='theName' value='friendly name' autocomplete='name'>";
return navigator.credentials.create({password: f})
.then(function(credential) {
assert_equals(credential.id, 'musterman');
assert_equals(credential.name, 'friendly name');
assert_equals(credential.type, 'password');
assert_equals(credential.password, 'sekrit');
});
}, "navigator.credentials.create() with valid HTMLFormElement");
promise_test(function(t) {
return promise_rejects_js(t, TypeError,
navigator.credentials.create({password: "bogus password data"}));
}, "navigator.credentials.create() with bogus password data");
promise_test(function(t) {
var federated_data = {
id: 'id',
};
return navigator.credentials.create({federated: federated_data})
.then(function(credential) {
assert_equals(credential.id, 'id');
assert_equals(credential.name, '');
assert_equals(credential.iconURL, '');
assert_equals(credential.type, 'federated');
});
}, "navigator.credentials.create() with valid FederatedCredentialData");
promise_test(function(t) {
return promise_rejects_js(t, TypeError,
navigator.credentials.create({federated: "bogus federated data"}));
}, "navigator.credentials.create() with bogus federated data");
promise_test(function(t) {
return promise_rejects_js(t, TypeError,
navigator.credentials.create({publicKey: "bogus publicKey data"}));
}, "navigator.credentials.create() with bogus publicKey data");
promise_test(function(t) {
var credential_data = {
id: 'id',
password: 'pencil',
};
var federated_data = {
id: 'id',
};
return promise_rejects_dom(t, "NotSupportedError",
navigator.credentials.create({
password: credential_data,
federated: federated_data,
}));
}, "navigator.credentials.create() with both PasswordCredentialData and FederatedCredentialData");
promise_test(function(t) {
return promise_rejects_js(t, TypeError,
navigator.credentials.create({
password: "bogus password data",
federated: "bogus federated data",
}));
}, "navigator.credentials.create() with bogus password and federated data");
promise_test(function(t) {
return promise_rejects_js(t, TypeError,
navigator.credentials.create({
federated: "bogus federated data",
publicKey: "bogus publicKey data",
}));
}, "navigator.credentials.create() with bogus federated and publicKey data");
promise_test(function(t) {
return promise_rejects_js(t, TypeError,
navigator.credentials.create({
password: "bogus password data",
publicKey: "bogus publicKey data",
}));
}, "navigator.credentials.create() with bogus password and publicKey data");
promise_test(function(t) {
return promise_rejects_js(t, TypeError,
navigator.credentials.create({
password: "bogus password data",
federated: "bogus federated data",
publicKey: "bogus publicKey data",
}));
}, "navigator.credentials.create() with bogus password, federated, and publicKey data");
promise_test(function(t) {
return promise_rejects_dom(t, "NotSupportedError",
navigator.credentials.create({bogus_key: "bogus data"}));
}, "navigator.credentials.create() with bogus data");
promise_test(function(t) {
const controller = new AbortController();
controller.abort("custom reason");
return promise_rejects_exactly(t, "custom reason",
navigator.credentials.create({ signal: controller.signal }));
}, "navigator.credentials.create() aborted with custom reason");
promise_test(async function(t) {
const reasons = [{}, [], new Error("custom error")];
for (let reason of reasons) {
const result = navigator.credentials.create({ signal: AbortSignal.abort(reason) });
await promise_rejects_exactly(t, reason, result);
}
}, "navigator.credentials.create() aborted with different objects");
promise_test(function(t) {
const error = new Error("custom error");
const controller = new AbortController();
const result = navigator.credentials.create({ signal: controller.signal });
controller.abort(error); // aborted after the promise is created
return promise_rejects_exactly(t, error, result);
}, "navigator.credentials.create() rejects when aborted after the promise creation");
</script>