Source code
Revision control
Copy as Markdown
Other Tools
<!--
  Any copyright is dedicated to the Public Domain.
-->
<html>
  <head>
    <meta charset="utf-8" />
    <meta name="timeout" content="long" />
    <iframe id="write-frame"></iframe>
    <script src="/resources/testharness.js"></script>
    <script src="/resources/testharnessreport.js"></script>
  </head>
  <body>
    <script>
      const params = new URL(window.location.href).searchParams;
      const id = params.get("id");
      var testId;
      var testAPI;
      async_test(t => {
        const writeFrame = document.getElementById("write-frame");
        window.addEventListener("message", e => {
          console.log(
            "Write wrapper window received " + JSON.stringify(e.data)
          );
          try {
            if (!testId) {
              assert_true(!!e.data.message); // First message contain the database name.
              assert_equals(id, e.data.message);
              testId = e.data.message;
              assert_true(!!e.data.type); // First message also contain the tested API name.
              testAPI = e.data.type;
              writeFrame.src =
                id;
              return;
            }
            assert_true(!!e.data.id, e.data.message);
            if (e.data.id !== id) {
              console.log(
                "id " +
                  id +
                  " ignoring message for id " +
                  e.data.id +
                  " origin " +
                  e.origin
              );
              return;
            }
            if (e.data.message === "write loaded") {
              writeFrame.contentWindow.postMessage(
                { id, message: id, type: testAPI },
                "*"
              );
            } else {
              assert_equals(e.data.message, "write done");
              assert_true(!!e.data.expected); // We should get a nonzero number.
              console.log(
                "Write wrapper window sends up " + JSON.stringify(e.data)
              );
              parent.opener.postMessage(e.data, document.referrer);
              t.done();
            }
          } catch (err) {
            parent.opener.postMessage(
              { id, message: err.message },
              document.referrer
            );
            t.unreached_func(err.message);
            t.done();
          }
        });
        parent.opener.postMessage(
          { id, message: "write loaded" },
          document.referrer
        );
      }, "Write wrapper");
    </script>
  </body>
</html>