Close watchers: always fire cancel events

Sometimes they will have cancelable = false, but they will now always
fire. See https://github.com/whatwg/html/issues/10047.

Bug: 41484805, 40054591
Change-Id: Ica682043fb56c729f4c331e9f3bd0590d3b1d088
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5465306
Reviewed-by: Joey Arhar <jarhar@chromium.org>
Commit-Queue: Domenic Denicola <domenic@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1291009}
diff --git a/close-watcher/abortsignal.html b/close-watcher/abortsignal.html
index 9229b37..ec360f4 100644
--- a/close-watcher/abortsignal.html
+++ b/close-watcher/abortsignal.html
@@ -49,7 +49,7 @@
   watcher.requestClose();
   controller.abort();
 
-  assert_equals(oncancel_call_count_, 0);
+  assert_equals(oncancel_call_count_, 1);
   assert_equals(onclose_call_count_, 1);
 }, "requestClose() then abortController.abort() fires only one close event");
 
@@ -92,7 +92,7 @@
   await sendCloseRequest();
   controller.abort();
 
-  assert_equals(oncancel_call_count_, 0);
+  assert_equals(oncancel_call_count_, 1);
   assert_equals(onclose_call_count_, 1);
 }, "Esc key then abortController.abort() fires only one close event");
 
diff --git a/close-watcher/basic.html b/close-watcher/basic.html
index 9951e54..79a91e1 100644
--- a/close-watcher/basic.html
+++ b/close-watcher/basic.html
@@ -14,8 +14,8 @@
 
   watcher.requestClose();
 
-  assert_array_equals(events, ["close"]);
-}, "requestClose() with no user activation only fires close");
+  assert_array_equals(events, ["cancel[cancelable=false]", "close"]);
+}, "requestClose() with no user activation");
 
 test(t => {
   let events = [];
@@ -25,7 +25,7 @@
   watcher.requestClose();
 
   assert_array_equals(events, []);
-}, "destroy() then requestClose() fires no events");
+}, "destroy() then requestClose()");
 
 test(t => {
   let events = [];
@@ -36,18 +36,18 @@
 
   watcher.requestClose();
   assert_array_equals(events, ["close"]);
-}, "close() then requestClose() fires only one close event");
+}, "close() then requestClose()");
 
 test(t => {
   let events = [];
   let watcher = createRecordingCloseWatcher(t, events);
 
   watcher.requestClose();
-  assert_array_equals(events, ["close"]);
+  assert_array_equals(events, ["cancel[cancelable=false]", "close"]);
 
   watcher.destroy();
-  assert_array_equals(events, ["close"]);
-}, "requestClose() then destroy() fires only one close event");
+  assert_array_equals(events, ["cancel[cancelable=false]", "close"]);
+}, "requestClose() then destroy()");
 
 test(t => {
   let events = [];
@@ -58,7 +58,7 @@
 
   watcher.destroy();
   assert_array_equals(events, ["close"]);
-}, "close() then destroy() fires only one close event");
+}, "close() then destroy()");
 
 promise_test(async t => {
   let events = [];
@@ -68,7 +68,7 @@
   await sendCloseRequest();
 
   assert_array_equals(events, []);
-}, "destroy() then close request fires no events");
+}, "destroy() then close request");
 
 promise_test(async t => {
   let events = [];
@@ -77,6 +77,6 @@
   await sendCloseRequest();
   watcher.destroy();
 
-  assert_array_equals(events, ["close"]);
-}, "Close request then destroy() fires only one close event");
+  assert_array_equals(events, ["cancel[cancelable=false]", "close"]);
+}, "Close request then destroy()");
 </script>
diff --git a/close-watcher/esc-key/keypress.html b/close-watcher/esc-key/keypress.html
index 8dd58b0..c3bfcc0 100644
--- a/close-watcher/esc-key/keypress.html
+++ b/close-watcher/esc-key/keypress.html
@@ -16,6 +16,6 @@
 
   await sendEscKey();
 
-  assert_array_equals(events, ["close"]);
+  assert_array_equals(events, ["cancel[cancelable=false]", "close"]);
 }, "A keypress listener can NOT prevent the Esc keypress from being interpreted as a close request");
 </script>
diff --git a/close-watcher/esc-key/keyup.html b/close-watcher/esc-key/keyup.html
index 341012d..7c75ef7 100644
--- a/close-watcher/esc-key/keyup.html
+++ b/close-watcher/esc-key/keyup.html
@@ -16,6 +16,6 @@
 
   await sendEscKey();
 
-  assert_array_equals(events, ["close"]);
+  assert_array_equals(events, ["cancel[cancelable=false]", "close"]);
 }, "A keyup listener can NOT prevent the Esc keypress from being interpreted as a close request");
 </script>
diff --git a/close-watcher/esc-key/not-user-activation.html b/close-watcher/esc-key/not-user-activation.html
index ac29f84..a8d5d22 100644
--- a/close-watcher/esc-key/not-user-activation.html
+++ b/close-watcher/esc-key/not-user-activation.html
@@ -14,6 +14,6 @@
 
   await sendEscKey();
 
-  assert_array_equals(events, ["close"]);
-}, "Esc key does not count as user activation, so if it is the sole user interaction, that fires close but not cancel");
+  assert_array_equals(events, ["cancel[cancelable=false]", "close"]);
+}, "Esc key does not count as user activation, so if it is the sole user interaction, cancel is cancelable=false");
 </script>
diff --git a/close-watcher/inside-event-listeners.html b/close-watcher/inside-event-listeners.html
index ac037fc..47f431e 100644
--- a/close-watcher/inside-event-listeners.html
+++ b/close-watcher/inside-event-listeners.html
@@ -17,10 +17,10 @@
   await test_driver.bless("give user activation so that cancel will fire", () => {
     watcher.requestClose();
   });
-  assert_array_equals(events, ["cancel"]);
+  assert_array_equals(events, ["cancel[cancelable=true]"]);
 
   watcher.requestClose();
