1<!DOCTYPE html>
2<meta charset="utf-8">
3<title>Entry settings object for host functions</title>
4<script src="/resources/testharness.js"></script>
5<script src="/resources/testharnessreport.js"></script>
6<script src="/wasm/jsapi/wasm-module-builder.js"></script>
7<script src="/wasm/jsapi/functions/helper.js"></script>
8
9<!-- This is the entry page, so window.open() should resolve relative to it, even inside host functions. -->
10
11<iframe src="resources/entry-incumbent.html"></iframe>
12
13<script>
14setup({ explicit_done: true });
15
16const relativeURL = "resources/window-to-open.html";
17const expectedURL = (new URL(relativeURL, location.href)).href;
18
19const incumbentWindow = frames[0];
20
21window.onload = () => {
22  async_test(t => {
23    const w = incumbentWindow.runWindowOpenVeryIndirectly(relativeURL);
24    w.onload = t.step_func_done(() => {
25      t.add_cleanup(() => w.close());
26      assert_equals(w.location.href, expectedURL);
27    });
28  }, "Sanity check: this all works as expected synchronously");
29
30  async_test(t => {
31    // No t.step_func because that could change the realms
32    call_later(() => {
33      const w = incumbentWindow.runWindowOpenVeryIndirectly(relativeURL);
34      w.onload = t.step_func_done(() => {
35        t.add_cleanup(() => w.close());
36        assert_equals(w.location.href, expectedURL);
37      });
38    });
39  }, "Start function");
40
41  done();
42};
43</script>
44