credentialscontainer-create-basics.https.html (6373B)
1 <!DOCTYPE html> 2 <title>Credential Management API: create() basics.</title> 3 <script src="/resources/testharness.js"></script> 4 <script src="/resources/testharnessreport.js"></script> 5 <script> 6 promise_test(function(t) { 7 return promise_rejects_dom(t, "NotSupportedError", 8 navigator.credentials.create()); 9 }, "navigator.credentials.create() with no argument."); 10 11 promise_test(function(t) { 12 return promise_rejects_dom(t, "NotSupportedError", 13 navigator.credentials.create({})); 14 }, "navigator.credentials.create() with empty argument."); 15 16 promise_test(function(t) { 17 var credential_data = { 18 id: 'id', 19 password: 'pencil', 20 }; 21 22 return navigator.credentials.create({password: credential_data}) 23 .then(function(credential) { 24 assert_equals(credential.id, 'id'); 25 assert_equals(credential.name, ''); 26 assert_equals(credential.iconURL, ''); 27 assert_equals(credential.type, 'password'); 28 assert_equals(credential.password, 'pencil'); 29 }); 30 }, "navigator.credentials.create() with valid PasswordCredentialData"); 31 32 promise_test(function(t) { 33 var f = document.createElement('form'); 34 f.innerHTML = "<input type='text' name='theId' value='musterman' autocomplete='username'>" 35 + "<input type='text' name='thePassword' value='sekrit' autocomplete='current-password'>" 36 + "<input type='text' name='theIcon' value='https://example.com/photo' autocomplete='photo'>" 37 + "<input type='text' name='theExtraField' value='extra'>" 38 + "<input type='text' name='theName' value='friendly name' autocomplete='name'>"; 39 40 return navigator.credentials.create({password: f}) 41 .then(function(credential) { 42 assert_equals(credential.id, 'musterman'); 43 assert_equals(credential.name, 'friendly name'); 44 assert_equals(credential.iconURL, 'https://example.com/photo'); 45 assert_equals(credential.type, 'password'); 46 assert_equals(credential.password, 'sekrit'); 47 }); 48 }, "navigator.credentials.create() with valid HTMLFormElement"); 49 50 promise_test(function(t) { 51 return promise_rejects_js(t, TypeError, 52 navigator.credentials.create({password: "bogus password data"})); 53 }, "navigator.credentials.create() with bogus password data"); 54 55 promise_test(function(t) { 56 var federated_data = { 57 id: 'id', 58 provider: 'https://example.com/', 59 }; 60 61 return navigator.credentials.create({federated: federated_data}) 62 .then(function(credential) { 63 assert_equals(credential.id, 'id'); 64 assert_equals(credential.name, ''); 65 assert_equals(credential.iconURL, ''); 66 assert_equals(credential.type, 'federated'); 67 }); 68 }, "navigator.credentials.create() with valid FederatedCredentialData"); 69 70 promise_test(function(t) { 71 return promise_rejects_js(t, TypeError, 72 navigator.credentials.create({federated: "bogus federated data"})); 73 }, "navigator.credentials.create() with bogus federated data"); 74 75 promise_test(function(t) { 76 return promise_rejects_js(t, TypeError, 77 navigator.credentials.create({publicKey: "bogus publicKey data"})); 78 }, "navigator.credentials.create() with bogus publicKey data"); 79 80 promise_test(function(t) { 81 var credential_data = { 82 id: 'id', 83 password: 'pencil', 84 }; 85 86 var federated_data = { 87 id: 'id', 88 provider: 'https://example.com/', 89 }; 90 91 return promise_rejects_dom(t, "NotSupportedError", 92 navigator.credentials.create({ 93 password: credential_data, 94 federated: federated_data, 95 })); 96 }, "navigator.credentials.create() with both PasswordCredentialData and FederatedCredentialData"); 97 98 promise_test(function(t) { 99 return promise_rejects_js(t, TypeError, 100 navigator.credentials.create({ 101 password: "bogus password data", 102 federated: "bogus federated data", 103 })); 104 }, "navigator.credentials.create() with bogus password and federated data"); 105 106 promise_test(function(t) { 107 return promise_rejects_js(t, TypeError, 108 navigator.credentials.create({ 109 federated: "bogus federated data", 110 publicKey: "bogus publicKey data", 111 })); 112 }, "navigator.credentials.create() with bogus federated and publicKey data"); 113 114 promise_test(function(t) { 115 return promise_rejects_js(t, TypeError, 116 navigator.credentials.create({ 117 password: "bogus password data", 118 publicKey: "bogus publicKey data", 119 })); 120 }, "navigator.credentials.create() with bogus password and publicKey data"); 121 122 promise_test(function(t) { 123 return promise_rejects_js(t, TypeError, 124 navigator.credentials.create({ 125 password: "bogus password data", 126 federated: "bogus federated data", 127 publicKey: "bogus publicKey data", 128 })); 129 }, "navigator.credentials.create() with bogus password, federated, and publicKey data"); 130 131 promise_test(function(t) { 132 return promise_rejects_dom(t, "NotSupportedError", 133 navigator.credentials.create({bogus_key: "bogus data"})); 134 }, "navigator.credentials.create() with bogus data"); 135 136 promise_test(function(t) { 137 const controller = new AbortController(); 138 controller.abort("custom reason"); 139 140 return promise_rejects_exactly(t, "custom reason", 141 navigator.credentials.create({ signal: controller.signal })); 142 }, "navigator.credentials.create() aborted with custom reason"); 143 144 promise_test(async function(t) { 145 const reasons = [{}, [], new Error("custom error")]; 146 147 for (let reason of reasons) { 148 const result = navigator.credentials.create({ signal: AbortSignal.abort(reason) }); 149 await promise_rejects_exactly(t, reason, result); 150 } 151 }, "navigator.credentials.create() aborted with different objects"); 152 153 promise_test(function(t) { 154 const error = new Error("custom error"); 155 const controller = new AbortController(); 156 157 const result = navigator.credentials.create({ signal: controller.signal }); 158 controller.abort(error); // aborted after the promise is created 159 160 return promise_rejects_exactly(t, error, result); 161 }, "navigator.credentials.create() rejects when aborted after the promise creation"); 162 </script>