summaryrefslogtreecommitdiffstats
path: root/Source/WebCore/html/parser/CSSPreloadScanner.cpp
diff options
context:
space:
mode:
authorBen Murdoch <benm@google.com>2011-06-02 12:07:03 +0100
committerBen Murdoch <benm@google.com>2011-06-10 10:47:21 +0100
commit2daae5fd11344eaa88a0d92b0f6d65f8d2255c00 (patch)
treee4964fbd1cb70599f7718ff03e50ea1dab33890b /Source/WebCore/html/parser/CSSPreloadScanner.cpp
parent87bdf0060a247bfbe668342b87e0874182e0ffa9 (diff)
downloadexternal_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.cpp39
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();
}