Drop all timeline seeks outside of the seekable range.

Prevents annoying accidental seeks to the beginning of content for
streaming content; non-streaming content always exposes (0, duration)
as the seekable range so it's unaffected by this change.

BUG=412562
TEST=new layout test.

Review URL: https://codereview.chromium.org/614263002

git-svn-id: svn://svn.chromium.org/blink/trunk@183841 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent 40c947d0
<!DOCTYPE html>
<title>Verifies timeline control seeks outside of seekable() fizzle.</title>
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
<script src="../../media-resources/media-file.js"></script>
<script src="../../media-resources/media-controls.js"></script>
<div id="log"></div>
<audio controls></audio>
<script>
async_test(function(t) {
var audio = document.querySelector('audio');
audio.onloadeddata = t.step_func(function() {
// Verify seekable range only contains zero.
assert_equals(audio.seekable.length, 1);
assert_equals(audio.seekable.start(0), 0);
assert_equals(audio.seekable.end(0), 0);
// Click the middle of the timeline.
var coords = mediaControlsButtonCoordinates(audio, "timeline");
eventSender.mouseMoveTo(coords[0], coords[1]);
eventSender.mouseDown();
eventSender.mouseUp();
assert_false(audio.seeking);
assert_equals(audio.currentTime, 0);
t.done();
});
var mediaFile = findMediaFile('audio', '../../../../media/content/silence');
var type = mimeTypeForExtension(mediaFile.split('.').pop());
audio.src = 'http://127.0.0.1:8000/media/resources/load-video.php' +
'?norange=true&name=' + mediaFile + '&type=' + type;
});
</script>
...@@ -37,6 +37,7 @@ ...@@ -37,6 +37,7 @@
#include "core/frame/LocalFrame.h" #include "core/frame/LocalFrame.h"
#include "core/html/HTMLVideoElement.h" #include "core/html/HTMLVideoElement.h"
#include "core/html/MediaController.h" #include "core/html/MediaController.h"
#include "core/html/TimeRanges.h"
#include "core/html/shadow/MediaControls.h" #include "core/html/shadow/MediaControls.h"
#include "core/html/track/TextTrack.h" #include "core/html/track/TextTrack.h"
#include "core/html/track/vtt/VTTRegionList.h" #include "core/html/track/vtt/VTTRegionList.h"
...@@ -418,10 +419,12 @@ void MediaControlTimelineElement::defaultEventHandler(Event* event) ...@@ -418,10 +419,12 @@ void MediaControlTimelineElement::defaultEventHandler(Event* event)
if (event->type() == EventTypeNames::input) { if (event->type() == EventTypeNames::input) {
// FIXME: This will need to take the timeline offset into consideration // FIXME: This will need to take the timeline offset into consideration
// once that concept is supported, see https://crbug.com/312699 // once that concept is supported, see https://crbug.com/312699
if (mediaElement().controller()) if (mediaElement().controller()) {
mediaElement().controller()->setCurrentTime(time); if (mediaElement().controller()->seekable()->contain(time))
else mediaElement().controller()->setCurrentTime(time);
} else if (mediaElement().seekable()->contain(time)) {
mediaElement().setCurrentTime(time, IGNORE_EXCEPTION); mediaElement().setCurrentTime(time, IGNORE_EXCEPTION);
}
} }
RenderSlider* slider = toRenderSlider(renderer()); RenderSlider* slider = toRenderSlider(renderer());
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment