Index: content/browser/media/android/media_web_contents_observer_android.cc |
diff --git a/content/browser/media/android/media_web_contents_observer_android.cc b/content/browser/media/android/media_web_contents_observer_android.cc |
index 224a8f123a4dbc6186071a538f6707598d4e3990..472101c246cd3cd0f4a102639194e49ec4ac8cea 100644 |
--- a/content/browser/media/android/media_web_contents_observer_android.cc |
+++ b/content/browser/media/android/media_web_contents_observer_android.cc |
@@ -6,11 +6,13 @@ |
#include "content/browser/media/android/browser_media_player_manager.h" |
#include "content/browser/media/android/browser_media_session_manager.h" |
+#include "content/browser/media/android/browser_surface_view_manager.h" |
#include "content/browser/media/android/media_session_observer.h" |
#include "content/browser/media/cdm/browser_cdm_manager.h" |
#include "content/browser/web_contents/web_contents_impl.h" |
#include "content/common/media/media_player_messages_android.h" |
#include "content/common/media/media_session_messages_android.h" |
+#include "content/common/media/surface_view_manager_messages_android.h" |
#include "content/public/browser/render_frame_host.h" |
#include "content/public/browser/web_contents.h" |
#include "ipc/ipc_message_macros.h" |
@@ -58,6 +60,19 @@ MediaWebContentsObserverAndroid::GetMediaSessionManager( |
return manager; |
} |
+BrowserSurfaceViewManager* |
+MediaWebContentsObserverAndroid::GetSurfaceViewManager( |
+ RenderFrameHost* render_frame_host) { |
+ auto it = surface_view_managers_.find(render_frame_host); |
+ if (it != surface_view_managers_.end()) |
+ return it->second; |
+ |
+ BrowserSurfaceViewManager* manager = |
+ new BrowserSurfaceViewManager(render_frame_host); |
+ surface_view_managers_.set(render_frame_host, make_scoped_ptr(manager)); |
+ return manager; |
+} |
+ |
#if defined(VIDEO_HOLE) |
void MediaWebContentsObserverAndroid::OnFrameInfoUpdated() { |
for (auto it = media_player_managers_.begin(); |
@@ -75,6 +90,7 @@ void MediaWebContentsObserverAndroid::RenderFrameDeleted( |
// detaching CDMs from media players yet. See http://crbug.com/330324 |
media_player_managers_.erase(render_frame_host); |
media_session_managers_.erase(render_frame_host); |
+ surface_view_managers_.erase(render_frame_host); |
// TODO(xhwang): Currently MediaWebContentsObserver, BrowserMediaPlayerManager |
// and BrowserCdmManager all run on browser UI thread. So this call is okay. |
@@ -102,6 +118,9 @@ bool MediaWebContentsObserverAndroid::OnMessageReceived( |
if (OnMediaSessionMessageReceived(msg, render_frame_host)) |
return true; |
+ if (OnSurfaceViewManagerMessageReceived(msg, render_frame_host)) |
+ return true; |
+ |
return false; |
} |
@@ -187,6 +206,19 @@ bool MediaWebContentsObserverAndroid::OnMediaSessionMessageReceived( |
return handled; |
} |
+bool MediaWebContentsObserverAndroid::OnSurfaceViewManagerMessageReceived( |
+ const IPC::Message& msg, |
+ RenderFrameHost* render_frame_host) { |
+ bool handled = true; |
+ IPC_BEGIN_MESSAGE_MAP(MediaWebContentsObserverAndroid, msg) |
+ IPC_MESSAGE_FORWARD(BrowserSurfaceViewManagerMsg_CreateFullscreenSurface, |
+ GetSurfaceViewManager(render_frame_host), |
+ BrowserSurfaceViewManager::OnCreateFullscreenSurface) |
+ IPC_MESSAGE_UNHANDLED(handled = false) |
+ IPC_END_MESSAGE_MAP() |
+ return handled; |
+} |
+ |
void MediaWebContentsObserverAndroid::OnSetCdm( |
RenderFrameHost* render_frame_host, |
int player_id, |