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; |