Index: webkit/media/buffered_data_source.cc |
diff --git a/webkit/media/buffered_data_source.cc b/webkit/media/buffered_data_source.cc |
index b285c9071b0b3325342e21f21a6f15a618e52835..0aec84a95ed9ecb2f044e0fdbccfd36fed2213f6 100644 |
--- a/webkit/media/buffered_data_source.cc |
+++ b/webkit/media/buffered_data_source.cc |
@@ -32,9 +32,9 @@ BufferedDataSource::BufferedDataSource( |
frame_(frame), |
loader_(NULL), |
is_downloading_data_(false), |
- read_position_(0), |
read_size_(0), |
read_buffer_(NULL), |
+ last_read_start_(0), |
intermediate_read_buffer_(new uint8[kInitialReadBufferSize]), |
intermediate_read_buffer_size_(kInitialReadBufferSize), |
render_loop_(render_loop), |
@@ -207,7 +207,7 @@ void BufferedDataSource::ReadTask( |
} |
// Saves the read parameters. |
- read_position_ = position; |
+ last_read_start_ = position; |
read_size_ = read_size; |
read_buffer_ = buffer; |
cache_miss_retries_left_ = kNumCacheMissRetries; |
@@ -239,7 +239,6 @@ void BufferedDataSource::CleanupTask() { |
loader_->Stop(); |
// Reset the parameters of the current read request. |
- read_position_ = 0; |
read_size_ = 0; |
read_buffer_ = 0; |
} |
@@ -256,7 +255,8 @@ void BufferedDataSource::RestartLoadingTask() { |
return; |
} |
- loader_.reset(CreateResourceLoader(read_position_, kPositionNotSpecified)); |
+ loader_.reset( |
+ CreateResourceLoader(last_read_start_, kPositionNotSpecified)); |
loader_->Start( |
base::Bind(&BufferedDataSource::PartialReadStartCallback, this), |
base::Bind(&BufferedDataSource::NetworkEventCallback, this), |
@@ -313,8 +313,9 @@ void BufferedDataSource::ReadInternal() { |
} |
// Perform the actual read with BufferedResourceLoader. |
- loader_->Read(read_position_, read_size_, intermediate_read_buffer_.get(), |
- base::Bind(&BufferedDataSource::ReadCallback, this)); |
+ loader_->Read( |
+ last_read_start_, read_size_, intermediate_read_buffer_.get(), |
+ base::Bind(&BufferedDataSource::ReadCallback, this)); |
} |
void BufferedDataSource::DoneRead_Locked(int bytes_read) { |
@@ -326,7 +327,6 @@ void BufferedDataSource::DoneRead_Locked(int bytes_read) { |
read_cb_.Run(bytes_read); |
read_cb_.Reset(); |
- read_position_ = 0; |
read_size_ = 0; |
read_buffer_ = 0; |
} |
@@ -526,7 +526,7 @@ void BufferedDataSource::ReadCallback( |
if (host() && total_bytes_ != kPositionNotSpecified) { |
host()->SetTotalBytes(total_bytes_); |
- host()->SetBufferedBytes(total_bytes_); |
+ host()->AddBufferedByteRange(last_read_start_, total_bytes_); |
} |
} |
DoneRead_Locked(bytes_read); |
@@ -542,10 +542,10 @@ void BufferedDataSource::NetworkEventCallback() { |
return; |
bool is_downloading_data = loader_->is_downloading_data(); |
- int64 buffered_position = loader_->GetBufferedPosition(); |
+ int64 current_buffered_position = loader_->GetBufferedPosition(); |
// If we get an unspecified value, return immediately. |
- if (buffered_position == kPositionNotSpecified) |
+ if (current_buffered_position == kPositionNotSpecified) |
return; |
// We need to prevent calling to filter host and running the callback if |
@@ -566,9 +566,8 @@ void BufferedDataSource::NetworkEventCallback() { |
host()->SetNetworkActivity(is_downloading_data); |
} |
- buffered_bytes_ = buffered_position + 1; |
- if (host()) |
- host()->SetBufferedBytes(buffered_bytes_); |
+ if (host() && current_buffered_position > last_read_start_) |
+ host()->AddBufferedByteRange(last_read_start_, current_buffered_position); |
} |
void BufferedDataSource::UpdateHostState_Locked() { |
@@ -580,7 +579,8 @@ void BufferedDataSource::UpdateHostState_Locked() { |
if (total_bytes_ != kPositionNotSpecified) |
host()->SetTotalBytes(total_bytes_); |
- host()->SetBufferedBytes(buffered_bytes_); |
+ if (buffered_bytes_ > last_read_start_) |
+ host()->AddBufferedByteRange(last_read_start_, buffered_bytes_); |
} |
} // namespace webkit_media |