Bug 1800456 - Add preconditions to css-view-transitions tests, r=emilio

This ensures that the tests don't just timeout when the feature isn't implemented.
diff --git a/content-security-policy/inheritance/history.sub.html b/content-security-policy/inheritance/history.sub.html
index 6ebd679..5ea6abe 100644
--- a/content-security-policy/inheritance/history.sub.html
+++ b/content-security-policy/inheritance/history.sub.html
@@ -133,7 +133,7 @@
 
       // Closing fails sometimes on Firefox:
       // https://bugzilla.mozilla.org/show_bug.cgi?id=1698093
-      t.add_cleanup(() => { try { popup.close(); } catch {} });
+      t.add_cleanup(() => { popup.close(); });
 
       // Perform a real navigation in the popup. This is needed because the
       // initial empty document is not stored in history (so there is no way of
diff --git a/css/css-view-transitions/3d-transform-incoming.html b/css/css-view-transitions/3d-transform-incoming.html
index 1c3a20d..d852108 100644
--- a/css/css-view-transitions/3d-transform-incoming.html
+++ b/css/css-view-transitions/3d-transform-incoming.html
@@ -50,6 +50,8 @@
 <div id=hidden></div>
 
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 function runTest() {
   document.startViewTransition(() => {
     wrapper.classList.toggle("wrap_perspective");
diff --git a/css/css-view-transitions/3d-transform-outgoing.html b/css/css-view-transitions/3d-transform-outgoing.html
index 2a23198..3cb2952 100644
--- a/css/css-view-transitions/3d-transform-outgoing.html
+++ b/css/css-view-transitions/3d-transform-outgoing.html
@@ -51,6 +51,8 @@
 <div id=hidden></div>
 
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 function runTest() {
   document.startViewTransition(() => {
     wrapper.classList.toggle("wrap_perspective");
diff --git a/css/css-view-transitions/content-smaller-than-box-size.html b/css/css-view-transitions/content-smaller-than-box-size.html
index f87a18c..8cd5bc4 100644
--- a/css/css-view-transitions/content-smaller-than-box-size.html
+++ b/css/css-view-transitions/content-smaller-than-box-size.html
@@ -43,6 +43,8 @@
 <div id=hidden class=hidden></div>
 
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 async function runTest() {
   document.startViewTransition(() => {
     requestAnimationFrame(takeScreenshot);
diff --git a/css/css-view-transitions/content-visibility-auto-shared-element.html b/css/css-view-transitions/content-visibility-auto-shared-element.html
index 9825dfa..b678f48 100644
--- a/css/css-view-transitions/content-visibility-auto-shared-element.html
+++ b/css/css-view-transitions/content-visibility-auto-shared-element.html
@@ -65,6 +65,8 @@
 </div>
 
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 async function runTest() {
   lockme.classList.add("locked");
   document.startViewTransition(() => {
diff --git a/css/css-view-transitions/content-with-clip-max-texture-size.html b/css/css-view-transitions/content-with-clip-max-texture-size.html
index dd71e7c..b1c9638 100644
--- a/css/css-view-transitions/content-with-clip-max-texture-size.html
+++ b/css/css-view-transitions/content-with-clip-max-texture-size.html
@@ -54,6 +54,8 @@
 <div id=hidden class=hidden></div>
 
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 async function runTest() {
   scrollblue.scrollIntoView();
 
diff --git a/css/css-view-transitions/content-with-clip-root.html b/css/css-view-transitions/content-with-clip-root.html
index c014a8c..805610b 100644
--- a/css/css-view-transitions/content-with-clip-root.html
+++ b/css/css-view-transitions/content-with-clip-root.html
@@ -61,6 +61,8 @@
 <div id=hidden class=hidden></div>
 
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 async function runTest() {
   document.startViewTransition(() => {
     // Add a shared element to ensure its bounds don't expand the root snapshot
diff --git a/css/css-view-transitions/content-with-clip.html b/css/css-view-transitions/content-with-clip.html
index d84b614..7354125 100644
--- a/css/css-view-transitions/content-with-clip.html
+++ b/css/css-view-transitions/content-with-clip.html
@@ -57,6 +57,8 @@
 <div id=hidden class=hidden></div>
 
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 async function runTest() {
   document.startViewTransition(() => {
     target1.style = "";
diff --git a/css/css-view-transitions/content-with-inline-child.html b/css/css-view-transitions/content-with-inline-child.html
index e195f5f..6bae020 100644
--- a/css/css-view-transitions/content-with-inline-child.html
+++ b/css/css-view-transitions/content-with-inline-child.html
@@ -53,6 +53,8 @@
 </div>
 
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 async function runTest() {
   document.startViewTransition(() => {
     // Remove the target to ensure the ref is compared against the snapshot.
diff --git a/css/css-view-transitions/content-with-transform-new-image.html b/css/css-view-transitions/content-with-transform-new-image.html
index 31cd188..f459742 100644
--- a/css/css-view-transitions/content-with-transform-new-image.html
+++ b/css/css-view-transitions/content-with-transform-new-image.html
@@ -47,6 +47,8 @@
 <div id=hidden class=hidden></div>
 
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 async function runTest() {
   let t = document.startViewTransition(() => {
     requestAnimationFrame(() =>  requestAnimationFrame(takeScreenshot));
diff --git a/css/css-view-transitions/content-with-transform-old-image.html b/css/css-view-transitions/content-with-transform-old-image.html
index 445e1b8..a31a274 100644
--- a/css/css-view-transitions/content-with-transform-old-image.html
+++ b/css/css-view-transitions/content-with-transform-old-image.html
@@ -48,6 +48,8 @@
 <div id=hidden class=hidden></div>
 
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 async function runTest() {
   document.startViewTransition(() => {
     requestAnimationFrame(() =>  requestAnimationFrame(takeScreenshot));
diff --git a/css/css-view-transitions/css-tags-paint-order-with-entry.html b/css/css-view-transitions/css-tags-paint-order-with-entry.html
index 28a0d6b..9f79ba2 100644
--- a/css/css-view-transitions/css-tags-paint-order-with-entry.html
+++ b/css/css-view-transitions/css-tags-paint-order-with-entry.html
@@ -95,6 +95,8 @@
 <div id=hidden class=hidden></div>
 
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 async function runTest() {
   document.startViewTransition(() => {
     const f = document.createElement("div");
diff --git a/css/css-view-transitions/css-tags-paint-order.html b/css/css-view-transitions/css-tags-paint-order.html
index 49c9323..2f71a70 100644
--- a/css/css-view-transitions/css-tags-paint-order.html
+++ b/css/css-view-transitions/css-tags-paint-order.html
@@ -81,6 +81,8 @@
 <div id=hidden class=hidden></div>
 
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 async function runTest() {
   document.startViewTransition(() => {
     requestAnimationFrame(() => requestAnimationFrame(takeScreenshot));
diff --git a/css/css-view-transitions/css-tags-shared-element.html b/css/css-view-transitions/css-tags-shared-element.html
index b750a6b..fad0d37 100644
--- a/css/css-view-transitions/css-tags-shared-element.html
+++ b/css/css-view-transitions/css-tags-shared-element.html
@@ -61,6 +61,8 @@
 <div id=hidden class=hidden></div>
 
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 async function runTest() {
   document.startViewTransition(() => {
     left.classList.remove("left-tag");
diff --git a/css/css-view-transitions/dialog-in-top-layer-during-transition-new.html b/css/css-view-transitions/dialog-in-top-layer-during-transition-new.html
index d5135be..e84167a 100644
--- a/css/css-view-transitions/dialog-in-top-layer-during-transition-new.html
+++ b/css/css-view-transitions/dialog-in-top-layer-during-transition-new.html
@@ -56,6 +56,8 @@
 <div id=hidden class=hidden></div>
 
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 async function runTest() {
   const transition = document.startViewTransition(() => {
     target.showModal();
diff --git a/css/css-view-transitions/dialog-in-top-layer-during-transition-old.html b/css/css-view-transitions/dialog-in-top-layer-during-transition-old.html
index da4bcf1..672295c 100644
--- a/css/css-view-transitions/dialog-in-top-layer-during-transition-old.html
+++ b/css/css-view-transitions/dialog-in-top-layer-during-transition-old.html
@@ -56,6 +56,8 @@
 <div id=hidden class=hidden></div>
 
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 async function runTest() {
   target.showModal();
   const transition = document.startViewTransition(() => {
diff --git a/css/css-view-transitions/duplicate-tag-rejects-capture.html b/css/css-view-transitions/duplicate-tag-rejects-capture.html
index 517502b..da340de 100644
--- a/css/css-view-transitions/duplicate-tag-rejects-capture.html
+++ b/css/css-view-transitions/duplicate-tag-rejects-capture.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html>
-<html class=reftest-wait>
+<html>
 <title>View transitions: duplicate tags in the old DOM skip the transition</title>
 <link rel="help" href="https://www.w3.org/TR/css-view-transitions-1/">
 <link rel="author" href="mailto:[email protected]">
@@ -21,6 +21,7 @@
 
 <script>
 promise_test(async t => {
+  assert_implements(document.startViewTransition, "Missing document.startViewTransition");
   return new Promise((resolve, reject) => {
     first.style = "view-transition-name: target";
     second.style = "view-transition-name: target";
diff --git a/css/css-view-transitions/duplicate-tag-rejects-start.html b/css/css-view-transitions/duplicate-tag-rejects-start.html
index 2d99717..f34c337 100644
--- a/css/css-view-transitions/duplicate-tag-rejects-start.html
+++ b/css/css-view-transitions/duplicate-tag-rejects-start.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html>
-<html class=reftest-wait>
+<html>
 <title>View transitions: duplicate tags in the new DOM skip the transition</title>
 <link rel="help" href="https://www.w3.org/TR/css-view-transitions-1/">
 <link rel="author" href="mailto:[email protected]">
@@ -21,6 +21,7 @@
 
 <script>
 promise_test(async t => {
+  assert_implements(document.startViewTransition, "Missing document.startViewTransition");
   return new Promise((resolve, reject) => {
     first.style = "view-transition-name: target";
     let transition = document.startViewTransition(() => {
diff --git a/css/css-view-transitions/element-with-overflow.html b/css/css-view-transitions/element-with-overflow.html
index 188e00d..b600bce 100644
--- a/css/css-view-transitions/element-with-overflow.html
+++ b/css/css-view-transitions/element-with-overflow.html
@@ -56,6 +56,8 @@
 <div class="hidden"></div>
 
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 async function runTest() {
   document.startViewTransition(() => {
     document.getElementsByClassName("target")[0].style.background="lightgreen";
diff --git a/css/css-view-transitions/event-pseudo-name.html b/css/css-view-transitions/event-pseudo-name.html
index b6af305..b49cde3 100644
--- a/css/css-view-transitions/event-pseudo-name.html
+++ b/css/css-view-transitions/event-pseudo-name.html
@@ -35,6 +35,7 @@
 <div id=first></div>
 <script>
 async_test(t => {
+  assert_implements(document.startViewTransition, "Missing document.startViewTransition");
   let names = [];
   document.documentElement.addEventListener("animationstart", (e) => {
     names.push(e.pseudoElement);
diff --git a/css/css-view-transitions/far-away-capture.html b/css/css-view-transitions/far-away-capture.html
index 75e3bdf..f95ec96 100644
--- a/css/css-view-transitions/far-away-capture.html
+++ b/css/css-view-transitions/far-away-capture.html
@@ -66,6 +66,8 @@
 </div>
 
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 async function runTest() {
   document.startViewTransition(() => {
     content.remove();
diff --git a/css/css-view-transitions/hit-test-unpainted-element-from-point.html b/css/css-view-transitions/hit-test-unpainted-element-from-point.html
index 390a366..ec5e407 100644
--- a/css/css-view-transitions/hit-test-unpainted-element-from-point.html
+++ b/css/css-view-transitions/hit-test-unpainted-element-from-point.html
@@ -52,6 +52,7 @@
 
 <script>
 async_test(t => {
+  assert_implements(document.startViewTransition, "Missing document.startViewTransition");
   document.startViewTransition(() => {
     target.classList.toggle("before");
     target.classList.toggle("after");
@@ -68,5 +69,4 @@
     });
   });
 }, "hit test should not hit unpainted element, but does hit pseudo and unrelated elements");
-
 </script>
diff --git a/css/css-view-transitions/hit-test-unpainted-element.html b/css/css-view-transitions/hit-test-unpainted-element.html
index 792ddc1..ef4bc66 100644
--- a/css/css-view-transitions/hit-test-unpainted-element.html
+++ b/css/css-view-transitions/hit-test-unpainted-element.html
@@ -46,6 +46,8 @@
 <div id=target class=before></div>
 
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 function mouseMoveToTarget(x, y) {
   return new test_driver.Actions().pointerMove(x, y).send();
 }
diff --git a/css/css-view-transitions/hit-test-unrelated-element.html b/css/css-view-transitions/hit-test-unrelated-element.html
index 3620e5e..188521d 100644
--- a/css/css-view-transitions/hit-test-unrelated-element.html
+++ b/css/css-view-transitions/hit-test-unrelated-element.html
@@ -53,6 +53,8 @@
 <div id=unrelated></div>
 
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 function mouseMoveToTarget(x, y) {
   return new test_driver.Actions().pointerMove(x, y).send();
 }
diff --git a/css/css-view-transitions/iframe-transition.sub.html b/css/css-view-transitions/iframe-transition.sub.html
index 9c64f97..914db87 100644
--- a/css/css-view-transitions/iframe-transition.sub.html
+++ b/css/css-view-transitions/iframe-transition.sub.html
@@ -13,6 +13,8 @@
 </style>
 
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 addEventListener("message", takeScreenshot);
 </script>
 
diff --git a/css/css-view-transitions/input-blocked-when-rendering-suppressed.html b/css/css-view-transitions/input-blocked-when-rendering-suppressed.html
index a571b23..7f550c8 100644
--- a/css/css-view-transitions/input-blocked-when-rendering-suppressed.html
+++ b/css/css-view-transitions/input-blocked-when-rendering-suppressed.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html>
-<html class=reftest-wait>
+<html>
 <title>Shared transitions: ensure input is discarded when rendering is suppressed</title>
 <link rel="help" href="https://github.com/WICG/view-transitions">
 <link rel="author" href="mailto:[email protected]">
@@ -58,6 +58,7 @@
 }
 
 promise_test(async t => {
+  assert_implements(document.startViewTransition, "Missing document.startViewTransition");
   return new Promise(async (resolve, reject) => {
     // Dispatch an event before starting the test to finish init logic in
     // synthetic input dispatch.
diff --git a/css/css-view-transitions/japanese-tag.html b/css/css-view-transitions/japanese-tag.html
index d9ad8c5..6d04155 100644
--- a/css/css-view-transitions/japanese-tag.html
+++ b/css/css-view-transitions/japanese-tag.html
@@ -73,6 +73,8 @@
 <div id=three class="shared rl">T</div>
 
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 async function runTest() {
   document.startViewTransition(() => {
     one.remove();
diff --git a/css/css-view-transitions/mix-blend-mode-only-on-transition.html b/css/css-view-transitions/mix-blend-mode-only-on-transition.html
index a9b9cb7..5047a06 100644
--- a/css/css-view-transitions/mix-blend-mode-only-on-transition.html
+++ b/css/css-view-transitions/mix-blend-mode-only-on-transition.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html>
-<html class=reftest-wait>
+<html>
 <title>SET: Blend modes are set up only in paired transitions</title>
 <link rel="help" href="https://github.com/WICG/view-transitions">
 <link rel="author" href="mailto:[email protected]">
@@ -25,6 +25,7 @@
 
 <script>
 async_test(t => {
+  assert_implements(document.startViewTransition, "Missing document.startViewTransition");
   let transition = document.startViewTransition(() => {
     first.classList.toggle("tagone");
     second.classList.toggle("tagtwo");
diff --git a/css/css-view-transitions/new-and-old-sizes-match-ref.html b/css/css-view-transitions/new-and-old-sizes-match-ref.html
index 5a645bc..3bcf0343 100644
--- a/css/css-view-transitions/new-and-old-sizes-match-ref.html
+++ b/css/css-view-transitions/new-and-old-sizes-match-ref.html
@@ -36,6 +36,8 @@
 </style>
 <div id=target class=box><div class=inner_overflow>X</div></div>
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 async function runTest() {
   document.startViewTransition(() => {
     requestAnimationFrame(() => requestAnimationFrame(takeScreenshot));
diff --git a/css/css-view-transitions/new-and-old-sizes-match.html b/css/css-view-transitions/new-and-old-sizes-match.html
index 9eeb8364..b80f90f 100644
--- a/css/css-view-transitions/new-and-old-sizes-match.html
+++ b/css/css-view-transitions/new-and-old-sizes-match.html
@@ -38,6 +38,8 @@
 </style>
 <div id=target class=box><div class=inner_overflow>X</div></div>
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 async function runTest() {
   let t = document.startViewTransition(() => {
     requestAnimationFrame(() => requestAnimationFrame(takeScreenshot));
diff --git a/css/css-view-transitions/new-content-captures-clip-path.html b/css/css-view-transitions/new-content-captures-clip-path.html
index 0e78e0f..85f29ba 100644
--- a/css/css-view-transitions/new-content-captures-clip-path.html
+++ b/css/css-view-transitions/new-content-captures-clip-path.html
@@ -35,6 +35,8 @@
 </style>
 <div id=e1 class=box></div>
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 async function runTest() {
   let t = document.startViewTransition(() => {
     e1.classList.add("dst");
diff --git a/css/css-view-transitions/new-content-captures-different-size.html b/css/css-view-transitions/new-content-captures-different-size.html
index 1cd57f9..da9983f 100644
--- a/css/css-view-transitions/new-content-captures-different-size.html
+++ b/css/css-view-transitions/new-content-captures-different-size.html
@@ -49,6 +49,8 @@
 <div id=e2 class=box>two</div>
 <div id=e3 class=box>three</div>
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 async function runTest() {
   let t = document.startViewTransition(() => {
     e1.classList.add("dst");
diff --git a/css/css-view-transitions/new-content-captures-opacity.html b/css/css-view-transitions/new-content-captures-opacity.html
index 15ac0b6..02c43d7 100644
--- a/css/css-view-transitions/new-content-captures-opacity.html
+++ b/css/css-view-transitions/new-content-captures-opacity.html
@@ -32,6 +32,8 @@
 <div id=e2 class=box></div>
 <div id=e3 class=box></div>
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 async function runTest() {
   let t = document.startViewTransition(() => {
     e1.classList.add("dst");
diff --git a/css/css-view-transitions/new-content-captures-root.html b/css/css-view-transitions/new-content-captures-root.html
index d2944ef..3b3fe71 100644
--- a/css/css-view-transitions/new-content-captures-root.html
+++ b/css/css-view-transitions/new-content-captures-root.html
@@ -38,6 +38,8 @@
 <div id=e1 class=box></div>
 <div id=shared></div>
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 async function runTest() {
   let t = document.startViewTransition(() => {
     e1.classList.add("dst");
diff --git a/css/css-view-transitions/new-content-container-writing-modes.html b/css/css-view-transitions/new-content-container-writing-modes.html
index 51847e5..75149ca 100644
--- a/css/css-view-transitions/new-content-container-writing-modes.html
+++ b/css/css-view-transitions/new-content-container-writing-modes.html
@@ -66,6 +66,8 @@
 <div class=rl><div id=three class=shared>T</div></div>
 
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 async function runTest() {
   s1.style = "view-transition-name: s1";
   s2.style = "view-transition-name: s2";
diff --git a/css/css-view-transitions/new-content-element-writing-modes.html b/css/css-view-transitions/new-content-element-writing-modes.html
index 0c50e22..20d81a6 100644
--- a/css/css-view-transitions/new-content-element-writing-modes.html
+++ b/css/css-view-transitions/new-content-element-writing-modes.html
@@ -70,6 +70,8 @@
 <div id=three class="rl shared">T</div>
 
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 async function runTest() {
   s1.style = "view-transition-name: s1";
   s2.style = "view-transition-name: s2";
diff --git a/css/css-view-transitions/new-content-has-scrollbars.html b/css/css-view-transitions/new-content-has-scrollbars.html
index 6f4066a..c21eb0e 100644
--- a/css/css-view-transitions/new-content-has-scrollbars.html
+++ b/css/css-view-transitions/new-content-has-scrollbars.html
@@ -46,6 +46,8 @@
 
 <div></div>
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 // Ensure a root snapshot captured in the absence of scrollbars is displayed at
 // full size when rendered in the incoming viewport which is inset by
 // scrollbars. The content must not be scaled-to-fit.
diff --git a/css/css-view-transitions/new-content-intrinsic-aspect-ratio.html b/css/css-view-transitions/new-content-intrinsic-aspect-ratio.html
index 88eeddc..924630f 100644
--- a/css/css-view-transitions/new-content-intrinsic-aspect-ratio.html
+++ b/css/css-view-transitions/new-content-intrinsic-aspect-ratio.html
@@ -55,6 +55,8 @@
 <div id=target2 class=box></div>
 <div id=hidden></div>
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 async function runTest() {
   document.startViewTransition(() => {
     requestAnimationFrame(() => requestAnimationFrame(takeScreenshot));
diff --git a/css/css-view-transitions/new-content-is-empty-div.html b/css/css-view-transitions/new-content-is-empty-div.html
index 576c961..420dff2 100644
--- a/css/css-view-transitions/new-content-is-empty-div.html
+++ b/css/css-view-transitions/new-content-is-empty-div.html
@@ -45,6 +45,8 @@
 <div id=hidden></div>
 
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 async function runTest() {
   source.style = "view-transition-name: shared";
   document.startViewTransition(() => {
diff --git a/css/css-view-transitions/new-content-object-fit-fill.html b/css/css-view-transitions/new-content-object-fit-fill.html
index 5b1941a..04b404d 100644
--- a/css/css-view-transitions/new-content-object-fit-fill.html
+++ b/css/css-view-transitions/new-content-object-fit-fill.html
@@ -65,6 +65,8 @@
 <div id=hidden></div>
 
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 async function runTest() {
   document.startViewTransition(() => {
     requestAnimationFrame(() => requestAnimationFrame(takeScreenshot));
diff --git a/css/css-view-transitions/new-content-object-fit-none.html b/css/css-view-transitions/new-content-object-fit-none.html
index d3e4d2d..eab7a0e 100644
--- a/css/css-view-transitions/new-content-object-fit-none.html
+++ b/css/css-view-transitions/new-content-object-fit-none.html
@@ -58,6 +58,8 @@
 <div id=hidden></div>
 
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 async function runTest() {
   document.startViewTransition(() => {
     requestAnimationFrame(() => requestAnimationFrame(takeScreenshot));
diff --git a/css/css-view-transitions/new-content-object-view-box-clip-path-reference.html b/css/css-view-transitions/new-content-object-view-box-clip-path-reference.html
index 6e28a13..8dd5774 100644
--- a/css/css-view-transitions/new-content-object-view-box-clip-path-reference.html
+++ b/css/css-view-transitions/new-content-object-view-box-clip-path-reference.html
@@ -82,6 +82,8 @@
 </svg>
 
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 async function runTest() {
   document.startViewTransition(() =>
     requestAnimationFrame(() => requestAnimationFrame(takeScreenshot)));
diff --git a/css/css-view-transitions/new-content-object-view-box-clip-path.html b/css/css-view-transitions/new-content-object-view-box-clip-path.html
index 0a56ae2..e1b6c92 100644
--- a/css/css-view-transitions/new-content-object-view-box-clip-path.html
+++ b/css/css-view-transitions/new-content-object-view-box-clip-path.html
@@ -71,6 +71,8 @@
 </div>
 
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 async function runTest() {
   document.startViewTransition(() =>
     requestAnimationFrame(() => requestAnimationFrame(takeScreenshot)));
diff --git a/css/css-view-transitions/new-content-object-view-box-overflow-clipped.html b/css/css-view-transitions/new-content-object-view-box-overflow-clipped.html
index 7f10f41..f856a89 100644
--- a/css/css-view-transitions/new-content-object-view-box-overflow-clipped.html
+++ b/css/css-view-transitions/new-content-object-view-box-overflow-clipped.html
@@ -56,6 +56,8 @@
 </div>
 
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 async function runTest() {
   document.startViewTransition(() =>
     requestAnimationFrame(() => requestAnimationFrame(takeScreenshot)));
diff --git a/css/css-view-transitions/new-content-object-view-box-overflow.html b/css/css-view-transitions/new-content-object-view-box-overflow.html
index 8031c5b..08a12c2 100644
--- a/css/css-view-transitions/new-content-object-view-box-overflow.html
+++ b/css/css-view-transitions/new-content-object-view-box-overflow.html
@@ -56,6 +56,8 @@
 </div>
 
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 async function runTest() {
   document.startViewTransition(() =>
     requestAnimationFrame(() => requestAnimationFrame(takeScreenshot)));
diff --git a/css/css-view-transitions/new-content-scaling.html b/css/css-view-transitions/new-content-scaling.html
index 480479b..9fc70e3 100644
--- a/css/css-view-transitions/new-content-scaling.html
+++ b/css/css-view-transitions/new-content-scaling.html
@@ -49,6 +49,8 @@
 <div id=target class="shared src"><div class=inner></div></div>
 
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 async function runTest() {
   let t = document.startViewTransition(() => {
     target.classList.remove("src");
diff --git a/css/css-view-transitions/new-content-with-overflow-zoomed.html b/css/css-view-transitions/new-content-with-overflow-zoomed.html
index a7a2123..1919daa 100644
--- a/css/css-view-transitions/new-content-with-overflow-zoomed.html
+++ b/css/css-view-transitions/new-content-with-overflow-zoomed.html
@@ -45,6 +45,8 @@
 </div>
 
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 async function runTest() {
   document.startViewTransition(() =>
     requestAnimationFrame(() => requestAnimationFrame(takeScreenshot)));
diff --git a/css/css-view-transitions/new-content-with-overflow.html b/css/css-view-transitions/new-content-with-overflow.html
index 093267f..2dc0185 100644
--- a/css/css-view-transitions/new-content-with-overflow.html
+++ b/css/css-view-transitions/new-content-with-overflow.html
@@ -40,6 +40,8 @@
 </div>
 
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 async function runTest() {
   document.startViewTransition(() =>
     requestAnimationFrame(() => requestAnimationFrame(takeScreenshot)));
diff --git a/css/css-view-transitions/new-element-on-start.html b/css/css-view-transitions/new-element-on-start.html
index 52a7fc9..7cd307d 100644
--- a/css/css-view-transitions/new-element-on-start.html
+++ b/css/css-view-transitions/new-element-on-start.html
@@ -52,6 +52,8 @@
 <div id=hidden class=hidden></div>
 
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 async function runTest() {
   hidden.style.viewTransitionName = "hidden";
   before.style.viewTransitionName = "before";
diff --git a/css/css-view-transitions/new-root-vertical-writing-mode.html b/css/css-view-transitions/new-root-vertical-writing-mode.html
index 393d052..fc7d7de 100644
--- a/css/css-view-transitions/new-root-vertical-writing-mode.html
+++ b/css/css-view-transitions/new-root-vertical-writing-mode.html
@@ -56,6 +56,8 @@
 <div id=two class=shared></div>
 
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 async function runTest() {
   document.startViewTransition(() => {
     target.remove();
diff --git a/css/css-view-transitions/no-containment-on-new-element-mid-transition.html b/css/css-view-transitions/no-containment-on-new-element-mid-transition.html
index 869fd24..551d2c4 100644
--- a/css/css-view-transitions/no-containment-on-new-element-mid-transition.html
+++ b/css/css-view-transitions/no-containment-on-new-element-mid-transition.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html>
-<html class=reftest-wait>
+<html>
 <title>View transitions: transition skipped if no containment on new element after animation started</title>
 <link rel="help" href="https://www.w3.org/TR/css-view-transitions-1/">
 <link rel="author" href="mailto:[email protected]">
@@ -25,6 +25,7 @@
 
 <script>
 promise_test(async t => {
+  assert_implements(document.startViewTransition, "Missing document.startViewTransition");
   return new Promise(async (resolve, reject) => {
     let transition = document.startViewTransition();
     await transition.domUpdated;
diff --git a/css/css-view-transitions/no-containment-on-new-element.html b/css/css-view-transitions/no-containment-on-new-element.html
index ecb0537..46f576d 100644
--- a/css/css-view-transitions/no-containment-on-new-element.html
+++ b/css/css-view-transitions/no-containment-on-new-element.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html>
-<html class=reftest-wait>
+<html>
 <title>View transitions: transition skipped if no containment on new element</title>
 <link rel="help" href="https://www.w3.org/TR/css-view-transitions-1/">
 <link rel="author" href="mailto:[email protected]">
@@ -21,6 +21,7 @@
 
 <script>
 promise_test(async t => {
+  assert_implements(document.startViewTransition, "Missing document.startViewTransition");
   return new Promise(async (resolve, reject) => {
     let transition = document.startViewTransition(() => {
       first.style.contain = "none";
diff --git a/css/css-view-transitions/no-containment-on-old-element.html b/css/css-view-transitions/no-containment-on-old-element.html
index 22cad09..8b21916 100644
--- a/css/css-view-transitions/no-containment-on-old-element.html
+++ b/css/css-view-transitions/no-containment-on-old-element.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html>
-<html class=reftest-wait>
+<html>
 <title>View transitions: transition skipped if no containment on old element</title>
 <link rel="help" href="https://www.w3.org/TR/css-view-transitions-1/">
 <link rel="author" href="mailto:[email protected]">
@@ -20,6 +20,7 @@
 
 <script>
 promise_test(async t => {
+  assert_implements(document.startViewTransition, "Missing document.startViewTransition");
   return new Promise(async (resolve, reject) => {
     let transition = document.startViewTransition(() => {
       first.style.contain = "paint";
diff --git a/css/css-view-transitions/no-crash-set-exception.html b/css/css-view-transitions/no-crash-set-exception.html
index 035d050..cb8942d 100644
--- a/css/css-view-transitions/no-crash-set-exception.html
+++ b/css/css-view-transitions/no-crash-set-exception.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html>
-<html class=reftest-wait>
+<html>
 <title>Shared transitions: author styles ignored during prepare</title>
 <link rel="help" href="https://github.com/WICG/view-transitions">
 <link rel="author" href="mailto:[email protected]">
@@ -33,6 +33,7 @@
 }
 
 promise_test(async t => {
+  assert_implements(document.startViewTransition, "Missing document.startViewTransition");
   return new Promise((resolve, reject) => {
     document.startViewTransition(() => {
       resolve();
diff --git a/css/css-view-transitions/no-css-animation-while-render-blocked.html b/css/css-view-transitions/no-css-animation-while-render-blocked.html
index 6ed9863..4bc124c 100644
--- a/css/css-view-transitions/no-css-animation-while-render-blocked.html
+++ b/css/css-view-transitions/no-css-animation-while-render-blocked.html
@@ -1,6 +1,6 @@
 <!DOCTYPE html>
 <meta name="timeout" content="long">
-<html class=reftest-wait>
+<html>
 <title>Shared transitions: CSS Animations are paused while render-blocked</title>
 <link rel="help" href="https://github.com/WICG/view-transitions">
 <link rel="author" href="mailto:[email protected]">
@@ -34,6 +34,7 @@
 let renderBlocked = true;
 
 promise_test(() => {
+  assert_implements(document.startViewTransition, "Missing document.startViewTransition");
   return new Promise(async (resolve, reject) => {
     requestAnimationFrame(() => {
       document.startViewTransition(() => {
diff --git a/css/css-view-transitions/no-raf-while-render-blocked.html b/css/css-view-transitions/no-raf-while-render-blocked.html
index ff2d058..566d6f7 100644
--- a/css/css-view-transitions/no-raf-while-render-blocked.html
+++ b/css/css-view-transitions/no-raf-while-render-blocked.html
@@ -1,6 +1,6 @@
 <!DOCTYPE html>
 <meta name="timeout" content="long">
-<html class=reftest-wait>
+<html>
 <title>Shared transitions: rAF is not issued while render-blocked</title>
 <link rel="help" href="https://github.com/WICG/view-transitions">
 <link rel="author" href="mailto:[email protected]">
@@ -24,6 +24,7 @@
 let renderBlocked = true;
 
 promise_test(() => {
+  assert_implements(document.startViewTransition, "Missing document.startViewTransition");
   return new Promise(async (resolve, reject) => {
     requestAnimationFrame(() => {
       document.startViewTransition(() => {
diff --git a/css/css-view-transitions/no-root-capture.html b/css/css-view-transitions/no-root-capture.html
index 01033ce..7856a33 100644
--- a/css/css-view-transitions/no-root-capture.html
+++ b/css/css-view-transitions/no-root-capture.html
@@ -43,6 +43,8 @@
 </div>
 
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 async function runTest() {
   document.startViewTransition(() =>
     requestAnimationFrame(() => requestAnimationFrame(takeScreenshot)));
diff --git a/css/css-view-transitions/nothing-captured.html b/css/css-view-transitions/nothing-captured.html
index acb818e..c6d45ce 100644
--- a/css/css-view-transitions/nothing-captured.html
+++ b/css/css-view-transitions/nothing-captured.html
@@ -36,6 +36,8 @@
 </div>
 
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 async function runTest() {
   document.startViewTransition(() =>
     requestAnimationFrame(() => requestAnimationFrame(takeScreenshot)));
diff --git a/css/css-view-transitions/object-view-box-new-image.html b/css/css-view-transitions/object-view-box-new-image.html
index 415f18d..c23e65f 100644
--- a/css/css-view-transitions/object-view-box-new-image.html
+++ b/css/css-view-transitions/object-view-box-new-image.html
@@ -58,6 +58,8 @@
 <div id=hidden class=hidden></div>
 
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 async function runTest() {
   document.startViewTransition(() => {
     requestAnimationFrame(() =>  requestAnimationFrame(takeScreenshot));
diff --git a/css/css-view-transitions/object-view-box-old-image.html b/css/css-view-transitions/object-view-box-old-image.html
index 2423ff3..9e4e4b8 100644
--- a/css/css-view-transitions/object-view-box-old-image.html
+++ b/css/css-view-transitions/object-view-box-old-image.html
@@ -60,6 +60,8 @@
 <div id=hidden class=hidden></div>
 
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 async function runTest() {
   document.startViewTransition(() => {
     requestAnimationFrame(() =>  requestAnimationFrame(takeScreenshot));
diff --git a/css/css-view-transitions/old-content-captures-clip-path.html b/css/css-view-transitions/old-content-captures-clip-path.html
index 3fa29eb..ac6200d 100644
--- a/css/css-view-transitions/old-content-captures-clip-path.html
+++ b/css/css-view-transitions/old-content-captures-clip-path.html
@@ -33,6 +33,8 @@
 </style>
 <div id=e1 class=box></div>
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 async function runTest() {
   document.startViewTransition(() => {
     e1.classList.add("dst");
diff --git a/css/css-view-transitions/old-content-captures-different-size.html b/css/css-view-transitions/old-content-captures-different-size.html
index be401fd..8bfa240 100644
--- a/css/css-view-transitions/old-content-captures-different-size.html
+++ b/css/css-view-transitions/old-content-captures-different-size.html
@@ -49,6 +49,8 @@
 <div id=e2 class=box>two</div>
 <div id=e3 class=box>three</div>
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 async function runTest() {
   document.startViewTransition(() => {
     e1.classList.add("dst");
diff --git a/css/css-view-transitions/old-content-captures-opacity.html b/css/css-view-transitions/old-content-captures-opacity.html
index 8aaf4de..a1d976d 100644
--- a/css/css-view-transitions/old-content-captures-opacity.html
+++ b/css/css-view-transitions/old-content-captures-opacity.html
@@ -33,6 +33,8 @@
 <div id=e2 class=box>two</div>
 <div id=e3 class=box>three</div>
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 async function runTest() {
   document.startViewTransition(() => {
     e1.classList.add("dst");
diff --git a/css/css-view-transitions/old-content-captures-root.html b/css/css-view-transitions/old-content-captures-root.html
index 9129258..067c049 100644
--- a/css/css-view-transitions/old-content-captures-root.html
+++ b/css/css-view-transitions/old-content-captures-root.html
@@ -38,6 +38,8 @@
 <div id=e1 class=box></div>
 <div id=shared></div>
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 async function runTest() {
   document.startViewTransition(() => {
     e1.classList.add("dst");
diff --git a/css/css-view-transitions/old-content-container-writing-modes.html b/css/css-view-transitions/old-content-container-writing-modes.html
index 6f20465..2c48744 100644
--- a/css/css-view-transitions/old-content-container-writing-modes.html
+++ b/css/css-view-transitions/old-content-container-writing-modes.html
@@ -73,6 +73,8 @@
 <div class=rl><div id=three class=shared>T</div></div>
 
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 async function runTest() {
   document.startViewTransition(() => {
     one.remove();
diff --git a/css/css-view-transitions/old-content-element-writing-modes.html b/css/css-view-transitions/old-content-element-writing-modes.html
index f22dcb7..87a736d 100644
--- a/css/css-view-transitions/old-content-element-writing-modes.html
+++ b/css/css-view-transitions/old-content-element-writing-modes.html
@@ -73,6 +73,8 @@
 <div id=three class="shared rl">T</div>
 
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 async function runTest() {
   document.startViewTransition(() => {
     one.remove();
diff --git a/css/css-view-transitions/old-content-has-scrollbars.html b/css/css-view-transitions/old-content-has-scrollbars.html
index 477fff7..f87a449 100644
--- a/css/css-view-transitions/old-content-has-scrollbars.html
+++ b/css/css-view-transitions/old-content-has-scrollbars.html
@@ -43,6 +43,8 @@
 
 <div></div>
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 // Ensure a root snapshot captured on a page with scrollbars uses the full
 // viewport size (including scrollbars). Areas obscured by scrollbars should be
 // filled with background and content; the snapshot should not be scaled-to-fit.
diff --git a/css/css-view-transitions/old-content-intrinsic-aspect-ratio.html b/css/css-view-transitions/old-content-intrinsic-aspect-ratio.html
index 55436b8..8ba2a8f 100644
--- a/css/css-view-transitions/old-content-intrinsic-aspect-ratio.html
+++ b/css/css-view-transitions/old-content-intrinsic-aspect-ratio.html
@@ -55,6 +55,8 @@
 <div id=target2 class=box></div>
 <div id=hidden></div>
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 async function runTest() {
   document.startViewTransition(() => {
     requestAnimationFrame(() => requestAnimationFrame(takeScreenshot));
diff --git a/css/css-view-transitions/old-content-is-empty-div.html b/css/css-view-transitions/old-content-is-empty-div.html
index ced52af8..c6a6655 100644
--- a/css/css-view-transitions/old-content-is-empty-div.html
+++ b/css/css-view-transitions/old-content-is-empty-div.html
@@ -45,6 +45,8 @@
 <div id=hidden></div>
 
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 async function runTest() {
   empty.style.viewTransitionName = "shared";
   document.startViewTransition(() => {
diff --git a/css/css-view-transitions/old-content-object-fit-fill.html b/css/css-view-transitions/old-content-object-fit-fill.html
index 75dc628..a3f146f 100644
--- a/css/css-view-transitions/old-content-object-fit-fill.html
+++ b/css/css-view-transitions/old-content-object-fit-fill.html
@@ -65,6 +65,8 @@
 <div id=hidden></div>
 
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 async function runTest() {
   document.startViewTransition(() => {
     requestAnimationFrame(() => requestAnimationFrame(takeScreenshot));
diff --git a/css/css-view-transitions/old-content-object-fit-none.html b/css/css-view-transitions/old-content-object-fit-none.html
index c40ad13..592b899 100644
--- a/css/css-view-transitions/old-content-object-fit-none.html
+++ b/css/css-view-transitions/old-content-object-fit-none.html
@@ -58,6 +58,8 @@
 <div id=hidden></div>
 
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 async function runTest() {
   document.startViewTransition(() => {
     requestAnimationFrame(() => requestAnimationFrame(takeScreenshot));
diff --git a/css/css-view-transitions/old-content-object-view-box-clip-path-reference.html b/css/css-view-transitions/old-content-object-view-box-clip-path-reference.html
index 375b012..a9bbf0f 100644
--- a/css/css-view-transitions/old-content-object-view-box-clip-path-reference.html
+++ b/css/css-view-transitions/old-content-object-view-box-clip-path-reference.html
@@ -83,6 +83,8 @@
 </svg>
 
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 async function runTest() {
   document.startViewTransition(() =>
     requestAnimationFrame(() => requestAnimationFrame(takeScreenshot)));
diff --git a/css/css-view-transitions/old-content-object-view-box-clip-path.html b/css/css-view-transitions/old-content-object-view-box-clip-path.html
index a429255..04d4f31 100644
--- a/css/css-view-transitions/old-content-object-view-box-clip-path.html
+++ b/css/css-view-transitions/old-content-object-view-box-clip-path.html
@@ -72,6 +72,8 @@
 </div>
 
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 async function runTest() {
   document.startViewTransition(() =>
     requestAnimationFrame(() => requestAnimationFrame(takeScreenshot)));
diff --git a/css/css-view-transitions/old-content-object-view-box-overflow.html b/css/css-view-transitions/old-content-object-view-box-overflow.html
index 8a83a7e..e5bfee9 100644
--- a/css/css-view-transitions/old-content-object-view-box-overflow.html
+++ b/css/css-view-transitions/old-content-object-view-box-overflow.html
@@ -55,6 +55,8 @@
 </div>
 
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 async function runTest() {
   document.startViewTransition(() =>
     requestAnimationFrame(() => requestAnimationFrame(takeScreenshot)));
diff --git a/css/css-view-transitions/old-content-with-overflow-zoomed.html b/css/css-view-transitions/old-content-with-overflow-zoomed.html
index 6e6196e..d78c424 100644
--- a/css/css-view-transitions/old-content-with-overflow-zoomed.html
+++ b/css/css-view-transitions/old-content-with-overflow-zoomed.html
@@ -45,6 +45,8 @@
 </div>
 
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 async function runTest() {
   document.startViewTransition(() =>
     requestAnimationFrame(() => requestAnimationFrame(takeScreenshot)));
diff --git a/css/css-view-transitions/old-content-with-overflow.html b/css/css-view-transitions/old-content-with-overflow.html
index 3d8afc1..3ddf818 100644
--- a/css/css-view-transitions/old-content-with-overflow.html
+++ b/css/css-view-transitions/old-content-with-overflow.html
@@ -40,6 +40,8 @@
 </div>
 
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 async function runTest() {
   document.startViewTransition(() =>
     requestAnimationFrame(() => requestAnimationFrame(takeScreenshot)));
diff --git a/css/css-view-transitions/old-root-vertical-writing-mode.html b/css/css-view-transitions/old-root-vertical-writing-mode.html
index 4fd610b..af4fcf5 100644
--- a/css/css-view-transitions/old-root-vertical-writing-mode.html
+++ b/css/css-view-transitions/old-root-vertical-writing-mode.html
@@ -57,6 +57,8 @@
 <div id=two class=shared></div>
 
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 async function runTest() {
   document.startViewTransition(() => {
     one.remove();
diff --git a/css/css-view-transitions/pseudo-computed-style-stays-in-sync-with-new-element.html b/css/css-view-transitions/pseudo-computed-style-stays-in-sync-with-new-element.html
index b1ed783..103dc31 100644
--- a/css/css-view-transitions/pseudo-computed-style-stays-in-sync-with-new-element.html
+++ b/css/css-view-transitions/pseudo-computed-style-stays-in-sync-with-new-element.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html>
-<html class=reftest-wait>
+<html>
 <title>View transitions: computed style on pseudo-element stays in sync with the DOM element</title>
 <link rel="help" href="https://www.w3.org/TR/css-view-transitions-1/">
 <link rel="author" href="mailto:[email protected]">
@@ -21,6 +21,7 @@
 
 <script>
 promise_test(async t => {
+  assert_implements(document.startViewTransition, "Missing document.startViewTransition");
   return new Promise(async (resolve, reject) => {
     let transition = document.startViewTransition();
     await transition.domUpdated;
diff --git a/css/css-view-transitions/pseudo-get-computed-style.html b/css/css-view-transitions/pseudo-get-computed-style.html
index e837d52..45d2559 100644
--- a/css/css-view-transitions/pseudo-get-computed-style.html
+++ b/css/css-view-transitions/pseudo-get-computed-style.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html>
-<html class=reftest-wait>
+<html>
 <title>Shared transitions: check pseudo element's display property</title>
 <link rel="help" href="https://github.com/WICG/view-transitions">
 <link rel="author" href="mailto:[email protected]">
@@ -24,6 +24,7 @@
 
 <script>
 promise_test(() => {
+  assert_implements(document.startViewTransition, "Missing document.startViewTransition");
   return new Promise(async (resolve, reject) => {
     let transition = document.startViewTransition(() => {
       assert_equals(getComputedStyle(document.documentElement, ":view-transition").position, "fixed", ":view-transition");
@@ -54,6 +55,7 @@
 }, "position property of pseudo elements");
 
 promise_test(() => {
+  assert_implements(document.startViewTransition, "Missing document.startViewTransition");
   return new Promise(async (resolve, reject) => {
     let transition = document.startViewTransition(() => {
       assert_equals(getComputedStyle(document.documentElement, ":view-transition").position, "fixed");
diff --git a/css/css-view-transitions/ready_resolves_after_dom_before_raf.html b/css/css-view-transitions/ready_resolves_after_dom_before_raf.html
index 9c0a68e..3bc1822 100644
--- a/css/css-view-transitions/ready_resolves_after_dom_before_raf.html
+++ b/css/css-view-transitions/ready_resolves_after_dom_before_raf.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html>
-<html class=reftest-wait>
+<html>
 <title>Shared transitions: promise resolution ordering</title>
 <link rel="help" href="https://github.com/WICG/view-transitions">
 <link rel="author" href="mailto:[email protected]">
@@ -24,6 +24,7 @@
 
 <script>
 promise_test(async t => {
+  assert_implements(document.startViewTransition, "Missing document.startViewTransition");
   return new Promise((resolve, reject) => {
     let dom_change_ran = false;
     let transition = document.startViewTransition(() => {
diff --git a/css/css-view-transitions/root-captured-as-different-tag.html b/css/css-view-transitions/root-captured-as-different-tag.html
index 36f60cf..a8f3493 100644
--- a/css/css-view-transitions/root-captured-as-different-tag.html
+++ b/css/css-view-transitions/root-captured-as-different-tag.html
@@ -43,6 +43,8 @@
 <div id=e1 class=box></div>
 <div id=shared></div>
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 async function runTest() {
   document.startViewTransition(() => {
     e1.classList.add("dst");
diff --git a/css/css-view-transitions/root-scrollbar-with-fixed-background.html b/css/css-view-transitions/root-scrollbar-with-fixed-background.html
index 52f35e7..9a4684c 100644
--- a/css/css-view-transitions/root-scrollbar-with-fixed-background.html
+++ b/css/css-view-transitions/root-scrollbar-with-fixed-background.html
@@ -50,6 +50,8 @@
 <div id=first></div>
 
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 async function runTest() {
   await waitForAtLeastOneFrame();
 
diff --git a/css/css-view-transitions/root-style-change-during-animation.html b/css/css-view-transitions/root-style-change-during-animation.html
index 6a17868..b030d38 100644
--- a/css/css-view-transitions/root-style-change-during-animation.html
+++ b/css/css-view-transitions/root-style-change-during-animation.html
@@ -47,6 +47,8 @@
 <div id=hidden></div>
 
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 function flipClass() {
   document.documentElement.classList.add("test");
   requestAnimationFrame(takeScreenshot);
diff --git a/css/css-view-transitions/root-to-shared-animation-end.html b/css/css-view-transitions/root-to-shared-animation-end.html
index f24c300..6ba07bd 100644
--- a/css/css-view-transitions/root-to-shared-animation-end.html
+++ b/css/css-view-transitions/root-to-shared-animation-end.html
@@ -37,6 +37,8 @@
 <div class=hidden></div>
 
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 async function runTest() {
   document.startViewTransition(() => {
     document.documentElement.style.viewTransitionName = "none";
diff --git a/css/css-view-transitions/root-to-shared-animation-incoming.html b/css/css-view-transitions/root-to-shared-animation-incoming.html
index c2def74..0620e91 100644
--- a/css/css-view-transitions/root-to-shared-animation-incoming.html
+++ b/css/css-view-transitions/root-to-shared-animation-incoming.html
@@ -27,6 +27,8 @@
 <div id=box></div>
 
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 async function runTest() {
   document.startViewTransition(() => {
     document.documentElement.style.viewTransitionName = "none";
diff --git a/css/css-view-transitions/root-to-shared-animation-start.html b/css/css-view-transitions/root-to-shared-animation-start.html
index 211985e..0a1cb96 100644
--- a/css/css-view-transitions/root-to-shared-animation-start.html
+++ b/css/css-view-transitions/root-to-shared-animation-start.html
@@ -27,6 +27,8 @@
 <div id=box></div>
 
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 async function runTest() {
   document.startViewTransition(() => {
     document.documentElement.style.viewTransitionName = "none";
diff --git a/css/css-view-transitions/set-universal-specificity.html b/css/css-view-transitions/set-universal-specificity.html
index 95c0cfe..80dc827 100644
--- a/css/css-view-transitions/set-universal-specificity.html
+++ b/css/css-view-transitions/set-universal-specificity.html
@@ -34,6 +34,8 @@
 </style>
 <div id=shared></div>
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 async function runTest() {
   document.startViewTransition(() => {
     requestAnimationFrame(() => requestAnimationFrame(takeScreenshot));
diff --git a/css/css-view-transitions/style-inheritance.html b/css/css-view-transitions/style-inheritance.html
index f896f23..bfa110b 100644
--- a/css/css-view-transitions/style-inheritance.html
+++ b/css/css-view-transitions/style-inheritance.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html>
-<html class=reftest-wait>
+<html>
 <title>View transitions: ensure correct style inheritance for pseudo tree</title>
 <link rel="help" href="https://github.com/WICG/view-transitions">
 <link rel="author" href="mailto:[email protected]">
@@ -29,6 +29,7 @@
 
 <script>
 promise_test(() => {
+  assert_implements(document.startViewTransition, "Missing document.startViewTransition");
   return new Promise(async (resolve, reject) => {
     let transition = document.startViewTransition();
     transition.ready.then(() => {
diff --git a/css/css-view-transitions/synchronous-callback-skipped-before-run.html b/css/css-view-transitions/synchronous-callback-skipped-before-run.html
index 1bda243..d1ada87 100644
--- a/css/css-view-transitions/synchronous-callback-skipped-before-run.html
+++ b/css/css-view-transitions/synchronous-callback-skipped-before-run.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html>
-<html class=reftest-wait>
+<html>
 <title>View transitions: skipTransition() invoked before a synchronous updateDOM callback is invoked</title>
 <link rel="help" href="https://www.w3.org/TR/css-view-transitions-1/">
 <link rel="author" href="mailto:[email protected]">
@@ -20,6 +20,7 @@
 
 <script>
 promise_test(async t => {
+  assert_implements(document.startViewTransition, "Missing document.startViewTransition");
   return new Promise(async (resolve, reject) => {
     let transition = document.startViewTransition(() => {
       first.style.viewTransitionName = "target";
diff --git a/css/css-view-transitions/transition-skipped-after-animation-started.html b/css/css-view-transitions/transition-skipped-after-animation-started.html
index 78f32de..56c477a 100644
--- a/css/css-view-transitions/transition-skipped-after-animation-started.html
+++ b/css/css-view-transitions/transition-skipped-after-animation-started.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html>
-<html class=reftest-wait>
+<html>
 <title>View transitions: skipTransition() after animations have started running should resolve finished promise</title>
 <link rel="help" href="https://www.w3.org/TR/css-view-transitions-1/">
 <link rel="author" href="mailto:[email protected]">
@@ -25,6 +25,7 @@
 
 <script>
 promise_test(async t => {
+  assert_implements(document.startViewTransition, "Missing document.startViewTransition");
   return new Promise(async (resolve, reject) => {
     let transition = document.startViewTransition();
     await transition.ready;
diff --git a/css/css-view-transitions/transition-skipped-from-invalid-callback.html b/css/css-view-transitions/transition-skipped-from-invalid-callback.html
index 4a56f81..0dd098c 100644
--- a/css/css-view-transitions/transition-skipped-from-invalid-callback.html
+++ b/css/css-view-transitions/transition-skipped-from-invalid-callback.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html>
-<html class=reftest-wait>
+<html>
 <title>View transitions: transition skipped in animation phase</title>
 <link rel="help" href="https://www.w3.org/TR/css-view-transitions-1/">
 <link rel="author" href="mailto:[email protected]">
@@ -25,6 +25,7 @@
 
 <script>
 promise_test(async t => {
+  assert_implements(document.startViewTransition, "Missing document.startViewTransition");
   return new Promise(async (resolve, reject) => {
     let transition = document.startViewTransition(() => {
       let foo = bar;
diff --git a/css/css-view-transitions/unset-and-initial-view-transition-name.html b/css/css-view-transitions/unset-and-initial-view-transition-name.html
index 93c8eb6..4ff5c05 100644
--- a/css/css-view-transitions/unset-and-initial-view-transition-name.html
+++ b/css/css-view-transitions/unset-and-initial-view-transition-name.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html>
-<html class=reftest-wait>
+<html>
 <title>View transitions: validates that view-transition-name: unset or initial are ignored</title>
 <link rel="help" href="https://www.w3.org/TR/css-view-transitions-1/">
 <link rel="author" href="mailto:[email protected]">
@@ -35,6 +35,7 @@
 
 <script>
 promise_test(async t => {
+  assert_implements(document.startViewTransition, "Missing document.startViewTransition");
   return new Promise(async (resolve, reject) => {
     let transition = document.startViewTransition();
     await transition.domUpdated;
diff --git a/css/css-view-transitions/view-transition-name-on-added-element.html b/css/css-view-transitions/view-transition-name-on-added-element.html
index cd95797..643121e 100644
--- a/css/css-view-transitions/view-transition-name-on-added-element.html
+++ b/css/css-view-transitions/view-transition-name-on-added-element.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html>
-<html class=reftest-wait>
+<html>
 <title>View transitions: ensures view-transition-name is tracked on element added by script</title>
 <link rel="help" href="https://www.w3.org/TR/css-view-transitions-1/">
 <link rel="author" href="mailto:[email protected]">
@@ -22,6 +22,7 @@
 </body>
 <script>
 promise_test(async t => {
+  assert_implements(document.startViewTransition, "Missing document.startViewTransition");
   return new Promise((resolve, reject) => {
     // Remove and add an uncontained element. Even though this element doesn't
     // create a stacking context its verified during the transition.
diff --git a/css/css-view-transitions/view-transition-name-on-removed-element.html b/css/css-view-transitions/view-transition-name-on-removed-element.html
index 4a26a81..36beb30 100644
--- a/css/css-view-transitions/view-transition-name-on-removed-element.html
+++ b/css/css-view-transitions/view-transition-name-on-removed-element.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html>
-<html class=reftest-wait>
+<html>
 <title>View transitions: ensures view-transition-name is not tracked on element removed by script</title>
 <link rel="help" href="https://www.w3.org/TR/css-view-transitions-1/">
 <link rel="author" href="mailto:[email protected]">
@@ -22,6 +22,7 @@
 </body>
 <script>
 promise_test(async t => {
+  assert_implements(document.startViewTransition, "Missing document.startViewTransition");
   return new Promise(async (resolve, reject) => {
     // Remove an uncontained element. Because this element is not visited when
     // discovering named elements, the transition is not skipped.
diff --git a/css/css-view-transitions/web-animations-api.html b/css/css-view-transitions/web-animations-api.html
index 0c7e485..b9d62fa 100644
--- a/css/css-view-transitions/web-animations-api.html
+++ b/css/css-view-transitions/web-animations-api.html
@@ -32,6 +32,8 @@
 <div id=first></div>
 <div id=second></div>
 <script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
 function setAnimation() {
   document.documentElement.animate({ transform: ['translate(100px)', 'translate(100px)'] }, { duration: 10000, pseudoElement: '::view-transition-group(first)'});
   document.documentElement.animate({ transform: ['translate(150px)', 'translate(150px)'] }, { duration: 10000, pseudoElement: '::view-transition-group(second)'});