summaryrefslogtreecommitdiffstats
path: root/webkit/media
diff options
context:
space:
mode:
authorscherkus@chromium.org <scherkus@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-04-26 18:39:59 +0000
committerscherkus@chromium.org <scherkus@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-04-26 18:39:59 +0000
commitcccbd0f6e9ea74fe6c7aa4e9cf8127a23fab4179 (patch)
tree7b9ea85701b5eb4744535fd6df819520d983da64 /webkit/media
parenta764e16efd4e104e7e0d7a6f7827d0c5f73ec3ef (diff)
downloadchromium_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.cc42
-rw-r--r--webkit/media/buffered_data_source.h6
-rw-r--r--webkit/media/buffered_data_source_unittest.cc9
-rw-r--r--webkit/media/webmediaplayer_impl.cc8
-rw-r--r--webkit/media/webmediaplayer_impl.h2
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_;