Index: Source/core/css/CSSFontFaceSrcValue.cpp |
diff --git a/Source/core/css/CSSFontFaceSrcValue.cpp b/Source/core/css/CSSFontFaceSrcValue.cpp |
index 5ccf7547707efc0f79d2e69841d9ace072da92cb..d54f0deefda13f9baba7b6c47a029033f0652d12 100644 |
--- a/Source/core/css/CSSFontFaceSrcValue.cpp |
+++ b/Source/core/css/CSSFontFaceSrcValue.cpp |
@@ -88,10 +88,23 @@ bool CSSFontFaceSrcValue::hasFailedOrCanceledSubresources() const |
return m_fetched->loadFailedOrCanceled(); |
} |
+bool CSSFontFaceSrcValue::shouldSetCrossOriginAccessControl(const KURL& resource, SecurityOrigin* securityOrigin) |
+{ |
+ if (resource.isLocalFile() || resource.protocolIsData()) |
+ return false; |
+ if (m_fetched && m_fetched->isCORSFailed()) |
+ return false; |
+ return !securityOrigin->canRequest(resource); |
+} |
+ |
FontResource* CSSFontFaceSrcValue::fetch(Document* document) |
{ |
- if (!m_fetched) { |
+ if (!m_fetched || m_fetched->isCORSFailed()) { |
FetchRequest request(ResourceRequest(document->completeURL(m_resource)), FetchInitiatorTypeNames::css); |
+ SecurityOrigin* securityOrigin = document->securityOrigin(); |
+ if (shouldSetCrossOriginAccessControl(request.url(), securityOrigin)) { |
+ request.setCrossOriginAccessControl(securityOrigin, DoNotAllowStoredCredentials); |
+ } |
m_fetched = document->fetcher()->fetchFont(request); |
} |
return m_fetched.get(); |