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

Side by Side Diff: content/renderer/media/android/webmediaplayer_android.cc

Issue 405663002: Support basic authentication for html5 media (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: updating crbug Created 6 years, 5 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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/renderer/media/android/webmediaplayer_android.h" 5 #include "content/renderer/media/android/webmediaplayer_android.h"
6 6
7 #include <limits> 7 #include <limits>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/callback_helpers.h" 10 #include "base/callback_helpers.h"
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
101 pending_seek_(false), 101 pending_seek_(false),
102 seeking_(false), 102 seeking_(false),
103 did_loading_progress_(false), 103 did_loading_progress_(false),
104 player_manager_(player_manager), 104 player_manager_(player_manager),
105 cdm_manager_(cdm_manager), 105 cdm_manager_(cdm_manager),
106 network_state_(WebMediaPlayer::NetworkStateEmpty), 106 network_state_(WebMediaPlayer::NetworkStateEmpty),
107 ready_state_(WebMediaPlayer::ReadyStateHaveNothing), 107 ready_state_(WebMediaPlayer::ReadyStateHaveNothing),
108 texture_id_(0), 108 texture_id_(0),
109 stream_id_(0), 109 stream_id_(0),
110 is_playing_(false), 110 is_playing_(false),
111 playing_started_(false),
112 needs_establish_peer_(true), 111 needs_establish_peer_(true),
113 stream_texture_proxy_initialized_(false), 112 stream_texture_proxy_initialized_(false),
114 has_size_info_(false), 113 has_size_info_(false),
115 has_media_metadata_(false),
116 has_media_info_(false),
117 stream_texture_factory_(factory), 114 stream_texture_factory_(factory),
118 needs_external_surface_(false), 115 needs_external_surface_(false),
119 video_frame_provider_client_(NULL), 116 video_frame_provider_client_(NULL),
120 pending_playback_(false), 117 pending_playback_(false),
121 player_type_(MEDIA_PLAYER_TYPE_URL), 118 player_type_(MEDIA_PLAYER_TYPE_URL),
122 current_time_(0), 119 current_time_(0),
123 is_remote_(false), 120 is_remote_(false),
124 media_log_(media_log), 121 media_log_(media_log),
125 web_cdm_(NULL), 122 web_cdm_(NULL),
126 weak_factory_(this) { 123 weak_factory_(this) {
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
183 case LoadTypeMediaSource: 180 case LoadTypeMediaSource:
184 player_type_ = MEDIA_PLAYER_TYPE_MEDIA_SOURCE; 181 player_type_ = MEDIA_PLAYER_TYPE_MEDIA_SOURCE;
185 break; 182 break;
186 183
187 case LoadTypeMediaStream: 184 case LoadTypeMediaStream:
188 CHECK(false) << "WebMediaPlayerAndroid doesn't support MediaStream on " 185 CHECK(false) << "WebMediaPlayerAndroid doesn't support MediaStream on "
189 "this platform"; 186 "this platform";
190 return; 187 return;
191 } 188 }
192 189
193 has_media_metadata_ = false; 190 url_ = url;
194 has_media_info_ = false;
195
196 int demuxer_client_id = 0; 191 int demuxer_client_id = 0;
197 if (player_type_ != MEDIA_PLAYER_TYPE_URL) { 192 if (player_type_ != MEDIA_PLAYER_TYPE_URL) {
198 has_media_info_ = true;
199
200 RendererDemuxerAndroid* demuxer = 193 RendererDemuxerAndroid* demuxer =
201 RenderThreadImpl::current()->renderer_demuxer(); 194 RenderThreadImpl::current()->renderer_demuxer();
202 demuxer_client_id = demuxer->GetNextDemuxerClientID(); 195 demuxer_client_id = demuxer->GetNextDemuxerClientID();
203 196
204 media_source_delegate_.reset(new MediaSourceDelegate( 197 media_source_delegate_.reset(new MediaSourceDelegate(
205 demuxer, demuxer_client_id, media_loop_, media_log_)); 198 demuxer, demuxer_client_id, media_loop_, media_log_));
206 199
207 if (player_type_ == MEDIA_PLAYER_TYPE_MEDIA_SOURCE) { 200 if (player_type_ == MEDIA_PLAYER_TYPE_MEDIA_SOURCE) {
208 media::SetDecryptorReadyCB set_decryptor_ready_cb = 201 media::SetDecryptorReadyCB set_decryptor_ready_cb =
209 media::BindToCurrentLoop( 202 media::BindToCurrentLoop(
210 base::Bind(&WebMediaPlayerAndroid::SetDecryptorReadyCB, 203 base::Bind(&WebMediaPlayerAndroid::SetDecryptorReadyCB,
211 weak_factory_.GetWeakPtr())); 204 weak_factory_.GetWeakPtr()));
212 205
213 media_source_delegate_->InitializeMediaSource( 206 media_source_delegate_->InitializeMediaSource(
214 base::Bind(&WebMediaPlayerAndroid::OnMediaSourceOpened, 207 base::Bind(&WebMediaPlayerAndroid::OnMediaSourceOpened,
215 weak_factory_.GetWeakPtr()), 208 weak_factory_.GetWeakPtr()),
216 base::Bind(&WebMediaPlayerAndroid::OnNeedKey, 209 base::Bind(&WebMediaPlayerAndroid::OnNeedKey,
217 weak_factory_.GetWeakPtr()), 210 weak_factory_.GetWeakPtr()),
218 set_decryptor_ready_cb, 211 set_decryptor_ready_cb,
219 base::Bind(&WebMediaPlayerAndroid::UpdateNetworkState, 212 base::Bind(&WebMediaPlayerAndroid::UpdateNetworkState,
220 weak_factory_.GetWeakPtr()), 213 weak_factory_.GetWeakPtr()),
221 base::Bind(&WebMediaPlayerAndroid::OnDurationChanged, 214 base::Bind(&WebMediaPlayerAndroid::OnDurationChanged,
222 weak_factory_.GetWeakPtr())); 215 weak_factory_.GetWeakPtr()));
216 InitializePlayer(demuxer_client_id);
223 } 217 }
224 } else { 218 } else {
225 info_loader_.reset( 219 info_loader_.reset(
226 new MediaInfoLoader( 220 new MediaInfoLoader(
227 url, 221 url,
228 cors_mode, 222 cors_mode,
229 base::Bind(&WebMediaPlayerAndroid::DidLoadMediaInfo, 223 base::Bind(&WebMediaPlayerAndroid::DidLoadMediaInfo,
230 weak_factory_.GetWeakPtr()))); 224 weak_factory_.GetWeakPtr())));
231 // TODO(qinmin): The url might be redirected when android media player 225 // TODO(qinmin): The url might be redirected when android media player
232 // requests the stream. As a result, we cannot guarantee there is only 226 // requests the stream. As a result, we cannot guarantee there is only
233 // a single origin. Remove the following line when b/12573548 is fixed. 227 // a single origin. Remove the following line when b/12573548 is fixed.
234 // Check http://crbug.com/334204. 228 // Check http://crbug.com/334204.
235 info_loader_->set_single_origin(false); 229 info_loader_->set_single_origin(false);
236 info_loader_->Start(frame_); 230 info_loader_->Start(frame_);
237 } 231 }
238 232
239 url_ = url;
240 GURL first_party_url = frame_->document().firstPartyForCookies();
241 player_manager_->Initialize(
242 player_type_, player_id_, url, first_party_url, demuxer_client_id,
243 frame_->document().url());
244
245 if (player_manager_->ShouldEnterFullscreen(frame_)) 233 if (player_manager_->ShouldEnterFullscreen(frame_))
246 player_manager_->EnterFullscreen(player_id_, frame_); 234 player_manager_->EnterFullscreen(player_id_, frame_);
247 235
248 UpdateNetworkState(WebMediaPlayer::NetworkStateLoading); 236 UpdateNetworkState(WebMediaPlayer::NetworkStateLoading);
249 UpdateReadyState(WebMediaPlayer::ReadyStateHaveNothing); 237 UpdateReadyState(WebMediaPlayer::ReadyStateHaveNothing);
250 } 238 }
251 239
252 void WebMediaPlayerAndroid::DidLoadMediaInfo(MediaInfoLoader::Status status) { 240 void WebMediaPlayerAndroid::DidLoadMediaInfo(MediaInfoLoader::Status status) {
253 DCHECK(!media_source_delegate_); 241 DCHECK(!media_source_delegate_);
254 if (status == MediaInfoLoader::kFailed) { 242 if (status == MediaInfoLoader::kFailed) {
255 info_loader_.reset(); 243 info_loader_.reset();
256 UpdateNetworkState(WebMediaPlayer::NetworkStateNetworkError); 244 UpdateNetworkState(WebMediaPlayer::NetworkStateNetworkError);
257 return; 245 return;
258 } 246 }
259 247
260 has_media_info_ = true; 248 InitializePlayer(0);
261 if (has_media_metadata_ && 249
262 ready_state_ != WebMediaPlayer::ReadyStateHaveEnoughData) { 250 UpdateNetworkState(WebMediaPlayer::NetworkStateIdle);
263 UpdateReadyState(WebMediaPlayer::ReadyStateHaveMetadata);
264 UpdateReadyState(WebMediaPlayer::ReadyStateHaveEnoughData);
265 }
266 // Android doesn't start fetching resources until an implementation-defined
267 // event (e.g. playback request) occurs. Sets the network state to IDLE
268 // if play is not requested yet.
269 if (!playing_started_)
270 UpdateNetworkState(WebMediaPlayer::NetworkStateIdle);
271 } 251 }
272 252
273 void WebMediaPlayerAndroid::play() { 253 void WebMediaPlayerAndroid::play() {
274 #if defined(VIDEO_HOLE) 254 #if defined(VIDEO_HOLE)
275 if (hasVideo() && needs_external_surface_ && 255 if (hasVideo() && needs_external_surface_ &&
276 !player_manager_->IsInFullscreen(frame_)) { 256 !player_manager_->IsInFullscreen(frame_)) {
277 DCHECK(!needs_establish_peer_); 257 DCHECK(!needs_establish_peer_);
278 player_manager_->RequestExternalSurface(player_id_, last_computed_rect_); 258 player_manager_->RequestExternalSurface(player_id_, last_computed_rect_);
279 } 259 }
280 #endif // defined(VIDEO_HOLE) 260 #endif // defined(VIDEO_HOLE)
281 261
282 TryCreateStreamTextureProxyIfNeeded(); 262 TryCreateStreamTextureProxyIfNeeded();
283 // There is no need to establish the surface texture peer for fullscreen 263 // There is no need to establish the surface texture peer for fullscreen
284 // video. 264 // video.
285 if (hasVideo() && needs_establish_peer_ && 265 if (hasVideo() && needs_establish_peer_ &&
286 !player_manager_->IsInFullscreen(frame_)) { 266 !player_manager_->IsInFullscreen(frame_)) {
287 EstablishSurfaceTexturePeer(); 267 EstablishSurfaceTexturePeer();
288 } 268 }
289 269
290 if (paused()) 270 if (paused())
291 player_manager_->Start(player_id_); 271 player_manager_->Start(player_id_);
292 UpdatePlayingState(true); 272 UpdatePlayingState(true);
293 UpdateNetworkState(WebMediaPlayer::NetworkStateLoading); 273 UpdateNetworkState(WebMediaPlayer::NetworkStateLoading);
294 playing_started_ = true;
295 } 274 }
296 275
297 void WebMediaPlayerAndroid::pause() { 276 void WebMediaPlayerAndroid::pause() {
298 Pause(true); 277 Pause(true);
299 } 278 }
300 279
301 void WebMediaPlayerAndroid::seek(double seconds) { 280 void WebMediaPlayerAndroid::seek(double seconds) {
302 DCHECK(main_thread_checker_.CalledOnValidThread()); 281 DCHECK(main_thread_checker_.CalledOnValidThread());
303 DVLOG(1) << __FUNCTION__ << "(" << seconds << ")"; 282 DVLOG(1) << __FUNCTION__ << "(" << seconds << ")";
304 283
(...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after
606 // already triggers a durationchanged event. If this is a different 585 // already triggers a durationchanged event. If this is a different
607 // transition, remember to signal durationchanged. 586 // transition, remember to signal durationchanged.
608 // Do not ever signal durationchanged on metadata change in MSE case 587 // Do not ever signal durationchanged on metadata change in MSE case
609 // because OnDurationChanged() handles this. 588 // because OnDurationChanged() handles this.
610 if (ready_state_ > WebMediaPlayer::ReadyStateHaveNothing && 589 if (ready_state_ > WebMediaPlayer::ReadyStateHaveNothing &&
611 player_type_ != MEDIA_PLAYER_TYPE_MEDIA_SOURCE) { 590 player_type_ != MEDIA_PLAYER_TYPE_MEDIA_SOURCE) {
612 need_to_signal_duration_changed = true; 591 need_to_signal_duration_changed = true;
613 } 592 }
614 } 593 }
615 594
616 has_media_metadata_ = true; 595 if (ready_state_ != WebMediaPlayer::ReadyStateHaveEnoughData) {
617 if (has_media_info_ &&
618 ready_state_ != WebMediaPlayer::ReadyStateHaveEnoughData) {
619 UpdateReadyState(WebMediaPlayer::ReadyStateHaveMetadata); 596 UpdateReadyState(WebMediaPlayer::ReadyStateHaveMetadata);
620 UpdateReadyState(WebMediaPlayer::ReadyStateHaveEnoughData); 597 UpdateReadyState(WebMediaPlayer::ReadyStateHaveEnoughData);
621 } 598 }
622 599
623 // TODO(wolenetz): Should we just abort early and set network state to an 600 // TODO(wolenetz): Should we just abort early and set network state to an
624 // error if success == false? See http://crbug.com/248399 601 // error if success == false? See http://crbug.com/248399
625 if (success) 602 if (success)
626 OnVideoSizeChanged(width, height); 603 OnVideoSizeChanged(width, height);
627 604
628 if (need_to_signal_duration_changed) 605 if (need_to_signal_duration_changed)
(...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after
873 if (!needs_external_surface_) 850 if (!needs_external_surface_)
874 SetNeedsEstablishPeer(true); 851 SetNeedsEstablishPeer(true);
875 } 852 }
876 853
877 void WebMediaPlayerAndroid::OnDestruct() { 854 void WebMediaPlayerAndroid::OnDestruct() {
878 NOTREACHED() << "WebMediaPlayer should be destroyed before any " 855 NOTREACHED() << "WebMediaPlayer should be destroyed before any "
879 "RenderFrameObserver::OnDestruct() gets called when " 856 "RenderFrameObserver::OnDestruct() gets called when "
880 "the RenderFrame goes away."; 857 "the RenderFrame goes away.";
881 } 858 }
882 859
860 void WebMediaPlayerAndroid::InitializePlayer(
861 int demuxer_client_id) {
862 GURL first_party_url = frame_->document().firstPartyForCookies();
863 player_manager_->Initialize(
864 player_type_, player_id_, url_, first_party_url, demuxer_client_id,
865 frame_->document().url());
866 }
867
883 void WebMediaPlayerAndroid::Pause(bool is_media_related_action) { 868 void WebMediaPlayerAndroid::Pause(bool is_media_related_action) {
884 player_manager_->Pause(player_id_, is_media_related_action); 869 player_manager_->Pause(player_id_, is_media_related_action);
885 UpdatePlayingState(false); 870 UpdatePlayingState(false);
886 } 871 }
887 872
888 void WebMediaPlayerAndroid::DrawRemotePlaybackText( 873 void WebMediaPlayerAndroid::DrawRemotePlaybackText(
889 const std::string& remote_playback_message) { 874 const std::string& remote_playback_message) {
890 875
891 DCHECK(main_thread_checker_.CalledOnValidThread()); 876 DCHECK(main_thread_checker_.CalledOnValidThread());
892 if (!video_weblayer_) 877 if (!video_weblayer_)
(...skipping 644 matching lines...) Expand 10 before | Expand all | Expand 10 after
1537 player_manager_->EnterFullscreen(player_id_, frame_); 1522 player_manager_->EnterFullscreen(player_id_, frame_);
1538 SetNeedsEstablishPeer(false); 1523 SetNeedsEstablishPeer(false);
1539 } 1524 }
1540 } 1525 }
1541 1526
1542 bool WebMediaPlayerAndroid::canEnterFullscreen() const { 1527 bool WebMediaPlayerAndroid::canEnterFullscreen() const {
1543 return player_manager_->CanEnterFullscreen(frame_); 1528 return player_manager_->CanEnterFullscreen(frame_);
1544 } 1529 }
1545 1530
1546 } // namespace content 1531 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/media/android/webmediaplayer_android.h ('k') | media/base/android/media_player_bridge.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698