Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(48)

Unified Diff: third_party/WebKit/Source/core/html/parser/HTMLPreloadScanner.cpp

Issue 2242223003: Preload tokens even if a <meta> csp tag is found (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix up layout test Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/html/parser/HTMLPreloadScanner.cpp
diff --git a/third_party/WebKit/Source/core/html/parser/HTMLPreloadScanner.cpp b/third_party/WebKit/Source/core/html/parser/HTMLPreloadScanner.cpp
index 1d347377674597cb06a1744ffbc46c4128135be8..5d6166b3d1e7e655d15cc6aa46df964a4c99c12f 100644
--- a/third_party/WebKit/Source/core/html/parser/HTMLPreloadScanner.cpp
+++ b/third_party/WebKit/Source/core/html/parser/HTMLPreloadScanner.cpp
@@ -497,7 +497,6 @@ TokenPreloadScanner::TokenPreloadScanner(const KURL& documentURL, std::unique_pt
, m_inStyle(false)
, m_inPicture(false)
, m_inScript(false)
- , m_isCSPEnabled(false)
, m_templateCount(0)
, m_documentParameters(std::move(documentParameters))
, m_mediaValues(MediaValuesCached::create(mediaValuesCachedData))
@@ -515,7 +514,7 @@ TokenPreloadScanner::~TokenPreloadScanner()
TokenPreloadScannerCheckpoint TokenPreloadScanner::createCheckpoint()
{
TokenPreloadScannerCheckpoint checkpoint = m_checkpoints.size();
- m_checkpoints.append(Checkpoint(m_predictedBaseElementURL, m_inStyle, m_inScript, m_isCSPEnabled, m_templateCount));
+ m_checkpoints.append(Checkpoint(m_predictedBaseElementURL, m_inStyle, m_inScript, m_templateCount));
return checkpoint;
}
@@ -525,7 +524,6 @@ void TokenPreloadScanner::rewindTo(TokenPreloadScannerCheckpoint checkpointIndex
const Checkpoint& checkpoint = m_checkpoints[checkpointIndex];
m_predictedBaseElementURL = checkpoint.predictedBaseElementURL;
m_inStyle = checkpoint.inStyle;
- m_isCSPEnabled = checkpoint.isCSPEnabled;
m_templateCount = checkpoint.templateCount;
m_didRewind = true;
@@ -535,14 +533,14 @@ void TokenPreloadScanner::rewindTo(TokenPreloadScannerCheckpoint checkpointIndex
m_checkpoints.clear();
}
-void TokenPreloadScanner::scan(const HTMLToken& token, const SegmentedString& source, PreloadRequestStream& requests, ViewportDescriptionWrapper* viewport)
+void TokenPreloadScanner::scan(const HTMLToken& token, const SegmentedString& source, PreloadRequestStream& requests, ViewportDescriptionWrapper* viewport, bool* isCSPMetaTag)
{
- scanCommon(token, source, requests, viewport, nullptr);
+ scanCommon(token, source, requests, viewport, isCSPMetaTag, nullptr);
}
-void TokenPreloadScanner::scan(const CompactHTMLToken& token, const SegmentedString& source, PreloadRequestStream& requests, ViewportDescriptionWrapper* viewport, bool* likelyDocumentWriteScript)
+void TokenPreloadScanner::scan(const CompactHTMLToken& token, const SegmentedString& source, PreloadRequestStream& requests, ViewportDescriptionWrapper* viewport, bool* isCSPMetaTag, bool* likelyDocumentWriteScript)
{
- scanCommon(token, source, requests, viewport, likelyDocumentWriteScript);
+ scanCommon(token, source, requests, viewport, isCSPMetaTag, likelyDocumentWriteScript);
}
static void handleMetaViewport(const String& attributeValue, const CachedDocumentParameters* documentParameters, MediaValuesCached* mediaValues, ViewportDescriptionWrapper* viewport)
@@ -651,15 +649,11 @@ bool TokenPreloadScanner::shouldEvaluateForDocumentWrite(const String& source)
}
template <typename Token>
-void TokenPreloadScanner::scanCommon(const Token& token, const SegmentedString& source, PreloadRequestStream& requests, ViewportDescriptionWrapper* viewport, bool* likelyDocumentWriteScript)
+void TokenPreloadScanner::scanCommon(const Token& token, const SegmentedString& source, PreloadRequestStream& requests, ViewportDescriptionWrapper* viewport, bool* isCSPMetaTag, bool* likelyDocumentWriteScript)
{
if (!m_documentParameters->doHtmlPreloadScanning)
return;
- // http://crbug.com/434230 Disable preload for documents with CSP <meta> tags
- if (m_isCSPEnabled)
- return;
-
switch (token.type()) {
case HTMLToken::Character: {
if (m_inStyle) {
@@ -724,7 +718,7 @@ void TokenPreloadScanner::scanCommon(const Token& token, const SegmentedString&
if (equivAttribute) {
String equivAttributeValue(equivAttribute->value());
if (equalIgnoringCase(equivAttributeValue, "content-security-policy")) {
- m_isCSPEnabled = true;
+ *isCSPMetaTag = true;
} else if (equalIgnoringCase(equivAttributeValue, "accept-ch")) {
const typename Token::Attribute* contentAttribute = token.getAttributeItem(contentAttr);
if (contentAttribute)
@@ -797,8 +791,14 @@ void HTMLPreloadScanner::scanAndPreload(ResourcePreloader* preloader, const KURL
while (m_tokenizer->nextToken(m_source, m_token)) {
if (m_token.type() == HTMLToken::StartTag)
m_tokenizer->updateStateFor(attemptStaticStringCreation(m_token.name(), Likely8Bit));
- m_scanner.scan(m_token, m_source, requests, viewport);
+ bool isCSPMetaTag = false;
+ m_scanner.scan(m_token, m_source, requests, viewport, &isCSPMetaTag);
m_token.clear();
+ // Don't preload anything if a CSP meta tag is found. We should never
+ // really find them here because the HTMLPreloadScanner is only used for
+ // dynamically added markup.
+ if (isCSPMetaTag)
+ return;
}
preloader->takeAndPreload(requests);

Powered by Google App Engine
This is Rietveld 408576698