From a656459dd7f43116f1e256bf069c43b15e6dc4d4 Mon Sep 17 00:00:00 2001 From: Anne van Kesteren Date: Fri, 8 Mar 2019 20:18:39 +0100 Subject: [PATCH] HTML: test queueing behavior of window.close() For https://github.com/whatwg/html/pull/4402. --- .../the-window-object/close-method.window.js | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 html/browsers/the-window-object/close-method.window.js diff --git a/html/browsers/the-window-object/close-method.window.js b/html/browsers/the-window-object/close-method.window.js new file mode 100644 index 000000000000000..0288f9cab8e1cc5 --- /dev/null +++ b/html/browsers/the-window-object/close-method.window.js @@ -0,0 +1,39 @@ +function assert_closed_opener(w, closed, opener) { + assert_equals(w.closed, closed); + assert_equals(w.opener, opener); +} + +async_test(t => { + const openee = window.open(); + assert_closed_opener(openee, false, self); + openee.onunload = t.step_func(() => { + assert_closed_opener(openee, true, self); + t.step_timeout(() => { + assert_closed_opener(openee, true, null); + t.done(); + }, 0); + }); + openee.close(); + assert_closed_opener(openee, true, self); +}, "window.close() queues a task to discard, but window.closed knows immediately"); + +async_test(t => { + const openee = window.open("", "greatname"); + assert_closed_opener(openee, false, self); + openee.close(); + assert_closed_opener(openee, true, self); + const openee2 = window.open("", "greatname"); + assert_not_equals(openee, openee2); + assert_closed_opener(openee, true, self); // Ensure second window.open() call was synchronous + openee2.onunload = t.step_func(() => { + assert_closed_opener(openee2, true, self); + t.step_timeout(() => { + assert_closed_opener(openee, true, null); + assert_closed_opener(openee2, true, null); + t.done(); + }, 0); + }); + openee2.close(); + assert_closed_opener(openee, true, self); // Ensure second close() call was synchronous + assert_closed_opener(openee2, true, self); +}, "window.close() affects name targeting immediately");