-  assert_array_equals(events, ["cancel"], "since it was inactive, no more events fired");
+  assert_array_equals(events, ["cancel[cancelable=true]"], "since it was inactive, no more events fired");
 }, "destroy() inside oncancel");
 
 test(t => {
@@ -30,10 +30,10 @@
   watcher.onclose = () => { watcher.destroy(); }
 
   watcher.requestClose();
-  assert_array_equals(events, ["close"]);
+  assert_array_equals(events, ["cancel[cancelable=false]", "close"]);
 
   watcher.requestClose();
-  assert_array_equals(events, ["close"], "since it was inactive, no more events fired");
+  assert_array_equals(events, ["cancel[cancelable=false]", "close"], "since it was inactive, no more events fired");
 }, "destroy() inside onclose");
 
 promise_test(async t => {
@@ -45,10 +45,10 @@
   await test_driver.bless("give user activation so that cancel will fire", () => {
     watcher.requestClose();
   });
-  assert_array_equals(events, ["cancel", "close"]);
+  assert_array_equals(events, ["cancel[cancelable=true]", "close"]);
 
   watcher.requestClose();
-  assert_array_equals(events, ["cancel", "close"], "since it was inactive, no more events fired");
+  assert_array_equals(events, ["cancel[cancelable=true]", "close"], "since it was inactive, no more events fired");
 }, "close() inside oncancel");
 
 test(t => {
@@ -58,10 +58,10 @@
   watcher.onclose = () => { watcher.close(); }
 
   watcher.requestClose();
-  assert_array_equals(events, ["close"]);
+  assert_array_equals(events, ["cancel[cancelable=false]", "close"]);
 
   watcher.requestClose();
-  assert_array_equals(events, ["close"], "since it was inactive, no more events fired");
+  assert_array_equals(events, ["cancel[cancelable=false]", "close"], "since it was inactive, no more events fired");
 }, "close() inside onclose");
 
 promise_test(async t => {
@@ -73,10 +73,10 @@
   await test_driver.bless("give user activation so that cancel will fire", () => {
     watcher.requestClose();
   });
-  assert_array_equals(events, ["cancel", "close"]);
+  assert_array_equals(events, ["cancel[cancelable=true]", "close"]);
 
   watcher.requestClose();
-  assert_array_equals(events, ["cancel", "close"], "since it was inactive, no more events fired");
+  assert_array_equals(events, ["cancel[cancelable=true]", "close"], "since it was inactive, no more events fired");
 }, "requestClose() inside oncancel");
 
 test(t => {
@@ -86,9 +86,9 @@
   watcher.onclose = () => { watcher.requestClose(); }
 
   watcher.requestClose();
-  assert_array_equals(events, ["close"]);
+  assert_array_equals(events, ["cancel[cancelable=false]", "close"]);
 
   watcher.requestClose();
-  assert_array_equals(events, ["close"], "since it was inactive, no more events fired");
+  assert_array_equals(events, ["cancel[cancelable=false]", "close"], "since it was inactive, no more events fired");
 }, "requestClose() inside onclose");
 </script>
diff --git a/close-watcher/resources/helpers.js b/close-watcher/resources/helpers.js
index dd9e191..ad80c28 100644
--- a/close-watcher/resources/helpers.js
+++ b/close-watcher/resources/helpers.js
@@ -26,9 +26,14 @@
     t.add_cleanup(() => watcher.destroy());
   }
 
-  const prefix = name === undefined ? "" : name + " ";
-  watcher.addEventListener('cancel', () => events.push(prefix + "cancel"));
-  watcher.addEventListener('close', () => events.push(prefix + "close"));
+  const prefix = name === undefined ? '' : name + ' ';
+  watcher.addEventListener('cancel', e => {
+    const cancelable = e.cancelable ? '[cancelable=true]' : '[cancelable=false]';
+    events.push(prefix + 'cancel' + cancelable);
+  });
+  watcher.addEventListener('close', () => {
+    events.push(prefix + 'close');
+  });
 
   return watcher;
 };
diff --git a/close-watcher/user-activation/README.md b/close-watcher/user-activation/README.md
new file mode 100644
index 0000000..b9aa9a2
--- /dev/null
+++ b/close-watcher/user-activation/README.md
@@ -0,0 +1,25 @@
+# Close watcher user activation tests
+
+These tests are all in separate files (or test variants) because we need to be
+sure we're starting from zero user activation.
+
+## Note on variants vs. `-dialog` and `-CloseWatcher` files
+
+We endeavor to have all the tests in these files cover both `<dialog>` elements
+and the `CloseWatcher` API. (And sometimes the `popover=""` attribute.)
+
+When the test expectations are the same for both `<dialog>` and `CloseWatcher`,
+we use WPT's variants feature.
+
+However, in some cases different expectations are necessary. This is because
+`<dialog>`s queue a task to fire their `close` event, and do not queue a task
+to fire their `cancel` event. Thus, when you have two `<dialog>`s grouped
+together, you get the somewhat-strange behavior of both `cancel`s firing first,
+then both `close`s. Whereas `CloseWatcher`s do not have this issue; both events
+fire synchronously.
+
+(Note that scheduling the `cancel` event for `<dialog>`s 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,
+we test the strange behavior.)
diff --git a/close-watcher/user-activation/n-activate-preventDefault.html b/close-watcher/user-activation/n-activate-preventDefault.html
index 531ef42..f413448 100644
--- a/close-watcher/user-activation/n-activate-preventDefault.html
+++ b/close-watcher/user-activation/n-activate-preventDefault.html
@@ -22,10 +22,10 @@
   await sendCloseRequest();
   await waitForPotentialCloseEvent();
 
-  assert_array_equals(events, ["cancel"]);
+  assert_array_equals(events, ["cancel[cancelable=true]"]);
 
   await sendCloseRequest();
   await waitForPotentialCloseEvent();
-  assert_array_equals(events, ["cancel", "close"]);
+  assert_array_equals(events, ["cancel[cancelable=true]", "cancel[cancelable=false]", "close"]);
 }, "Create a close watcher without user activation that preventDefault()s cancel; send user activation");
 </script>
diff --git a/close-watcher/user-activation/n-activate.html b/close-watcher/user-activation/n-activate.html
index babcf54..d8253ba 100644
--- a/close-watcher/user-activation/n-activate.html
+++ b/close-watcher/user-activation/n-activate.html
@@ -22,6 +22,6 @@
 
   await sendCloseRequest();
   await waitForPotentialCloseEvent();
-  assert_array_equals(events, ["cancel", "close"]);
+  assert_array_equals(events, ["cancel[cancelable=true]", "close"]);
 }, "Create a close watcher without user activation; send user activation");
 </script>
diff --git a/close-watcher/user-activation/n-closerequest-n.html b/close-watcher/user-activation/n-closerequest-n.html
index 2424af7..54ccdd1 100644
--- a/close-watcher/user-activation/n-closerequest-n.html
+++ b/close-watcher/user-activation/n-closerequest-n.html
@@ -19,12 +19,12 @@
 
   await sendCloseRequest();
   await waitForPotentialCloseEvent();
