summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/close-watcher/user-activation/nn-activate-dialog.html
blob: 5cc866044ce26cd7b94fb8bb3b125d0e651eb276 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<!doctype html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<script src="/resources/testdriver-actions.js"></script>
<script src="/common/top-layer.js"></script>
<script src="../resources/helpers.js"></script>

<!--
  This test has different expectations for dialogs vs. CloseWatchers because
  dialogs queue a task to fire their close event, and do not do so for their
  cancel event. Thus, when you have two dialogs grouped together, you get the
  somewhat-strange behavior of both cancels firing first, then both closes.
  Whereas CloseWatchers do not have this issue; both fire synchronously.

  Note that scheduling the cancel event for dialogs is not really possible since
  it would then fire after the dialog has been closed in the DOM and visually.
  So the only reasonable fix for this would be to stop scheduling the close
  event for dialogs. That's risky from a compat standpoint, so for now, test the
  strange behavior.
-->

<body>
<script>
const type = "dialog";

promise_test(async t => {
  const events = [];

  createRecordingCloseWatcher(t, events, "watcher1", type);
  const watcher2 = createRecordingCloseWatcher(t, events, "watcher2", type);

  await maybeTopLayerBless(watcher2);

  await sendCloseRequest();
  await waitForPotentialCloseEvent();
  assert_array_equals(events, ["watcher2 cancel", "watcher1 cancel", "watcher2 close", "watcher1 close"]);
}, "Create two dialogs without user activation; send user activation");
</script>