| Index: media/blink/buffered_resource_loader.cc
|
| diff --git a/media/blink/buffered_resource_loader.cc b/media/blink/buffered_resource_loader.cc
|
| index d88266d06b22dbe60cd90967b7de340973b58806..b2598eaee8579c1f69f85450cd1a79af7344f652 100644
|
| --- a/media/blink/buffered_resource_loader.cc
|
| +++ b/media/blink/buffered_resource_loader.cc
|
| @@ -124,7 +124,8 @@ BufferedResourceLoader::BufferedResourceLoader(
|
| last_offset_(0),
|
| bitrate_(bitrate),
|
| playback_rate_(playback_rate),
|
| - media_log_(media_log) {
|
| + media_log_(media_log),
|
| + cancel_upon_deferral_(false) {
|
|
|
| // Set the initial capacity of |buffer_| based on |bitrate_| and
|
| // |playback_rate_|.
|
| @@ -578,6 +579,10 @@ void BufferedResourceLoader::SetPlaybackRate(float playback_rate) {
|
| if (playback_rate_ == 0.0)
|
| return;
|
|
|
| + // Abort any cancellations in progress if playback starts.
|
| + if (playback_rate_ > 0 && cancel_upon_deferral_)
|
| + cancel_upon_deferral_ = false;
|
| +
|
| UpdateBufferWindow();
|
| }
|
|
|
| @@ -616,6 +621,9 @@ void BufferedResourceLoader::SetDeferred(bool deferred) {
|
|
|
| active_loader_->SetDeferred(deferred);
|
| loading_cb_.Run(deferred ? kLoadingDeferred : kLoading);
|
| +
|
| + if (deferred && cancel_upon_deferral_)
|
| + CancelUponDeferral();
|
| }
|
|
|
| bool BufferedResourceLoader::ShouldDefer() const {
|
| @@ -732,6 +740,12 @@ bool BufferedResourceLoader::ParseContentRange(
|
| return true;
|
| }
|
|
|
| +void BufferedResourceLoader::CancelUponDeferral() {
|
| + cancel_upon_deferral_ = true;
|
| + if (active_loader_ && active_loader_->deferred())
|
| + active_loader_.reset();
|
| +}
|
| +
|
| bool BufferedResourceLoader::VerifyPartialResponse(
|
| const WebURLResponse& response) {
|
| int64 first_byte_position, last_byte_position, instance_size;
|
|
|