-  assert_array_equals(events, ["watcher1 close"]);
+  assert_array_equals(events, ["watcher1 cancel[cancelable=false]", "watcher1 close"]);
 
   createRecordingCloseWatcher(t, events, "watcher2", type);
 
   await sendCloseRequest();
   await waitForPotentialCloseEvent();
-  assert_array_equals(events, ["watcher1 close", "watcher2 close"]);
+  assert_array_equals(events, ["watcher1 cancel[cancelable=false]", "watcher1 close", "watcher2 cancel[cancelable=false]", "watcher2 close"]);
 }, "Create a close watcher without user activation; send a close request; create a close watcher without user activation");
 </script>
diff --git a/close-watcher/user-activation/n-destroy-n.html b/close-watcher/user-activation/n-destroy-n.html
index c26f87d..e0a94f4 100644
--- a/close-watcher/user-activation/n-destroy-n.html
+++ b/close-watcher/user-activation/n-destroy-n.html
@@ -26,6 +26,6 @@
 
   await sendCloseRequest();
   await waitForPotentialCloseEvent();
-  assert_array_equals(events, ["watcher2 close"]);
+  assert_array_equals(events, ["watcher2 cancel[cancelable=false]", "watcher2 close"]);
 }, "Create a close watcher without user activation; destroy the close watcher; create a close watcher without user activation");
 </script>
diff --git a/close-watcher/user-activation/n.html b/close-watcher/user-activation/n.html
index fe04e0d..af8f972 100644
--- a/close-watcher/user-activation/n.html
+++ b/close-watcher/user-activation/n.html
@@ -20,6 +20,6 @@
 
   await sendCloseRequest();
   await waitForPotentialCloseEvent();
-  assert_array_equals(events, ["close"]);
+  assert_array_equals(events, ["cancel[cancelable=false]", "close"]);
 }, "Create a close watcher without user activation");
 </script>
diff --git a/close-watcher/user-activation/nn.html b/close-watcher/user-activation/nn-CloseWatcher.html
similarity index 78%
rename from close-watcher/user-activation/nn.html
rename to close-watcher/user-activation/nn-CloseWatcher.html
index beb63f1..016745d 100644
--- a/close-watcher/user-activation/nn.html
+++ b/close-watcher/user-activation/nn-CloseWatcher.html
@@ -1,6 +1,4 @@
 <!doctype html>
-<meta name=variant content="?dialog">
-<meta name=variant content="?CloseWatcher">
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <script src="/resources/testdriver.js"></script>
@@ -11,7 +9,7 @@
 
 <body>
 <script>
-const type = location.search.substring(1);
+const type = "CloseWatcher";
 
 promise_test(async t => {
   const events = [];
@@ -21,6 +19,6 @@
 
   await sendCloseRequest();
   await waitForPotentialCloseEvent();
-  assert_array_equals(events, ["watcher2 close", "watcher1 close"]);
+  assert_array_equals(events, ["watcher2 cancel[cancelable=false]", "watcher2 close", "watcher1 cancel[cancelable=false]", "watcher1 close"]);
 }, "Create two close watchers without user activation");
 </script>
diff --git a/close-watcher/user-activation/nn-activate-CloseWatcher.html b/close-watcher/user-activation/nn-activate-CloseWatcher.html
index 8045f30..45718e5 100644
--- a/close-watcher/user-activation/nn-activate-CloseWatcher.html
+++ b/close-watcher/user-activation/nn-activate-CloseWatcher.html
@@ -7,10 +7,6 @@
 <script src="/common/top-layer.js"></script>
 <script src="../resources/helpers.js"></script>
 
-<!--
-  See note in sibling -dialog.html file.
--->
-
 <body>
 <script>
 const type = "CloseWatcher";
@@ -25,6 +21,6 @@
 
   await sendCloseRequest();
   await waitForPotentialCloseEvent();
-  assert_array_equals(events, ["watcher2 cancel", "watcher2 close", "watcher1 cancel", "watcher1 close"]);
+  assert_array_equals(events, ["watcher2 cancel[cancelable=true]", "watcher2 close", "watcher1 cancel[cancelable=true]", "watcher1 close"]);
 }, "Create two CloseWatchers without user activation; send user activation");
 </script>
diff --git a/close-watcher/user-activation/nn-activate-dialog.html b/close-watcher/user-activation/nn-activate-dialog.html
index 5cc8660..eaffb4d 100644
--- a/close-watcher/user-activation/nn-activate-dialog.html
+++ b/close-watcher/user-activation/nn-activate-dialog.html
@@ -7,20 +7,6 @@
 <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";
@@ -35,6 +21,6 @@
 
   await sendCloseRequest();
   await waitForPotentialCloseEvent();
-  assert_array_equals(events, ["watcher2 cancel", "watcher1 cancel", "watcher2 close", "watcher1 close"]);
+  assert_array_equals(events, ["watcher2 cancel[cancelable=true]", "watcher1 cancel[cancelable=true]", "watcher2 close", "watcher1 close"]);
 }, "Create two dialogs without user activation; send user activation");
 </script>
diff --git a/close-watcher/user-activation/nn.html b/close-watcher/user-activation/nn-dialog.html
similarity index 78%
copy from close-watcher/user-activation/nn.html
copy to close-watcher/user-activation/nn-dialog.html
index beb63f1..0d086a5 100644
--- a/close-watcher/user-activation/nn.html
+++ b/close-watcher/user-activation/nn-dialog.html
@@ -1,6 +1,4 @@
 <!doctype html>
-<meta name=variant content="?dialog">
-<meta name=variant content="?CloseWatcher">
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <script src="/resources/testdriver.js"></script>
@@ -11,7 +9,7 @@
 
 <body>
 <script>
-const type = location.search.substring(1);
+const type = "dialog";
 
 promise_test(async t => {
   const events = [];
@@ -21,6 +19,6 @@
 
   await sendCloseRequest();
   await waitForPotentialCloseEvent();
-  assert_array_equals(events, ["watcher2 close", "watcher1 close"]);
+  assert_array_equals(events, ["watcher2 cancel[cancelable=false]", "watcher1 cancel[cancelable=false]", "watcher2 close", "watcher1 close"]);
 }, "Create two close watchers without user activation");
 </script>
diff --git a/close-watcher/user-activation/nnn-CloseWatcher-dialog-popover.html b/close-watcher/user-activation/nnn-CloseWatcher-dialog-popover.html
index f8b9061..38dd607 100644
--- a/close-watcher/user-activation/nnn-CloseWatcher-dialog-popover.html
+++ b/close-watcher/user-activation/nnn-CloseWatcher-dialog-popover.html
@@ -30,6 +30,6 @@
 
   assert_false(popover.matches(':popover-open'), 'The popover should be closed.');
   assert_false(dialog.hasAttribute('open'), 'The dialog should be closed.');
-  assert_array_equals(events, ['CloseWatcher close', 'dialog close']);
+  assert_array_equals(events, ['dialog cancel[cancelable=false]', 'CloseWatcher cancel[cancelable=false]', 'CloseWatcher close', 'dialog close']);
 }, 'Create a CloseWatcher without user activation; create a dialog without user activation; create a popover without user activation');
 </script>
diff --git a/close-watcher/user-activation/nnn.html b/close-watcher/user-activation/nnn-CloseWatcher.html
similarity index 76%
copy from close-watcher/user-activation/nnn.html
copy to close-watcher/user-activation/nnn-CloseWatcher.html
index 9b604e9..5d2f07e 100644
--- a/close-watcher/user-activation/nnn.html
+++ b/close-watcher/user-activation/nnn-CloseWatcher.html
@@ -1,6 +1,4 @@
 <!doctype html>
-<meta name=variant content="?dialog">
-<meta name=variant content="?CloseWatcher">
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <script src="/resources/testdriver.js"></script>
@@ -11,7 +9,7 @@
 
 <body>
 <script>
-const type = location.search.substring(1);
+const type = "CloseWatcher";
 
 promise_test(async t => {
   const events = [];
@@ -22,6 +20,6 @@
 
   await sendCloseRequest();
   await waitForPotentialCloseEvent();
-  assert_array_equals(events, ["watcher3 close", "watcher2 close", "watcher1 close"]);
+  assert_array_equals(events, ["watcher3 cancel[cancelable=false]", "watcher3 close", "watcher2 cancel[cancelable=false]", "watcher2 close", "watcher1 cancel[cancelable=false]", "watcher1 close"]);
 }, "Create three close watchers without user activation");
 </script>
diff --git a/close-watcher/user-activation/nnn.html b/close-watcher/user-activation/nnn-dialog.html
similarity index 77%
rename from close-watcher/user-activation/nnn.html
rename to close-watcher/user-activation/nnn-dialog.html
index 9b604e9..f1c071d 100644
--- a/close-watcher/user-activation/nnn.html
+++ b/close-watcher/user-activation/nnn-dialog.html
@@ -1,6 +1,4 @@
 <!doctype html>
-<meta name=variant content="?dialog">
-<meta name=variant content="?CloseWatcher">
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <script src="/resources/testdriver.js"></script>
@@ -11,7 +9,7 @@
 
 <body>
 <script>
-const type = location.search.substring(1);
+const type = "dialog";
 
 promise_test(async t => {
   const events = [];
@@ -22,6 +20,6 @@
 
   await sendCloseRequest();
   await waitForPotentialCloseEvent();
-  assert_array_equals(events, ["watcher3 close", "watcher2 close", "watcher1 close"]);
+  assert_array_equals(events, ["watcher3 cancel[cancelable=false]", "watcher2 cancel[cancelable=false]", "watcher1 cancel[cancelable=false]", "watcher3 close", "watcher2 close", "watcher1 close"]);
 }, "Create three close watchers without user activation");
 </script>
diff --git a/close-watcher/user-activation/ny-activate-preventDefault.html b/close-watcher/user-activation/ny-activate-preventDefault.html
index 5ffb64b..7cd1c2e 100644
--- a/close-watcher/user-activation/ny-activate-preventDefault.html
+++ b/close-watcher/user-activation/ny-activate-preventDefault.html
@@ -24,14 +24,14 @@
 
   await sendCloseRequest();
   await waitForPotentialCloseEvent();
-  assert_array_equals(events, ["watcher2 cancel"]);
+  assert_array_equals(events, ["watcher2 cancel[cancelable=true]"]);
 
   await sendCloseRequest();
   await waitForPotentialCloseEvent();
-  assert_array_equals(events, ["watcher2 cancel", "watcher2 close"]);
+  assert_array_equals(events, ["watcher2 cancel[cancelable=true]", "watcher2 cancel[cancelable=false]", "watcher2 close"]);
 
   await sendCloseRequest();
   await waitForPotentialCloseEvent();
-  assert_array_equals(events, ["watcher2 cancel", "watcher2 close", "watcher1 close"]);
+  assert_array_equals(events, ["watcher2 cancel[cancelable=true]", "watcher2 cancel[cancelable=false]", "watcher2 close", "watcher1 cancel[cancelable=false]", "watcher1 close"]);
 }, "Create a close watcher without user activation; create a close watcher with user activation that preventDefault()s cancel; send user activation");
 </script>
diff --git a/close-watcher/user-activation/ny.html b/close-watcher/user-activation/ny.html
index 2269122..49f50a1 100644
--- a/close-watcher/user-activation/ny.html
+++ b/close-watcher/user-activation/ny.html
@@ -21,10 +21,10 @@
 
   await sendCloseRequest();
   await waitForPotentialCloseEvent();
-  assert_array_equals(events, ["watcher2 close"]);
+  assert_array_equals(events, ["watcher2 cancel[cancelable=false]", "watcher2 close"]);
 
   await sendCloseRequest();
   await waitForPotentialCloseEvent();
-  assert_array_equals(events, ["watcher2 close", "watcher1 close"]);
+  assert_array_equals(events, ["watcher2 cancel[cancelable=false]", "watcher2 close", "watcher1 cancel[cancelable=false]", "watcher1 close"]);
 }, "Create a close watcher without user activation; create a close watcher with user activation");
 </script>
diff --git a/close-watcher/user-activation/nyn.html b/close-watcher/user-activation/nyn.html
index ec5153c..b227d56 100644
--- a/close-watcher/user-activation/nyn.html
+++ b/close-watcher/user-activation/nyn.html
@@ -21,10 +21,10 @@
 
   await sendCloseRequest();
   await waitForPotentialCloseEvent();
-  assert_array_equals(events, ["watcher3 close", "watcher2 close"]);
+  assert_array_equals(events, ["watcher3 cancel[cancelable=false]", "watcher3 close", "watcher2 cancel[cancelable=false]", "watcher2 close"]);
 
   await sendCloseRequest();
   await waitForPotentialCloseEvent();
-  assert_array_equals(events, ["watcher3 close", "watcher2 close", "watcher1 close"]);
+  assert_array_equals(events, ["watcher3 cancel[cancelable=false]", "watcher3 close", "watcher2 cancel[cancelable=false]", "watcher2 close", "watcher1 cancel[cancelable=false]", "watcher1 close"]);
 }, "Create a close watcher without user activation; create a close watcher with user activation; create a close watcher without user activation");
 </script>
