<!DOCTYPE html><title>Verify that effect without target is supported</title><linkrel="help"href="https://drafts.css-houdini.org/css-animationworklet/"><scriptsrc="/resources/testharness.js"></script><scriptsrc="/resources/testharnessreport.js"></script><scriptsrc="/web-animations/testcommon.js"></script><scriptsrc="common.js"></script><divid="box"></div><script>setup(setupAndRegisterTests,{explicit_done:true});asyncfunctionsetupAndRegisterTests(){awaitregisterPassthroughAnimator();promise_test(asynct=>{consteffect=newKeyframeEffect(null,{transform:['translateY(100px)','translateY(200px)']},{duration:Infinity,iterations:1});constanimation=newWorkletAnimation('passthrough',effect);animation.play();// Allow one async animation frame to pass so that animation is running.awaitwaitForAsyncAnimationFrames(1);assert_equals(animation.playState,"running");// Allow time to advance so that we have a non-zero current time.awaitwaitForDocumentTimelineAdvance();constt0=document.timeline.currentTime;assert_greater_than(animation.currentTime,0);assert_times_equal(animation.currentTime,(t0-animation.startTime));assert_equals(animation.playState,"running");animation.cancel();},'Animating effect with no target should work.');promise_test(asynct=>{consteffect=newKeyframeEffect(document.getElementById('box'),{transform:['translateY(100px)','translateY(200px)']},{duration:Infinity,iterations:1});constanimation=newWorkletAnimation('passthrough',effect);animation.play();// Allow one async animation frame to pass so that animation is running.awaitwaitForAsyncAnimationFrames(1);assert_equals(animation.playState,"running");// Allow time to advance so that we have a non-zero current time.awaitwaitForDocumentTimelineAdvance();constt0=document.timeline.currentTime;assert_greater_than(animation.currentTime,0);assert_times_equal(animation.currentTime,(t0-animation.startTime));assert_equals(animation.playState,"running");awaitwaitForDocumentTimelineAdvance();animation.effect.target=null;constt1=document.timeline.currentTime;assert_times_equal(animation.currentTime,(t1-animation.startTime));assert_equals(animation.playState,"running");awaitwaitForDocumentTimelineAdvance();animation.effect.target=document.getElementById('box');constt2=document.timeline.currentTime;assert_times_equal(animation.currentTime,(t2-animation.startTime));assert_equals(animation.playState,"running");animation.cancel();},'The existence of a target does not affect the animation.');done();}</script>