| 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);
|
|
|