OLD | NEW |
| (Empty) |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "content/renderer/media/webmediaplayer_proxy_impl_android.h" | |
6 | |
7 #include "base/bind.h" | |
8 #include "base/message_loop.h" | |
9 #include "content/common/media/media_player_messages_android.h" | |
10 #include "webkit/renderer/media/android/webmediaplayer_android.h" | |
11 #include "webkit/renderer/media/android/webmediaplayer_manager_android.h" | |
12 | |
13 namespace content { | |
14 | |
15 WebMediaPlayerProxyImplAndroid::WebMediaPlayerProxyImplAndroid( | |
16 RenderView* render_view, | |
17 webkit_media::WebMediaPlayerManagerAndroid* manager) | |
18 : RenderViewObserver(render_view), | |
19 manager_(manager) { | |
20 } | |
21 | |
22 WebMediaPlayerProxyImplAndroid::~WebMediaPlayerProxyImplAndroid() { | |
23 Send(new MediaPlayerHostMsg_DestroyAllMediaPlayers(routing_id())); | |
24 } | |
25 | |
26 bool WebMediaPlayerProxyImplAndroid::OnMessageReceived( | |
27 const IPC::Message& msg) { | |
28 bool handled = true; | |
29 IPC_BEGIN_MESSAGE_MAP(WebMediaPlayerProxyImplAndroid, msg) | |
30 IPC_MESSAGE_HANDLER(MediaPlayerMsg_MediaMetadataChanged, | |
31 OnMediaMetadataChanged) | |
32 IPC_MESSAGE_HANDLER(MediaPlayerMsg_MediaPlaybackCompleted, | |
33 OnMediaPlaybackCompleted) | |
34 IPC_MESSAGE_HANDLER(MediaPlayerMsg_MediaBufferingUpdate, | |
35 OnMediaBufferingUpdate) | |
36 IPC_MESSAGE_HANDLER(MediaPlayerMsg_MediaSeekCompleted, OnMediaSeekCompleted) | |
37 IPC_MESSAGE_HANDLER(MediaPlayerMsg_MediaError, OnMediaError) | |
38 IPC_MESSAGE_HANDLER(MediaPlayerMsg_MediaVideoSizeChanged, | |
39 OnVideoSizeChanged) | |
40 IPC_MESSAGE_HANDLER(MediaPlayerMsg_MediaTimeUpdate, OnTimeUpdate) | |
41 IPC_MESSAGE_HANDLER(MediaPlayerMsg_MediaPlayerReleased, | |
42 OnMediaPlayerReleased) | |
43 IPC_MESSAGE_HANDLER(MediaPlayerMsg_DidEnterFullscreen, OnDidEnterFullscreen) | |
44 IPC_MESSAGE_HANDLER(MediaPlayerMsg_DidExitFullscreen, OnDidExitFullscreen) | |
45 IPC_MESSAGE_HANDLER(MediaPlayerMsg_DidMediaPlayerPlay, OnPlayerPlay) | |
46 IPC_MESSAGE_HANDLER(MediaPlayerMsg_DidMediaPlayerPause, OnPlayerPause) | |
47 IPC_MESSAGE_HANDLER(MediaPlayerMsg_ReadFromDemuxer, OnReadFromDemuxer) | |
48 IPC_MESSAGE_HANDLER(MediaPlayerMsg_MediaSeekRequest, OnMediaSeekRequest) | |
49 IPC_MESSAGE_HANDLER(MediaPlayerMsg_MediaConfigRequest, OnMediaConfigRequest) | |
50 IPC_MESSAGE_HANDLER(MediaKeysMsg_KeyAdded, OnKeyAdded) | |
51 IPC_MESSAGE_HANDLER(MediaKeysMsg_KeyError, OnKeyError) | |
52 IPC_MESSAGE_HANDLER(MediaKeysMsg_KeyMessage, OnKeyMessage) | |
53 IPC_MESSAGE_UNHANDLED(handled = false) | |
54 IPC_END_MESSAGE_MAP() | |
55 return handled; | |
56 } | |
57 | |
58 void WebMediaPlayerProxyImplAndroid::Initialize( | |
59 int player_id, | |
60 const GURL& url, | |
61 media::MediaPlayerAndroid::SourceType source_type, | |
62 const GURL& first_party_for_cookies) { | |
63 Send(new MediaPlayerHostMsg_MediaPlayerInitialize(routing_id(), | |
64 player_id, | |
65 url, | |
66 source_type, | |
67 first_party_for_cookies)); | |
68 } | |
69 | |
70 void WebMediaPlayerProxyImplAndroid::Start(int player_id) { | |
71 Send(new MediaPlayerHostMsg_MediaPlayerStart(routing_id(), player_id)); | |
72 } | |
73 | |
74 void WebMediaPlayerProxyImplAndroid::Pause(int player_id) { | |
75 Send(new MediaPlayerHostMsg_MediaPlayerPause(routing_id(), player_id)); | |
76 } | |
77 | |
78 void WebMediaPlayerProxyImplAndroid::Seek(int player_id, base::TimeDelta time) { | |
79 Send(new MediaPlayerHostMsg_MediaPlayerSeek(routing_id(), player_id, time)); | |
80 } | |
81 | |
82 void WebMediaPlayerProxyImplAndroid::ReleaseResources(int player_id) { | |
83 Send(new MediaPlayerHostMsg_MediaPlayerRelease(routing_id(), player_id)); | |
84 } | |
85 | |
86 void WebMediaPlayerProxyImplAndroid::DestroyPlayer(int player_id) { | |
87 Send(new MediaPlayerHostMsg_DestroyMediaPlayer(routing_id(), player_id)); | |
88 } | |
89 | |
90 void WebMediaPlayerProxyImplAndroid::OnMediaMetadataChanged( | |
91 int player_id, | |
92 base::TimeDelta duration, | |
93 int width, | |
94 int height, | |
95 bool success) { | |
96 webkit_media::WebMediaPlayerAndroid* player = GetWebMediaPlayer(player_id); | |
97 if (player) | |
98 player->OnMediaMetadataChanged(duration, width, height, success); | |
99 } | |
100 | |
101 void WebMediaPlayerProxyImplAndroid::OnMediaPlaybackCompleted(int player_id) { | |
102 webkit_media::WebMediaPlayerAndroid* player = GetWebMediaPlayer(player_id); | |
103 if (player) | |
104 player->OnPlaybackComplete(); | |
105 } | |
106 | |
107 void WebMediaPlayerProxyImplAndroid::OnMediaBufferingUpdate(int player_id, | |
108 int percent) { | |
109 webkit_media::WebMediaPlayerAndroid* player = GetWebMediaPlayer(player_id); | |
110 if (player) | |
111 player->OnBufferingUpdate(percent); | |
112 } | |
113 | |
114 void WebMediaPlayerProxyImplAndroid::OnMediaSeekCompleted( | |
115 int player_id, base::TimeDelta current_time) { | |
116 webkit_media::WebMediaPlayerAndroid* player = GetWebMediaPlayer(player_id); | |
117 if (player) | |
118 player->OnSeekComplete(current_time); | |
119 } | |
120 | |
121 void WebMediaPlayerProxyImplAndroid::OnMediaError(int player_id, int error) { | |
122 webkit_media::WebMediaPlayerAndroid* player = GetWebMediaPlayer(player_id); | |
123 if (player) | |
124 player->OnMediaError(error); | |
125 } | |
126 | |
127 void WebMediaPlayerProxyImplAndroid::OnVideoSizeChanged( | |
128 int player_id, int width, int height) { | |
129 webkit_media::WebMediaPlayerAndroid* player = GetWebMediaPlayer(player_id); | |
130 if (player) | |
131 player->OnVideoSizeChanged(width, height); | |
132 } | |
133 | |
134 void WebMediaPlayerProxyImplAndroid::OnTimeUpdate( | |
135 int player_id, base::TimeDelta current_time) { | |
136 webkit_media::WebMediaPlayerAndroid* player = GetWebMediaPlayer(player_id); | |
137 if (player) | |
138 player->OnTimeUpdate(current_time); | |
139 } | |
140 | |
141 void WebMediaPlayerProxyImplAndroid::OnMediaPlayerReleased(int player_id) { | |
142 webkit_media::WebMediaPlayerAndroid* player = GetWebMediaPlayer(player_id); | |
143 if (player) | |
144 player->OnPlayerReleased(); | |
145 } | |
146 | |
147 void WebMediaPlayerProxyImplAndroid::OnDidEnterFullscreen(int player_id) { | |
148 webkit_media::WebMediaPlayerAndroid* player = GetWebMediaPlayer(player_id); | |
149 if (player) | |
150 player->OnDidEnterFullscreen(); | |
151 } | |
152 | |
153 void WebMediaPlayerProxyImplAndroid::OnDidExitFullscreen(int player_id) { | |
154 webkit_media::WebMediaPlayerAndroid* player = GetWebMediaPlayer(player_id); | |
155 if (player) | |
156 player->OnDidExitFullscreen(); | |
157 } | |
158 | |
159 void WebMediaPlayerProxyImplAndroid::OnPlayerPlay(int player_id) { | |
160 webkit_media::WebMediaPlayerAndroid* player = GetWebMediaPlayer(player_id); | |
161 if (player) | |
162 player->OnMediaPlayerPlay(); | |
163 } | |
164 | |
165 void WebMediaPlayerProxyImplAndroid::OnPlayerPause(int player_id) { | |
166 webkit_media::WebMediaPlayerAndroid* player = GetWebMediaPlayer(player_id); | |
167 if (player) | |
168 player->OnMediaPlayerPause(); | |
169 } | |
170 | |
171 void WebMediaPlayerProxyImplAndroid::EnterFullscreen(int player_id) { | |
172 Send(new MediaPlayerHostMsg_EnterFullscreen(routing_id(), player_id)); | |
173 } | |
174 | |
175 void WebMediaPlayerProxyImplAndroid::ExitFullscreen(int player_id) { | |
176 Send(new MediaPlayerHostMsg_ExitFullscreen(routing_id(), player_id)); | |
177 } | |
178 | |
179 void WebMediaPlayerProxyImplAndroid::ReadFromDemuxerAck( | |
180 int player_id, | |
181 const media::MediaPlayerHostMsg_ReadFromDemuxerAck_Params& params) { | |
182 Send(new MediaPlayerHostMsg_ReadFromDemuxerAck( | |
183 routing_id(), player_id, params)); | |
184 } | |
185 | |
186 void WebMediaPlayerProxyImplAndroid::InitializeCDM( | |
187 int media_keys_id, | |
188 const std::vector<uint8>& uuid) { | |
189 Send(new MediaKeysHostMsg_InitializeCDM(routing_id(), media_keys_id, uuid)); | |
190 } | |
191 | |
192 void WebMediaPlayerProxyImplAndroid::GenerateKeyRequest( | |
193 int media_keys_id, | |
194 const std::string& type, | |
195 const std::vector<uint8>& init_data) { | |
196 Send(new MediaKeysHostMsg_GenerateKeyRequest( | |
197 routing_id(), media_keys_id, type, init_data)); | |
198 } | |
199 | |
200 void WebMediaPlayerProxyImplAndroid::AddKey(int media_keys_id, | |
201 const std::vector<uint8>& key, | |
202 const std::vector<uint8>& init_data, | |
203 const std::string& session_id) { | |
204 Send(new MediaKeysHostMsg_AddKey( | |
205 routing_id(), media_keys_id, key, init_data, session_id)); | |
206 } | |
207 | |
208 void WebMediaPlayerProxyImplAndroid::CancelKeyRequest( | |
209 int media_keys_id, | |
210 const std::string& session_id) { | |
211 Send(new MediaKeysHostMsg_CancelKeyRequest( | |
212 routing_id(), media_keys_id, session_id)); | |
213 } | |
214 | |
215 #if defined(GOOGLE_TV) | |
216 void WebMediaPlayerProxyImplAndroid::RequestExternalSurface( | |
217 int player_id, const gfx::RectF& geometry) { | |
218 Send(new MediaPlayerHostMsg_NotifyExternalSurface( | |
219 routing_id(), player_id, true, geometry)); | |
220 } | |
221 | |
222 void WebMediaPlayerProxyImplAndroid::DidCommitCompositorFrame() { | |
223 std::map<int, gfx::RectF> geometry_change; | |
224 manager_->RetrieveGeometryChanges(&geometry_change); | |
225 for (std::map<int, gfx::RectF>::iterator it = geometry_change.begin(); | |
226 it != geometry_change.end(); | |
227 ++it) { | |
228 Send(new MediaPlayerHostMsg_NotifyExternalSurface( | |
229 routing_id(), it->first, false, it->second)); | |
230 } | |
231 } | |
232 #endif | |
233 | |
234 void WebMediaPlayerProxyImplAndroid::OnReadFromDemuxer( | |
235 int player_id, | |
236 media::DemuxerStream::Type type, | |
237 bool seek_done) { | |
238 webkit_media::WebMediaPlayerAndroid* player = GetWebMediaPlayer(player_id); | |
239 if (player) | |
240 player->OnReadFromDemuxer(type, seek_done); | |
241 } | |
242 | |
243 void WebMediaPlayerProxyImplAndroid::DemuxerReady( | |
244 int player_id, | |
245 const media::MediaPlayerHostMsg_DemuxerReady_Params& params) { | |
246 Send(new MediaPlayerHostMsg_DemuxerReady(routing_id(), player_id, params)); | |
247 } | |
248 | |
249 void WebMediaPlayerProxyImplAndroid::DurationChanged( | |
250 int player_id, const base::TimeDelta& duration) { | |
251 Send(new MediaPlayerHostMsg_DurationChanged( | |
252 routing_id(), player_id, duration)); | |
253 } | |
254 | |
255 webkit_media::WebMediaPlayerAndroid* | |
256 WebMediaPlayerProxyImplAndroid::GetWebMediaPlayer(int player_id) { | |
257 return static_cast<webkit_media::WebMediaPlayerAndroid*>( | |
258 manager_->GetMediaPlayer(player_id)); | |
259 } | |
260 | |
261 void WebMediaPlayerProxyImplAndroid::OnMediaSeekRequest( | |
262 int player_id, base::TimeDelta time_to_seek, unsigned seek_request_id) { | |
263 webkit_media::WebMediaPlayerAndroid* player = GetWebMediaPlayer(player_id); | |
264 if (player) { | |
265 Send(new MediaPlayerHostMsg_MediaSeekRequestAck(routing_id(), player_id, | |
266 seek_request_id)); | |
267 player->OnMediaSeekRequest(time_to_seek); | |
268 } | |
269 } | |
270 | |
271 void WebMediaPlayerProxyImplAndroid::OnMediaConfigRequest(int player_id) { | |
272 webkit_media::WebMediaPlayerAndroid* player = GetWebMediaPlayer(player_id); | |
273 if (player) | |
274 player->OnMediaConfigRequest(); | |
275 } | |
276 | |
277 void WebMediaPlayerProxyImplAndroid::OnKeyAdded(int media_keys_id, | |
278 const std::string& session_id) { | |
279 webkit_media::WebMediaPlayerAndroid* player = | |
280 GetWebMediaPlayer(media_keys_id); | |
281 if (player) | |
282 player->OnKeyAdded(session_id); | |
283 } | |
284 | |
285 void WebMediaPlayerProxyImplAndroid::OnKeyError( | |
286 int media_keys_id, | |
287 const std::string& session_id, | |
288 media::MediaKeys::KeyError error_code, | |
289 int system_code) { | |
290 webkit_media::WebMediaPlayerAndroid* player = | |
291 GetWebMediaPlayer(media_keys_id); | |
292 if (player) | |
293 player->OnKeyError(session_id, error_code, system_code); | |
294 } | |
295 | |
296 void WebMediaPlayerProxyImplAndroid::OnKeyMessage( | |
297 int media_keys_id, | |
298 const std::string& session_id, | |
299 const std::string& message, | |
300 const std::string& destination_url) { | |
301 webkit_media::WebMediaPlayerAndroid* player = | |
302 GetWebMediaPlayer(media_keys_id); | |
303 if (player) | |
304 player->OnKeyMessage(session_id, message, destination_url); | |
305 } | |
306 | |
307 } // namespace content | |
OLD | NEW |