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

Side by Side Diff: content/browser/android/media_player_manager_android.cc

Issue 13669003: Refactoring ContentVideoViewContextDelegate.java (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 8 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 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/android/media_player_manager_android.h" 5 #include "content/browser/android/media_player_manager_android.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "content/browser/android/content_view_core_impl.h"
8 #include "content/browser/android/media_resource_getter_impl.h" 9 #include "content/browser/android/media_resource_getter_impl.h"
9 #include "content/browser/web_contents/web_contents_view_android.h" 10 #include "content/browser/web_contents/web_contents_view_android.h"
10 #include "content/common/media/media_player_messages.h" 11 #include "content/common/media/media_player_messages.h"
11 #include "content/public/browser/browser_context.h" 12 #include "content/public/browser/browser_context.h"
12 #include "content/public/browser/render_process_host.h" 13 #include "content/public/browser/render_process_host.h"
13 #include "content/public/browser/render_view_host.h" 14 #include "content/public/browser/render_view_host.h"
14 #include "content/public/browser/storage_partition.h" 15 #include "content/public/browser/storage_partition.h"
16 #include "content/public/browser/web_contents.h"
15 17
16 using media::MediaPlayerBridge; 18 using media::MediaPlayerBridge;
17 19
18 // Threshold on the number of media players per renderer before we start 20 // Threshold on the number of media players per renderer before we start
19 // attempting to release inactive media players. 21 // attempting to release inactive media players.
20 static const int kMediaPlayerThreshold = 1; 22 static const int kMediaPlayerThreshold = 1;
21 23
22 namespace content { 24 namespace content {
23 25
24 MediaPlayerManagerAndroid::MediaPlayerManagerAndroid( 26 MediaPlayerManagerAndroid::MediaPlayerManagerAndroid(
25 RenderViewHost* render_view_host) 27 RenderViewHost* render_view_host)
26 : RenderViewHostObserver(render_view_host), 28 : RenderViewHostObserver(render_view_host),
27 ALLOW_THIS_IN_INITIALIZER_LIST(video_view_(this)),
28 fullscreen_player_id_(-1), 29 fullscreen_player_id_(-1),
29 web_contents_(WebContents::FromRenderViewHost(render_view_host)) { 30 web_contents_(WebContents::FromRenderViewHost(render_view_host)) {
30 } 31 }
31 32
32 MediaPlayerManagerAndroid::~MediaPlayerManagerAndroid() {} 33 MediaPlayerManagerAndroid::~MediaPlayerManagerAndroid() {}
33 34
34 bool MediaPlayerManagerAndroid::OnMessageReceived(const IPC::Message& msg) { 35 bool MediaPlayerManagerAndroid::OnMessageReceived(const IPC::Message& msg) {
35 bool handled = true; 36 bool handled = true;
36 IPC_BEGIN_MESSAGE_MAP(MediaPlayerManagerAndroid, msg) 37 IPC_BEGIN_MESSAGE_MAP(MediaPlayerManagerAndroid, msg)
37 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_EnterFullscreen, OnEnterFullscreen) 38 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_EnterFullscreen, OnEnterFullscreen)
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
80 Send(new MediaPlayerMsg_DidExitFullscreen( 81 Send(new MediaPlayerMsg_DidExitFullscreen(
81 routing_id(), fullscreen_player_id_)); 82 routing_id(), fullscreen_player_id_));
82 MediaPlayerBridge* player = GetFullscreenPlayer(); 83 MediaPlayerBridge* player = GetFullscreenPlayer();
83 fullscreen_player_id_ = -1; 84 fullscreen_player_id_ = -1;
84 if (!player) 85 if (!player)
85 return; 86 return;
86 if (release_media_player) 87 if (release_media_player)
87 player->Release(); 88 player->Release();
88 else 89 else
89 player->SetVideoSurface(NULL); 90 player->SetVideoSurface(NULL);
91 video_view_.reset();
90 } 92 }
91 93
92 void MediaPlayerManagerAndroid::SetVideoSurface(jobject surface) { 94 void MediaPlayerManagerAndroid::SetVideoSurface(jobject surface) {
93 MediaPlayerBridge* player = GetFullscreenPlayer(); 95 MediaPlayerBridge* player = GetFullscreenPlayer();
94 if (player) { 96 if (player) {
95 player->SetVideoSurface(surface); 97 player->SetVideoSurface(surface);
96 Send(new MediaPlayerMsg_DidEnterFullscreen( 98 Send(new MediaPlayerMsg_DidEnterFullscreen(
97 routing_id(), player->player_id())); 99 routing_id(), player->player_id()));
98 } 100 }
99 } 101 }
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
148 } 150 }
149 151
150 void MediaPlayerManagerAndroid::OnPause(int player_id) { 152 void MediaPlayerManagerAndroid::OnPause(int player_id) {
151 MediaPlayerBridge* player = GetPlayer(player_id); 153 MediaPlayerBridge* player = GetPlayer(player_id);
152 if (player) 154 if (player)
153 player->Pause(); 155 player->Pause();
154 } 156 }
155 157
156 void MediaPlayerManagerAndroid::OnEnterFullscreen(int player_id) { 158 void MediaPlayerManagerAndroid::OnEnterFullscreen(int player_id) {
157 DCHECK_EQ(fullscreen_player_id_, -1); 159 DCHECK_EQ(fullscreen_player_id_, -1);
158 160 if (video_view_.get())
159 fullscreen_player_id_ = player_id; 161 video_view_->OpenVideo();
160 video_view_.CreateContentVideoView(); 162 else {
163 fullscreen_player_id_ = player_id;
164 WebContents* web_contents =
165 WebContents::FromRenderViewHost(render_view_host());
166 ContentViewCoreImpl* content_view_core_impl =
167 ContentViewCoreImpl::FromWebContents(web_contents);
168 video_view_.reset(new ContentVideoView(content_view_core_impl->GetContext(),
joth 2013/05/15 22:38:57 I'm not sure what stops two competing ContentViewC
michaelbai 2013/05/22 18:08:39 hmm, that's no a common use case, it needs user's
169 content_view_core_impl->GetContentVideoViewClient(), this));
170 }
161 } 171 }
162 172
163 void MediaPlayerManagerAndroid::OnExitFullscreen(int player_id) { 173 void MediaPlayerManagerAndroid::OnExitFullscreen(int player_id) {
164 if (fullscreen_player_id_ == player_id) { 174 if (fullscreen_player_id_ == player_id) {
165 MediaPlayerBridge* player = GetPlayer(player_id); 175 MediaPlayerBridge* player = GetPlayer(player_id);
166 if (player) 176 if (player)
167 player->SetVideoSurface(NULL); 177 player->SetVideoSurface(NULL);
168 video_view_.DestroyContentVideoView();
169 fullscreen_player_id_ = -1; 178 fullscreen_player_id_ = -1;
179 video_view_->OnExitFullscreen();
180 video_view_.reset();
170 } 181 }
171 } 182 }
172 183
173 void MediaPlayerManagerAndroid::OnReleaseResources(int player_id) { 184 void MediaPlayerManagerAndroid::OnReleaseResources(int player_id) {
174 MediaPlayerBridge* player = GetPlayer(player_id); 185 MediaPlayerBridge* player = GetPlayer(player_id);
175 // Don't release the fullscreen player when tab visibility changes, 186 // Don't release the fullscreen player when tab visibility changes,
176 // it will be released when user hit the back/home button or when 187 // it will be released when user hit the back/home button or when
177 // OnDestroyPlayer is called. 188 // OnDestroyPlayer is called.
178 if (player && player_id != fullscreen_player_id_) 189 if (player && player_id != fullscreen_player_id_)
179 player->Release(); 190 player->Release();
180 } 191 }
181 192
182 void MediaPlayerManagerAndroid::OnDestroyPlayer(int player_id) { 193 void MediaPlayerManagerAndroid::OnDestroyPlayer(int player_id) {
183 for (ScopedVector<MediaPlayerBridge>::iterator it = players_.begin(); 194 for (ScopedVector<MediaPlayerBridge>::iterator it = players_.begin();
184 it != players_.end(); ++it) { 195 it != players_.end(); ++it) {
185 if ((*it)->player_id() == player_id) { 196 if ((*it)->player_id() == player_id) {
186 players_.erase(it); 197 players_.erase(it);
187 break; 198 break;
188 } 199 }
189 } 200 }
190 if (fullscreen_player_id_ == player_id) 201 if (fullscreen_player_id_ == player_id)
191 fullscreen_player_id_ = -1; 202 fullscreen_player_id_ = -1;
192 } 203 }
193 204
194 void MediaPlayerManagerAndroid::DestroyAllMediaPlayers() { 205 void MediaPlayerManagerAndroid::DestroyAllMediaPlayers() {
195 players_.clear(); 206 players_.clear();
196 if (fullscreen_player_id_ != -1) { 207 if (fullscreen_player_id_ != -1) {
197 video_view_.DestroyContentVideoView(); 208 video_view_.reset();
198 fullscreen_player_id_ = -1; 209 fullscreen_player_id_ = -1;
199 } 210 }
200 } 211 }
201 212
202 void MediaPlayerManagerAndroid::AttachExternalVideoSurface(int player_id, 213 void MediaPlayerManagerAndroid::AttachExternalVideoSurface(int player_id,
203 jobject surface) { 214 jobject surface) {
204 MediaPlayerBridge* player = GetPlayer(player_id); 215 MediaPlayerBridge* player = GetPlayer(player_id);
205 if (player) 216 if (player)
206 player->SetVideoSurface(surface); 217 player->SetVideoSurface(surface);
207 } 218 }
(...skipping 25 matching lines...) Expand all
233 MediaPlayerBridge* MediaPlayerManagerAndroid::GetFullscreenPlayer() { 244 MediaPlayerBridge* MediaPlayerManagerAndroid::GetFullscreenPlayer() {
234 return GetPlayer(fullscreen_player_id_); 245 return GetPlayer(fullscreen_player_id_);
235 } 246 }
236 247
237 void MediaPlayerManagerAndroid::OnMediaMetadataChanged( 248 void MediaPlayerManagerAndroid::OnMediaMetadataChanged(
238 int player_id, base::TimeDelta duration, int width, int height, 249 int player_id, base::TimeDelta duration, int width, int height,
239 bool success) { 250 bool success) {
240 Send(new MediaPlayerMsg_MediaMetadataChanged( 251 Send(new MediaPlayerMsg_MediaMetadataChanged(
241 routing_id(), player_id, duration, width, height, success)); 252 routing_id(), player_id, duration, width, height, success));
242 if (fullscreen_player_id_ != -1) 253 if (fullscreen_player_id_ != -1)
243 video_view_.UpdateMediaMetadata(); 254 video_view_->UpdateMediaMetadata();
244 } 255 }
245 256
246 void MediaPlayerManagerAndroid::OnPlaybackComplete(int player_id) { 257 void MediaPlayerManagerAndroid::OnPlaybackComplete(int player_id) {
247 Send(new MediaPlayerMsg_MediaPlaybackCompleted(routing_id(), player_id)); 258 Send(new MediaPlayerMsg_MediaPlaybackCompleted(routing_id(), player_id));
248 if (fullscreen_player_id_ != -1) 259 if (fullscreen_player_id_ != -1)
249 video_view_.OnPlaybackComplete(); 260 video_view_->OnPlaybackComplete();
250 } 261 }
251 262
252 void MediaPlayerManagerAndroid::OnMediaInterrupted(int player_id) { 263 void MediaPlayerManagerAndroid::OnMediaInterrupted(int player_id) {
253 // Tell WebKit that the audio should be paused, then release all resources 264 // Tell WebKit that the audio should be paused, then release all resources
254 Send(new MediaPlayerMsg_DidMediaPlayerPause(routing_id(), player_id)); 265 Send(new MediaPlayerMsg_DidMediaPlayerPause(routing_id(), player_id));
255 OnReleaseResources(player_id); 266 OnReleaseResources(player_id);
256 } 267 }
257 268
258 void MediaPlayerManagerAndroid::OnBufferingUpdate( 269 void MediaPlayerManagerAndroid::OnBufferingUpdate(
259 int player_id, int percentage) { 270 int player_id, int percentage) {
260 Send(new MediaPlayerMsg_MediaBufferingUpdate( 271 Send(new MediaPlayerMsg_MediaBufferingUpdate(
261 routing_id(), player_id, percentage)); 272 routing_id(), player_id, percentage));
262 if (fullscreen_player_id_ != -1) 273 if (fullscreen_player_id_ != -1)
263 video_view_.OnBufferingUpdate(percentage); 274 video_view_->OnBufferingUpdate(percentage);
264 } 275 }
265 276
266 void MediaPlayerManagerAndroid::OnSeekComplete(int player_id, 277 void MediaPlayerManagerAndroid::OnSeekComplete(int player_id,
267 base::TimeDelta current_time) { 278 base::TimeDelta current_time) {
268 Send(new MediaPlayerMsg_MediaSeekCompleted( 279 Send(new MediaPlayerMsg_MediaSeekCompleted(
269 routing_id(), player_id, current_time)); 280 routing_id(), player_id, current_time));
270 } 281 }
271 282
272 void MediaPlayerManagerAndroid::OnError(int player_id, int error) { 283 void MediaPlayerManagerAndroid::OnError(int player_id, int error) {
273 Send(new MediaPlayerMsg_MediaError(routing_id(), player_id, error)); 284 Send(new MediaPlayerMsg_MediaError(routing_id(), player_id, error));
274 if (fullscreen_player_id_ != -1) 285 if (fullscreen_player_id_ != -1)
275 video_view_.OnMediaPlayerError(error); 286 video_view_->OnMediaPlayerError(error);
276 } 287 }
277 288
278 void MediaPlayerManagerAndroid::OnVideoSizeChanged( 289 void MediaPlayerManagerAndroid::OnVideoSizeChanged(
279 int player_id, int width, int height) { 290 int player_id, int width, int height) {
280 Send(new MediaPlayerMsg_MediaVideoSizeChanged(routing_id(), player_id, 291 Send(new MediaPlayerMsg_MediaVideoSizeChanged(routing_id(), player_id,
281 width, height)); 292 width, height));
282 if (fullscreen_player_id_ != -1) 293 if (fullscreen_player_id_ != -1)
283 video_view_.OnVideoSizeChanged(width, height); 294 video_view_->OnVideoSizeChanged(width, height);
284 } 295 }
285 296
286 void MediaPlayerManagerAndroid::OnTimeUpdate(int player_id, 297 void MediaPlayerManagerAndroid::OnTimeUpdate(int player_id,
287 base::TimeDelta current_time) { 298 base::TimeDelta current_time) {
288 Send(new MediaPlayerMsg_MediaTimeUpdate( 299 Send(new MediaPlayerMsg_MediaTimeUpdate(
289 routing_id(), player_id, current_time)); 300 routing_id(), player_id, current_time));
290 } 301 }
291 302
292 void MediaPlayerManagerAndroid::RequestMediaResources( 303 void MediaPlayerManagerAndroid::RequestMediaResources(
293 MediaPlayerBridge* player) { 304 MediaPlayerBridge* player) {
(...skipping 26 matching lines...) Expand all
320 } 331 }
321 } 332 }
322 } 333 }
323 334
324 void MediaPlayerManagerAndroid::ReleaseMediaResources( 335 void MediaPlayerManagerAndroid::ReleaseMediaResources(
325 MediaPlayerBridge* player) { 336 MediaPlayerBridge* player) {
326 // Nothing needs to be done. 337 // Nothing needs to be done.
327 } 338 }
328 339
329 } // namespace content 340 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698