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

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

Issue 496683002: Updating buffered duration of local resource in android (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Cheking for localhost and 127.0.0.1 Created 6 years, 4 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 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/android/build_info.h" 9 #include "base/android/build_info.h"
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
139 stream_texture_factory_(factory), 139 stream_texture_factory_(factory),
140 needs_external_surface_(false), 140 needs_external_surface_(false),
141 video_frame_provider_client_(NULL), 141 video_frame_provider_client_(NULL),
142 pending_playback_(false), 142 pending_playback_(false),
143 player_type_(MEDIA_PLAYER_TYPE_URL), 143 player_type_(MEDIA_PLAYER_TYPE_URL),
144 current_time_(0), 144 current_time_(0),
145 is_remote_(false), 145 is_remote_(false),
146 media_log_(media_log), 146 media_log_(media_log),
147 web_cdm_(NULL), 147 web_cdm_(NULL),
148 allow_stored_credentials_(false), 148 allow_stored_credentials_(false),
149 is_local_resource_(false),
149 weak_factory_(this) { 150 weak_factory_(this) {
150 DCHECK(player_manager_); 151 DCHECK(player_manager_);
151 DCHECK(cdm_manager_); 152 DCHECK(cdm_manager_);
152 153
153 DCHECK(main_thread_checker_.CalledOnValidThread()); 154 DCHECK(main_thread_checker_.CalledOnValidThread());
154 155
155 player_id_ = player_manager_->RegisterMediaPlayer(this); 156 player_id_ = player_manager_->RegisterMediaPlayer(this);
156 157
157 #if defined(VIDEO_HOLE) 158 #if defined(VIDEO_HOLE)
158 force_use_overlay_embedded_video_ = CommandLine::ForCurrentProcess()-> 159 force_use_overlay_embedded_video_ = CommandLine::ForCurrentProcess()->
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
209 player_type_ = MEDIA_PLAYER_TYPE_MEDIA_SOURCE; 210 player_type_ = MEDIA_PLAYER_TYPE_MEDIA_SOURCE;
210 break; 211 break;
211 212
212 case LoadTypeMediaStream: 213 case LoadTypeMediaStream:
213 CHECK(false) << "WebMediaPlayerAndroid doesn't support MediaStream on " 214 CHECK(false) << "WebMediaPlayerAndroid doesn't support MediaStream on "
214 "this platform"; 215 "this platform";
215 return; 216 return;
216 } 217 }
217 218
218 url_ = url; 219 url_ = url;
220 is_local_resource_ = IsLocalResource();
219 int demuxer_client_id = 0; 221 int demuxer_client_id = 0;
220 if (player_type_ != MEDIA_PLAYER_TYPE_URL) { 222 if (player_type_ != MEDIA_PLAYER_TYPE_URL) {
221 RendererDemuxerAndroid* demuxer = 223 RendererDemuxerAndroid* demuxer =
222 RenderThreadImpl::current()->renderer_demuxer(); 224 RenderThreadImpl::current()->renderer_demuxer();
223 demuxer_client_id = demuxer->GetNextDemuxerClientID(); 225 demuxer_client_id = demuxer->GetNextDemuxerClientID();
224 226
225 media_source_delegate_.reset(new MediaSourceDelegate( 227 media_source_delegate_.reset(new MediaSourceDelegate(
226 demuxer, demuxer_client_id, media_loop_, media_log_)); 228 demuxer, demuxer_client_id, media_loop_, media_log_));
227 229
228 if (player_type_ == MEDIA_PLAYER_TYPE_MEDIA_SOURCE) { 230 if (player_type_ == MEDIA_PLAYER_TYPE_MEDIA_SOURCE) {
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
270 UpdateNetworkState(WebMediaPlayer::NetworkStateNetworkError); 272 UpdateNetworkState(WebMediaPlayer::NetworkStateNetworkError);
271 return; 273 return;
272 } 274 }
273 275
274 InitializePlayer( 276 InitializePlayer(
275 redirected_url, first_party_for_cookies, allow_stored_credentials, 0); 277 redirected_url, first_party_for_cookies, allow_stored_credentials, 0);
276 278
277 UpdateNetworkState(WebMediaPlayer::NetworkStateIdle); 279 UpdateNetworkState(WebMediaPlayer::NetworkStateIdle);
278 } 280 }
279 281
282 bool WebMediaPlayerAndroid::IsLocalResource() {
283 if (url_.SchemeIsFile() || url_.SchemeIsBlob())
284 return true;
285
286 if (url_.spec().find("//127.0.0.1/") != std::string::npos || // port 80
qinmin 2014/08/26 03:44:17 use: std::string host = url_.host(); if (!host.c
amogh.bihani 2014/08/26 05:31:14 Done.
287 url_.spec().find("//localhost/") != std::string::npos ||
288 url_.spec().find("//127.0.0.1:") != std::string::npos || // any port
289 url_.spec().find("//localhost:") != std::string::npos) {
290 return true;
291 }
292
293 return false;
294 }
295
280 void WebMediaPlayerAndroid::play() { 296 void WebMediaPlayerAndroid::play() {
281 DCHECK(main_thread_checker_.CalledOnValidThread()); 297 DCHECK(main_thread_checker_.CalledOnValidThread());
282 #if defined(VIDEO_HOLE) 298 #if defined(VIDEO_HOLE)
283 if (hasVideo() && needs_external_surface_ && 299 if (hasVideo() && needs_external_surface_ &&
284 !player_manager_->IsInFullscreen(frame_)) { 300 !player_manager_->IsInFullscreen(frame_)) {
285 DCHECK(!needs_establish_peer_); 301 DCHECK(!needs_establish_peer_);
286 player_manager_->RequestExternalSurface(player_id_, last_computed_rect_); 302 player_manager_->RequestExternalSurface(player_id_, last_computed_rect_);
287 } 303 }
288 #endif // defined(VIDEO_HOLE) 304 #endif // defined(VIDEO_HOLE)
289 305
(...skipping 382 matching lines...) Expand 10 before | Expand all | Expand 10 after
672 return media_source_delegate_->VideoDecodedByteCount(); 688 return media_source_delegate_->VideoDecodedByteCount();
673 NOTIMPLEMENTED(); 689 NOTIMPLEMENTED();
674 return 0; 690 return 0;
675 } 691 }
676 692
677 void WebMediaPlayerAndroid::OnMediaMetadataChanged( 693 void WebMediaPlayerAndroid::OnMediaMetadataChanged(
678 const base::TimeDelta& duration, int width, int height, bool success) { 694 const base::TimeDelta& duration, int width, int height, bool success) {
679 DCHECK(main_thread_checker_.CalledOnValidThread()); 695 DCHECK(main_thread_checker_.CalledOnValidThread());
680 bool need_to_signal_duration_changed = false; 696 bool need_to_signal_duration_changed = false;
681 697
682 if (url_.SchemeIs("file")) 698 if (is_local_resource_)
683 UpdateNetworkState(WebMediaPlayer::NetworkStateLoaded); 699 UpdateNetworkState(WebMediaPlayer::NetworkStateLoaded);
684 700
685 // Update duration, if necessary, prior to ready state updates that may 701 // Update duration, if necessary, prior to ready state updates that may
686 // cause duration() query. 702 // cause duration() query.
687 if (!ignore_metadata_duration_change_ && duration_ != duration) { 703 if (!ignore_metadata_duration_change_ && duration_ != duration) {
688 duration_ = duration; 704 duration_ = duration;
689 705
690 // Client readyState transition from HAVE_NOTHING to HAVE_METADATA 706 // Client readyState transition from HAVE_NOTHING to HAVE_METADATA
691 // already triggers a durationchanged event. If this is a different 707 // already triggers a durationchanged event. If this is a different
692 // transition, remember to signal durationchanged. 708 // transition, remember to signal durationchanged.
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
830 846
831 // TODO(qinmin): This is a hack. We need the media element to stop showing the 847 // TODO(qinmin): This is a hack. We need the media element to stop showing the
832 // poster image by forcing it to call setDisplayMode(video). Should move the 848 // poster image by forcing it to call setDisplayMode(video). Should move the
833 // logic into HTMLMediaElement.cpp. 849 // logic into HTMLMediaElement.cpp.
834 client_->timeChanged(); 850 client_->timeChanged();
835 } 851 }
836 852
837 void WebMediaPlayerAndroid::OnTimeUpdate(const base::TimeDelta& current_time) { 853 void WebMediaPlayerAndroid::OnTimeUpdate(const base::TimeDelta& current_time) {
838 DCHECK(main_thread_checker_.CalledOnValidThread()); 854 DCHECK(main_thread_checker_.CalledOnValidThread());
839 current_time_ = current_time.InSecondsF(); 855 current_time_ = current_time.InSecondsF();
856 if (is_local_resource_ && current_time_ <= duration())
amogh.bihani 2014/08/22 09:02:45 I have used a bool instead of calling IsLocalResou
857 buffered_[0].end = current_time_;
840 } 858 }
841 859
842 void WebMediaPlayerAndroid::OnConnectedToRemoteDevice( 860 void WebMediaPlayerAndroid::OnConnectedToRemoteDevice(
843 const std::string& remote_playback_message) { 861 const std::string& remote_playback_message) {
844 DCHECK(main_thread_checker_.CalledOnValidThread()); 862 DCHECK(main_thread_checker_.CalledOnValidThread());
845 DCHECK(!media_source_delegate_); 863 DCHECK(!media_source_delegate_);
846 DrawRemotePlaybackText(remote_playback_message); 864 DrawRemotePlaybackText(remote_playback_message);
847 is_remote_ = true; 865 is_remote_ = true;
848 SetNeedsEstablishPeer(false); 866 SetNeedsEstablishPeer(false);
849 } 867 }
(...skipping 871 matching lines...) Expand 10 before | Expand all | Expand 10 after
1721 player_manager_->EnterFullscreen(player_id_, frame_); 1739 player_manager_->EnterFullscreen(player_id_, frame_);
1722 SetNeedsEstablishPeer(false); 1740 SetNeedsEstablishPeer(false);
1723 } 1741 }
1724 } 1742 }
1725 1743
1726 bool WebMediaPlayerAndroid::canEnterFullscreen() const { 1744 bool WebMediaPlayerAndroid::canEnterFullscreen() const {
1727 return player_manager_->CanEnterFullscreen(frame_); 1745 return player_manager_->CanEnterFullscreen(frame_);
1728 } 1746 }
1729 1747
1730 } // namespace content 1748 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/media/android/webmediaplayer_android.h ('k') | media/base/android/media_player_bridge.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698