Source code
Revision control
Copy as Markdown
Other Tools
Test Info: Warnings
- This test has a WPT meta file that expects 10 subtest issues.
- This WPT test may be referenced by the following Test IDs:
- /digital-credentials/protocol-filtering-openid4vp.https.html - WPT Dashboard Interop Dashboard
<!DOCTYPE html>
<meta charset="utf-8">
<title>Digital Credential API: Protocol Filtering (openid4vp)</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<body></body>
<script type="module">
import {
makeGetOptions,
makeGetOptionsWithArbitraryProtocol,
} from "./support/helper.js";
const validProtocols = [
"openid4vp-v1-unsigned",
"openid4vp-v1-signed",
"openid4vp-v1-multisigned",
];
for (const protocol of validProtocols) {
promise_test(async (t) => {
const abortController = new AbortController();
const { signal } = abortController;
const options = makeGetOptions({ protocol, signal });
await test_driver.bless("user activation");
const promise = navigator.credentials.get(options);
abortController.abort();
await promise_rejects_dom(
t,
"AbortError",
promise,
`Valid protocol '${protocol}' should not throw TypeError`
);
}, `Valid protocol '${protocol}' passes through filtering`);
}
const filteredProtocols = [
["openid4vp", "bare identifier without version or mode"],
["openid4vp-v1", "version without mode"],
["openid4vp-v2-unsigned", "wrong version number"],
["openid4vp-v1-unknown", "valid prefix with unknown mode"],
["OPENID4VP-V1-UNSIGNED", "uppercase variant"],
["Openid4vp-V1-Unsigned", "mixed case variant"],
[" openid4vp-v1-unsigned", "leading whitespace"],
["openid4vp-v1-unsigned ", "trailing whitespace"],
["openid4vp-v1-unsigned\t", "trailing tab"],
["openid4vp_v1_unsigned", "underscores instead of hyphens"],
];
for (const [protocol, description] of filteredProtocols) {
promise_test(async (t) => {
const options = makeGetOptionsWithArbitraryProtocol(protocol);
await promise_rejects_js(
t,
TypeError,
navigator.credentials.get(options)
);
}, `Filtered: '${protocol}' (${description})`);
}
</script>