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