summaryrefslogtreecommitdiffstats
path: root/webkit
diff options
context:
space:
mode:
authorqinmin@chromium.org <qinmin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-02-08 07:23:24 +0000
committerqinmin@chromium.org <qinmin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-02-08 07:23:24 +0000
commit36eb91aeddc775e0ff63e580717232bde191628f (patch)
treeeda8b16f6db30a52112bb59d5b2ded8eb95bdf75 /webkit
parent4eda385918b1469ba8cd4fbd524bbfa81f5e2421 (diff)
downloadchromium_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')
-rw-r--r--webkit/media/android/webmediaplayer_android.cc11
-rw-r--r--webkit/media/android/webmediaplayer_android.h3
-rw-r--r--webkit/media/android/webmediaplayer_impl_android.cc4
-rw-r--r--webkit/media/android/webmediaplayer_manager_android.cc6
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(