Chromium Code Reviews| 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..29515dc003e2633a1c07c567083ff6f2b7dba8bd 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_|. |
| @@ -573,6 +574,10 @@ void BufferedResourceLoader::UpdateDeferStrategy(DeferStrategy strategy) { |
| void BufferedResourceLoader::SetPlaybackRate(float playback_rate) { |
| playback_rate_ = playback_rate; |
| + // Abort any cancellations in progress if playback starts. |
| + if (playback_rate_ > 0 && cancel_upon_deferral_) |
| + cancel_upon_deferral_ = false; |
|
xhwang
2015/03/26 07:21:55
Move this block to l.585?
DaleCurtis
2015/03/26 17:22:00
Done.
|
| + |
| // This is a pause so don't bother updating the buffer window as we'll likely |
| // get unpaused in the future. |
| if (playback_rate_ == 0.0) |
| @@ -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; |