<!DOCTYPE html><html><head><metacharset="utf-8"><metaname="viewport"content="width=device-width, initial-scale=1"><title>startViewTranstion cancels active transition</title><linkrel="help"href="https://www.w3.org/TR/css-view-transitions-1/"></head><scriptsrc="/resources/testharness.js"></script><scriptsrc="/resources/testharnessreport.js"></script><style>:root{view-transition-name:none;}#target{width:100px;height:100px;background:blue;contain:paint;view-transition-name:target;}#target.update-1{height:150px;}#target.update-2{height:200px;}</style><body><divid="target"></div></body><script>promise_test(asynct=>{letrejected_promise_tally=0;consttarget=document.getElementById("target");assert_implements(document.startViewTransition,"Missing document.startViewTransition");constverifyAbortedTransition=(promise)=>{returnpromise.then(()=>{assert_not_reached('transition aborted')},(reason)=>{assert_true(reasoninstanceofDOMException);assert_equals(reason.code,DOMException.ABORT_ERR);rejected_promise_tally++;});};constvt1=document.startViewTransition(()=>{target.className='update-1';});constvt2=document.startViewTransition(()=>{assert_equals(target.className,'update-1');target.className='update-2';});constvt3=document.startViewTransition(()=>{assert_equals(target.className,'update-2');});awaitverifyAbortedTransition(vt1.ready);awaitverifyAbortedTransition(vt2.ready);awaitvt3.ready;assert_equals(rejected_promise_tally,2,'first 2 transitions are skipped');constsizeTransformAnimations=document.getAnimations().filter(a=>{return'height'ina.effect.getKeyframes()[0];});assert_equals(sizeTransformAnimations.length,1);conststartingHeight=sizeTransformAnimations[0].effect.getKeyframes()[0].height;assert_equals(startingHeight,'200px','Height change applied before capture');},'Synchronously starting a view transition skips the previously active '+' transition.');</script></html>