diff options
Diffstat (limited to 'chromium/third_party/WebKit/Source/core/loader/TextTrackLoader.cpp')
-rw-r--r-- | chromium/third_party/WebKit/Source/core/loader/TextTrackLoader.cpp | 47 |
1 files changed, 20 insertions, 27 deletions
diff --git a/chromium/third_party/WebKit/Source/core/loader/TextTrackLoader.cpp b/chromium/third_party/WebKit/Source/core/loader/TextTrackLoader.cpp index 121a2b5c163..60fa74f9fb5 100644 --- a/chromium/third_party/WebKit/Source/core/loader/TextTrackLoader.cpp +++ b/chromium/third_party/WebKit/Source/core/loader/TextTrackLoader.cpp @@ -27,7 +27,7 @@ #include "core/loader/TextTrackLoader.h" -#include "FetchInitiatorTypeNames.h" +#include "core/FetchInitiatorTypeNames.h" #include "core/dom/Document.h" #include "core/fetch/CrossOriginAccessControl.h" #include "core/fetch/FetchRequest.h" @@ -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; @@ -107,31 +99,27 @@ void TextTrackLoader::notifyFinished(Resource* resource) m_cueParser->flush(); if (!m_cueLoadTimer.isActive()) - m_cueLoadTimer.startOneShot(0); + m_cueLoadTimer.startOneShot(0, FROM_HERE); cancelLoad(); } -bool TextTrackLoader::load(const KURL& url, const String& crossOriginMode) +bool TextTrackLoader::load(const KURL& url, const AtomicString& crossOriginMode) { cancelLoad(); 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(), crossOriginMode); + } 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(); - setResource(fetcher->fetchRawResource(cueRequest)); + setResource(fetcher->fetchTextTrack(cueRequest)); return resource(); } @@ -141,7 +129,7 @@ void TextTrackLoader::newCuesParsed() return; m_newCuesAvailable = true; - m_cueLoadTimer.startOneShot(0); + m_cueLoadTimer.startOneShot(0, FROM_HERE); } void TextTrackLoader::newRegionsParsed() @@ -156,23 +144,28 @@ void TextTrackLoader::fileFailedToParse() m_state = Failed; if (!m_cueLoadTimer.isActive()) - m_cueLoadTimer.startOneShot(0); + m_cueLoadTimer.startOneShot(0, FROM_HERE); cancelLoad(); } -void TextTrackLoader::getNewCues(Vector<RefPtr<VTTCue> >& outputCues) +void TextTrackLoader::getNewCues(WillBeHeapVector<RefPtrWillBeMember<VTTCue> >& outputCues) { ASSERT(m_cueParser); if (m_cueParser) m_cueParser->getNewCues(outputCues); } -void TextTrackLoader::getNewRegions(Vector<RefPtr<VTTRegion> >& outputRegions) +void TextTrackLoader::getNewRegions(WillBeHeapVector<RefPtrWillBeMember<VTTRegion> >& outputRegions) { ASSERT(m_cueParser); if (m_cueParser) m_cueParser->getNewRegions(outputRegions); } +void TextTrackLoader::trace(Visitor* visitor) +{ + visitor->trace(m_cueParser); +} + } |