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