summaryrefslogtreecommitdiffstats
path: root/chromium/third_party/WebKit/Source/core/loader/TextTrackLoader.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/WebKit/Source/core/loader/TextTrackLoader.cpp')
-rw-r--r--chromium/third_party/WebKit/Source/core/loader/TextTrackLoader.cpp47
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);
+}
+
}