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 |