diff options
author | zqzhang <zqzhang@chromium.org> | 2016-01-22 04:03:37 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-01-22 12:04:48 +0000 |
commit | 3a7894afc3fde501d514b66c0873c27ad2f6673f (patch) | |
tree | 94a792577366eb7667cf753bd5154745555b2514 | |
parent | 16745d37d74f99fef03e089258a7e57c12cc2c63 (diff) | |
download | chromium_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}
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; |