Index: third_party/WebKit/Source/core/html/HTMLLinkElement.cpp |
diff --git a/third_party/WebKit/Source/core/html/HTMLLinkElement.cpp b/third_party/WebKit/Source/core/html/HTMLLinkElement.cpp |
index 4218572b31a22db8d713a0e464814c9481653d25..9ee2db13e7c794667b5ddb8c68ac656f7171d98c 100644 |
--- a/third_party/WebKit/Source/core/html/HTMLLinkElement.cpp |
+++ b/third_party/WebKit/Source/core/html/HTMLLinkElement.cpp |
@@ -426,17 +426,35 @@ void LinkStyle::setCSSStyleSheet( |
// See the comment in PendingScript.cpp about why this check is necessary |
// here, instead of in the resource fetcher. https://crbug.com/500701. |
if (!cachedStyleSheet->errorOccurred() && |
- m_owner->fastHasAttribute(HTMLNames::integrityAttr) && |
- cachedStyleSheet->resourceBuffer() && |
- !SubresourceIntegrity::CheckSubresourceIntegrity( |
- *m_owner, cachedStyleSheet->resourceBuffer()->data(), |
- cachedStyleSheet->resourceBuffer()->size(), KURL(baseURL, href), |
- *cachedStyleSheet)) { |
- m_loading = false; |
- removePendingSheet(); |
- notifyLoadedSheetAndAllCriticalSubresources( |
- Node::ErrorOccurredLoadingSubresource); |
- return; |
+ !m_owner->fastGetAttribute(HTMLNames::integrityAttr).isEmpty() && |
+ !cachedStyleSheet->integrityMetadata().isEmpty()) { |
+ ResourceIntegrityDisposition disposition = |
+ cachedStyleSheet->integrityDisposition(); |
+ |
+ if (disposition == ResourceIntegrityDisposition::NotChecked) |
Charlie Harrison
2016/10/05 15:24:49
nit: A conditional branch just for a DCHECK isn't
kouhei (in TOK)
2016/10/06 12:02:36
Done.
|
+ DCHECK(!cachedStyleSheet->sheetText().isNull()); |
+ |
+ if (disposition == ResourceIntegrityDisposition::NotChecked && |
+ cachedStyleSheet->resourceBuffer()) { |
+ if (SubresourceIntegrity::CheckSubresourceIntegrity( |
+ *m_owner, cachedStyleSheet->resourceBuffer()->data(), |
+ cachedStyleSheet->resourceBuffer()->size(), KURL(baseURL, href), |
+ *cachedStyleSheet)) |
+ disposition = ResourceIntegrityDisposition::Passed; |
+ else |
+ disposition = ResourceIntegrityDisposition::Failed; |
+ |
+ const_cast<CSSStyleSheetResource*>(cachedStyleSheet) |
Charlie Harrison
2016/10/05 15:24:48
The const_cast is not ideal, but I can't think of
|
+ ->setIntegrityDisposition(disposition); |
+ } |
+ |
+ if (disposition == ResourceIntegrityDisposition::Failed) { |
+ m_loading = false; |
+ removePendingSheet(); |
+ notifyLoadedSheetAndAllCriticalSubresources( |
+ Node::ErrorOccurredLoadingSubresource); |
+ return; |
+ } |
} |
CSSParserContext parserContext(m_owner->document(), nullptr, baseURL, |