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

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: cleaned up 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 MediaWebContentsObserverAndroid::MediaWebContentsObserverAndroid( 26 MediaWebContentsObserverAndroid::MediaWebContentsObserverAndroid(
25 WebContents* web_contents) 27 WebContents* web_contents)
26 : MediaWebContentsObserver(web_contents) {} 28 : MediaWebContentsObserver(web_contents) {}
(...skipping 27 matching lines...) Expand all
54 auto it = media_session_managers_.find(render_frame_host); 56 auto it = media_session_managers_.find(render_frame_host);
55 if (it != media_session_managers_.end()) 57 if (it != media_session_managers_.end())
56 return it->second; 58 return it->second;
57 59
58 BrowserMediaSessionManager* manager = 60 BrowserMediaSessionManager* manager =
59 new BrowserMediaSessionManager(render_frame_host); 61 new BrowserMediaSessionManager(render_frame_host);
60 media_session_managers_.set(render_frame_host, make_scoped_ptr(manager)); 62 media_session_managers_.set(render_frame_host, make_scoped_ptr(manager));
61 return manager; 63 return manager;
62 } 64 }
63 65
66 BrowserSurfaceViewManager*
67 MediaWebContentsObserverAndroid::GetSurfaceViewManager(
68 RenderFrameHost* render_frame_host) {
69 auto it = surface_view_managers_.find(render_frame_host);
70 if (it != surface_view_managers_.end())
71 return it->second;
72
73 BrowserSurfaceViewManager* manager =
74 new BrowserSurfaceViewManager(render_frame_host);
75 surface_view_managers_.set(render_frame_host, make_scoped_ptr(manager));
76 return manager;
77 }
78
64 bool MediaWebContentsObserverAndroid::RequestPlay( 79 bool MediaWebContentsObserverAndroid::RequestPlay(
65 RenderFrameHost* render_frame_host, 80 RenderFrameHost* render_frame_host,
66 int delegate_id, 81 int delegate_id,
67 bool has_audio, 82 bool has_audio,
68 bool is_remote, 83 bool is_remote,
69 base::TimeDelta duration) { 84 base::TimeDelta duration) {
70 // |has_video| forced to true since the value doesn't matter at present. 85 // |has_video| forced to true since the value doesn't matter at present.
71 OnMediaPlaying(render_frame_host, delegate_id, true, has_audio, is_remote, 86 OnMediaPlaying(render_frame_host, delegate_id, true, has_audio, is_remote,
72 duration); 87 duration);
73 return media_session_map_.find(MediaPlayerId( 88 return media_session_map_.find(MediaPlayerId(
(...skipping 17 matching lines...) Expand all
91 if (it->first.first == render_frame_host) 106 if (it->first.first == render_frame_host)
92 it = media_session_map_.erase(it); 107 it = media_session_map_.erase(it);
93 else 108 else
94 ++it; 109 ++it;
95 } 110 }
96 111
97 // Always destroy the media players before CDMs because we do not support 112 // Always destroy the media players before CDMs because we do not support
98 // detaching CDMs from media players yet. See http://crbug.com/330324 113 // detaching CDMs from media players yet. See http://crbug.com/330324
99 media_player_managers_.erase(render_frame_host); 114 media_player_managers_.erase(render_frame_host);
100 media_session_managers_.erase(render_frame_host); 115 media_session_managers_.erase(render_frame_host);
116 surface_view_managers_.erase(render_frame_host);
101 117
102 // TODO(xhwang): Currently MediaWebContentsObserver, BrowserMediaPlayerManager 118 // TODO(xhwang): Currently MediaWebContentsObserver, BrowserMediaPlayerManager
103 // and BrowserCdmManager all run on browser UI thread. So this call is okay. 119 // and BrowserCdmManager all run on browser UI thread. So this call is okay.
104 // In the future we need to support the case where MediaWebContentsObserver 120 // In the future we need to support the case where MediaWebContentsObserver
105 // get notified on browser UI thread, but BrowserMediaPlayerManager and 121 // get notified on browser UI thread, but BrowserMediaPlayerManager and
106 // BrowserCdmManager run on a different thread. 122 // BrowserCdmManager run on a different thread.
107 BrowserCdmManager* browser_cdm_manager = 123 BrowserCdmManager* browser_cdm_manager =
108 BrowserCdmManager::FromProcess(render_frame_host->GetProcess()->GetID()); 124 BrowserCdmManager::FromProcess(render_frame_host->GetProcess()->GetID());
109 if (browser_cdm_manager) 125 if (browser_cdm_manager)
110 browser_cdm_manager->RenderFrameDeleted(render_frame_host->GetRoutingID()); 126 browser_cdm_manager->RenderFrameDeleted(render_frame_host->GetRoutingID());
(...skipping 11 matching lines...) Expand all
122 138
123 if (OnMediaPlayerMessageReceived(msg, render_frame_host)) 139 if (OnMediaPlayerMessageReceived(msg, render_frame_host))
124 return true; 140 return true;
125 141
126 if (OnMediaPlayerSetCdmMessageReceived(msg, render_frame_host)) 142 if (OnMediaPlayerSetCdmMessageReceived(msg, render_frame_host))
127 return true; 143 return true;
128 144
129 if (OnMediaSessionMessageReceived(msg, render_frame_host)) 145 if (OnMediaSessionMessageReceived(msg, render_frame_host))
130 return true; 146 return true;
131 147
148 if (OnSurfaceViewManagerMessageReceived(msg, render_frame_host))
149 return true;
150
132 return false; 151 return false;
133 } 152 }
134 153
135 void MediaWebContentsObserverAndroid::OnMediaPlayerDelegateMessageReceived( 154 void MediaWebContentsObserverAndroid::OnMediaPlayerDelegateMessageReceived(
136 const IPC::Message& msg, 155 const IPC::Message& msg,
137 RenderFrameHost* render_frame_host) { 156 RenderFrameHost* render_frame_host) {
138 IPC_BEGIN_MESSAGE_MAP_WITH_PARAM(MediaWebContentsObserverAndroid, msg, 157 IPC_BEGIN_MESSAGE_MAP_WITH_PARAM(MediaWebContentsObserverAndroid, msg,
139 render_frame_host) 158 render_frame_host)
140 IPC_MESSAGE_HANDLER(MediaPlayerDelegateHostMsg_OnMediaDestroyed, 159 IPC_MESSAGE_HANDLER(MediaPlayerDelegateHostMsg_OnMediaDestroyed,
141 OnMediaDestroyed) 160 OnMediaDestroyed)
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
220 BrowserMediaSessionManager::OnDeactivate) 239 BrowserMediaSessionManager::OnDeactivate)
221 IPC_MESSAGE_FORWARD(MediaSessionHostMsg_SetMetadata, 240 IPC_MESSAGE_FORWARD(MediaSessionHostMsg_SetMetadata,
222 GetMediaSessionManager(render_frame_host), 241 GetMediaSessionManager(render_frame_host),
223 BrowserMediaSessionManager::OnSetMetadata) 242 BrowserMediaSessionManager::OnSetMetadata)
224 IPC_MESSAGE_UNHANDLED(handled = false) 243 IPC_MESSAGE_UNHANDLED(handled = false)
225 IPC_END_MESSAGE_MAP() 244 IPC_END_MESSAGE_MAP()
226 245
227 return handled; 246 return handled;
228 } 247 }
229 248
249 bool MediaWebContentsObserverAndroid::OnSurfaceViewManagerMessageReceived(
250 const IPC::Message& msg,
251 RenderFrameHost* render_frame_host) {
252 bool handled = true;
253 IPC_BEGIN_MESSAGE_MAP(MediaWebContentsObserverAndroid, msg)
254 IPC_MESSAGE_FORWARD(BrowserSurfaceViewManagerMsg_CreateFullscreenSurface,
255 GetSurfaceViewManager(render_frame_host),
256 BrowserSurfaceViewManager::OnCreateFullscreenSurface)
257 IPC_MESSAGE_FORWARD(BrowserSurfaceViewManagerMsg_FullscreenVideoSizeChanged,
258 GetSurfaceViewManager(render_frame_host),
259 BrowserSurfaceViewManager::OnFullscreenVideoSizeChanged)
260 IPC_MESSAGE_UNHANDLED(handled = false)
261 IPC_END_MESSAGE_MAP()
262 return handled;
263 }
264
230 void MediaWebContentsObserverAndroid::OnSetCdm( 265 void MediaWebContentsObserverAndroid::OnSetCdm(
231 RenderFrameHost* render_frame_host, 266 RenderFrameHost* render_frame_host,
232 int player_id, 267 int player_id,
233 int cdm_id) { 268 int cdm_id) {
234 media::MediaPlayerAndroid* media_player = 269 media::MediaPlayerAndroid* media_player =
235 GetMediaPlayerManager(render_frame_host)->GetPlayer(player_id); 270 GetMediaPlayerManager(render_frame_host)->GetPlayer(player_id);
236 if (!media_player) { 271 if (!media_player) {
237 NOTREACHED() << "OnSetCdm: MediaPlayer not found for " << player_id; 272 NOTREACHED() << "OnSetCdm: MediaPlayer not found for " << player_id;
238 return; 273 return;
239 } 274 }
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
307 scoped_ptr<MediaSessionController> controller( 342 scoped_ptr<MediaSessionController> controller(
308 new MediaSessionController(id, this)); 343 new MediaSessionController(id, this));
309 344
310 if (!controller->Initialize(has_audio, is_remote, duration)) 345 if (!controller->Initialize(has_audio, is_remote, duration))
311 return; 346 return;
312 347
313 media_session_map_[id] = std::move(controller); 348 media_session_map_[id] = std::move(controller);
314 } 349 }
315 350
316 } // namespace content 351 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698