| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/browser/media/android/browser_media_player_manager.h" | 5 #include "content/browser/media/android/browser_media_player_manager.h" |
| 6 | 6 |
| 7 #include "base/android/scoped_java_ref.h" | 7 #include "base/android/scoped_java_ref.h" |
| 8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
| 9 #include "content/browser/android/content_view_core_impl.h" | 9 #include "content/browser/android/content_view_core_impl.h" |
| 10 #include "content/browser/media/android/browser_demuxer_android.h" | 10 #include "content/browser/media/android/browser_demuxer_android.h" |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 52 if (g_factory) | 52 if (g_factory) |
| 53 return g_factory(rfh); | 53 return g_factory(rfh); |
| 54 return new BrowserMediaPlayerManager(rfh); | 54 return new BrowserMediaPlayerManager(rfh); |
| 55 } | 55 } |
| 56 | 56 |
| 57 ContentViewCoreImpl* BrowserMediaPlayerManager::GetContentViewCore() const { | 57 ContentViewCoreImpl* BrowserMediaPlayerManager::GetContentViewCore() const { |
| 58 return ContentViewCoreImpl::FromWebContents(web_contents()); | 58 return ContentViewCoreImpl::FromWebContents(web_contents()); |
| 59 } | 59 } |
| 60 | 60 |
| 61 MediaPlayerAndroid* BrowserMediaPlayerManager::CreateMediaPlayer( | 61 MediaPlayerAndroid* BrowserMediaPlayerManager::CreateMediaPlayer( |
| 62 const MediaPlayerHostMsg_Initialize_Params& media_player_params, | 62 MediaPlayerHostMsg_Initialize_Type type, |
| 63 int player_id, |
| 64 const GURL& url, |
| 65 const GURL& first_party_for_cookies, |
| 66 int demuxer_client_id, |
| 63 bool hide_url_log, | 67 bool hide_url_log, |
| 64 MediaPlayerManager* manager, | 68 MediaPlayerManager* manager, |
| 65 BrowserDemuxerAndroid* demuxer) { | 69 BrowserDemuxerAndroid* demuxer) { |
| 66 switch (media_player_params.type) { | 70 switch (type) { |
| 67 case MEDIA_PLAYER_TYPE_URL: { | 71 case MEDIA_PLAYER_TYPE_URL: { |
| 68 const std::string user_agent = GetContentClient()->GetUserAgent(); | 72 const std::string user_agent = GetContentClient()->GetUserAgent(); |
| 69 MediaPlayerBridge* media_player_bridge = new MediaPlayerBridge( | 73 MediaPlayerBridge* media_player_bridge = new MediaPlayerBridge( |
| 70 media_player_params.player_id, | 74 player_id, |
| 71 media_player_params.url, | 75 url, |
| 72 media_player_params.first_party_for_cookies, | 76 first_party_for_cookies, |
| 73 user_agent, | 77 user_agent, |
| 74 hide_url_log, | 78 hide_url_log, |
| 75 manager, | 79 manager, |
| 76 base::Bind(&BrowserMediaPlayerManager::OnMediaResourcesRequested, | 80 base::Bind(&BrowserMediaPlayerManager::OnMediaResourcesRequested, |
| 77 weak_ptr_factory_.GetWeakPtr()), | 81 weak_ptr_factory_.GetWeakPtr()), |
| 78 base::Bind(&BrowserMediaPlayerManager::OnMediaResourcesReleased, | 82 base::Bind(&BrowserMediaPlayerManager::OnMediaResourcesReleased, |
| 79 weak_ptr_factory_.GetWeakPtr()), | 83 weak_ptr_factory_.GetWeakPtr())); |
| 80 media_player_params.frame_url); | |
| 81 BrowserMediaPlayerManager* browser_media_player_manager = | 84 BrowserMediaPlayerManager* browser_media_player_manager = |
| 82 static_cast<BrowserMediaPlayerManager*>(manager); | 85 static_cast<BrowserMediaPlayerManager*>(manager); |
| 83 ContentViewCoreImpl* content_view_core_impl = | 86 ContentViewCoreImpl* content_view_core_impl = |
| 84 static_cast<ContentViewCoreImpl*>(ContentViewCore::FromWebContents( | 87 static_cast<ContentViewCoreImpl*>(ContentViewCore::FromWebContents( |
| 85 browser_media_player_manager->web_contents_)); | 88 browser_media_player_manager->web_contents_)); |
| 86 if (!content_view_core_impl) { | 89 if (!content_view_core_impl) { |
| 87 // May reach here due to prerendering. Don't extract the metadata | 90 // May reach here due to prerendering. Don't extract the metadata |
| 88 // since it is expensive. | 91 // since it is expensive. |
| 89 // TODO(qinmin): extract the metadata once the user decided to load | 92 // TODO(qinmin): extract the metadata once the user decided to load |
| 90 // the page. | 93 // the page. |
| 91 browser_media_player_manager->OnMediaMetadataChanged( | 94 browser_media_player_manager->OnMediaMetadataChanged( |
| 92 media_player_params.player_id, base::TimeDelta(), 0, 0, false); | 95 player_id, base::TimeDelta(), 0, 0, false); |
| 93 } else if (!content_view_core_impl->ShouldBlockMediaRequest( | 96 } else if (!content_view_core_impl->ShouldBlockMediaRequest(url)) { |
| 94 media_player_params.url)) { | |
| 95 media_player_bridge->Initialize(); | 97 media_player_bridge->Initialize(); |
| 96 } | 98 } |
| 97 return media_player_bridge; | 99 return media_player_bridge; |
| 98 } | 100 } |
| 99 | 101 |
| 100 case MEDIA_PLAYER_TYPE_MEDIA_SOURCE: { | 102 case MEDIA_PLAYER_TYPE_MEDIA_SOURCE: { |
| 101 return new MediaSourcePlayer( | 103 return new MediaSourcePlayer( |
| 102 media_player_params.player_id, | 104 player_id, |
| 103 manager, | 105 manager, |
| 104 base::Bind(&BrowserMediaPlayerManager::OnMediaResourcesRequested, | 106 base::Bind(&BrowserMediaPlayerManager::OnMediaResourcesRequested, |
| 105 weak_ptr_factory_.GetWeakPtr()), | 107 weak_ptr_factory_.GetWeakPtr()), |
| 106 base::Bind(&BrowserMediaPlayerManager::OnMediaResourcesReleased, | 108 base::Bind(&BrowserMediaPlayerManager::OnMediaResourcesReleased, |
| 107 weak_ptr_factory_.GetWeakPtr()), | 109 weak_ptr_factory_.GetWeakPtr()), |
| 108 demuxer->CreateDemuxer(media_player_params.demuxer_client_id), | 110 demuxer->CreateDemuxer(demuxer_client_id)); |
| 109 media_player_params.frame_url); | |
| 110 } | 111 } |
| 111 } | 112 } |
| 112 | 113 |
| 113 NOTREACHED(); | 114 NOTREACHED(); |
| 114 return NULL; | 115 return NULL; |
| 115 } | 116 } |
| 116 | 117 |
| 117 BrowserMediaPlayerManager::BrowserMediaPlayerManager( | 118 BrowserMediaPlayerManager::BrowserMediaPlayerManager( |
| 118 RenderFrameHost* render_frame_host) | 119 RenderFrameHost* render_frame_host) |
| 119 : render_frame_host_(render_frame_host), | 120 : render_frame_host_(render_frame_host), |
| (...skipping 292 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 412 void BrowserMediaPlayerManager::OnExitFullscreen(int player_id) { | 413 void BrowserMediaPlayerManager::OnExitFullscreen(int player_id) { |
| 413 if (fullscreen_player_id_ == player_id) { | 414 if (fullscreen_player_id_ == player_id) { |
| 414 MediaPlayerAndroid* player = GetPlayer(player_id); | 415 MediaPlayerAndroid* player = GetPlayer(player_id); |
| 415 if (player) | 416 if (player) |
| 416 player->SetVideoSurface(gfx::ScopedJavaSurface()); | 417 player->SetVideoSurface(gfx::ScopedJavaSurface()); |
| 417 video_view_->OnExitFullscreen(); | 418 video_view_->OnExitFullscreen(); |
| 418 } | 419 } |
| 419 } | 420 } |
| 420 | 421 |
| 421 void BrowserMediaPlayerManager::OnInitialize( | 422 void BrowserMediaPlayerManager::OnInitialize( |
| 422 const MediaPlayerHostMsg_Initialize_Params& media_player_params) { | 423 MediaPlayerHostMsg_Initialize_Type type, |
| 423 DCHECK(media_player_params.type != MEDIA_PLAYER_TYPE_MEDIA_SOURCE || | 424 int player_id, |
| 424 media_player_params.demuxer_client_id > 0) | 425 const GURL& url, |
| 426 const GURL& first_party_for_cookies, |
| 427 int demuxer_client_id) { |
| 428 DCHECK(type != MEDIA_PLAYER_TYPE_MEDIA_SOURCE || demuxer_client_id > 0) |
| 425 << "Media source players must have positive demuxer client IDs: " | 429 << "Media source players must have positive demuxer client IDs: " |
| 426 << media_player_params.demuxer_client_id; | 430 << demuxer_client_id; |
| 427 | 431 |
| 428 RemovePlayer(media_player_params.player_id); | 432 RemovePlayer(player_id); |
| 429 | 433 |
| 430 RenderProcessHostImpl* host = static_cast<RenderProcessHostImpl*>( | 434 RenderProcessHostImpl* host = static_cast<RenderProcessHostImpl*>( |
| 431 web_contents()->GetRenderProcessHost()); | 435 web_contents()->GetRenderProcessHost()); |
| 432 MediaPlayerAndroid* player = CreateMediaPlayer( | 436 MediaPlayerAndroid* player = CreateMediaPlayer( |
| 433 media_player_params, | 437 type, player_id, url, first_party_for_cookies, demuxer_client_id, |
| 434 | |
| 435 host->GetBrowserContext()->IsOffTheRecord(), this, | 438 host->GetBrowserContext()->IsOffTheRecord(), this, |
| 436 host->browser_demuxer_android()); | 439 host->browser_demuxer_android()); |
| 437 | |
| 438 if (!player) | 440 if (!player) |
| 439 return; | 441 return; |
| 440 | 442 |
| 441 AddPlayer(player); | 443 AddPlayer(player); |
| 442 } | 444 } |
| 443 | 445 |
| 444 void BrowserMediaPlayerManager::OnStart(int player_id) { | 446 void BrowserMediaPlayerManager::OnStart(int player_id) { |
| 445 MediaPlayerAndroid* player = GetPlayer(player_id); | 447 MediaPlayerAndroid* player = GetPlayer(player_id); |
| 446 if (!player) | 448 if (!player) |
| 447 return; | 449 return; |
| (...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 568 #if defined(VIDEO_HOLE) | 570 #if defined(VIDEO_HOLE) |
| 569 MediaPlayerAndroid* player = GetPlayer(player_id); | 571 MediaPlayerAndroid* player = GetPlayer(player_id); |
| 570 if (player && player->IsSurfaceInUse()) | 572 if (player && player->IsSurfaceInUse()) |
| 571 return; | 573 return; |
| 572 if (external_video_surface_container_) | 574 if (external_video_surface_container_) |
| 573 external_video_surface_container_->ReleaseExternalVideoSurface(player_id); | 575 external_video_surface_container_->ReleaseExternalVideoSurface(player_id); |
| 574 #endif // defined(VIDEO_HOLE) | 576 #endif // defined(VIDEO_HOLE) |
| 575 } | 577 } |
| 576 | 578 |
| 577 } // namespace content | 579 } // namespace content |
| OLD | NEW |