diff options
author | Ben Murdoch <benm@google.com> | 2011-06-02 12:07:03 +0100 |
---|---|---|
committer | Ben Murdoch <benm@google.com> | 2011-06-10 10:47:21 +0100 |
commit | 2daae5fd11344eaa88a0d92b0f6d65f8d2255c00 (patch) | |
tree | e4964fbd1cb70599f7718ff03e50ea1dab33890b /Source/WebCore/html/parser/CSSPreloadScanner.cpp | |
parent | 87bdf0060a247bfbe668342b87e0874182e0ffa9 (diff) | |
download | external_webkit-2daae5fd11344eaa88a0d92b0f6d65f8d2255c00.zip external_webkit-2daae5fd11344eaa88a0d92b0f6d65f8d2255c00.tar.gz external_webkit-2daae5fd11344eaa88a0d92b0f6d65f8d2255c00.tar.bz2 |
Merge WebKit at r84325: Initial merge by git.
Change-Id: Ic1a909300ecc0a13ddc6b4e784371d2ac6e3d59b
Diffstat (limited to 'Source/WebCore/html/parser/CSSPreloadScanner.cpp')
-rw-r--r-- | Source/WebCore/html/parser/CSSPreloadScanner.cpp | 39 |
1 files changed, 26 insertions, 13 deletions
diff --git a/Source/WebCore/html/parser/CSSPreloadScanner.cpp b/Source/WebCore/html/parser/CSSPreloadScanner.cpp index 23364f9..3c23b9f 100644 --- a/Source/WebCore/html/parser/CSSPreloadScanner.cpp +++ b/Source/WebCore/html/parser/CSSPreloadScanner.cpp @@ -54,7 +54,7 @@ void CSSPreloadScanner::scan(const HTMLToken& token, bool scanningBody) m_scanningBody = scanningBody; const HTMLToken::DataVector& characters = token.characters(); - for (HTMLToken::DataVector::const_iterator iter = characters.begin(); iter != characters.end(); ++iter) + for (HTMLToken::DataVector::const_iterator iter = characters.begin(); iter != characters.end() && m_state != DoneParsingImportRules; ++iter) tokenize(*iter); } @@ -64,10 +64,14 @@ inline void CSSPreloadScanner::tokenize(UChar c) // Searching for other types of resources is probably low payoff. switch (m_state) { case Initial: + if (isHTMLSpace(c)) + break; if (c == '@') m_state = RuleStart; else if (c == '/') m_state = MaybeComment; + else + m_state = DoneParsingImportRules; break; case MaybeComment: if (c == '*') @@ -80,10 +84,10 @@ inline void CSSPreloadScanner::tokenize(UChar c) m_state = MaybeCommentEnd; break; case MaybeCommentEnd: + if (c == '*') + break; if (c == '/') m_state = Initial; - else if (c == '*') - ; else m_state = Comment; break; @@ -106,9 +110,11 @@ inline void CSSPreloadScanner::tokenize(UChar c) break; case AfterRule: if (isHTMLSpace(c)) - ; - else if (c == ';') + break; + if (c == ';') m_state = Initial; + else if (c == '{') + m_state = DoneParsingImportRules; else { m_state = RuleValue; m_ruleValue.append(c); @@ -117,23 +123,26 @@ inline void CSSPreloadScanner::tokenize(UChar c) case RuleValue: if (isHTMLSpace(c)) m_state = AfterRuleValue; - else if (c == ';') { + else if (c == ';') emitRule(); - m_state = Initial; - } else + else m_ruleValue.append(c); break; case AfterRuleValue: if (isHTMLSpace(c)) - ; - else if (c == ';') { + break; + if (c == ';') emitRule(); - m_state = Initial; - } else { + else if (c == '{') + m_state = DoneParsingImportRules; + else { // FIXME: media rules m_state = Initial; } break; + case DoneParsingImportRules: + ASSERT_NOT_REACHED(); + break; } } @@ -187,7 +196,11 @@ void CSSPreloadScanner::emitRule() String value = parseCSSStringOrURL(m_ruleValue.data(), m_ruleValue.size()); if (!value.isEmpty()) m_document->cachedResourceLoader()->preload(CachedResource::CSSStyleSheet, value, String(), m_scanningBody); - } + m_state = Initial; + } else if (equalIgnoringCase("charset", m_rule.data(), m_rule.size())) + m_state = Initial; + else + m_state = DoneParsingImportRules; m_rule.clear(); m_ruleValue.clear(); } |