| <!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> |