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 aadc6a3544e2a01c6dad20cf68766b136d9b03b0..13449a4430f2e7affa89c47b3a0aabdf59596527 100644 |
--- a/content/browser/media/android/browser_media_player_manager.cc |
+++ b/content/browser/media/android/browser_media_player_manager.cc |
@@ -12,6 +12,7 @@ |
#include "content/browser/web_contents/web_contents_view_android.h" |
#include "content/common/media/media_player_messages_android.h" |
#include "content/public/browser/android/content_view_core.h" |
+#include "content/public/browser/android/external_video_surface_container.h" |
#include "content/public/browser/browser_context.h" |
#include "content/public/browser/render_process_host.h" |
#include "content/public/browser/render_view_host.h" |
@@ -333,7 +334,12 @@ void BrowserMediaPlayerManager::RequestMediaResources(int player_id) { |
} |
void BrowserMediaPlayerManager::ReleaseMediaResources(int player_id) { |
- // Nothing needs to be done. |
+#if defined(VIDEO_HOLE) |
+ ExternalVideoSurfaceContainer* surface_container = |
+ ExternalVideoSurfaceContainer::FromWebContents(web_contents_); |
+ if (surface_container) |
+ surface_container->ReleaseExternalVideoSurface(player_id); |
+#endif // defined(VIDEO_HOLE) |
} |
media::MediaResourceGetter* |
@@ -471,10 +477,23 @@ void BrowserMediaPlayerManager::OnNotifyExternalSurface( |
if (!web_contents_) |
return; |
- WebContentsViewAndroid* view = |
- static_cast<WebContentsViewAndroid*>(web_contents_->GetView()); |
- if (view) |
- view->NotifyExternalSurface(player_id, is_request, rect); |
+ ExternalVideoSurfaceContainer::CreateForWebContents(web_contents_); |
+ ExternalVideoSurfaceContainer* surface_container = |
+ ExternalVideoSurfaceContainer::FromWebContents(web_contents_); |
+ if (!surface_container) |
+ return; |
+ |
+ if (is_request) { |
+ // It's safe to use base::Unretained(this), because the callbacks will not |
+ // be called after running ReleaseExternalVideoSurface(). |
+ surface_container->RequestExternalVideoSurface( |
+ player_id, |
+ base::Bind(&BrowserMediaPlayerManager::AttachExternalVideoSurface, |
+ base::Unretained(this)), |
+ base::Bind(&BrowserMediaPlayerManager::DetachExternalVideoSurface, |
+ base::Unretained(this))); |
+ } |
+ surface_container->OnExternalVideoSurfacePositionChanged(player_id, rect); |
} |
#endif // defined(VIDEO_HOLE) |
@@ -499,6 +518,12 @@ void BrowserMediaPlayerManager::OnEnterFullscreen(int player_id) { |
return; |
} |
+#if defined(VIDEO_HOLE) |
+ ExternalVideoSurfaceContainer* surface_container = |
+ ExternalVideoSurfaceContainer::FromWebContents(web_contents_); |
+ if (surface_container) |
+ surface_container->ReleaseExternalVideoSurface(player_id); |
+#endif // defined(VIDEO_HOLE) |
if (video_view_.get()) { |
fullscreen_player_id_ = player_id; |
video_view_->OpenVideo(); |
@@ -571,13 +596,6 @@ void BrowserMediaPlayerManager::OnReleaseResources(int player_id) { |
MediaPlayerAndroid* player = GetPlayer(player_id); |
if (player) |
player->Release(); |
- |
-#if defined(VIDEO_HOLE) |
- WebContentsViewAndroid* view = |
- static_cast<WebContentsViewAndroid*>(web_contents_->GetView()); |
- if (view) |
- view->NotifyExternalSurface(player_id, false, gfx::RectF()); |
-#endif // defined(VIDEO_HOLE) |
} |
void BrowserMediaPlayerManager::OnDestroyPlayer(int player_id) { |