diff --git a/close-watcher/user-activation/nynn-destroy.html b/close-watcher/user-activation/nynn-destroy.html
index 8519c8a..fb04109 100644
--- a/close-watcher/user-activation/nynn-destroy.html
+++ b/close-watcher/user-activation/nynn-destroy.html
@@ -24,10 +24,10 @@
 
   await sendCloseRequest();
   await waitForPotentialCloseEvent();
-  assert_array_equals(events, ["watcher4 close", "watcher3 close"]);
+  assert_array_equals(events, ["watcher4 cancel[cancelable=false]", "watcher4 close", "watcher3 cancel[cancelable=false]", "watcher3 close"]);
 
   await sendCloseRequest();
   await waitForPotentialCloseEvent();
-  assert_array_equals(events, ["watcher4 close", "watcher3 close", "watcher1 close"]);
+  assert_array_equals(events, ["watcher4 cancel[cancelable=false]", "watcher4 close", "watcher3 cancel[cancelable=false]", "watcher3 close", "watcher1 cancel[cancelable=false]", "watcher1 close"]);
 }, "Create a close watcher without user activation; create a close watcher with user activation; create two close watchers without user activation; remove the second close watcher");
 </script>
diff --git a/close-watcher/user-activation/nynn.html b/close-watcher/user-activation/nynn.html
index f6e74a0..ed9203d 100644
--- a/close-watcher/user-activation/nynn.html
+++ b/close-watcher/user-activation/nynn.html
@@ -22,10 +22,10 @@
 
   await sendCloseRequest();
   await waitForPotentialCloseEvent();
-  assert_array_equals(events, ["watcher4 close", "watcher3 close", "watcher2 close"]);
+  assert_array_equals(events, ["watcher4 cancel[cancelable=false]", "watcher4 close", "watcher3 cancel[cancelable=false]", "watcher3 close", "watcher2 cancel[cancelable=false]", "watcher2 close"]);
 
   await sendCloseRequest();
   await waitForPotentialCloseEvent();
-  assert_array_equals(events, ["watcher4 close", "watcher3 close", "watcher2 close", "watcher1 close"]);
+  assert_array_equals(events, ["watcher4 cancel[cancelable=false]", "watcher4 close", "watcher3 cancel[cancelable=false]", "watcher3 close", "watcher2 cancel[cancelable=false]", "watcher2 close", "watcher1 cancel[cancelable=false]", "watcher1 close"]);
 }, "Create a close watcher without user activation; create a close watcher with user activation; create two close watchers without user activation");
 </script>
diff --git a/close-watcher/user-activation/nyyn.html b/close-watcher/user-activation/nyyn-CloseWatcher.html
similarity index 64%
copy from close-watcher/user-activation/nyyn.html
copy to close-watcher/user-activation/nyyn-CloseWatcher.html
index f3987c1..4f60ef3 100644
--- a/close-watcher/user-activation/nyyn.html
+++ b/close-watcher/user-activation/nyyn-CloseWatcher.html
@@ -1,6 +1,4 @@
 <!doctype html>
-<meta name=variant content="?dialog">
-<meta name=variant content="?CloseWatcher">
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <script src="/resources/testdriver.js"></script>
@@ -11,7 +9,7 @@
 
 <body>
 <script>
-const type = location.search.substring(1);
+const type = "CloseWatcher";
 
 promise_test(async t => {
   const events = [];
@@ -23,14 +21,14 @@
 
   await sendCloseRequest();
   await waitForPotentialCloseEvent();
-  assert_array_equals(events, ["watcher4 close", "watcher3 close"]);
+  assert_array_equals(events, ["watcher4 cancel[cancelable=false]", "watcher4 close", "watcher3 cancel[cancelable=false]", "watcher3 close"]);
 
   await sendCloseRequest();
   await waitForPotentialCloseEvent();
-  assert_array_equals(events, ["watcher4 close", "watcher3 close", "watcher2 close"]);
+  assert_array_equals(events, ["watcher4 cancel[cancelable=false]", "watcher4 close", "watcher3 cancel[cancelable=false]", "watcher3 close", "watcher2 cancel[cancelable=false]", "watcher2 close"]);
 
   await sendCloseRequest();
   await waitForPotentialCloseEvent();
-  assert_array_equals(events, ["watcher4 close", "watcher3 close", "watcher2 close", "watcher1 close"]);
+  assert_array_equals(events, ["watcher4 cancel[cancelable=false]", "watcher4 close", "watcher3 cancel[cancelable=false]", "watcher3 close", "watcher2 cancel[cancelable=false]", "watcher2 close", "watcher1 cancel[cancelable=false]", "watcher1 close"]);
 }, "Create a close watcher without user activation; create two close watchers with user activation; create a close watcher without user activation");
 </script>
diff --git a/close-watcher/user-activation/nyyn.html b/close-watcher/user-activation/nyyn-dialog.html
similarity index 64%
rename from close-watcher/user-activation/nyyn.html
rename to close-watcher/user-activation/nyyn-dialog.html
index f3987c1..44926fd 100644
--- a/close-watcher/user-activation/nyyn.html
+++ b/close-watcher/user-activation/nyyn-dialog.html
@@ -1,6 +1,4 @@
 <!doctype html>
-<meta name=variant content="?dialog">
-<meta name=variant content="?CloseWatcher">
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <script src="/resources/testdriver.js"></script>
@@ -11,7 +9,7 @@
 
 <body>
 <script>
-const type = location.search.substring(1);
+const type = "dialog";
 
 promise_test(async t => {
   const events = [];
@@ -23,14 +21,14 @@
 
   await sendCloseRequest();
   await waitForPotentialCloseEvent();
-  assert_array_equals(events, ["watcher4 close", "watcher3 close"]);
+  assert_array_equals(events, ["watcher4 cancel[cancelable=false]", "watcher3 cancel[cancelable=false]", "watcher4 close", "watcher3 close"]);
 
   await sendCloseRequest();
   await waitForPotentialCloseEvent();
-  assert_array_equals(events, ["watcher4 close", "watcher3 close", "watcher2 close"]);
+  assert_array_equals(events, ["watcher4 cancel[cancelable=false]", "watcher3 cancel[cancelable=false]", "watcher4 close", "watcher3 close", "watcher2 cancel[cancelable=false]", "watcher2 close"]);
 
   await sendCloseRequest();
   await waitForPotentialCloseEvent();
-  assert_array_equals(events, ["watcher4 close", "watcher3 close", "watcher2 close", "watcher1 close"]);
+  assert_array_equals(events, ["watcher4 cancel[cancelable=false]", "watcher3 cancel[cancelable=false]", "watcher4 close", "watcher3 close", "watcher2 cancel[cancelable=false]", "watcher2 close", "watcher1 cancel[cancelable=false]", "watcher1 close"]);
 }, "Create a close watcher without user activation; create two close watchers with user activation; create a close watcher without user activation");
 </script>
