diff options
author | qinmin@chromium.org <qinmin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-02-08 07:23:24 +0000 |
---|---|---|
committer | qinmin@chromium.org <qinmin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-02-08 07:23:24 +0000 |
commit | 36eb91aeddc775e0ff63e580717232bde191628f (patch) | |
tree | eda8b16f6db30a52112bb59d5b2ded8eb95bdf75 /webkit | |
parent | 4eda385918b1469ba8cd4fbd524bbfa81f5e2421 (diff) | |
download | chromium_src-36eb91aeddc775e0ff63e580717232bde191628f.zip chromium_src-36eb91aeddc775e0ff63e580717232bde191628f.tar.gz chromium_src-36eb91aeddc775e0ff63e580717232bde191628f.tar.bz2 |
When WebMediaPlayerManagerAndroid goes away, we should detach all the WMPA from it
BUG=161878
Review URL: https://chromiumcodereview.appspot.com/12221032
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@181446 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit')
4 files changed, 18 insertions, 6 deletions
diff --git a/webkit/media/android/webmediaplayer_android.cc b/webkit/media/android/webmediaplayer_android.cc index 2044737..33fd2d9 100644 --- a/webkit/media/android/webmediaplayer_android.cc +++ b/webkit/media/android/webmediaplayer_android.cc @@ -360,6 +360,13 @@ void WebMediaPlayerAndroid::ReleaseMediaResources() { } void WebMediaPlayerAndroid::WillDestroyCurrentMessageLoop() { + if (manager_) + manager_->UnregisterMediaPlayer(player_id_); + Detach(); + main_loop_ = NULL; +} + +void WebMediaPlayerAndroid::Detach() { Destroy(); if (stream_id_) { @@ -369,11 +376,7 @@ void WebMediaPlayerAndroid::WillDestroyCurrentMessageLoop() { video_frame_.reset(); - if (manager_) - manager_->UnregisterMediaPlayer(player_id_); - manager_ = NULL; - main_loop_ = NULL; } void WebMediaPlayerAndroid::ReallocateVideoFrame() { diff --git a/webkit/media/android/webmediaplayer_android.h b/webkit/media/android/webmediaplayer_android.h index bba48dd..58d0d77 100644 --- a/webkit/media/android/webmediaplayer_android.h +++ b/webkit/media/android/webmediaplayer_android.h @@ -121,6 +121,9 @@ class WebMediaPlayerAndroid // Method inherited from DestructionObserver. virtual void WillDestroyCurrentMessageLoop() OVERRIDE; + // Detach the player from its manager. + void Detach(); + protected: // Construct a WebMediaPlayerAndroid object with reference to the // client, manager and stream texture factory. diff --git a/webkit/media/android/webmediaplayer_impl_android.cc b/webkit/media/android/webmediaplayer_impl_android.cc index c43605f..fe4d0a5 100644 --- a/webkit/media/android/webmediaplayer_impl_android.cc +++ b/webkit/media/android/webmediaplayer_impl_android.cc @@ -34,7 +34,8 @@ WebMediaPlayerImplAndroid::WebMediaPlayerImplAndroid( } WebMediaPlayerImplAndroid::~WebMediaPlayerImplAndroid() { - Destroy(); + if (proxy_) + proxy_->DestroyPlayer(player_id()); } void WebMediaPlayerImplAndroid::enterFullscreen() { @@ -125,7 +126,6 @@ void WebMediaPlayerImplAndroid::OnMediaPlayerPause() { } void WebMediaPlayerImplAndroid::Destroy() { - proxy_->DestroyPlayer(player_id()); proxy_ = NULL; } diff --git a/webkit/media/android/webmediaplayer_manager_android.cc b/webkit/media/android/webmediaplayer_manager_android.cc index 4d24ad43..c64de25 100644 --- a/webkit/media/android/webmediaplayer_manager_android.cc +++ b/webkit/media/android/webmediaplayer_manager_android.cc @@ -14,6 +14,12 @@ WebMediaPlayerManagerAndroid::WebMediaPlayerManagerAndroid() } WebMediaPlayerManagerAndroid::~WebMediaPlayerManagerAndroid() { + std::map<int32, WebMediaPlayerAndroid*>::iterator player_it; + for (player_it = media_players_.begin(); + player_it != media_players_.end(); ++player_it) { + WebMediaPlayerAndroid* player = player_it->second; + player->Detach(); + } } int WebMediaPlayerManagerAndroid::RegisterMediaPlayer( |