| Index: trunk/Source/web/WebMediaPlayerClientImpl.cpp
|
| ===================================================================
|
| --- trunk/Source/web/WebMediaPlayerClientImpl.cpp (revision 169469)
|
| +++ trunk/Source/web/WebMediaPlayerClientImpl.cpp (working copy)
|
| @@ -178,10 +178,28 @@
|
| }
|
|
|
| // MediaPlayer -------------------------------------------------
|
| -void WebMediaPlayerClientImpl::load(WebMediaPlayer::LoadType loadType, const WTF::String& url, WebMediaPlayer::CORSMode corsMode)
|
| +
|
| +void WebMediaPlayerClientImpl::load(WebMediaPlayer::LoadType loadType, const WTF::String& url)
|
| {
|
| - ASSERT(!m_webMediaPlayer);
|
| + m_url = KURL(ParsedURLString, url);
|
| + m_loadType = loadType;
|
|
|
| + if (m_preload == MediaPlayer::None) {
|
| +#if ENABLE(WEB_AUDIO)
|
| + m_audioSourceProvider.wrap(0); // Clear weak reference to m_webMediaPlayer's WebAudioSourceProvider.
|
| +#endif
|
| + m_webMediaPlayer.clear();
|
| + m_delayingLoad = true;
|
| + } else
|
| + loadInternal();
|
| +}
|
| +
|
| +void WebMediaPlayerClientImpl::loadInternal()
|
| +{
|
| +#if ENABLE(WEB_AUDIO)
|
| + m_audioSourceProvider.wrap(0); // Clear weak reference to m_webMediaPlayer's WebAudioSourceProvider.
|
| +#endif
|
| +
|
| // FIXME: Remove this cast
|
| LocalFrame* frame = mediaElement().document().frame();
|
|
|
| @@ -193,23 +211,24 @@
|
| // if necessary.
|
| m_needsWebLayerForVideo = frame->contentRenderer()->compositor()->hasAcceleratedCompositing();
|
|
|
| - KURL kurl(ParsedURLString, url);
|
| - m_webMediaPlayer = createWebMediaPlayer(this, kurl, frame);
|
| - if (!m_webMediaPlayer)
|
| - return;
|
| -
|
| + m_webMediaPlayer = createWebMediaPlayer(this, m_url, frame);
|
| + if (m_webMediaPlayer) {
|
| #if ENABLE(WEB_AUDIO)
|
| - // Make sure if we create/re-create the WebMediaPlayer that we update our wrapper.
|
| - m_audioSourceProvider.wrap(m_webMediaPlayer->audioSourceProvider());
|
| + // Make sure if we create/re-create the WebMediaPlayer that we update our wrapper.
|
| + m_audioSourceProvider.wrap(m_webMediaPlayer->audioSourceProvider());
|
| #endif
|
|
|
| - m_webMediaPlayer->setVolume(mediaElement().playerVolume());
|
| + m_webMediaPlayer->setVolume(mediaElement().playerVolume());
|
|
|
| - m_webMediaPlayer->setPoster(poster);
|
| + // Tell WebMediaPlayer about the poster image URL.
|
| + m_webMediaPlayer->setPoster(poster);
|
|
|
| - // Tell WebMediaPlayer about any connected CDM (may be null).
|
| - m_webMediaPlayer->setContentDecryptionModule(HTMLMediaElementEncryptedMedia::contentDecryptionModule(mediaElement()));
|
| - m_webMediaPlayer->load(loadType, kurl, corsMode);
|
| + // Tell WebMediaPlayer about any connected CDM (may be null).
|
| + m_webMediaPlayer->setContentDecryptionModule(HTMLMediaElementEncryptedMedia::contentDecryptionModule(mediaElement()));
|
| +
|
| + WebMediaPlayer::CORSMode corsMode = static_cast<WebMediaPlayer::CORSMode>(m_client->mediaPlayerCORSMode());
|
| + m_webMediaPlayer->load(m_loadType, m_url, corsMode);
|
| + }
|
| }
|
|
|
| void WebMediaPlayerClientImpl::play()
|
| @@ -241,6 +260,12 @@
|
| return m_webMediaPlayer && m_webMediaPlayer->canEnterFullscreen();
|
| }
|
|
|
| +void WebMediaPlayerClientImpl::prepareToPlay()
|
| +{
|
| + if (m_delayingLoad)
|
| + startDelayedLoad();
|
| +}
|
| +
|
| IntSize WebMediaPlayerClientImpl::naturalSize() const
|
| {
|
| if (m_webMediaPlayer)
|
| @@ -389,6 +414,9 @@
|
|
|
| if (m_webMediaPlayer)
|
| m_webMediaPlayer->setPreload(static_cast<WebMediaPlayer::Preload>(preload));
|
| +
|
| + if (m_delayingLoad && m_preload != MediaPlayer::None)
|
| + startDelayedLoad();
|
| }
|
|
|
| bool WebMediaPlayerClientImpl::hasSingleSecurityOrigin() const
|
| @@ -501,11 +529,23 @@
|
| }
|
| #endif
|
|
|
| +void WebMediaPlayerClientImpl::startDelayedLoad()
|
| +{
|
| + ASSERT(m_delayingLoad);
|
| + ASSERT(!m_webMediaPlayer);
|
| +
|
| + m_delayingLoad = false;
|
| +
|
| + loadInternal();
|
| +}
|
| +
|
| WebMediaPlayerClientImpl::WebMediaPlayerClientImpl(MediaPlayerClient* client)
|
| : m_client(client)
|
| + , m_delayingLoad(false)
|
| , m_preload(MediaPlayer::Auto)
|
| , m_needsWebLayerForVideo(false)
|
| , m_rate(1.0)
|
| + , m_loadType(WebMediaPlayer::LoadTypeURL)
|
| {
|
| ASSERT(m_client);
|
| }
|
|
|