diff --git a/close-watcher/user-activation/nyyyn-CloseWatcher.html b/close-watcher/user-activation/nyyyn-CloseWatcher.html
new file mode 100644
index 0000000..e2565a8
--- /dev/null
+++ b/close-watcher/user-activation/nyyyn-CloseWatcher.html
@@ -0,0 +1,38 @@
+<!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>
+
+<body>
+<script>
+const type = "CloseWatcher";
+
+promise_test(async t => {
+  const events = [];
+  const watcher1 = createRecordingCloseWatcher(t, events, "watcher1", type);
+  const watcher2 = await createBlessedRecordingCloseWatcher(t, events, "watcher2", type, watcher1);
+  const watcher3 = await createBlessedRecordingCloseWatcher(t, events, "watcher3", type, watcher2);
+  await createBlessedRecordingCloseWatcher(t, events, "watcher4", type, watcher3);
+  createRecordingCloseWatcher(t, events, "watcher5", type);
+
+  await sendCloseRequest();
+  await waitForPotentialCloseEvent();
+  assert_array_equals(events, ["watcher5 cancel[cancelable=false]", "watcher5 close", "watcher4 cancel[cancelable=false]", "watcher4 close"]);
+
+  await sendCloseRequest();
+  await waitForPotentialCloseEvent();
+  assert_array_equals(events, ["watcher5 cancel[cancelable=false]", "watcher5 close", "watcher4 cancel[cancelable=false]", "watcher4 close", "watcher3 cancel[cancelable=false]", "watcher3 close"]);
+
+  await sendCloseRequest();
+  await waitForPotentialCloseEvent();
+  assert_array_equals(events, ["watcher5 cancel[cancelable=false]", "watcher5 close", "watcher4 cancel[cancelable=false]", "watcher4 close", "watcher3 cancel[cancelable=false]", "watcher3 close", "watcher2 cancel[cancelable=false]", "watcher2 close"]);
+
+  await sendCloseRequest();
+  await waitForPotentialCloseEvent();
+  assert_array_equals(events, ["watcher5 cancel[cancelable=false]", "watcher5 close", "watcher4 cancel[cancelable=false]", "watcher4 close", "watcher3 cancel[cancelable=false]", "watcher3 close", "watcher2 cancel[cancelable=false]", "watcher2 close", "watcher1 cancel[cancelable=false]", "watcher1 close"]);
+}, "Create a close watcher without user activation; create three close watchers with user activation; create a close watcher without user activation");
+</script>
diff --git a/close-watcher/user-activation/nyyyn-dialog.html b/close-watcher/user-activation/nyyyn-dialog.html
new file mode 100644
index 0000000..8636112
--- /dev/null
+++ b/close-watcher/user-activation/nyyyn-dialog.html
@@ -0,0 +1,38 @@
+<!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>
+
+<body>
+<script>
+const type = "dialog";
+
+promise_test(async t => {
+  const events = [];
+  const watcher1 = createRecordingCloseWatcher(t, events, "watcher1", type);
+  const watcher2 = await createBlessedRecordingCloseWatcher(t, events, "watcher2", type, watcher1);
+  const watcher3 = await createBlessedRecordingCloseWatcher(t, events, "watcher3", type, watcher2);
+  await createBlessedRecordingCloseWatcher(t, events, "watcher4", type, watcher3);
+  createRecordingCloseWatcher(t, events, "watcher5", type);
+
+  await sendCloseRequest();
+  await waitForPotentialCloseEvent();
+  assert_array_equals(events, ["watcher5 cancel[cancelable=false]", "watcher4 cancel[cancelable=false]", "watcher5 close", "watcher4 close"]);
+
+  await sendCloseRequest();
+  await waitForPotentialCloseEvent();
+  assert_array_equals(events, ["watcher5 cancel[cancelable=false]", "watcher4 cancel[cancelable=false]", "watcher5 close", "watcher4 close", "watcher3 cancel[cancelable=false]", "watcher3 close"]);
+
+  await sendCloseRequest();
+  await waitForPotentialCloseEvent();
+  assert_array_equals(events, ["watcher5 cancel[cancelable=false]", "watcher4 cancel[cancelable=false]", "watcher5 close", "watcher4 close", "watcher3 cancel[cancelable=false]", "watcher3 close", "watcher2 cancel[cancelable=false]", "watcher2 close"]);
+
+  await sendCloseRequest();
+  await waitForPotentialCloseEvent();
+  assert_array_equals(events, ["watcher5 cancel[cancelable=false]", "watcher4 cancel[cancelable=false]", "watcher5 close", "watcher4 close", "watcher3 cancel[cancelable=false]", "watcher3 close", "watcher2 cancel[cancelable=false]", "watcher2 close", "watcher1 cancel[cancelable=false]", "watcher1 close"]);
+}, "Create a close watcher without user activation; create three close watchers with user activation; create a close watcher without user activation");
+</script>
diff --git a/close-watcher/user-activation/nyyyn.html b/close-watcher/user-activation/nyyyn.html
deleted file mode 100644
index 6cb8f3a..0000000
--- a/close-watcher/user-activation/nyyyn.html
+++ /dev/null
@@ -1,40 +0,0 @@
-<!doctype html>
-<meta name=variant content="?dialog">
-<meta name=variant content="?CloseWatcher">
-<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>
-
-<body>
-<script>
-const type = location.search.substring(1);
-
-promise_test(async t => {
-  const events = [];
-  const watcher1 = createRecordingCloseWatcher(t, events, "watcher1", type);
-  const watcher2 = await createBlessedRecordingCloseWatcher(t, events, "watcher2", type, watcher1);
-  const watcher3 = await createBlessedRecordingCloseWatcher(t, events, "watcher3", type, watcher2);
-  await createBlessedRecordingCloseWatcher(t, events, "watcher4", type, watcher3);
-  createRecordingCloseWatcher(t, events, "watcher5", type);
-
-  await sendCloseRequest();
-  await waitForPotentialCloseEvent();
-  assert_array_equals(events, ["watcher5 close", "watcher4 close"]);
-
-  await sendCloseRequest();
-  await waitForPotentialCloseEvent();
-  assert_array_equals(events, ["watcher5 close", "watcher4 close", "watcher3 close"]);
-
-  await sendCloseRequest();
-  await waitForPotentialCloseEvent();
-  assert_array_equals(events, ["watcher5 close", "watcher4 close", "watcher3 close", "watcher2 close"]);
-
-  await sendCloseRequest();
-  await waitForPotentialCloseEvent();
-  assert_array_equals(events, ["watcher5 close", "watcher4 close", "watcher3 close", "watcher2 close", "watcher1 close"]);
-}, "Create a close watcher without user activation; create three close watchers with user activation; create a close watcher without user activation");
-</script>
diff --git a/close-watcher/user-activation/y.html b/close-watcher/user-activation/y.html
index ee58a92..78c432d 100644
--- a/close-watcher/user-activation/y.html
+++ b/close-watcher/user-activation/y.html
@@ -20,6 +20,6 @@
 
   await sendCloseRequest();
   await waitForPotentialCloseEvent();
