| Index: Source/core/loader/TextTrackLoader.cpp
|
| diff --git a/Source/core/loader/TextTrackLoader.cpp b/Source/core/loader/TextTrackLoader.cpp
|
| index 121a2b5c163d1e1ebbdfc70a1ef283ef900cfa5d..8973f07a5cb51aa7504fed0f7a438e85153e4f1d 100644
|
| --- a/Source/core/loader/TextTrackLoader.cpp
|
| +++ b/Source/core/loader/TextTrackLoader.cpp
|
| @@ -82,9 +82,9 @@ void TextTrackLoader::dataReceived(Resource* resource, const char* data, int len
|
| m_cueParser->parseBytes(data, length);
|
| }
|
|
|
| -void TextTrackLoader::corsPolicyPreventedLoad()
|
| +void TextTrackLoader::corsPolicyPreventedLoad(SecurityOrigin* securityOrigin, const KURL& url)
|
| {
|
| - DEFINE_STATIC_LOCAL(String, consoleMessage, ("Cross-origin text track load denied by Cross-Origin Resource Sharing policy."));
|
| + String consoleMessage("Text track from origin '" + SecurityOrigin::create(url)->toString() + "' has been blocked from loading: Not at same origin as the document, and parent of track element does not have a 'crossorigin' attribute. Origin '" + securityOrigin->toString() + "' is therefore not allowed access.");
|
| m_document.addConsoleMessage(SecurityMessageSource, ErrorMessageLevel, consoleMessage);
|
| m_state = Failed;
|
| }
|
| @@ -92,14 +92,6 @@ void TextTrackLoader::corsPolicyPreventedLoad()
|
| void TextTrackLoader::notifyFinished(Resource* resource)
|
| {
|
| ASSERT(this->resource() == resource);
|
| -
|
| - if (!m_crossOriginMode.isNull()
|
| - && !m_document.securityOrigin()->canRequest(resource->response().url())
|
| - && !resource->passesAccessControlCheck(m_document.securityOrigin())) {
|
| -
|
| - corsPolicyPreventedLoad();
|
| - }
|
| -
|
| if (m_state != Failed)
|
| m_state = resource->errorOccurred() ? Failed : Finished;
|
|
|
| @@ -119,15 +111,12 @@ bool TextTrackLoader::load(const KURL& url, const String& crossOriginMode)
|
| FetchRequest cueRequest(ResourceRequest(m_document.completeURL(url)), FetchInitiatorTypeNames::texttrack);
|
|
|
| if (!crossOriginMode.isNull()) {
|
| - m_crossOriginMode = crossOriginMode;
|
| StoredCredentials allowCredentials = equalIgnoringCase(crossOriginMode, "use-credentials") ? AllowStoredCredentials : DoNotAllowStoredCredentials;
|
| - updateRequestForAccessControl(cueRequest.mutableResourceRequest(), m_document.securityOrigin(), allowCredentials);
|
| - } else {
|
| - // Cross-origin resources that are not suitably CORS-enabled may not load.
|
| - if (!m_document.securityOrigin()->canRequest(url)) {
|
| - corsPolicyPreventedLoad();
|
| - return false;
|
| - }
|
| + cueRequest.setCrossOriginAccessControl(m_document.securityOrigin(), allowCredentials);
|
| + } else if (!m_document.securityOrigin()->canRequest(url)) {
|
| + // Text track elements without 'crossorigin' set on the parent are "No CORS"; report error if not same-origin.
|
| + corsPolicyPreventedLoad(m_document.securityOrigin(), url);
|
| + return false;
|
| }
|
|
|
| ResourceFetcher* fetcher = m_document.fetcher();
|
|
|