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();
 }