Reland: Remove reference counting from media::Pipeline.
Now with a test that covers the refresh/teardown case.
BUG=173313
Review URL: https://chromiumcodereview.appspot.com/14779009
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@199130 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/webkit/media/webmediaplayer_impl.cc b/webkit/media/webmediaplayer_impl.cc
index 614c898..41fd0b36a 100644
--- a/webkit/media/webmediaplayer_impl.cc
+++ b/webkit/media/webmediaplayer_impl.cc
@@ -151,8 +151,8 @@
media_log_->CreateEvent(media::MediaLogEvent::WEBMEDIAPLAYER_CREATED));
CHECK(media_thread_.Start());
- pipeline_ = new media::Pipeline(
- media_thread_.message_loop_proxy(), media_log_);
+ pipeline_.reset(new media::Pipeline(
+ media_thread_.message_loop_proxy(), media_log_));
// Let V8 know we started new thread if we did not do it yet.
// Made separate task to avoid deletion of player currently being created.
@@ -189,13 +189,14 @@
GetClient()->setWebLayer(NULL);
DCHECK(main_loop_->BelongsToCurrentThread());
- Destroy();
media_log_->AddEvent(
media_log_->CreateEvent(media::MediaLogEvent::WEBMEDIAPLAYER_DESTROYED));
if (delegate_)
delegate_->PlayerGone(this);
+ Destroy();
+
// Remove destruction observer if we're being destroyed but the main thread is
// still running.
if (base::MessageLoop::current())
@@ -1213,6 +1214,7 @@
media_thread_.Stop();
// Release any final references now that everything has stopped.
+ pipeline_.reset();
demuxer_.reset();
data_source_.reset();
}