-  assert_array_equals(events, ["cancel", "close"]);
+  assert_array_equals(events, ["cancel[cancelable=true]", "close"]);
 }, "Create a close watcher with user activation");
 </script>
diff --git a/close-watcher/user-activation/yn-activate.html b/close-watcher/user-activation/yn-activate.html
index af7289a..d62b4df 100644
--- a/close-watcher/user-activation/yn-activate.html
+++ b/close-watcher/user-activation/yn-activate.html
@@ -23,10 +23,10 @@
 
   await sendCloseRequest();
   await waitForPotentialCloseEvent();
-  assert_array_equals(events, ["watcher2 cancel", "watcher2 close"]);
+  assert_array_equals(events, ["watcher2 cancel[cancelable=true]", "watcher2 close"]);
 
   await sendCloseRequest();
   await waitForPotentialCloseEvent();
-  assert_array_equals(events, ["watcher2 cancel", "watcher2 close", "watcher1 cancel", "watcher1 close"]);
+  assert_array_equals(events, ["watcher2 cancel[cancelable=true]", "watcher2 close", "watcher1 cancel[cancelable=true]", "watcher1 close"]);
 }, "Create a close watcher with user activation; create a close watcher without user activation; send user activation");
 </script>
diff --git a/close-watcher/user-activation/yn.html b/close-watcher/user-activation/yn.html
index 8f7e90e2..578f43d 100644
--- a/close-watcher/user-activation/yn.html
+++ b/close-watcher/user-activation/yn.html
@@ -21,10 +21,10 @@
 
   await sendCloseRequest();
   await waitForPotentialCloseEvent();
-  assert_array_equals(events, ["watcher2 close"]);
+  assert_array_equals(events, ["watcher2 cancel[cancelable=false]", "watcher2 close"]);
 
   await sendCloseRequest();
   await waitForPotentialCloseEvent();
-  assert_array_equals(events, ["watcher2 close", "watcher1 close"]);
+  assert_array_equals(events, ["watcher2 cancel[cancelable=false]", "watcher2 close", "watcher1 cancel[cancelable=false]", "watcher1 close"]);
 }, "Create a close watcher with user activation; create a close watcher without user activation");
 </script>
diff --git a/close-watcher/user-activation/ynn.html b/close-watcher/user-activation/ynn-CloseWatcher.html
similarity index 70%
copy from close-watcher/user-activation/ynn.html
copy to close-watcher/user-activation/ynn-CloseWatcher.html
index 8cc7f5b..50b5a81 100644
--- a/close-watcher/user-activation/ynn.html
+++ b/close-watcher/user-activation/ynn-CloseWatcher.html
@@ -1,6 +1,4 @@
 <!doctype html>
-<meta name=variant content="?dialog">
-<meta name=variant content="?CloseWatcher">
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <script src="/resources/testdriver.js"></script>
@@ -11,7 +9,7 @@
 
 <body>
 <script>
-const type = location.search.substring(1);
+const type = "CloseWatcher";
 
 promise_test(async t => {
   const events = [];
@@ -22,10 +20,10 @@
 
   await sendCloseRequest();
   await waitForPotentialCloseEvent();
-  assert_array_equals(events, ["watcher3 close", "watcher2 close"]);
+  assert_array_equals(events, ["watcher3 cancel[cancelable=false]", "watcher3 close", "watcher2 cancel[cancelable=false]", "watcher2 close"]);
 
   await sendCloseRequest();
   await waitForPotentialCloseEvent();
-  assert_array_equals(events, ["watcher3 close", "watcher2 close", "watcher1 close"]);
+  assert_array_equals(events, ["watcher3 cancel[cancelable=false]", "watcher3 close", "watcher2 cancel[cancelable=false]", "watcher2 close", "watcher1 cancel[cancelable=false]", "watcher1 close"]);
 }, "Create a close watcher with user activation; create two close watchers without user activation");
 </script>
diff --git a/close-watcher/user-activation/ynn.html b/close-watcher/user-activation/ynn-dialog.html
similarity index 70%
rename from close-watcher/user-activation/ynn.html
rename to close-watcher/user-activation/ynn-dialog.html
index 8cc7f5b..c10e94d 100644
--- a/close-watcher/user-activation/ynn.html
+++ b/close-watcher/user-activation/ynn-dialog.html
@@ -1,6 +1,4 @@
 <!doctype html>
-<meta name=variant content="?dialog">
-<meta name=variant content="?CloseWatcher">
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <script src="/resources/testdriver.js"></script>
@@ -11,7 +9,7 @@
 
 <body>
 <script>
-const type = location.search.substring(1);
+const type = "dialog";
 
 promise_test(async t => {
   const events = [];
@@ -22,10 +20,10 @@
 
   await sendCloseRequest();
   await waitForPotentialCloseEvent();
-  assert_array_equals(events, ["watcher3 close", "watcher2 close"]);
+  assert_array_equals(events, ["watcher3 cancel[cancelable=false]", "watcher2 cancel[cancelable=false]", "watcher3 close", "watcher2 close"]);
 
   await sendCloseRequest();
   await waitForPotentialCloseEvent();
-  assert_array_equals(events, ["watcher3 close", "watcher2 close", "watcher1 close"]);
+  assert_array_equals(events, ["watcher3 cancel[cancelable=false]", "watcher2 cancel[cancelable=false]", "watcher3 close", "watcher2 close", "watcher1 cancel[cancelable=false]", "watcher1 close"]);
 }, "Create a close watcher with user activation; create two close watchers without user activation");
 </script>
diff --git a/close-watcher/user-activation/yy.html b/close-watcher/user-activation/yy.html
index 0aa03cd..9c0f21b 100644
--- a/close-watcher/user-activation/yy.html
+++ b/close-watcher/user-activation/yy.html
@@ -21,10 +21,10 @@
 
   await sendCloseRequest();
   await waitForPotentialCloseEvent();
