fune/dom/webidl/Animation.webidl
Boris Chiou cbb25b7480 Bug 1677844 - Let getAnimations() return scroll animations with null timeline. r=webidl,smaug,emilio
This is a tentative way to avoid any timeout in WPT because other
brower vendors may expect getAnimations() works for scroll animations.

The original implementation is error-prone because the user can use the
declarative way to create a CSS animation associated with the document-timeline,
and then changes animation-timeline property to any other scroll-timeline.
If the user calls getAnimations() before changing its style, we still expose
the Animation objects in JS and may crash or have other unexpected bahaviors
if the user tries to access Animation.timeline.

Besides, another benefit of this patch is that we can use other Web Animation
APIs for scroll animations in WPT, e.g. Animation.ready.

Differential Revision: https://phabricator.services.mozilla.com/D176966
2023-05-03 22:49:21 +00:00

70 lines
2.5 KiB
Text

/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/.
*
* The origin of this IDL file is
* https://drafts.csswg.org/web-animations/#animation
*
* Copyright © 2015 W3C® (MIT, ERCIM, Keio), All Rights Reserved. W3C
* liability, trademark and document use rules apply.
*/
enum AnimationPlayState { "idle", "running", "paused", "finished" };
enum AnimationReplaceState { "active", "removed", "persisted" };
[Exposed=Window]
interface Animation : EventTarget {
[Throws]
constructor(optional AnimationEffect? effect = null,
optional AnimationTimeline? timeline);
attribute DOMString id;
[Func="Document::IsWebAnimationsEnabled", Pure]
attribute AnimationEffect? effect;
// Bug 1676794. Drop BinaryName once we support ScrollTimeline interface.
[Func="Document::AreWebAnimationsTimelinesEnabled",
BinaryName="timelineFromJS"]
attribute AnimationTimeline? timeline;
[BinaryName="startTimeAsDouble"]
attribute double? startTime;
[SetterThrows, BinaryName="currentTimeAsDouble"]
attribute double? currentTime;
attribute double playbackRate;
[BinaryName="playStateFromJS"]
readonly attribute AnimationPlayState playState;
[BinaryName="pendingFromJS"]
readonly attribute boolean pending;
[Pref="dom.animations-api.autoremove.enabled"]
readonly attribute AnimationReplaceState replaceState;
[Func="Document::IsWebAnimationsEnabled", Throws]
readonly attribute Promise<Animation> ready;
[Func="Document::IsWebAnimationsEnabled", Throws]
readonly attribute Promise<Animation> finished;
attribute EventHandler onfinish;
attribute EventHandler oncancel;
[Pref="dom.animations-api.autoremove.enabled"]
attribute EventHandler onremove;
undefined cancel();
[Throws]
undefined finish();
[Throws, BinaryName="playFromJS"]
undefined play();
[Throws, BinaryName="pauseFromJS"]
undefined pause();
undefined updatePlaybackRate (double playbackRate);
[Throws]
undefined reverse();
[Pref="dom.animations-api.autoremove.enabled"]
undefined persist();
[CEReactions, Pref="dom.animations-api.autoremove.enabled", Throws]
undefined commitStyles();
};
// Non-standard extensions
partial interface Animation {
[ChromeOnly] readonly attribute boolean isRunningOnCompositor;
};