summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorzqzhang <zqzhang@chromium.org>2016-01-22 04:03:37 -0800
committerCommit bot <commit-bot@chromium.org>2016-01-22 12:04:48 +0000
commit3a7894afc3fde501d514b66c0873c27ad2f6673f (patch)
tree94a792577366eb7667cf753bd5154745555b2514
parent16745d37d74f99fef03e089258a7e57c12cc2c63 (diff)
downloadchromium_src-3a7894afc3fde501d514b66c0873c27ad2f6673f.zip
chromium_src-3a7894afc3fde501d514b66c0873c27ad2f6673f.tar.gz
chromium_src-3a7894afc3fde501d514b66c0873c27ad2f6673f.tar.bz2
Remote player pause should not notify MediaSession
This patch fixes an issue that in Cast mode, when pausing a casted media from the browser, it will notify the MediaSession that a player has been paused. This should not happen since the MediaSession should not take care of remote players. BUG=577819 Review URL: https://codereview.chromium.org/1591603003 Cr-Commit-Position: refs/heads/master@{#370949}
-rw-r--r--chrome/browser/media/android/remote/remote_media_player_manager.cc9
-rw-r--r--chrome/browser/media/android/remote/remote_media_player_manager.h4
-rw-r--r--content/browser/media/android/browser_media_player_manager.cc6
-rw-r--r--content/browser/media/android/browser_media_player_manager.h2
-rw-r--r--content/browser/media/android/media_session.cc5
5 files changed, 17 insertions, 9 deletions
diff --git a/chrome/browser/media/android/remote/remote_media_player_manager.cc b/chrome/browser/media/android/remote/remote_media_player_manager.cc
index 4b05be2..375e7e0 100644
--- a/chrome/browser/media/android/remote/remote_media_player_manager.cc
+++ b/chrome/browser/media/android/remote/remote_media_player_manager.cc
@@ -71,6 +71,10 @@ void RemoteMediaPlayerManager::OnRequestRemotePlaybackControl(int player_id) {
player->RequestRemotePlaybackControl();
}
+bool RemoteMediaPlayerManager::IsPlayingRemotely(int player_id) {
+ return players_playing_remotely_.count(player_id) != 0;
+}
+
int RemoteMediaPlayerManager::GetTabId() {
if (!web_contents())
return -1;
@@ -269,9 +273,4 @@ void RemoteMediaPlayerManager::OnMediaMetadataChanged(int player_id,
width, height, success);
}
}
-
-bool RemoteMediaPlayerManager::IsPlayingRemotely(int player_id) {
- return players_playing_remotely_.count(player_id) != 0;
-}
-
} // namespace remote_media
diff --git a/chrome/browser/media/android/remote/remote_media_player_manager.h b/chrome/browser/media/android/remote/remote_media_player_manager.h
index 47167c4..e0cef39 100644
--- a/chrome/browser/media/android/remote/remote_media_player_manager.h
+++ b/chrome/browser/media/android/remote/remote_media_player_manager.h
@@ -74,6 +74,8 @@ class RemoteMediaPlayerManager : public content::BrowserMediaPlayerManager {
void OnRequestRemotePlayback(int player_id) override;
void OnRequestRemotePlaybackControl(int player_id) override;
+ bool IsPlayingRemotely(int player_id) override;
+
void ReleaseFullscreenPlayer(media::MediaPlayerAndroid* player) override;
// Callback for when the download of poster image is done.
@@ -108,8 +110,6 @@ class RemoteMediaPlayerManager : public content::BrowserMediaPlayerManager {
// for videos that are playing remotely.
ScopedVector<media::MediaPlayerAndroid> alternative_players_;
- bool IsPlayingRemotely(int player_id);
-
std::set<int> players_playing_remotely_;
base::WeakPtrFactory<RemoteMediaPlayerManager> weak_ptr_factory_;
diff --git a/content/browser/media/android/browser_media_player_manager.cc b/content/browser/media/android/browser_media_player_manager.cc
index 67517d8..8d60c6a 100644
--- a/content/browser/media/android/browser_media_player_manager.cc
+++ b/content/browser/media/android/browser_media_player_manager.cc
@@ -622,7 +622,7 @@ void BrowserMediaPlayerManager::OnPause(
if (player)
player->Pause(is_media_related_action);
- if (is_media_related_action)
+ if (is_media_related_action && !IsPlayingRemotely(player_id))
MediaSession::Get(web_contents())->OnPlayerPaused(this, player_id);
}
@@ -656,6 +656,10 @@ void BrowserMediaPlayerManager::OnRequestRemotePlaybackControl(
// Does nothing if we don't have a remote player
}
+bool BrowserMediaPlayerManager::IsPlayingRemotely(int player_id) {
+ return false;
+}
+
void BrowserMediaPlayerManager::AddPlayer(MediaPlayerAndroid* player) {
DCHECK(!GetPlayer(player->player_id()));
players_.push_back(player);
diff --git a/content/browser/media/android/browser_media_player_manager.h b/content/browser/media/android/browser_media_player_manager.h
index c304e86..4530069 100644
--- a/content/browser/media/android/browser_media_player_manager.h
+++ b/content/browser/media/android/browser_media_player_manager.h
@@ -131,7 +131,9 @@ class CONTENT_EXPORT BrowserMediaPlayerManager
virtual void OnDestroyPlayer(int player_id);
virtual void OnRequestRemotePlayback(int player_id);
virtual void OnRequestRemotePlaybackControl(int player_id);
+ virtual bool IsPlayingRemotely(int player_id);
virtual void ReleaseFullscreenPlayer(media::MediaPlayerAndroid* player);
+
#if defined(VIDEO_HOLE)
void OnNotifyExternalSurface(
int player_id, bool is_request, const gfx::RectF& rect);
diff --git a/content/browser/media/android/media_session.cc b/content/browser/media/android/media_session.cc
index ed5d71f..e90daf4 100644
--- a/content/browser/media/android/media_session.cc
+++ b/content/browser/media/android/media_session.cc
@@ -139,7 +139,10 @@ void MediaSession::OnResume(JNIEnv* env, const JavaParamRef<jobject>& obj) {
void MediaSession::OnPlayerPaused(MediaSessionObserver* observer,
int player_id) {
// If a playback is completed, BrowserMediaPlayerManager will call
- // OnPlayerPaused() after RemovePlayer(). This is a workaround for this.
+ // OnPlayerPaused() after RemovePlayer(). This is a workaround.
+ // Also, this method may be called when a player that is not added
+ // to this session (e.g. a silent video) is paused. MediaSession
+ // should ignore the paused player for this case.
if (!players_.count(PlayerIdentifier(observer, player_id)))
return;