-  assert_array_equals(events, ["watcher2 cancel", "watcher2 close"]);
+  assert_array_equals(events, ["watcher2 cancel[cancelable=true]", "watcher2 close"]);
 
   await sendCloseRequest();
   await waitForPotentialCloseEvent();
-  assert_array_equals(events, ["watcher2 cancel", "watcher2 close", "watcher1 cancel", "watcher1 close"]);
+  assert_array_equals(events, ["watcher2 cancel[cancelable=true]", "watcher2 close", "watcher1 cancel[cancelable=true]", "watcher1 close"]);
 }, "Create two close watchers with user activation");
 </script>
diff --git a/close-watcher/user-activation/yyn.html b/close-watcher/user-activation/yyn.html
index b87cf7a..2f75377 100644
--- a/close-watcher/user-activation/yyn.html
+++ b/close-watcher/user-activation/yyn.html
@@ -22,14 +22,14 @@
 
   await sendCloseRequest();
   await waitForPotentialCloseEvent();
-  assert_array_equals(events, ["watcher3 close"]);
+  assert_array_equals(events, ["watcher3 cancel[cancelable=false]", "watcher3 close"]);
 
   await sendCloseRequest();
   await waitForPotentialCloseEvent();
-  assert_array_equals(events, ["watcher3 close", "watcher2 close"]);
+  assert_array_equals(events, ["watcher3 cancel[cancelable=false]", "watcher3 close", "watcher2 cancel[cancelable=false]", "watcher2 close"]);
 
   await sendCloseRequest();
   await waitForPotentialCloseEvent();
-  assert_array_equals(events, ["watcher3 close", "watcher2 close", "watcher1 close"]);
+  assert_array_equals(events, ["watcher3 cancel[cancelable=false]", "watcher3 close", "watcher2 cancel[cancelable=false]", "watcher2 close", "watcher1 cancel[cancelable=false]", "watcher1 close"]);
 }, "Create two close watchers with user activation; create a close watcher without user activation");
 </script>
diff --git a/close-watcher/user-activation/yyy-CloseWatcher-dialog-popover.html b/close-watcher/user-activation/yyy-CloseWatcher-dialog-popover.html
index f0a1cb0..8650fb3 100644
--- a/close-watcher/user-activation/yyy-CloseWatcher-dialog-popover.html
+++ b/close-watcher/user-activation/yyy-CloseWatcher-dialog-popover.html
@@ -35,12 +35,12 @@
   await waitForPotentialCloseEvent();
   assert_false(popover.matches(':popover-open'), 'Second close request: The popover should be closed.');
   assert_false(dialog.hasAttribute('open'), 'Second close request: The dialog should be closed.');
-  assert_array_equals(events, ['dialog cancel', 'dialog close']);
+  assert_array_equals(events, ['dialog cancel[cancelable=true]', 'dialog close']);
 
   await sendCloseRequest();
   await waitForPotentialCloseEvent();
   assert_false(popover.matches(':popover-open'), 'Third close request: The popover should be closed.');
   assert_false(dialog.hasAttribute('open'), 'Third close request: The dialog should be closed.');
-  assert_array_equals(events, ['dialog cancel', 'dialog close', 'CloseWatcher cancel', 'CloseWatcher close']);
+  assert_array_equals(events, ['dialog cancel[cancelable=true]', 'dialog close', 'CloseWatcher cancel[cancelable=true]', 'CloseWatcher close']);
 }, 'Create a CloseWatcher with user activation; create a dialog with user activation; create a popover with user activation');
 </script>
diff --git a/close-watcher/user-activation/yyy-activate-CloseWatcher-dialog-popover.html b/close-watcher/user-activation/yyy-activate-CloseWatcher-dialog-popover.html
index ed41d1b..a58dd07 100644
--- a/close-watcher/user-activation/yyy-activate-CloseWatcher-dialog-popover.html
+++ b/close-watcher/user-activation/yyy-activate-CloseWatcher-dialog-popover.html
@@ -37,13 +37,13 @@
   await waitForPotentialCloseEvent();
   assert_false(popover.matches(':popover-open'), 'Second close request: The popover should be closed.');
   assert_false(dialog.hasAttribute('open'), 'Second close request: The dialog should be closed.');
-  assert_array_equals(events, ['dialog cancel', 'dialog close']);
+  assert_array_equals(events, ['dialog cancel[cancelable=true]', 'dialog close']);
 
   await test_driver.bless();
   await sendCloseRequest();
   await waitForPotentialCloseEvent();
   assert_false(popover.matches(':popover-open'), 'Third close request: The popover should be closed.');
   assert_false(dialog.hasAttribute('open'), 'Third close request: The dialog should be closed.');
-  assert_array_equals(events, ['dialog cancel', 'dialog close', 'CloseWatcher cancel', 'CloseWatcher close']);
+  assert_array_equals(events, ['dialog cancel[cancelable=true]', 'dialog close', 'CloseWatcher cancel[cancelable=true]', 'CloseWatcher close']);
 }, 'Create a CloseWatcher with user activation; create a dialog with user activation; create a popover with user activation; sending user activation before each close request');
 </script>
diff --git a/close-watcher/user-activation/yyy.html b/close-watcher/user-activation/yyy.html
index f16767a..eaf8944 100644
--- a/close-watcher/user-activation/yyy.html
+++ b/close-watcher/user-activation/yyy.html
@@ -22,14 +22,14 @@
 
   await sendCloseRequest();
   await waitForPotentialCloseEvent();
-  assert_array_equals(events, ["watcher3 cancel", "watcher3 close"]);
+  assert_array_equals(events, ["watcher3 cancel[cancelable=true]", "watcher3 close"]);
 
   await sendCloseRequest();
   await waitForPotentialCloseEvent();
-  assert_array_equals(events, ["watcher3 cancel", "watcher3 close", "watcher2 cancel", "watcher2 close"]);
+  assert_array_equals(events, ["watcher3 cancel[cancelable=true]", "watcher3 close", "watcher2 cancel[cancelable=true]", "watcher2 close"]);
 
   await sendCloseRequest();
   await waitForPotentialCloseEvent();
-  assert_array_equals(events, ["watcher3 cancel", "watcher3 close", "watcher2 cancel", "watcher2 close", "watcher1 cancel", "watcher1 close"]);
+  assert_array_equals(events, ["watcher3 cancel[cancelable=true]", "watcher3 close", "watcher2 cancel[cancelable=true]", "watcher2 close", "watcher1 cancel[cancelable=true]", "watcher1 close"]);
 }, "Create three close watchers with user activation");
 </script>