| <!DOCTYPE html> |
| <meta charset="utf-8"> |
| <title>WebAuthn credential.create() in a nested frame</title> |
| <link rel="help" href="https://w3c.github.io/webauthn/#publickey-credentials-create-feature"> |
| <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> |