<!DOCTYPE html>
<meta charset="utf-8">
<title>Entry settings object for host functions</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/wasm/jsapi/wasm-module-builder.js"></script>
<script src="/wasm/jsapi/functions/helper.js"></script>

<!-- This is the entry page, so window.open() should resolve relative to it, even inside host functions. -->

<iframe src="resources/entry-incumbent.html"></iframe>

<script>
setup({ explicit_done: true });

const relativeURL = "resources/window-to-open.html";
const expectedURL = (new URL(relativeURL, location.href)).href;

const incumbentWindow = frames[0];

window.onload = () => {
  async_test(t => {
    const w = incumbentWindow.runWindowOpenVeryIndirectly(relativeURL);
    w.onload = t.step_func_done(() => {
      t.add_cleanup(() => w.close());
      assert_equals(w.location.href, expectedURL);
    });
  }, "Sanity check: this all works as expected synchronously");

  async_test(t => {
    // No t.step_func because that could change the realms
    call_later(() => {
      const w = incumbentWindow.runWindowOpenVeryIndirectly(relativeURL);
      w.onload = t.step_func_done(() => {
        t.add_cleanup(() => w.close());
        assert_equals(w.location.href, expectedURL);
      });
    });
  }, "Start function");

  done();
};
</script>
