<!DOCTYPE html>
<html>
<title>Progress bar repaint on resize</title>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script src="../../resources/run-after-layout-and-paint.js"></script>
<script src="../media-controls.js"></script>
<video controls></video>
<script>
async_test(t => {
const video = document.querySelector('video');
video.src = '../content/test.ogv'
const timeline = timelineElement(video);
const thumb = timelineThumb(video);
const segmentBefore = mediaControlsElement(internals.shadowRoot(timeline), '-internal-track-segment-highlight-before');
if (!segmentBefore)
throw 'Could not find segment before element';
const testCases = [300, 800, 200];
function runTestCase(index) {
let test = testCases[index];
video.width = test;
runAfterLayoutAndPaint(t.step_func(() => {
progressBarShouldMeetThumb();
let nextIndex = index + 1;
if (nextIndex == testCases.length) {
t.done();
return;
}
runTestCase(nextIndex);
}));
}
function progressBarShouldMeetThumb() {
const progress = segmentBefore.getBoundingClientRect().right;
const thumbRect = thumb.getBoundingClientRect();
const thumbLeft = thumbRect.left;
const thumbRight = thumbRect.right;
assert_greater_than_equal(progress, thumbLeft, 'progress bar should reach the thumb');
assert_less_than_equal(progress, thumbRight, 'progress bar should not go beyond the thumb');
}
video.onloadedmetadata = t.step_func(() => {
const timelineBoundingRect = timeline.getBoundingClientRect();
let x = timelineBoundingRect.right - 1;
let y = timelineBoundingRect.top + 1;
// Click at top right corner of timeline element,
// thumb should moved to the end of timeline.
singleTapAtCoordinates(x, y, t.step_func(() => {
assert_equals(video.currentTime, video.duration, 'video should reach the end');
runTestCase(0);
}));
});
});
</script>
</html>