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