Chromium Code Reviews| Index: content/browser/media/android/browser_media_player_manager.cc |
| diff --git a/content/browser/media/android/browser_media_player_manager.cc b/content/browser/media/android/browser_media_player_manager.cc |
| index d73137b1a63e7d87d7b1ef4dfc4d97600bbd0b90..1ea8bf152dcc60c5445115e8057fd529e462b437 100644 |
| --- a/content/browser/media/android/browser_media_player_manager.cc |
| +++ b/content/browser/media/android/browser_media_player_manager.cc |
| @@ -7,6 +7,7 @@ |
| #include <utility> |
| #include "base/android/scoped_java_ref.h" |
| +#include "base/memory/ptr_util.h" |
| #include "base/memory/singleton.h" |
| #include "content/browser/frame_host/render_frame_host_impl.h" |
| #include "content/browser/media/android/media_resource_getter_impl.h" |
| @@ -79,20 +80,23 @@ ContentViewCore* BrowserMediaPlayerManager::GetContentViewCore() const { |
| } |
| #endif |
| -MediaPlayerAndroid* BrowserMediaPlayerManager::CreateMediaPlayer( |
| +std::unique_ptr<MediaPlayerAndroid> |
| +BrowserMediaPlayerManager::CreateMediaPlayer( |
| const MediaPlayerHostMsg_Initialize_Params& media_player_params, |
| bool hide_url_log) { |
| switch (media_player_params.type) { |
| case MEDIA_PLAYER_TYPE_REMOTE_ONLY: |
| case MEDIA_PLAYER_TYPE_URL: { |
| const std::string user_agent = GetContentClient()->GetUserAgent(); |
| - MediaPlayerBridge* media_player_bridge = new MediaPlayerBridge( |
| - media_player_params.player_id, media_player_params.url, |
| - media_player_params.first_party_for_cookies, user_agent, hide_url_log, |
| - this, |
| - base::Bind(&BrowserMediaPlayerManager::OnDecoderResourcesReleased, |
| - weak_ptr_factory_.GetWeakPtr()), |
| - media_player_params.frame_url, media_player_params.allow_credentials); |
| + std::unique_ptr<MediaPlayerAndroid> media_player_bridge( |
|
Avi (use Gerrit)
2017/03/13 15:23:34
Not MakeUnique? :(
leonhsl(Using Gerrit)
2017/03/14 02:17:12
I was using MakeUnique, but trybots compile failed
danakj
2017/03/14 15:09:55
Just cast it when you return
class B : public A {
|
| + new MediaPlayerBridge( |
| + media_player_params.player_id, media_player_params.url, |
| + media_player_params.first_party_for_cookies, user_agent, |
| + hide_url_log, this, |
| + base::Bind(&BrowserMediaPlayerManager::OnDecoderResourcesReleased, |
| + weak_ptr_factory_.GetWeakPtr()), |
| + media_player_params.frame_url, |
| + media_player_params.allow_credentials)); |
| if (media_player_params.type == MEDIA_PLAYER_TYPE_REMOTE_ONLY) |
| return media_player_bridge; |
| @@ -118,14 +122,15 @@ MediaPlayerAndroid* BrowserMediaPlayerManager::CreateMediaPlayer( |
| OnMediaMetadataChanged(media_player_params.player_id, base::TimeDelta(), |
| 0, 0, false); |
| } else if (!should_block) { |
| - media_player_bridge->Initialize(); |
| + static_cast<MediaPlayerBridge*>(media_player_bridge.get()) |
| + ->Initialize(); |
| } |
| return media_player_bridge; |
| } |
| } |
| NOTREACHED(); |
| - return NULL; |
| + return nullptr; |
| } |
| BrowserMediaPlayerManager::BrowserMediaPlayerManager( |
| @@ -141,12 +146,13 @@ BrowserMediaPlayerManager::~BrowserMediaPlayerManager() { |
| // During the tear down process, OnDestroyPlayer() may or may not be called |
| // (e.g. the WebContents may be destroyed before the render process). So |
| // we cannot DCHECK(players_.empty()) here. Instead, all media players in |
| - // |players_| will be destroyed here because |player_| is a ScopedVector. |
| + // |players_| will be destroyed here because |player_| is a |
| + // std::vector<std::unique_ptr<>>. |
| - for (MediaPlayerAndroid* player : players_) |
| - player->DeleteOnCorrectThread(); |
| + for (auto& player : players_) |
| + player.release()->DeleteOnCorrectThread(); |
|
Avi (use Gerrit)
2017/03/13 15:23:34
This is... odd, but no worse than before.
|
| - players_.weak_clear(); |
| + players_.clear(); |
| } |
| void BrowserMediaPlayerManager::DidExitFullscreen(bool release_media_player) { |
| @@ -280,12 +286,11 @@ MediaPlayerAndroid* BrowserMediaPlayerManager::GetFullscreenPlayer() { |
| } |
| MediaPlayerAndroid* BrowserMediaPlayerManager::GetPlayer(int player_id) { |
| - for (ScopedVector<MediaPlayerAndroid>::iterator it = players_.begin(); |
| - it != players_.end(); ++it) { |
| - if ((*it)->player_id() == player_id) |
| - return *it; |
| + for (const auto& player : players_) { |
| + if (player->player_id() == player_id) |
| + return player.get(); |
| } |
| - return NULL; |
| + return nullptr; |
| } |
| bool BrowserMediaPlayerManager::RequestPlay(int player_id, |
| @@ -356,13 +361,13 @@ void BrowserMediaPlayerManager::OnInitialize( |
| RenderProcessHostImpl* host = static_cast<RenderProcessHostImpl*>( |
| web_contents()->GetRenderProcessHost()); |
| - MediaPlayerAndroid* player = CreateMediaPlayer( |
| - media_player_params, host->GetBrowserContext()->IsOffTheRecord()); |
| + auto player = CreateMediaPlayer(media_player_params, |
| + host->GetBrowserContext()->IsOffTheRecord()); |
| if (!player) |
| return; |
| - AddPlayer(player, media_player_params.delegate_id); |
| + AddPlayer(std::move(player), media_player_params.delegate_id); |
| } |
| void BrowserMediaPlayerManager::OnStart(int player_id) { |
| @@ -435,19 +440,18 @@ bool BrowserMediaPlayerManager::IsPlayingRemotely(int player_id) { |
| } |
| void BrowserMediaPlayerManager::AddPlayer( |
| - MediaPlayerAndroid* player, int delegate_id) { |
| + std::unique_ptr<MediaPlayerAndroid> player, |
| + int delegate_id) { |
| DCHECK(!GetPlayer(player->player_id())); |
| - players_.push_back(player); |
| - player_id_to_delegate_id_map_[player->player_id()] = |
| - delegate_id; |
| + players_.push_back(std::move(player)); |
| + player_id_to_delegate_id_map_[players_.back()->player_id()] = delegate_id; |
| } |
| void BrowserMediaPlayerManager::DestroyPlayer(int player_id) { |
| - for (ScopedVector<MediaPlayerAndroid>::iterator it = players_.begin(); |
| - it != players_.end(); ++it) { |
| + for (auto it = players_.begin(); it != players_.end(); ++it) { |
| if ((*it)->player_id() == player_id) { |
| - (*it)->DeleteOnCorrectThread(); |
| - players_.weak_erase(it); |
| + it->release()->DeleteOnCorrectThread(); |
| + players_.erase(it); |
| break; |
| } |
| } |
| @@ -463,23 +467,22 @@ void BrowserMediaPlayerManager::ReleaseResources(int player_id) { |
| fullscreen_player_is_released_ = true; |
| } |
| -std::unique_ptr<media::MediaPlayerAndroid> |
| -BrowserMediaPlayerManager::SwapPlayer(int player_id, |
| - media::MediaPlayerAndroid* player) { |
| - media::MediaPlayerAndroid* previous_player = NULL; |
| - for (ScopedVector<MediaPlayerAndroid>::iterator it = players_.begin(); |
| - it != players_.end(); ++it) { |
| +std::unique_ptr<MediaPlayerAndroid> BrowserMediaPlayerManager::SwapPlayer( |
| + int player_id, |
| + MediaPlayerAndroid* player) { |
| + std::unique_ptr<MediaPlayerAndroid> previous_player; |
| + for (auto it = players_.begin(); it != players_.end(); ++it) { |
| if ((*it)->player_id() == player_id) { |
| - previous_player = *it; |
| + previous_player = std::move(*it); |
| MediaWebContentsObserverAndroid::FromWebContents(web_contents_) |
| ->DisconnectMediaSession(render_frame_host_, |
| player_id_to_delegate_id_map_[player_id]); |
| - players_.weak_erase(it); |
| - players_.push_back(player); |
| + players_.erase(it); |
| + players_.push_back(base::WrapUnique(player)); |
| break; |
| } |
| } |
| - return std::unique_ptr<media::MediaPlayerAndroid>(previous_player); |
| + return previous_player; |
| } |
| bool BrowserMediaPlayerManager::RequestDecoderResources( |