Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "webkit/media/buffered_data_source.h" | 5 #include "webkit/media/buffered_data_source.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/message_loop.h" | 8 #include "base/message_loop.h" |
| 9 #include "media/base/media_log.h" | 9 #include "media/base/media_log.h" |
| 10 #include "net/base/net_errors.h" | 10 #include "net/base/net_errors.h" |
| (...skipping 22 matching lines...) Expand all Loading... | |
| 33 } | 33 } |
| 34 static void NonHttpProgressCallback(int64) {} | 34 static void NonHttpProgressCallback(int64) {} |
| 35 | 35 |
| 36 BufferedDataSource::BufferedDataSource( | 36 BufferedDataSource::BufferedDataSource( |
| 37 MessageLoop* render_loop, | 37 MessageLoop* render_loop, |
| 38 WebFrame* frame, | 38 WebFrame* frame, |
| 39 media::MediaLog* media_log, | 39 media::MediaLog* media_log, |
| 40 const DownloadingCB& downloading_cb) | 40 const DownloadingCB& downloading_cb) |
| 41 : cors_mode_(BufferedResourceLoader::kUnspecified), | 41 : cors_mode_(BufferedResourceLoader::kUnspecified), |
| 42 total_bytes_(kPositionNotSpecified), | 42 total_bytes_(kPositionNotSpecified), |
| 43 buffered_bytes_(0), | 43 assume_fully_buffered_(false), |
| 44 streaming_(false), | 44 streaming_(false), |
| 45 frame_(frame), | 45 frame_(frame), |
| 46 read_size_(0), | 46 read_size_(0), |
| 47 read_buffer_(NULL), | 47 read_buffer_(NULL), |
| 48 last_read_start_(0), | 48 last_read_start_(0), |
| 49 intermediate_read_buffer_(new uint8[kInitialReadBufferSize]), | 49 intermediate_read_buffer_(new uint8[kInitialReadBufferSize]), |
| 50 intermediate_read_buffer_size_(kInitialReadBufferSize), | 50 intermediate_read_buffer_size_(kInitialReadBufferSize), |
| 51 render_loop_(render_loop), | 51 render_loop_(render_loop), |
| 52 stop_signal_received_(false), | 52 stop_signal_received_(false), |
| 53 stopped_on_render_loop_(false), | 53 stopped_on_render_loop_(false), |
| (...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 281 loader_.reset( | 281 loader_.reset( |
| 282 CreateResourceLoader(last_read_start_, kPositionNotSpecified)); | 282 CreateResourceLoader(last_read_start_, kPositionNotSpecified)); |
| 283 if (url_.SchemeIs(kHttpScheme) || url_.SchemeIs(kHttpsScheme)) { | 283 if (url_.SchemeIs(kHttpScheme) || url_.SchemeIs(kHttpsScheme)) { |
| 284 loader_->Start( | 284 loader_->Start( |
| 285 base::Bind(&BufferedDataSource::PartialReadStartCallback, this), | 285 base::Bind(&BufferedDataSource::PartialReadStartCallback, this), |
| 286 base::Bind(&BufferedDataSource::HttpLoadingStateChangedCallback, this), | 286 base::Bind(&BufferedDataSource::HttpLoadingStateChangedCallback, this), |
| 287 base::Bind(&BufferedDataSource::HttpProgressCallback, this), | 287 base::Bind(&BufferedDataSource::HttpProgressCallback, this), |
| 288 frame_); | 288 frame_); |
| 289 } else { | 289 } else { |
| 290 loader_->Start( | 290 loader_->Start( |
| 291 base::Bind(&BufferedDataSource::NonHttpInitialStartCallback, this), | 291 base::Bind(&BufferedDataSource::PartialReadStartCallback, this), |
|
scherkus (not reviewing)
2012/07/10 22:18:33
fixes bug #1
| |
| 292 base::Bind(&NonHttpLoadingStateChangedCallback), | 292 base::Bind(&NonHttpLoadingStateChangedCallback), |
| 293 base::Bind(&NonHttpProgressCallback), | 293 base::Bind(&NonHttpProgressCallback), |
| 294 frame_); | 294 frame_); |
| 295 } | 295 } |
| 296 } | 296 } |
| 297 | 297 |
| 298 void BufferedDataSource::SetPlaybackRateTask(float playback_rate) { | 298 void BufferedDataSource::SetPlaybackRateTask(float playback_rate) { |
| 299 DCHECK(MessageLoop::current() == render_loop_); | 299 DCHECK(MessageLoop::current() == render_loop_); |
| 300 DCHECK(loader_.get()); | 300 DCHECK(loader_.get()); |
| 301 | 301 |
| (...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 445 loader_->Stop(); | 445 loader_->Stop(); |
| 446 return; | 446 return; |
| 447 } | 447 } |
| 448 | 448 |
| 449 int64 instance_size = loader_->instance_size(); | 449 int64 instance_size = loader_->instance_size(); |
| 450 bool success = status == BufferedResourceLoader::kOk && | 450 bool success = status == BufferedResourceLoader::kOk && |
| 451 instance_size != kPositionNotSpecified; | 451 instance_size != kPositionNotSpecified; |
| 452 | 452 |
| 453 if (success) { | 453 if (success) { |
| 454 total_bytes_ = instance_size; | 454 total_bytes_ = instance_size; |
| 455 buffered_bytes_ = total_bytes_; | 455 assume_fully_buffered_ = true; |
| 456 } else { | 456 } else { |
| 457 loader_->Stop(); | 457 loader_->Stop(); |
| 458 } | 458 } |
| 459 | 459 |
| 460 // Reference to prevent destruction while inside the |initialize_cb_| | 460 // Reference to prevent destruction while inside the |initialize_cb_| |
| 461 // call. This is a temporary fix to prevent crashes caused by holding the | 461 // call. This is a temporary fix to prevent crashes caused by holding the |
| 462 // lock and running the destructor. | 462 // lock and running the destructor. |
| 463 // TODO: Review locking in this class and figure out a way to run the callback | 463 // TODO: Review locking in this class and figure out a way to run the callback |
| 464 // w/o the lock. | 464 // w/o the lock. |
| 465 scoped_refptr<BufferedDataSource> destruction_guard(this); | 465 scoped_refptr<BufferedDataSource> destruction_guard(this); |
| (...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 600 if (host() && position > last_read_start_) | 600 if (host() && position > last_read_start_) |
| 601 host()->AddBufferedByteRange(last_read_start_, position); | 601 host()->AddBufferedByteRange(last_read_start_, position); |
| 602 } | 602 } |
| 603 | 603 |
| 604 void BufferedDataSource::UpdateHostState_Locked() { | 604 void BufferedDataSource::UpdateHostState_Locked() { |
| 605 lock_.AssertAcquired(); | 605 lock_.AssertAcquired(); |
| 606 | 606 |
| 607 if (!host()) | 607 if (!host()) |
| 608 return; | 608 return; |
| 609 | 609 |
| 610 if (total_bytes_ != kPositionNotSpecified) | 610 if (total_bytes_ != kPositionNotSpecified) { |
|
Ami GONE FROM CHROMIUM
2012/07/11 00:51:54
reverse test & early-return?
scherkus (not reviewing)
2012/07/11 01:10:56
Done.
| |
| 611 host()->SetTotalBytes(total_bytes_); | 611 host()->SetTotalBytes(total_bytes_); |
| 612 int64 start = loader_->first_byte_position(); | 612 |
| 613 if (buffered_bytes_ > start) | 613 if (assume_fully_buffered_) |
| 614 host()->AddBufferedByteRange(start, buffered_bytes_); | 614 host()->AddBufferedByteRange(0, total_bytes_); |
|
scherkus (not reviewing)
2012/07/10 22:18:33
fixes bug #2
| |
| 615 } | |
| 615 } | 616 } |
| 616 | 617 |
| 617 } // namespace webkit_media | 618 } // namespace webkit_media |
| OLD | NEW |