Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

<!DOCTYPE html>
<meta charset="utf-8">
<title>WebAuthn credential.create() in a nested frame</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>
<script src="/resources/common-inputs.js"></script>
<script src=helpers.js></script>
<body></body>
<script>
standardSetup(function () {
"use strict";
const CREATE_CREDENTIALS = `
navigator.credentials.create({
publicKey: {
challenge: Uint8Array.from([]),
rp: { name: "rp" },
user: { id: Uint8Array.from([]), name: "marisa", displayName: "Marisa" },
pubKeyCredParams: [{type: "public-key", alg: -7}],
}
}).then(c => window.parent.postMessage("OK", "*"))
.catch(e => window.parent.postMessage("Error: " + e.toString(), "*"));
`;
promise_test(async t => {
const frame = document.createElement("iframe");
const loadPromise = new EventWatcher(t, frame, "load").wait_for("load");
document.body.append(frame);
await loadPromise;
frame.contentWindow.location = "javascript:" + CREATE_CREDENTIALS;
const messageWatcher = new EventWatcher(t, window, "message");
const { data } = await messageWatcher.wait_for("message");
assert_equals(data, "OK");
}, "navigator.credentials.create({publicKey}) in a javascript url should should succeed.");
promise_test(async t => {
let frame = document.createElement("iframe");
const loadPromise = new EventWatcher(t, frame, "load").wait_for("load");
frame.srcdoc = "";
document.body.append(frame);
await loadPromise;
frame.contentWindow.eval(CREATE_CREDENTIALS);
let eventWatcher = new EventWatcher(t, window, "message");
const { data } = await eventWatcher.wait_for("message");
assert_equals(data, "OK");
}, "navigator.credentials.create({publicKey}) in srcdoc should succeed.");
promise_test(async t => {
let frame = document.createElement("iframe");
const loadPromise = new EventWatcher(t, frame, "load").wait_for("load");
frame.src = "about:blank";
document.body.append(frame);
await loadPromise;
frame.contentDocument.write("<script>" + CREATE_CREDENTIALS + "<\/script>");
let eventWatcher = new EventWatcher(t, window, "message");
const { data } = await eventWatcher.wait_for("message");
assert_equals(data, "OK");
}, "navigator.credentials.create({publicKey}) in about:blank embedded in a secure context should succeed.");
promise_test(async t => {
let frame = document.createElement("iframe");
const eventWatcher = new EventWatcher(t, window, "message");
frame.src = "resources/webauthn-subframe.sub.html";
document.body.append(frame);
assert_equals((await eventWatcher.wait_for("message")).data.type, "subframe-loaded");
frame.contentWindow.postMessage({ type: "create-credential", addUserActivation: false });
const { data } = await eventWatcher.wait_for("message");
assert_equals(data.result, "success", "Error: " + data.error);
}, "navigator.credentials.create({publicKey}) in a same-origin frame should succeed without requiring user activation.");
}, {
protocol: "ctap2_1",
hasUserVerification: true,
isUserVerified: true,
});
</script>