| Index: Source/core/html/HTMLLinkElement.cpp
|
| diff --git a/Source/core/html/HTMLLinkElement.cpp b/Source/core/html/HTMLLinkElement.cpp
|
| index f7a257c06cf0927a7f32d789df1d93445134b9c4..0907d5b7d6b11032046d6bbcf719ed833770d176 100644
|
| --- a/Source/core/html/HTMLLinkElement.cpp
|
| +++ b/Source/core/html/HTMLLinkElement.cpp
|
| @@ -489,6 +489,7 @@ LinkStyle::LinkStyle(HTMLLinkElement* owner)
|
| , m_loading(false)
|
| , m_firedLoad(false)
|
| , m_loadedSheet(false)
|
| + , m_fetchFollowingCORS(false)
|
| {
|
| }
|
|
|
| @@ -533,6 +534,7 @@ void LinkStyle::setCSSStyleSheet(const String& href, const KURL& baseURL, const
|
| m_sheet = CSSStyleSheet::create(restoredSheet, m_owner);
|
| m_sheet->setMediaQueries(MediaQuerySet::create(m_owner->media()));
|
| m_sheet->setTitle(m_owner->title());
|
| + setCrossOriginStylesheetStatus(m_sheet.get());
|
|
|
| m_loading = false;
|
| restoredSheet->checkLoaded();
|
| @@ -547,6 +549,7 @@ void LinkStyle::setCSSStyleSheet(const String& href, const KURL& baseURL, const
|
| m_sheet = CSSStyleSheet::create(styleSheet, m_owner);
|
| m_sheet->setMediaQueries(MediaQuerySet::create(m_owner->media()));
|
| m_sheet->setTitle(m_owner->title());
|
| + setCrossOriginStylesheetStatus(m_sheet.get());
|
|
|
| styleSheet->parseAuthorStyleSheet(cachedStyleSheet, m_owner->document().securityOrigin());
|
|
|
| @@ -673,6 +676,16 @@ void LinkStyle::setDisabledState(bool disabled)
|
| }
|
| }
|
|
|
| +void LinkStyle::setCrossOriginStylesheetStatus(CSSStyleSheet* sheet)
|
| +{
|
| + if (m_fetchFollowingCORS && resource() && !resource()->errorOccurred()) {
|
| + // Record the security origin the CORS access check succeeded at, if cross origin.
|
| + // Only origins that are script accessible to it may access the stylesheet's rules.
|
| + sheet->setAllowRuleAccessFromOrigin(m_owner->document().securityOrigin());
|
| + }
|
| + m_fetchFollowingCORS = false;
|
| +}
|
| +
|
| void LinkStyle::process()
|
| {
|
| ASSERT(m_owner->shouldProcessStyle());
|
| @@ -723,8 +736,10 @@ void LinkStyle::process()
|
| // Load stylesheets that are not needed for the rendering immediately with low priority.
|
| FetchRequest request = builder.build(blocking);
|
| AtomicString crossOriginMode = m_owner->fastGetAttribute(HTMLNames::crossoriginAttr);
|
| - if (!crossOriginMode.isNull())
|
| + if (!crossOriginMode.isNull()) {
|
| request.setCrossOriginAccessControl(document().securityOrigin(), crossOriginMode);
|
| + setFetchFollowingCORS();
|
| + }
|
| setResource(document().fetcher()->fetchCSSStyleSheet(request));
|
|
|
| if (!resource()) {
|
|
|