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");
