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 |