Index: chrome/browser/media/android/remote/remote_media_player_manager.cc |
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 83d8a4380e3d9027a52774dfaf99077b7b4902b9..1fc203d4b2ad8426756d78214df583d537c4097e 100644 |
--- a/chrome/browser/media/android/remote/remote_media_player_manager.cc |
+++ b/chrome/browser/media/android/remote/remote_media_player_manager.cc |
@@ -4,6 +4,7 @@ |
#include "chrome/browser/media/android/remote/remote_media_player_manager.h" |
+#include "base/memory/ptr_util.h" |
#include "chrome/browser/android/tab_android.h" |
#include "chrome/common/chrome_content_client.h" |
#include "content/common/media/media_player_messages_android.h" |
@@ -24,10 +25,10 @@ RemoteMediaPlayerManager::RemoteMediaPlayerManager( |
} |
RemoteMediaPlayerManager::~RemoteMediaPlayerManager() { |
- for (MediaPlayerAndroid* player : alternative_players_) |
- player->DeleteOnCorrectThread(); |
+ for (auto& player : alternative_players_) |
+ player.release()->DeleteOnCorrectThread(); |
- alternative_players_.weak_clear(); |
+ alternative_players_.clear(); |
} |
void RemoteMediaPlayerManager::OnStart(int player_id) { |
@@ -142,11 +143,12 @@ void RemoteMediaPlayerManager::DidDownloadPoster( |
RemoteMediaPlayerBridge* RemoteMediaPlayerManager::CreateRemoteMediaPlayer( |
int player_id) { |
- RemoteMediaPlayerBridge* player = |
- new RemoteMediaPlayerBridge(player_id, GetUserAgent(), this); |
- alternative_players_.push_back(player); |
- player->Initialize(); |
- return player; |
+ alternative_players_.push_back(base::MakeUnique<RemoteMediaPlayerBridge>( |
+ player_id, GetUserAgent(), this)); |
+ RemoteMediaPlayerBridge* remote = |
+ static_cast<RemoteMediaPlayerBridge*>(alternative_players_.back().get()); |
+ remote->Initialize(); |
+ return remote; |
} |
bool RemoteMediaPlayerManager::SwapCurrentPlayer(int player_id) { |
@@ -155,17 +157,15 @@ bool RemoteMediaPlayerManager::SwapCurrentPlayer(int player_id) { |
if (it == alternative_players_.end()) |
return false; |
- MediaPlayerAndroid* new_player = *it; |
+ // Release ownership of the alternative player. |
std::unique_ptr<MediaPlayerAndroid> old_player = |
- SwapPlayer(player_id, new_player); |
+ SwapPlayer(player_id, std::move(*it)); |
+ alternative_players_.erase(it); |
if (!old_player) { |
- // There's no player to swap with, destroy the alternative player and exit. |
- alternative_players_.erase(it); |
return false; |
} |
- alternative_players_.weak_erase(it); |
- alternative_players_.push_back(old_player.release()); |
+ alternative_players_.push_back(std::move(old_player)); |
return true; |
} |
@@ -248,7 +248,7 @@ void RemoteMediaPlayerManager::OnPaused(int player_id) { |
Send(new MediaPlayerMsg_DidMediaPlayerPause(RoutingID(),player_id)); |
} |
-ScopedVector<MediaPlayerAndroid>::iterator |
+std::vector<std::unique_ptr<MediaPlayerAndroid>>::iterator |
RemoteMediaPlayerManager::GetAlternativePlayer(int player_id) { |
for (auto it = alternative_players_.begin(); it != alternative_players_.end(); |
++it) { |
@@ -266,7 +266,7 @@ RemoteMediaPlayerBridge* RemoteMediaPlayerManager::GetRemotePlayer( |
auto it = GetAlternativePlayer(player_id); |
if (it == alternative_players_.end()) |
return nullptr; |
- return static_cast<RemoteMediaPlayerBridge*>(*it); |
+ return static_cast<RemoteMediaPlayerBridge*>(it->get()); |
} |
MediaPlayerAndroid* RemoteMediaPlayerManager::GetLocalPlayer(int player_id) { |
@@ -275,7 +275,7 @@ MediaPlayerAndroid* RemoteMediaPlayerManager::GetLocalPlayer(int player_id) { |
auto it = GetAlternativePlayer(player_id); |
if (it == alternative_players_.end()) |
return nullptr; |
- return *it; |
+ return it->get(); |
} |
void RemoteMediaPlayerManager::OnMediaMetadataChanged(int player_id, |