<!DOCTYPE html>
<html>
<title>Test that player will behave correctly when scrubbing with touch events.</title>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script src="../media-controls.js"></script>
<video controls width=400 src="../content/60_sec_video.webm"></video>
<script>
async_test(t => {
const video = document.querySelector('video');
const timeline = timelineElement(video);
const thumb = timelineThumb(video);
const scrubbingMessage = scrubbingMessageElement(video);
video.addEventListener('playing', t.step_func(() => {
// Get the coordinates of the thumb and the timeline.
const thumbCoordinates = elementCoordinates(thumb);
const timelineCoordinates = elementCoordinates(timeline);
// Simulate a touch start event and then move the touch to the middle of
// the timeline to simulate a scrub.
if (window.eventSender) {
eventSender.addTouchPoint(thumbCoordinates[0], thumbCoordinates[1]);
eventSender.touchStart();
eventSender.updateTouchPoint(
0, timelineCoordinates[0], timelineCoordinates[1]);
eventSender.touchMove();
}
// Check the scrubbing UI is shown with the correct time.
checkControlsHasClass(video, 'state-scrubbing');
// Check the scrubbing message is shown.
assert_true(isControlVisible(scrubbingMessage));
// Ensure that the timeline now has a value in the middle.
assert_equals(30, Math.round(timeline.value));
// Add an event listener for when we start playing again after seeking.
video.addEventListener('playing', t.step_func_done(() => {
checkControlsDoesNotHaveClass(video, 'state-scrubbing');
// Check the scrubbing message is no longer shown.
assert_false(isControlVisible(scrubbingMessage));
}), { once: true });
// Release the touch.
if (window.eventSender) {
eventSender.releaseTouchPoint(0);
eventSender.touchEnd();
}
}), { once: true });
video.play();
});
</script>
</html>