| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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/media_web_contents_observer_android.h" | 5 #include "content/browser/media/android/media_web_contents_observer_android.h" |
| 6 | 6 |
| 7 #include "content/browser/media/android/browser_media_player_manager.h" | 7 #include "content/browser/media/android/browser_media_player_manager.h" |
| 8 #include "content/browser/media/android/browser_media_session_manager.h" | 8 #include "content/browser/media/android/browser_media_session_manager.h" |
| 9 #include "content/browser/media/android/browser_surface_view_manager.h" |
| 9 #include "content/browser/media/android/media_session_observer.h" | 10 #include "content/browser/media/android/media_session_observer.h" |
| 10 #include "content/browser/media/cdm/browser_cdm_manager.h" | 11 #include "content/browser/media/cdm/browser_cdm_manager.h" |
| 11 #include "content/browser/web_contents/web_contents_impl.h" | 12 #include "content/browser/web_contents/web_contents_impl.h" |
| 12 #include "content/common/media/media_player_messages_android.h" | 13 #include "content/common/media/media_player_messages_android.h" |
| 13 #include "content/common/media/media_session_messages_android.h" | 14 #include "content/common/media/media_session_messages_android.h" |
| 15 #include "content/common/media/surface_view_manager_messages_android.h" |
| 14 #include "content/public/browser/render_frame_host.h" | 16 #include "content/public/browser/render_frame_host.h" |
| 15 #include "content/public/browser/web_contents.h" | 17 #include "content/public/browser/web_contents.h" |
| 16 #include "ipc/ipc_message_macros.h" | 18 #include "ipc/ipc_message_macros.h" |
| 17 #include "media/base/android/media_player_android.h" | 19 #include "media/base/android/media_player_android.h" |
| 18 | 20 |
| 19 namespace content { | 21 namespace content { |
| 20 | 22 |
| 21 MediaWebContentsObserverAndroid::MediaWebContentsObserverAndroid( | 23 MediaWebContentsObserverAndroid::MediaWebContentsObserverAndroid( |
| 22 WebContents* web_contents) | 24 WebContents* web_contents) |
| 23 : MediaWebContentsObserver(web_contents) {} | 25 : MediaWebContentsObserver(web_contents) {} |
| (...skipping 27 matching lines...) Expand all Loading... |
| 51 auto it = media_session_managers_.find(render_frame_host); | 53 auto it = media_session_managers_.find(render_frame_host); |
| 52 if (it != media_session_managers_.end()) | 54 if (it != media_session_managers_.end()) |
| 53 return it->second; | 55 return it->second; |
| 54 | 56 |
| 55 BrowserMediaSessionManager* manager = | 57 BrowserMediaSessionManager* manager = |
| 56 new BrowserMediaSessionManager(render_frame_host); | 58 new BrowserMediaSessionManager(render_frame_host); |
| 57 media_session_managers_.set(render_frame_host, make_scoped_ptr(manager)); | 59 media_session_managers_.set(render_frame_host, make_scoped_ptr(manager)); |
| 58 return manager; | 60 return manager; |
| 59 } | 61 } |
| 60 | 62 |
| 63 BrowserSurfaceViewManager* |
| 64 MediaWebContentsObserverAndroid::GetSurfaceViewManager( |
| 65 RenderFrameHost* render_frame_host) { |
| 66 auto it = surface_view_managers_.find(render_frame_host); |
| 67 if (it != surface_view_managers_.end()) |
| 68 return it->second; |
| 69 |
| 70 BrowserSurfaceViewManager* manager = |
| 71 new BrowserSurfaceViewManager(render_frame_host); |
| 72 surface_view_managers_.set(render_frame_host, make_scoped_ptr(manager)); |
| 73 return manager; |
| 74 } |
| 75 |
| 61 #if defined(VIDEO_HOLE) | 76 #if defined(VIDEO_HOLE) |
| 62 void MediaWebContentsObserverAndroid::OnFrameInfoUpdated() { | 77 void MediaWebContentsObserverAndroid::OnFrameInfoUpdated() { |
| 63 for (auto it = media_player_managers_.begin(); | 78 for (auto it = media_player_managers_.begin(); |
| 64 it != media_player_managers_.end(); ++it) { | 79 it != media_player_managers_.end(); ++it) { |
| 65 it->second->OnFrameInfoUpdated(); | 80 it->second->OnFrameInfoUpdated(); |
| 66 } | 81 } |
| 67 } | 82 } |
| 68 #endif // defined(VIDEO_HOLE) | 83 #endif // defined(VIDEO_HOLE) |
| 69 | 84 |
| 70 void MediaWebContentsObserverAndroid::RenderFrameDeleted( | 85 void MediaWebContentsObserverAndroid::RenderFrameDeleted( |
| 71 RenderFrameHost* render_frame_host) { | 86 RenderFrameHost* render_frame_host) { |
| 72 MediaWebContentsObserver::RenderFrameDeleted(render_frame_host); | 87 MediaWebContentsObserver::RenderFrameDeleted(render_frame_host); |
| 73 | 88 |
| 74 // Always destroy the media players before CDMs because we do not support | 89 // Always destroy the media players before CDMs because we do not support |
| 75 // detaching CDMs from media players yet. See http://crbug.com/330324 | 90 // detaching CDMs from media players yet. See http://crbug.com/330324 |
| 76 media_player_managers_.erase(render_frame_host); | 91 media_player_managers_.erase(render_frame_host); |
| 77 media_session_managers_.erase(render_frame_host); | 92 media_session_managers_.erase(render_frame_host); |
| 93 surface_view_managers_.erase(render_frame_host); |
| 78 | 94 |
| 79 // TODO(xhwang): Currently MediaWebContentsObserver, BrowserMediaPlayerManager | 95 // TODO(xhwang): Currently MediaWebContentsObserver, BrowserMediaPlayerManager |
| 80 // and BrowserCdmManager all run on browser UI thread. So this call is okay. | 96 // and BrowserCdmManager all run on browser UI thread. So this call is okay. |
| 81 // In the future we need to support the case where MediaWebContentsObserver | 97 // In the future we need to support the case where MediaWebContentsObserver |
| 82 // get notified on browser UI thread, but BrowserMediaPlayerManager and | 98 // get notified on browser UI thread, but BrowserMediaPlayerManager and |
| 83 // BrowserCdmManager run on a different thread. | 99 // BrowserCdmManager run on a different thread. |
| 84 BrowserCdmManager* browser_cdm_manager = | 100 BrowserCdmManager* browser_cdm_manager = |
| 85 BrowserCdmManager::FromProcess(render_frame_host->GetProcess()->GetID()); | 101 BrowserCdmManager::FromProcess(render_frame_host->GetProcess()->GetID()); |
| 86 if (browser_cdm_manager) | 102 if (browser_cdm_manager) |
| 87 browser_cdm_manager->RenderFrameDeleted(render_frame_host->GetRoutingID()); | 103 browser_cdm_manager->RenderFrameDeleted(render_frame_host->GetRoutingID()); |
| 88 } | 104 } |
| 89 | 105 |
| 90 bool MediaWebContentsObserverAndroid::OnMessageReceived( | 106 bool MediaWebContentsObserverAndroid::OnMessageReceived( |
| 91 const IPC::Message& msg, | 107 const IPC::Message& msg, |
| 92 RenderFrameHost* render_frame_host) { | 108 RenderFrameHost* render_frame_host) { |
| 93 if (MediaWebContentsObserver::OnMessageReceived(msg, render_frame_host)) | 109 if (MediaWebContentsObserver::OnMessageReceived(msg, render_frame_host)) |
| 94 return true; | 110 return true; |
| 95 | 111 |
| 96 if (OnMediaPlayerMessageReceived(msg, render_frame_host)) | 112 if (OnMediaPlayerMessageReceived(msg, render_frame_host)) |
| 97 return true; | 113 return true; |
| 98 | 114 |
| 99 if (OnMediaPlayerSetCdmMessageReceived(msg, render_frame_host)) | 115 if (OnMediaPlayerSetCdmMessageReceived(msg, render_frame_host)) |
| 100 return true; | 116 return true; |
| 101 | 117 |
| 102 if (OnMediaSessionMessageReceived(msg, render_frame_host)) | 118 if (OnMediaSessionMessageReceived(msg, render_frame_host)) |
| 103 return true; | 119 return true; |
| 104 | 120 |
| 121 if (OnSurfaceViewManagerMessageReceived(msg, render_frame_host)) |
| 122 return true; |
| 123 |
| 105 return false; | 124 return false; |
| 106 } | 125 } |
| 107 | 126 |
| 108 bool MediaWebContentsObserverAndroid::OnMediaPlayerMessageReceived( | 127 bool MediaWebContentsObserverAndroid::OnMediaPlayerMessageReceived( |
| 109 const IPC::Message& msg, | 128 const IPC::Message& msg, |
| 110 RenderFrameHost* render_frame_host) { | 129 RenderFrameHost* render_frame_host) { |
| 111 bool handled = true; | 130 bool handled = true; |
| 112 IPC_BEGIN_MESSAGE_MAP(MediaWebContentsObserverAndroid, msg) | 131 IPC_BEGIN_MESSAGE_MAP(MediaWebContentsObserverAndroid, msg) |
| 113 IPC_MESSAGE_FORWARD(MediaPlayerHostMsg_EnterFullscreen, | 132 IPC_MESSAGE_FORWARD(MediaPlayerHostMsg_EnterFullscreen, |
| 114 GetMediaPlayerManager(render_frame_host), | 133 GetMediaPlayerManager(render_frame_host), |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 180 BrowserMediaSessionManager::OnDeactivate) | 199 BrowserMediaSessionManager::OnDeactivate) |
| 181 IPC_MESSAGE_FORWARD(MediaSessionHostMsg_SetMetadata, | 200 IPC_MESSAGE_FORWARD(MediaSessionHostMsg_SetMetadata, |
| 182 GetMediaSessionManager(render_frame_host), | 201 GetMediaSessionManager(render_frame_host), |
| 183 BrowserMediaSessionManager::OnSetMetadata) | 202 BrowserMediaSessionManager::OnSetMetadata) |
| 184 IPC_MESSAGE_UNHANDLED(handled = false) | 203 IPC_MESSAGE_UNHANDLED(handled = false) |
| 185 IPC_END_MESSAGE_MAP() | 204 IPC_END_MESSAGE_MAP() |
| 186 | 205 |
| 187 return handled; | 206 return handled; |
| 188 } | 207 } |
| 189 | 208 |
| 209 bool MediaWebContentsObserverAndroid::OnSurfaceViewManagerMessageReceived( |
| 210 const IPC::Message& msg, |
| 211 RenderFrameHost* render_frame_host) { |
| 212 bool handled = true; |
| 213 IPC_BEGIN_MESSAGE_MAP(MediaWebContentsObserverAndroid, msg) |
| 214 IPC_MESSAGE_FORWARD(BrowserSurfaceViewManagerMsg_CreateFullscreenSurface, |
| 215 GetSurfaceViewManager(render_frame_host), |
| 216 BrowserSurfaceViewManager::OnCreateFullscreenSurface) |
| 217 IPC_MESSAGE_UNHANDLED(handled = false) |
| 218 IPC_END_MESSAGE_MAP() |
| 219 return handled; |
| 220 } |
| 221 |
| 190 void MediaWebContentsObserverAndroid::OnSetCdm( | 222 void MediaWebContentsObserverAndroid::OnSetCdm( |
| 191 RenderFrameHost* render_frame_host, | 223 RenderFrameHost* render_frame_host, |
| 192 int player_id, | 224 int player_id, |
| 193 int cdm_id) { | 225 int cdm_id) { |
| 194 media::MediaPlayerAndroid* media_player = | 226 media::MediaPlayerAndroid* media_player = |
| 195 GetMediaPlayerManager(render_frame_host)->GetPlayer(player_id); | 227 GetMediaPlayerManager(render_frame_host)->GetPlayer(player_id); |
| 196 if (!media_player) { | 228 if (!media_player) { |
| 197 NOTREACHED() << "OnSetCdm: MediaPlayer not found for " << player_id; | 229 NOTREACHED() << "OnSetCdm: MediaPlayer not found for " << player_id; |
| 198 return; | 230 return; |
| 199 } | 231 } |
| (...skipping 12 matching lines...) Expand all Loading... |
| 212 NOTREACHED() << "OnSetCdm: CDM not found for " << cdm_id; | 244 NOTREACHED() << "OnSetCdm: CDM not found for " << cdm_id; |
| 213 return; | 245 return; |
| 214 } | 246 } |
| 215 | 247 |
| 216 // TODO(xhwang): This could possibly fail. In that case we should reject the | 248 // TODO(xhwang): This could possibly fail. In that case we should reject the |
| 217 // promise. | 249 // promise. |
| 218 media_player->SetCdm(cdm); | 250 media_player->SetCdm(cdm); |
| 219 } | 251 } |
| 220 | 252 |
| 221 } // namespace content | 253 } // namespace content |
| OLD | NEW |