summaryrefslogtreecommitdiffstats
path: root/devtools/client/inspector/animation/test/browser_animation_timing_negative-playback-rate_current-time-scrubber.js
blob: e5f05d4f185fe7cce9f28c4d91f9a4896b14c3fa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
/* Any copyright is dedicated to the Public Domain.
   http://creativecommons.org/publicdomain/zero/1.0/ */

"use strict";

// Test whether the scrubber was working in case of negative playback rate.

add_task(async function () {
  await addTab(URL_ROOT + "doc_negative_playback_rate.html");
  await removeAnimatedElementsExcept([".normal"]);
  const { animationInspector, panel } = await openAnimationInspector();

  info("Set initial state");
  clickOnCurrentTimeScrubberController(animationInspector, panel, 0);
  await waitUntilAnimationsPlayState(animationInspector, "paused");
  const initialCurrentTime =
    animationInspector.state.animations[0].state.currentTime;
  const initialProgressBarX = getProgressBarX(panel);

  info("Check whether the animation currentTime was decreased");
  clickOnCurrentTimeScrubberController(animationInspector, panel, 0.5);
  await waitUntilCurrentTimeChangedAt(
    animationInspector,
    animationInspector.state.timeScale.getDuration() * 0.5
  );
  Assert.greater(
    initialCurrentTime,
    animationInspector.state.animations[0].state.currentTime,
    "currentTime should be decreased"
  );

  info("Check whether the progress bar was moved to left");
  Assert.greater(
    initialProgressBarX,
    getProgressBarX(panel),
    "Progress bar should be moved to left"
  );
});

function getProgressBarX(panel) {
  const areaEl = panel.querySelector(".keyframes-progress-bar-area");
  const barEl = areaEl.querySelector(".keyframes-progress-bar");
  const controllerBounds = areaEl.getBoundingClientRect();
  const barBounds = barEl.getBoundingClientRect();
  const barX = barBounds.x + barBounds.width / 2 - controllerBounds.x;
  return barX;
}