Chromium Code Reviews| Index: Source/core/html/HTMLMediaElement.cpp |
| diff --git a/Source/core/html/HTMLMediaElement.cpp b/Source/core/html/HTMLMediaElement.cpp |
| index 026d69d245791efb86d1062b9b882bd5d27e650f..94a33bc1df17ba77742be7ffd90c15f441e0dbe3 100644 |
| --- a/Source/core/html/HTMLMediaElement.cpp |
| +++ b/Source/core/html/HTMLMediaElement.cpp |
| @@ -85,6 +85,7 @@ |
| using namespace std; |
| using blink::WebInbandTextTrack; |
| using blink::WebMimeRegistry; |
| +using blink::WebMediaPlayer; |
|
philipj_slow
2014/03/08 19:38:40
Move up one line to keep list sorted.
acolwell GONE FROM CHROMIUM
2014/03/10 21:53:31
Done.
|
| namespace WebCore { |
| @@ -279,6 +280,7 @@ HTMLMediaElement::HTMLMediaElement(const QualifiedName& tagName, Document& docum |
| , m_lastTextTrackUpdateTime(-1) |
| , m_textTracks(nullptr) |
| , m_ignoreTrackDisplayUpdate(0) |
| + , m_delayingLoad(false) |
| #if ENABLE(WEB_AUDIO) |
| , m_audioSourceNode(0) |
| #endif |
| @@ -413,7 +415,7 @@ void HTMLMediaElement::parseAttribute(const QualifiedName& name, const AtomicStr |
| // The attribute must be ignored if the autoplay attribute is present |
| if (!autoplay() && m_player) |
| - m_player->setPreload(m_preload); |
| + setPlayerPreload(); |
| } else if (name == mediagroupAttr) |
| setMediaGroup(value); |
| @@ -839,15 +841,13 @@ void HTMLMediaElement::loadResource(const KURL& url, ContentType& contentType, c |
| WTF_LOG(Media, "HTMLMediaElement::loadResource - m_currentSrc -> %s", urlForLoggingMedia(m_currentSrc).utf8().data()); |
| - blink::WebMediaPlayer::LoadType loadType = blink::WebMediaPlayer::LoadTypeURL; |
| - |
| startProgressEventTimer(); |
| // Reset display mode to force a recalculation of what to show because we are resetting the player. |
| setDisplayMode(Unknown); |
| if (!autoplay()) |
| - m_player->setPreload(m_preload); |
| + setPlayerPreload(); |
| if (fastHasAttribute(mutedAttr)) |
| m_muted = true; |
| @@ -859,14 +859,11 @@ void HTMLMediaElement::loadResource(const KURL& url, ContentType& contentType, c |
| if (url.protocolIs(mediaSourceBlobProtocol)) { |
| if (isMediaStreamURL(url.string())) { |
| - loadType = blink::WebMediaPlayer::LoadTypeMediaStream; |
| m_userGestureRequiredForPlay = false; |
| } else { |
| m_mediaSource = HTMLMediaSource::lookup(url.string()); |
| if (m_mediaSource) { |
| - loadType = blink::WebMediaPlayer::LoadTypeMediaSource; |
| - |
| if (!m_mediaSource->attachToElement(this)) { |
| // Forget our reference to the MediaSource, so we leave it alone |
| // while processing remainder of load failure. |
| @@ -878,7 +875,13 @@ void HTMLMediaElement::loadResource(const KURL& url, ContentType& contentType, c |
| } |
| if (attemptLoad && canLoadURL(url, contentType, keySystem)) { |
| - m_player->load(loadType, url); |
| + ASSERT(!webMediaPlayer()); |
| + |
| + if (m_preload == MediaPlayer::None) { |
| + m_delayingLoad = true; |
|
philipj_slow
2014/03/08 19:38:40
http://www.whatwg.org/specs/web-apps/current-work/
acolwell GONE FROM CHROMIUM
2014/03/10 21:53:31
I just want to keep this CL as a simple move of ex
philipj_slow
2014/03/12 05:21:01
Sounds great!
|
| + } else { |
| + m_player->load(loadType(), m_currentSrc, corsMode()); |
| + } |
| } else { |
| mediaLoadingFailed(MediaPlayer::FormatError); |
| } |
| @@ -1681,7 +1684,9 @@ void HTMLMediaElement::prepareToPlay() |
| if (m_havePreparedToPlay) |
| return; |
| m_havePreparedToPlay = true; |
| - m_player->prepareToPlay(); |
| + |
| + if (m_delayingLoad) |
| + startDelayedLoad(); |
| } |
| void HTMLMediaElement::seek(double time, ExceptionState& exceptionState) |
| @@ -3139,6 +3144,8 @@ void HTMLMediaElement::clearMediaPlayer(int flags) |
| closeMediaSource(); |
| + m_delayingLoad = false; |
| + |
| clearMediaPlayerAndAudioSourceProviderClient(); |
| stopPeriodicTimers(); |
| @@ -3602,14 +3609,14 @@ void HTMLMediaElement::applyMediaFragmentURI() |
| } |
| } |
| -MediaPlayerClient::CORSMode HTMLMediaElement::mediaPlayerCORSMode() const |
| +WebMediaPlayer::CORSMode HTMLMediaElement::corsMode() const |
| { |
| const AtomicString& crossOriginMode = fastGetAttribute(crossoriginAttr); |
| if (crossOriginMode.isNull()) |
| - return Unspecified; |
| + return WebMediaPlayer::CORSModeUnspecified; |
| if (equalIgnoringCase(crossOriginMode, "use-credentials")) |
| - return UseCredentials; |
| - return Anonymous; |
| + return WebMediaPlayer::CORSModeUseCredentials; |
| + return WebMediaPlayer::CORSModeAnonymous; |
| } |
| void HTMLMediaElement::mediaPlayerSetWebLayer(blink::WebLayer* webLayer) |
| @@ -3647,4 +3654,32 @@ bool HTMLMediaElement::isInteractiveContent() const |
| return fastHasAttribute(controlsAttr); |
| } |
| +void HTMLMediaElement::setPlayerPreload() |
| +{ |
| + m_player->setPreload(m_preload); |
|
philipj_slow
2014/03/08 19:38:40
I had to look for a while before I understood why
acolwell GONE FROM CHROMIUM
2014/03/10 21:53:31
Agreed. I was surprised about this as well especia
|
| + |
| + if (m_delayingLoad && m_preload != MediaPlayer::None) |
| + startDelayedLoad(); |
| +} |
| + |
| +void HTMLMediaElement::startDelayedLoad() |
| +{ |
| + ASSERT(m_delayingLoad); |
| + |
| + m_delayingLoad = false; |
| + |
| + m_player->load(loadType(), m_currentSrc, corsMode()); |
| +} |
| + |
| +WebMediaPlayer::LoadType HTMLMediaElement::loadType() const |
|
philipj_slow
2014/03/08 19:38:40
Maybe move these functions up together with their
acolwell GONE FROM CHROMIUM
2014/03/10 21:53:31
Done.
|
| +{ |
| + if (m_mediaSource) |
| + return WebMediaPlayer::LoadTypeMediaSource; |
| + |
| + if (isMediaStreamURL(m_currentSrc.string())) |
| + return WebMediaPlayer::LoadTypeMediaStream; |
| + |
| + return WebMediaPlayer::LoadTypeURL; |
| +} |
| + |
| } |