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

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: 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_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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698