Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(960)

Side by Side Diff: content/browser/media/android/media_web_contents_observer_android.cc

Issue 1655083002: Enable SurfaceView fullscreen video on Android with WebMediaPlayerImpl (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@avda-sv
Patch Set: Add an empty destructor to satisfy chromium-style Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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.h" 10 #include "content/browser/media/android/media_session.h"
10 #include "content/browser/media/android/media_session_controller.h" 11 #include "content/browser/media/android/media_session_controller.h"
11 #include "content/browser/media/android/media_session_observer.h" 12 #include "content/browser/media/android/media_session_observer.h"
12 #include "content/browser/media/cdm/browser_cdm_manager.h" 13 #include "content/browser/media/cdm/browser_cdm_manager.h"
13 #include "content/browser/web_contents/web_contents_impl.h" 14 #include "content/browser/web_contents/web_contents_impl.h"
14 #include "content/common/media/media_player_delegate_messages.h" 15 #include "content/common/media/media_player_delegate_messages.h"
15 #include "content/common/media/media_player_messages_android.h" 16 #include "content/common/media/media_player_messages_android.h"
16 #include "content/common/media/media_session_messages_android.h" 17 #include "content/common/media/media_session_messages_android.h"
18 #include "content/common/media/surface_view_manager_messages_android.h"
17 #include "content/public/browser/render_frame_host.h" 19 #include "content/public/browser/render_frame_host.h"
18 #include "content/public/browser/web_contents.h" 20 #include "content/public/browser/web_contents.h"
19 #include "ipc/ipc_message_macros.h" 21 #include "ipc/ipc_message_macros.h"
20 #include "media/base/android/media_player_android.h" 22 #include "media/base/android/media_player_android.h"
21 23
22 namespace content { 24 namespace content {
23 25
24 static void SuspendAllMediaPlayersInRenderFrame( 26 static void SuspendAllMediaPlayersInRenderFrame(
25 RenderFrameHost* render_frame_host) { 27 RenderFrameHost* render_frame_host) {
26 render_frame_host->Send(new MediaPlayerDelegateMsg_SuspendAllMediaPlayers( 28 render_frame_host->Send(new MediaPlayerDelegateMsg_SuspendAllMediaPlayers(
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
60 auto it = media_session_managers_.find(render_frame_host); 62 auto it = media_session_managers_.find(render_frame_host);
61 if (it != media_session_managers_.end()) 63 if (it != media_session_managers_.end())
62 return it->second; 64 return it->second;
63 65
64 BrowserMediaSessionManager* manager = 66 BrowserMediaSessionManager* manager =
65 new BrowserMediaSessionManager(render_frame_host); 67 new BrowserMediaSessionManager(render_frame_host);
66 media_session_managers_.set(render_frame_host, make_scoped_ptr(manager)); 68 media_session_managers_.set(render_frame_host, make_scoped_ptr(manager));
67 return manager; 69 return manager;
68 } 70 }
69 71
72 BrowserSurfaceViewManager*
73 MediaWebContentsObserverAndroid::GetSurfaceViewManager(
74 RenderFrameHost* render_frame_host) {
75 auto it = surface_view_managers_.find(render_frame_host);
76 if (it != surface_view_managers_.end())
77 return it->second;
78
79 BrowserSurfaceViewManager* manager =
80 new BrowserSurfaceViewManager(render_frame_host);
81 surface_view_managers_.set(render_frame_host, make_scoped_ptr(manager));
82 return manager;
83 }
84
70 void MediaWebContentsObserverAndroid::SuspendAllMediaPlayers() { 85 void MediaWebContentsObserverAndroid::SuspendAllMediaPlayers() {
71 web_contents()->ForEachFrame( 86 web_contents()->ForEachFrame(
72 base::Bind(&SuspendAllMediaPlayersInRenderFrame)); 87 base::Bind(&SuspendAllMediaPlayersInRenderFrame));
73 } 88 }
74 89
75 bool MediaWebContentsObserverAndroid::RequestPlay( 90 bool MediaWebContentsObserverAndroid::RequestPlay(
76 RenderFrameHost* render_frame_host, 91 RenderFrameHost* render_frame_host,
77 int delegate_id, 92 int delegate_id,
78 bool has_audio, 93 bool has_audio,
79 bool is_remote, 94 bool is_remote,
(...skipping 22 matching lines...) Expand all
102 if (it->first.first == render_frame_host) 117 if (it->first.first == render_frame_host)
103 it = media_session_map_.erase(it); 118 it = media_session_map_.erase(it);
104 else 119 else
105 ++it; 120 ++it;
106 } 121 }
107 122
108 // Always destroy the media players before CDMs because we do not support 123 // Always destroy the media players before CDMs because we do not support
109 // detaching CDMs from media players yet. See http://crbug.com/330324 124 // detaching CDMs from media players yet. See http://crbug.com/330324
110 media_player_managers_.erase(render_frame_host); 125 media_player_managers_.erase(render_frame_host);
111 media_session_managers_.erase(render_frame_host); 126 media_session_managers_.erase(render_frame_host);
127 surface_view_managers_.erase(render_frame_host);
112 128
113 // TODO(xhwang): Currently MediaWebContentsObserver, BrowserMediaPlayerManager 129 // TODO(xhwang): Currently MediaWebContentsObserver, BrowserMediaPlayerManager
114 // and BrowserCdmManager all run on browser UI thread. So this call is okay. 130 // and BrowserCdmManager all run on browser UI thread. So this call is okay.
115 // In the future we need to support the case where MediaWebContentsObserver 131 // In the future we need to support the case where MediaWebContentsObserver
116 // get notified on browser UI thread, but BrowserMediaPlayerManager and 132 // get notified on browser UI thread, but BrowserMediaPlayerManager and
117 // BrowserCdmManager run on a different thread. 133 // BrowserCdmManager run on a different thread.
118 BrowserCdmManager* browser_cdm_manager = 134 BrowserCdmManager* browser_cdm_manager =
119 BrowserCdmManager::FromProcess(render_frame_host->GetProcess()->GetID()); 135 BrowserCdmManager::FromProcess(render_frame_host->GetProcess()->GetID());
120 if (browser_cdm_manager) 136 if (browser_cdm_manager)
121 browser_cdm_manager->RenderFrameDeleted(render_frame_host->GetRoutingID()); 137 browser_cdm_manager->RenderFrameDeleted(render_frame_host->GetRoutingID());
(...skipping 11 matching lines...) Expand all
133 149
134 if (OnMediaPlayerMessageReceived(msg, render_frame_host)) 150 if (OnMediaPlayerMessageReceived(msg, render_frame_host))
135 return true; 151 return true;
136 152
137 if (OnMediaPlayerSetCdmMessageReceived(msg, render_frame_host)) 153 if (OnMediaPlayerSetCdmMessageReceived(msg, render_frame_host))
138 return true; 154 return true;
139 155
140 if (OnMediaSessionMessageReceived(msg, render_frame_host)) 156 if (OnMediaSessionMessageReceived(msg, render_frame_host))
141 return true; 157 return true;
142 158
159 if (OnSurfaceViewManagerMessageReceived(msg, render_frame_host))
160 return true;
161
143 return false; 162 return false;
144 } 163 }
145 164
146 void MediaWebContentsObserverAndroid::OnMediaPlayerDelegateMessageReceived( 165 void MediaWebContentsObserverAndroid::OnMediaPlayerDelegateMessageReceived(
147 const IPC::Message& msg, 166 const IPC::Message& msg,
148 RenderFrameHost* render_frame_host) { 167 RenderFrameHost* render_frame_host) {
149 IPC_BEGIN_MESSAGE_MAP_WITH_PARAM(MediaWebContentsObserverAndroid, msg, 168 IPC_BEGIN_MESSAGE_MAP_WITH_PARAM(MediaWebContentsObserverAndroid, msg,
150 render_frame_host) 169 render_frame_host)
151 IPC_MESSAGE_HANDLER(MediaPlayerDelegateHostMsg_OnMediaDestroyed, 170 IPC_MESSAGE_HANDLER(MediaPlayerDelegateHostMsg_OnMediaDestroyed,
152 OnMediaDestroyed) 171 OnMediaDestroyed)
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
231 BrowserMediaSessionManager::OnDeactivate) 250 BrowserMediaSessionManager::OnDeactivate)
232 IPC_MESSAGE_FORWARD(MediaSessionHostMsg_SetMetadata, 251 IPC_MESSAGE_FORWARD(MediaSessionHostMsg_SetMetadata,
233 GetMediaSessionManager(render_frame_host), 252 GetMediaSessionManager(render_frame_host),
234 BrowserMediaSessionManager::OnSetMetadata) 253 BrowserMediaSessionManager::OnSetMetadata)
235 IPC_MESSAGE_UNHANDLED(handled = false) 254 IPC_MESSAGE_UNHANDLED(handled = false)
236 IPC_END_MESSAGE_MAP() 255 IPC_END_MESSAGE_MAP()
237 256
238 return handled; 257 return handled;
239 } 258 }
240 259
260 bool MediaWebContentsObserverAndroid::OnSurfaceViewManagerMessageReceived(
261 const IPC::Message& msg,
262 RenderFrameHost* render_frame_host) {
263 bool handled = true;
264 IPC_BEGIN_MESSAGE_MAP(MediaWebContentsObserverAndroid, msg)
265 IPC_MESSAGE_FORWARD(SurfaceViewManagerHostMsg_CreateFullscreenSurface,
266 GetSurfaceViewManager(render_frame_host),
267 BrowserSurfaceViewManager::OnCreateFullscreenSurface)
268 IPC_MESSAGE_FORWARD(SurfaceViewManagerHostMsg_NaturalSizeChanged,
269 GetSurfaceViewManager(render_frame_host),
270 BrowserSurfaceViewManager::OnNaturalSizeChanged)
271 IPC_MESSAGE_UNHANDLED(handled = false)
272 IPC_END_MESSAGE_MAP()
273 return handled;
274 }
275
241 void MediaWebContentsObserverAndroid::OnSetCdm( 276 void MediaWebContentsObserverAndroid::OnSetCdm(
242 RenderFrameHost* render_frame_host, 277 RenderFrameHost* render_frame_host,
243 int player_id, 278 int player_id,
244 int cdm_id) { 279 int cdm_id) {
245 media::MediaPlayerAndroid* media_player = 280 media::MediaPlayerAndroid* media_player =
246 GetMediaPlayerManager(render_frame_host)->GetPlayer(player_id); 281 GetMediaPlayerManager(render_frame_host)->GetPlayer(player_id);
247 if (!media_player) { 282 if (!media_player) {
248 NOTREACHED() << "OnSetCdm: MediaPlayer not found for " << player_id; 283 NOTREACHED() << "OnSetCdm: MediaPlayer not found for " << player_id;
249 return; 284 return;
250 } 285 }
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
318 scoped_ptr<MediaSessionController> controller( 353 scoped_ptr<MediaSessionController> controller(
319 new MediaSessionController(id, this)); 354 new MediaSessionController(id, this));
320 355
321 if (!controller->Initialize(has_audio, is_remote, duration)) 356 if (!controller->Initialize(has_audio, is_remote, duration))
322 return; 357 return;
323 358
324 media_session_map_[id] = std::move(controller); 359 media_session_map_[id] = std::move(controller);
325 } 360 }
326 361
327 } // namespace content 362 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/media/android/media_web_contents_observer_android.h ('k') | content/common/content_message_generator.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698