diff options
author | scherkus@chromium.org <scherkus@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-04-26 18:39:59 +0000 |
---|---|---|
committer | scherkus@chromium.org <scherkus@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-04-26 18:39:59 +0000 |
commit | cccbd0f6e9ea74fe6c7aa4e9cf8127a23fab4179 (patch) | |
tree | 7b9ea85701b5eb4744535fd6df819520d983da64 /webkit/media | |
parent | a764e16efd4e104e7e0d7a6f7827d0c5f73ec3ef (diff) | |
download | chromium_src-cccbd0f6e9ea74fe6c7aa4e9cf8127a23fab4179.zip chromium_src-cccbd0f6e9ea74fe6c7aa4e9cf8127a23fab4179.tar.gz chromium_src-cccbd0f6e9ea74fe6c7aa4e9cf8127a23fab4179.tar.bz2 |
Remove reference counting from media::DataSource and friends.
BUG=173313
Review URL: https://codereview.chromium.org/14503002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@196789 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/media')
-rw-r--r-- | webkit/media/buffered_data_source.cc | 42 | ||||
-rw-r--r-- | webkit/media/buffered_data_source.h | 6 | ||||
-rw-r--r-- | webkit/media/buffered_data_source_unittest.cc | 9 | ||||
-rw-r--r-- | webkit/media/webmediaplayer_impl.cc | 8 | ||||
-rw-r--r-- | webkit/media/webmediaplayer_impl.h | 2 |
5 files changed, 34 insertions, 33 deletions
diff --git a/webkit/media/buffered_data_source.cc b/webkit/media/buffered_data_source.cc index 434963d..60b3621 100644 --- a/webkit/media/buffered_data_source.cc +++ b/webkit/media/buffered_data_source.cc @@ -82,7 +82,9 @@ BufferedDataSource::BufferedDataSource( WebFrame* frame, media::MediaLog* media_log, const DownloadingCB& downloading_cb) - : cors_mode_(BufferedResourceLoader::kUnspecified), + : weak_factory_(this), + weak_this_(weak_factory_.GetWeakPtr()), + cors_mode_(BufferedResourceLoader::kUnspecified), total_bytes_(kPositionNotSpecified), assume_fully_buffered_(false), streaming_(false), @@ -158,9 +160,9 @@ void BufferedDataSource::Initialize( } loader_->Start( - base::Bind(&BufferedDataSource::StartCallback, this), - base::Bind(&BufferedDataSource::LoadingStateChangedCallback, this), - base::Bind(&BufferedDataSource::ProgressCallback, this), + base::Bind(&BufferedDataSource::StartCallback, weak_this_), + base::Bind(&BufferedDataSource::LoadingStateChangedCallback, weak_this_), + base::Bind(&BufferedDataSource::ProgressCallback, weak_this_), frame_); } @@ -200,17 +202,17 @@ void BufferedDataSource::Stop(const base::Closure& closure) { closure.Run(); render_loop_->PostTask(FROM_HERE, - base::Bind(&BufferedDataSource::StopLoader, this)); + base::Bind(&BufferedDataSource::StopLoader, weak_this_)); } void BufferedDataSource::SetPlaybackRate(float playback_rate) { render_loop_->PostTask(FROM_HERE, base::Bind( - &BufferedDataSource::SetPlaybackRateTask, this, playback_rate)); + &BufferedDataSource::SetPlaybackRateTask, weak_this_, playback_rate)); } void BufferedDataSource::SetBitrate(int bitrate) { render_loop_->PostTask(FROM_HERE, base::Bind( - &BufferedDataSource::SetBitrateTask, this, bitrate)); + &BufferedDataSource::SetBitrateTask, weak_this_, bitrate)); } void BufferedDataSource::Read( @@ -232,7 +234,7 @@ void BufferedDataSource::Read( } render_loop_->PostTask(FROM_HERE, base::Bind( - &BufferedDataSource::ReadTask, this)); + &BufferedDataSource::ReadTask, weak_this_)); } bool BufferedDataSource::GetSize(int64* size_out) { @@ -338,7 +340,7 @@ void BufferedDataSource::ReadInternal() { // Perform the actual read with BufferedResourceLoader. loader_->Read( position, size, intermediate_read_buffer_.get(), - base::Bind(&BufferedDataSource::ReadCallback, this)); + base::Bind(&BufferedDataSource::ReadCallback, weak_this_)); } @@ -375,17 +377,14 @@ void BufferedDataSource::StartCallback( // TODO(scherkus): we shouldn't have to lock to signal host(), see // http://crbug.com/113712 for details. - scoped_refptr<BufferedDataSource> destruction_guard(this); - { - base::AutoLock auto_lock(lock_); - if (stop_signal_received_) - return; + base::AutoLock auto_lock(lock_); + if (stop_signal_received_) + return; - if (success) - UpdateHostState_Locked(); + if (success) + UpdateHostState_Locked(); - base::ResetAndReturn(&init_cb_).Run(success); - } + base::ResetAndReturn(&init_cb_).Run(success); } void BufferedDataSource::PartialReadStartCallback( @@ -435,9 +434,10 @@ void BufferedDataSource::ReadCallback( loader_.reset(CreateResourceLoader( read_op_->position(), kPositionNotSpecified)); loader_->Start( - base::Bind(&BufferedDataSource::PartialReadStartCallback, this), - base::Bind(&BufferedDataSource::LoadingStateChangedCallback, this), - base::Bind(&BufferedDataSource::ProgressCallback, this), + base::Bind(&BufferedDataSource::PartialReadStartCallback, weak_this_), + base::Bind(&BufferedDataSource::LoadingStateChangedCallback, + weak_this_), + base::Bind(&BufferedDataSource::ProgressCallback, weak_this_), frame_); return; } diff --git a/webkit/media/buffered_data_source.h b/webkit/media/buffered_data_source.h index 1c3523f..f85e0c6 100644 --- a/webkit/media/buffered_data_source.h +++ b/webkit/media/buffered_data_source.h @@ -41,6 +41,7 @@ class BufferedDataSource : public media::DataSource { WebKit::WebFrame* frame, media::MediaLog* media_log, const DownloadingCB& downloading_cb); + virtual ~BufferedDataSource(); // Initialize this object using |url| and |cors_mode|, executing |init_cb| // with the result of initialization when it has completed. @@ -84,8 +85,6 @@ class BufferedDataSource : public media::DataSource { virtual void SetBitrate(int bitrate) OVERRIDE; protected: - virtual ~BufferedDataSource(); - // A factory method to create a BufferedResourceLoader based on the read // parameters. We can override this file to object a mock // BufferedResourceLoader for testing. @@ -135,6 +134,9 @@ class BufferedDataSource : public media::DataSource { void UpdateHostState_Locked(); + base::WeakPtrFactory<BufferedDataSource> weak_factory_; + base::WeakPtr<BufferedDataSource> weak_this_; + // URL of the resource requested. GURL url_; // crossorigin attribute on the corresponding HTML media element, if any. diff --git a/webkit/media/buffered_data_source_unittest.cc b/webkit/media/buffered_data_source_unittest.cc index 1a1d747f..7bbceeb9 100644 --- a/webkit/media/buffered_data_source_unittest.cc +++ b/webkit/media/buffered_data_source_unittest.cc @@ -46,6 +46,7 @@ class MockBufferedDataSource : public BufferedDataSource { downloading_(false), loading_(false) { } + virtual ~MockBufferedDataSource() {} MOCK_METHOD2(CreateResourceLoader, BufferedResourceLoader*(int64, int64)); BufferedResourceLoader* CreateMockResourceLoader(int64 first_byte_position, @@ -74,8 +75,6 @@ class MockBufferedDataSource : public BufferedDataSource { void set_downloading(bool downloading) { downloading_ = downloading; } private: - virtual ~MockBufferedDataSource() {} - // Whether the resource is downloading or deferred. bool downloading_; @@ -98,8 +97,8 @@ class BufferedDataSourceTest : public testing::Test { : view_(WebView::create(NULL)) { view_->initializeMainFrame(&client_); - data_source_ = new MockBufferedDataSource( - message_loop_.message_loop_proxy(), view_->mainFrame()); + data_source_.reset(new MockBufferedDataSource( + message_loop_.message_loop_proxy(), view_->mainFrame())); data_source_->set_host(&host_); } @@ -207,7 +206,7 @@ class BufferedDataSourceTest : public testing::Test { int loader_bitrate() { return loader()->bitrate_; } int loader_playback_rate() { return loader()->playback_rate_; } - scoped_refptr<MockBufferedDataSource> data_source_; + scoped_ptr<MockBufferedDataSource> data_source_; scoped_ptr<TestResponseGenerator> response_generator_; MockWebFrameClient client_; diff --git a/webkit/media/webmediaplayer_impl.cc b/webkit/media/webmediaplayer_impl.cc index 39d73cc..ba2834b 100644 --- a/webkit/media/webmediaplayer_impl.cc +++ b/webkit/media/webmediaplayer_impl.cc @@ -252,9 +252,9 @@ void WebMediaPlayerImpl::load(const WebKit::WebURL& url, CORSMode cors_mode) { // Otherwise it's a regular request which requires resolving the URL first. GURL gurl(url); - data_source_ = new BufferedDataSource( + data_source_.reset(new BufferedDataSource( main_loop_, frame_, media_log_, base::Bind( - &WebMediaPlayerImpl::NotifyDownloading, AsWeakPtr())); + &WebMediaPlayerImpl::NotifyDownloading, AsWeakPtr()))); data_source_->Initialize( url, static_cast<BufferedResourceLoader::CORSMode>(cors_mode), base::Bind( @@ -1072,7 +1072,7 @@ void WebMediaPlayerImpl::StartPipeline(WebKit::WebMediaSource* media_source) { DCHECK(data_source_); demuxer_.reset(new media::FFmpegDemuxer( - media_thread_.message_loop_proxy(), data_source_, + media_thread_.message_loop_proxy(), data_source_.get(), BIND_TO_RENDER_LOOP_2(&WebMediaPlayerImpl::OnNeedKey, "", ""))); } else { DCHECK(!chunk_demuxer_); @@ -1214,8 +1214,8 @@ void WebMediaPlayerImpl::Destroy() { media_thread_.Stop(); // Release any final references now that everything has stopped. - data_source_ = NULL; demuxer_.reset(); + data_source_.reset(); } WebKit::WebMediaPlayerClient* WebMediaPlayerImpl::GetClient() { diff --git a/webkit/media/webmediaplayer_impl.h b/webkit/media/webmediaplayer_impl.h index 85c4dec..88a2f76 100644 --- a/webkit/media/webmediaplayer_impl.h +++ b/webkit/media/webmediaplayer_impl.h @@ -342,7 +342,7 @@ class WebMediaPlayerImpl // // |demuxer_| will contain the appropriate demuxer based on which resource // load strategy we're using. - scoped_refptr<BufferedDataSource> data_source_; + scoped_ptr<BufferedDataSource> data_source_; scoped_ptr<media::Demuxer> demuxer_; media::ChunkDemuxer* chunk_demuxer_; |