| <!DOCTYPE html> |
| <title>Web Authentication API: PublicKeyCredential's [[get]] failure cases.</title> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="./resources/util.js"></script> |
| <script> |
| // Default mock configuration. Tests need to override if they need different configuration. |
| if (window.internals) |
| internals.setMockWebAuthenticationConfiguration({ }); |
| |
| promise_test(t => { |
| const options = { |
| publicKey: { |
| challenge: asciiToUint8Array("123456"), |
| timeout: 10 |
| } |
| }; |
| |
| return promiseRejects(t, "NotAllowedError", |
| navigator.credentials.get(options), "Operation timed out."); |
| }, "PublicKeyCredential's [[get]] with timeout"); |
| |
| promise_test(t => { |
| const options = { |
| publicKey: { |
| rpId: "example.com", |
| challenge: asciiToUint8Array("123456") |
| } |
| }; |
| |
| return promiseRejects(t, "SecurityError", |
| navigator.credentials.get(options), "The provided RP ID is not a registrable domain suffix of the effective domain of the document."); |
| }, "PublicKeyCredential's [[get]] with a mismatched RP ID"); |
| |
| promise_test(t => { |
| const options = { |
| publicKey: { |
| challenge: asciiToUint8Array("123456"), |
| extensions: { appid: "abc" } |
| } |
| }; |
| |
| return promiseRejects(t, "SecurityError", |
| navigator.credentials.get(options), "The origin of the document is not authorized for the provided App ID."); |
| }, "PublicKeyCredential's [[get]] with a mismatched APP ID (invalid URLs)"); |
| |
| promise_test(t => { |
| const options = { |
| publicKey: { |
| challenge: asciiToUint8Array("123456"), |
| extensions: { appid: "ftp://localhost" } |
| } |
| }; |
| |
| return promiseRejects(t, "SecurityError", |
| navigator.credentials.get(options), "The origin of the document is not authorized for the provided App ID."); |
| }, "PublicKeyCredential's [[get]] with a mismatched APP ID (different protocols)"); |
| |
| promise_test(t => { |
| const options = { |
| publicKey: { |
| challenge: asciiToUint8Array("123456"), |
| extensions: { appid: "https://127.0.0.1" } |
| } |
| }; |
| |
| return promiseRejects(t, "SecurityError", |
| navigator.credentials.get(options), "The origin of the document is not authorized for the provided App ID."); |
| }, "PublicKeyCredential's [[get]] with a mismatched APP ID (different sites 1)"); |
| |
| promise_test(t => { |
| const options = { |
| publicKey: { |
| challenge: asciiToUint8Array("123456"), |
| extensions: { appid: "https://haha.localhost" } |
| } |
| }; |
| |
| return promiseRejects(t, "SecurityError", |
| navigator.credentials.get(options), "The origin of the document is not authorized for the provided App ID."); |
| }, "PublicKeyCredential's [[get]] with a mismatched APP ID (different sites 2)"); |
| |
| promise_test(t => { |
| const options = { |
| publicKey: { |
| challenge: asciiToUint8Array("123456") |
| } |
| }; |
| |
| const result = promiseRejects(t, "NotAllowedError", navigator.credentials.get(options), "This request has been voided by a new request."); |
| promiseRejects(t, "NotAllowedError", navigator.credentials.get(options), "This request has been voided by a new request."); |
| return result; |
| }, "PublicKeyCredential's [[get]] with two consecutive requests"); |
| |
| promise_test(function(t) { |
| const requestOptions = { |
| publicKey: { |
| challenge: asciiToUint8Array("123456") |
| } |
| }; |
| const result = promiseRejects(t, "NotAllowedError", navigator.credentials.get(requestOptions), "This request has been voided by a new request."); |
| |
| const creationOptions = { |
| publicKey: { |
| rp: { |
| name: "example.com" |
| }, |
| user: { |
| name: "John Appleseed", |
| id: asciiToUint8Array("123456"), |
| displayName: "John", |
| }, |
| challenge: asciiToUint8Array("123456"), |
| pubKeyCredParams: [{ type: "public-key", alg: -7 }], |
| } |
| }; |
| promiseRejects(t, "NotAllowedError", navigator.credentials.create(creationOptions), "This request has been voided by a new request."); |
| |
| return result; |
| }, "PublicKeyCredential's [[get]] with two consecutive requests (2)"); |
| |
| promise_test(t => { |
| const options = { |
| publicKey: { |
| challenge: asciiToUint8Array("123456") |
| } |
| }; |
| |
| const result = promiseRejects(t, "NotAllowedError", navigator.credentials.get(options), "This request has been cancelled by a new request."); |
| window.open("./resources/new-page.html?isCreation=false"); |
| return result; |
| }, "PublicKeyCredential's [[get]] with new requests in a new page"); |
| |
| promise_test(t => { |
| const options = { |
| publicKey: { |
| challenge: asciiToUint8Array("123456") |
| } |
| }; |
| |
| const result = promiseRejects(t, "NotAllowedError", navigator.credentials.get(options), "This request has been cancelled by a new request."); |
| window.open("./resources/new-page.html?isCreation=true"); |
| return result; |
| }, "PublicKeyCredential's [[get]] with new requests in a new page (2)"); |
| </script> |