Chromium Code Reviews| Index: third_party/WebKit/Source/core/html/HTMLMediaElement.cpp |
| diff --git a/third_party/WebKit/Source/core/html/HTMLMediaElement.cpp b/third_party/WebKit/Source/core/html/HTMLMediaElement.cpp |
| index 4a4650cf9a1fcaf5c78fe3cf7c456ee11c1504f2..c8914db18e2b060141886e38cc2ba27cc8a59f7f 100644 |
| --- a/third_party/WebKit/Source/core/html/HTMLMediaElement.cpp |
| +++ b/third_party/WebKit/Source/core/html/HTMLMediaElement.cpp |
| @@ -944,8 +944,7 @@ void HTMLMediaElement::loadSourceFromObject() |
| // No type is available when the resource comes from the 'srcObject' |
| // attribute. |
| - ContentType contentType((String())); |
| - loadResource(WebMediaPlayerSource(WebMediaStream(m_srcObject)), contentType); |
| + loadResource(WebMediaPlayerSource(WebMediaStream(m_srcObject)), ContentType((String()))); |
| } |
| void HTMLMediaElement::loadSourceFromAttribute() |
| @@ -968,8 +967,7 @@ void HTMLMediaElement::loadSourceFromAttribute() |
| // No type is available when the url comes from the 'src' attribute so |
| // MediaPlayer will have to pick a media engine based on the file extension. |
| - ContentType contentType((String())); |
| - loadResource(WebMediaPlayerSource(WebURL(mediaURL)), contentType); |
| + loadResource(WebMediaPlayerSource(WebURL(mediaURL)), ContentType((String()))); |
| } |
| void HTMLMediaElement::loadNextSourceChild() |
| @@ -988,12 +986,12 @@ void HTMLMediaElement::loadNextSourceChild() |
| loadResource(WebMediaPlayerSource(WebURL(mediaURL)), contentType); |
| } |
| -void HTMLMediaElement::loadResource(const WebMediaPlayerSource& source, ContentType& contentType) |
| +void HTMLMediaElement::loadResource(const WebMediaPlayerSource& source, const ContentType& contentType, const KURL& playerProvidedUrl) |
| { |
| DCHECK(isMainThread()); |
| KURL url; |
| if (source.isURL()) { |
| - url = source.getAsURL(); |
| + url = playerProvidedUrl.isNull() ? KURL(source.getAsURL()) : playerProvidedUrl; |
| DCHECK(isSafeToLoadURL(url, Complain)); |
| MEDIA_LOG << "loadResource(" << (void*)this << ", " << urlForLoggingMedia(url) << ", " << contentType.raw() << ")"; |
| } |
| @@ -1009,12 +1007,16 @@ void HTMLMediaElement::loadResource(const WebMediaPlayerSource& source, ContentT |
| m_autoplayHelper->loadingStarted(); |
| - // Set m_currentSrc *before* changing to the cache url, the fact that we are loading from the app |
| - // cache is an internal detail not exposed through the media element API. |
| - m_currentSrc = url; |
| + // Do not update the element visible source when using a player provided URL, this may reveal |
| + // redirect origin information to the page. |
| + if (playerProvidedUrl.isNull()) { |
| + // Set m_currentSrc *before* changing to the cache url, the fact that we are loading from the app |
| + // cache is an internal detail not exposed through the media element API. |
| + m_currentSrc = url; |
| - if (m_audioSourceNode) |
| - m_audioSourceNode->onCurrentSrcChanged(m_currentSrc); |
| + if (m_audioSourceNode) |
| + m_audioSourceNode->onCurrentSrcChanged(m_currentSrc); |
| + } |
| MEDIA_LOG << "loadResource(" << (void*)this << ") - m_currentSrc -> " << urlForLoggingMedia(m_currentSrc); |
| @@ -1063,7 +1065,7 @@ void HTMLMediaElement::loadResource(const WebMediaPlayerSource& source, ContentT |
| MEDIA_LOG << "loadResource(" << (void*)this << ") : Delaying load because preload == 'none'"; |
| deferLoad(); |
| } else { |
| - startPlayerLoad(); |
| + startPlayerLoad(playerProvidedUrl); |
|
foolip
2016/06/23 11:22:36
If preload=none, then I think you'll have taken th
DaleCurtis
2016/06/23 18:55:56
This seems to work fine. Done.
|
| } |
| } else { |
| mediaLoadingFailed(WebMediaPlayer::NetworkStateFormatError); |
| @@ -1077,7 +1079,7 @@ void HTMLMediaElement::loadResource(const WebMediaPlayerSource& source, ContentT |
| layoutObject()->updateFromElement(); |
| } |
| -void HTMLMediaElement::startPlayerLoad() |
| +void HTMLMediaElement::startPlayerLoad(const KURL& playerProvidedUrl) |
| { |
| DCHECK(!m_webMediaPlayer); |
| @@ -1098,7 +1100,7 @@ void HTMLMediaElement::startPlayerLoad() |
| // 'authentication flag' to control how user:pass embedded in a |
| // media resource URL should be treated, then update the handling |
| // here to match. |
| - KURL requestURL = m_currentSrc; |
| + KURL requestURL = playerProvidedUrl.isNull() ? KURL(m_currentSrc) : playerProvidedUrl; |
| if (!requestURL.user().isEmpty()) |
| requestURL.setUser(String()); |
| if (!requestURL.pass().isEmpty()) |
| @@ -2999,6 +3001,14 @@ void HTMLMediaElement::cancelledRemotePlaybackRequest() |
| remotePlaybackClient()->connectCancelled(); |
| } |
| +void HTMLMediaElement::requestReload(const WebURL& newUrl) |
| +{ |
| + DCHECK(webMediaPlayer()); |
| + DCHECK(!m_srcObject); |
| + resetMediaPlayerAndMediaSource(); |
| + loadResource(WebMediaPlayerSource(newUrl), ContentType((String()))); |
| +} |
| + |
| // MediaPlayerPresentation methods |
| void HTMLMediaElement::repaint() |
| { |