tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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>