/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
"use strict";
// Check that calling AnimationsActor method taking AnimationPlayerActor arrays (pauseSome,
// playSome, setCurrentTimes, setPlaybackRates) with instances that are not handled by
// the AnimationsActor anymore doesn't throw nor trigger unexpected animations (see Bug 2001590).
add_task(async function () {
const { target, walker, animations } = await initAnimationsFrontForUrl(
`data:text/html,${encodeURIComponent(`
Hello
`)}`
);
info("Retrieve an animated node");
const node = await walker.querySelector(walker.rootNode, "#target");
const getAnimationPlayersForTargetNode = () =>
animations.getAnimationPlayersForNode(node);
info("Retrieve the animation player for the node");
const players = await getAnimationPlayersForTargetNode();
is(players.length, 1, "Got one animation player");
const animationPlayer = players[0];
info("Stop the animation on the node");
await node.modifyAttributes([
{
attributeName: "class",
newValue: "still",
},
]);
// Wait until we're not getting the animation anymore
await waitFor(async () => {
return (await getAnimationPlayersForTargetNode()).length === 0;
});
info("Call methodes with outdated animationplayer front");
const onPause = animations.pauseSome([animationPlayer]);
const onPlay = animations.playSome([animationPlayer]);
const onCurrentTimeSet = animations.setCurrentTimes(
[animationPlayer],
1,
true
);
const onPlaybackRateSet = animations.setPlaybackRates([animationPlayer], 10);
await onPause;
ok(true, "pauseSome succeeded");
await onPlay;
ok(true, "playSome succedded");
await onCurrentTimeSet;
ok(true, "setCurrentTimes succedded");
await onPlaybackRateSet;
ok(true, "setPlaybackRates succedded");
// wait for a bit so we would get notified about new animations
await wait(500);
is(
(await getAnimationPlayersForTargetNode()).length,
0,
"No players were created after calling those methods"
);
await target.destroy();
gBrowser.removeCurrentTab();
});