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

Unified Diff: third_party/WebKit/Source/core/html/HTMLMediaElement.cpp

Issue 2046253002: When HLS redirects are encountered recreate WebMediaPlayer. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Don't set m_currentSrc. Created 4 years, 6 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 side-by-side diff with in-line comments
Download patch
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()
{
« no previous file with comments | « third_party/WebKit/Source/core/html/HTMLMediaElement.h ('k') | third_party/WebKit/public/platform/WebMediaPlayerClient.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698