<!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>