Index: webkit/renderer/media/webmediaplayer_impl.cc |
diff --git a/webkit/renderer/media/webmediaplayer_impl.cc b/webkit/renderer/media/webmediaplayer_impl.cc |
index 08fa5dad340ae2a6df85b8fe78b827cbccd2faf1..30ba639eb992e9dba5ccb9e72975ddaa0f66b236 100644 |
--- a/webkit/renderer/media/webmediaplayer_impl.cc |
+++ b/webkit/renderer/media/webmediaplayer_impl.cc |
@@ -139,6 +139,7 @@ WebMediaPlayerImpl::WebMediaPlayerImpl( |
pending_seek_seconds_(0.0f), |
client_(client), |
delegate_(delegate), |
+ defer_load_cb_(params.defer_load_cb()), |
media_log_(params.media_log()), |
accelerated_compositing_reported_(false), |
incremented_externally_allocated_memory_(false), |
@@ -242,37 +243,26 @@ URLSchemeForHistogram URLScheme(const GURL& url) { |
} // anonymous namespace |
void WebMediaPlayerImpl::load(const WebKit::WebURL& url, CORSMode cors_mode) { |
- DCHECK(main_loop_->BelongsToCurrentThread()); |
- |
- LoadSetup(url); |
- |
- // Otherwise it's a regular request which requires resolving the URL first. |
- GURL gurl(url); |
- data_source_.reset(new BufferedDataSource( |
- main_loop_, |
- frame_, |
- media_log_.get(), |
- base::Bind(&WebMediaPlayerImpl::NotifyDownloading, AsWeakPtr()))); |
- data_source_->Initialize( |
- url, static_cast<BufferedResourceLoader::CORSMode>(cors_mode), |
- base::Bind( |
- &WebMediaPlayerImpl::DataSourceInitialized, |
- AsWeakPtr(), gurl)); |
- |
- is_local_source_ = !gurl.SchemeIs("http") && !gurl.SchemeIs("https"); |
+ load(url, NULL, cors_mode); |
} |
void WebMediaPlayerImpl::load(const WebKit::WebURL& url, |
WebKit::WebMediaSource* media_source, |
CORSMode cors_mode) { |
- LoadSetup(url); |
- |
- // Media source pipelines can start immediately. |
- supports_save_ = false; |
- StartPipeline(media_source); |
+ if (!defer_load_cb_.is_null()) { |
+ defer_load_cb_.Run(base::Bind( |
+ &WebMediaPlayerImpl::DoLoad, AsWeakPtr(), url, media_source, |
+ cors_mode)); |
+ return; |
+ } |
+ DoLoad(url, media_source, cors_mode); |
} |
-void WebMediaPlayerImpl::LoadSetup(const WebKit::WebURL& url) { |
+void WebMediaPlayerImpl::DoLoad(const WebKit::WebURL& url, |
+ WebKit::WebMediaSource* media_source, |
+ CORSMode cors_mode) { |
+ DCHECK(main_loop_->BelongsToCurrentThread()); |
+ |
GURL gurl(url); |
UMA_HISTOGRAM_ENUMERATION("Media.URLScheme", URLScheme(gurl), kMaxURLScheme); |
@@ -286,6 +276,27 @@ void WebMediaPlayerImpl::LoadSetup(const WebKit::WebURL& url) { |
SetNetworkState(WebMediaPlayer::NetworkStateLoading); |
SetReadyState(WebMediaPlayer::ReadyStateHaveNothing); |
media_log_->AddEvent(media_log_->CreateLoadEvent(url.spec())); |
+ |
+ // Media source pipelines can start immediately. |
+ if (media_source) { |
+ supports_save_ = false; |
+ StartPipeline(media_source); |
+ return; |
+ } |
+ |
+ // Otherwise it's a regular request which requires resolving the URL first. |
+ data_source_.reset(new BufferedDataSource( |
+ main_loop_, |
+ frame_, |
+ media_log_.get(), |
+ base::Bind(&WebMediaPlayerImpl::NotifyDownloading, AsWeakPtr()))); |
+ data_source_->Initialize( |
+ url, static_cast<BufferedResourceLoader::CORSMode>(cors_mode), |
+ base::Bind( |
+ &WebMediaPlayerImpl::DataSourceInitialized, |
+ AsWeakPtr(), gurl)); |
+ |
+ is_local_source_ = !gurl.SchemeIs("http") && !gurl.SchemeIs("https"); |
} |
void WebMediaPlayerImpl::play() { |