| <!DOCTYPE html> | |
| <title>Test that AnimationWorklet inside frames with different origin causes new global scopes</title> | |
| <link rel="help" href="https://drafts.css-houdini.org/css-animationworklet/"> | |
| <script src="/resources/testharness.js"></script> | |
| <script src="/resources/testharnessreport.js"></script> | |
| <script src="/web-animations/testcommon.js"></script> | |
| <script src="common.js"></script> | |
| <style> | |
| .redbox { | |
| width: 100px; | |
| height: 100px; | |
| background-color: #ff0000; | |
| } | |
| </style> | |
| <div id="target" class="redbox"></div> | |
| <script id="main_worklet" type="text/worklet"> | |
| registerAnimator("duplicate_animator", class { | |
| animate(currentTime, effect) { | |
| effect.localTime = 500; | |
| } | |
| }); | |
| </script> | |
| <script> | |
| async_test(t => { | |
| // Wait for iframe to load and start its animations. | |
| window.onmessage = function(msg) { | |
| window.requestAnimationFrame( _ => { | |
| run_test(msg.data); | |
| }); | |
| }; | |
| // Create and load the iframe to avoid racy cases. | |
| var iframe = document.createElement('iframe'); | |
| iframe.src = 'resources/animator-iframe.html'; | |
| document.body.appendChild(iframe); | |
| function run_test(data) { | |
| runInAnimationWorklet( | |
| document.getElementById('main_worklet').textContent | |
| ).then(_ => { | |
| // Create an animation for duplicate animator. | |
| const target = document.getElementById('target'); | |
| const animation = new WorkletAnimation('duplicate_animator', new KeyframeEffect(target, [{ opacity: 0 }], { duration: 1000 })); | |
| animation.play(); | |
| assert_equals(data, '0.4'); | |
| // wait until local times are synced back to the main thread. | |
| waitForAnimationFrameWithCondition(_ => { | |
| return getComputedStyle(target).opacity != '1'; | |
| }).then(t.step_func_done(() => { | |
| assert_equals(getComputedStyle(target).opacity, '0.5'); | |
| })); | |
| }); | |
| } | |
| }, 'Both main frame and iframe should update the opacity of their target'); | |
| </script> |