Changeset 114217 in webkit
- Timestamp:
- Apr 15, 2012 7:40:23 PM (12 years ago)
- Location:
- trunk
- Files:
-
- 27 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r114212 r114217 1 2012-04-15 Antti Koivisto <antti@apple.com> 2 3 Capture CSS parser context 4 https://bugs.webkit.org/show_bug.cgi?id=83998 5 6 Reviewed by Andreas Kling. 7 8 Modify the tests so that they don't expect settings changes to apply to already existing stylesheets. 9 10 * css3/filters/script-tests/custom-filter-property-parsing.js: 11 * fast/regions/script-tests/css-regions-disabled.js: 12 1 13 2012-04-15 Raphael Kubo da Costa <rakuco@webkit.org> 2 14 -
trunk/LayoutTests/css3/filters/script-tests/custom-filter-property-parsing.js
r111610 r114217 33 33 } 34 34 35 var styleElement = document.createElement("style"); 36 document.head.appendChild(styleElement); 37 35 38 // These have to be global for the test helpers to see them. 36 var stylesheet, cssRule, declaration, filterRule, subRule; 39 var cssRule, declaration, filterRule, subRule; 40 var stylesheet = styleElement.sheet; 37 41 38 42 function testFilterRule(description, rule, expectedValue, expectedTypes, expectedTexts) … … 41 45 debug(description + " : " + rule); 42 46 43 stylesheet = document.styleSheets.item(0);44 47 stylesheet.insertRule("body { -webkit-filter: " + rule + "; }", 0); 45 48 cssRule = stylesheet.cssRules.item(0); -
trunk/LayoutTests/fast/regions/script-tests/css-regions-disabled.js
r109015 r114217 65 65 66 66 // Test that region styling rules are not parsed. 67 stylesheet = document.styleSheets.item(0); 67 var styleElement = document.createElement("style"); 68 document.head.appendChild(styleElement); 69 var stylesheet = styleElement.sheet; 68 70 webkitRegionRuleIndex = -1; 69 71 try { -
trunk/Source/WebCore/ChangeLog
r114216 r114217 1 2012-04-15 Antti Koivisto <antti@apple.com> 2 3 Capture CSS parser context 4 https://bugs.webkit.org/show_bug.cgi?id=83998 5 6 Reviewed by Andreas Kling. 7 8 Currently the CSS parser calls to the Document and StyleSheetInternal objects to get settings, base URL etc. 9 The required information should be passed in on parser construction instead. The parser should not need to 10 know about the document at all. 11 12 The patch adds CSSParserContext struct that captures the parsing context. StyleSheetInternal saves the 13 parsing context and reuses it for any further parsing. 14 15 If the same stylesheet source is parsed with an identical context then the resulting stylesheet structure will 16 be identical. This will allow sharing parsed stylesheets in the future. 17 18 * css/CSSGrammar.y: 19 * css/CSSImportRule.cpp: 20 (WebCore::StyleRuleImport::setCSSStyleSheet): 21 * css/CSSMediaRule.cpp: 22 (WebCore::CSSMediaRule::insertRule): 23 * css/CSSPageRule.cpp: 24 (WebCore::CSSPageRule::setSelectorText): 25 * css/CSSParser.cpp: 26 (WebCore): 27 (WebCore::strictCSSParserContext): 28 (WebCore::CSSParserContext::CSSParserContext): 29 (WebCore::CSSParser::CSSParser): 30 (WebCore::CSSParser::parseKeyframeRule): 31 (WebCore::CSSParser::parseValue): 32 (WebCore::CSSParser::parseSelector): 33 (WebCore::CSSParser::completeURL): 34 (WebCore::CSSParser::parseContent): 35 (WebCore::CSSParser::parseAttr): 36 (WebCore::CSSParser::parseFillImage): 37 (WebCore::CSSParser::parseFontFaceSrcURI): 38 (WebCore::CSSParser::parseFontFaceSrc): 39 (WebCore::CSSParser::parseBorderImage): 40 (WebCore::CSSParser::parseImageSet): 41 (WebCore::CSSParser::parseCustomFilter): 42 (WebCore::CSSParser::parseFilter): 43 (WebCore::CSSParser::cssRegionsEnabled): 44 (WebCore::CSSParser::parseFlowThread): 45 (WebCore::CSSParser::createMediaRule): 46 (WebCore::CSSParser::createStyleRule): 47 (WebCore::CSSParser::createFontFaceRule): 48 (WebCore::CSSParser::createPageRule): 49 (WebCore::CSSParser::createKeyframe): 50 * css/CSSParser.h: 51 (CSSParser): 52 (WebCore::CSSParser::inStrictMode): 53 (WebCore::CSSParser::inQuirksMode): 54 (WebCore::CSSParser::validUnit): 55 * css/CSSParserMode.h: 56 (WebCore): 57 (CSSParserContext): 58 * css/CSSRule.h: 59 (WebCore::CSSRule::parserContext): 60 (CSSRule): 61 * css/CSSStyleRule.cpp: 62 (WebCore::CSSStyleRule::setSelectorText): 63 * css/CSSStyleSheet.cpp: 64 (WebCore::StyleSheetInternal::StyleSheetInternal): 65 (WebCore::StyleSheetInternal::parseString): 66 (WebCore::StyleSheetInternal::parseStringAtLine): 67 (WebCore): 68 (WebCore::StyleSheetInternal::updateBaseURL): 69 (WebCore::StyleSheetInternal::completeURL): 70 (WebCore::CSSStyleSheet::insertRule): 71 * css/CSSStyleSheet.h: 72 (StyleSheetInternal): 73 (WebCore::StyleSheetInternal::parserContext): 74 (WebCore::StyleSheetInternal::charset): 75 (WebCore::StyleSheetInternal::setFinalURL): 76 (WebCore::StyleSheetInternal::baseURL): 77 * css/CSSValuePool.cpp: 78 * css/StylePropertySet.cpp: 79 (WebCore::StylePropertySet::parseDeclaration): 80 * css/WebKitCSSKeyframesRule.cpp: 81 (WebCore::WebKitCSSKeyframesRule::insertRule): 82 * dom/Document.cpp: 83 (WebCore::Document::webkitGetFlowByName): 84 (WebCore::Document::pageUserSheet): 85 (WebCore::Document::pageGroupUserSheets): 86 * dom/Element.cpp: 87 (WebCore::Element::webkitMatchesSelector): 88 * dom/Node.cpp: 89 (WebCore::Node::querySelector): 90 (WebCore::Node::querySelectorAll): 91 * dom/ProcessingInstruction.cpp: 92 (WebCore::ProcessingInstruction::parseStyleSheet): 93 * dom/StyleElement.cpp: 94 (WebCore::StyleElement::createSheet): 95 * html/HTMLLinkElement.cpp: 96 (WebCore::HTMLLinkElement::setCSSStyleSheet): 97 * html/shadow/ContentSelectorQuery.cpp: 98 (WebCore::ContentSelectorQuery::ContentSelectorQuery): 99 * inspector/InspectorStyleSheet.cpp: 100 (WebCore::InspectorStyle::setPropertyText): 101 (WebCore::InspectorStyleSheet::reparseStyleSheet): 102 (WebCore::InspectorStyleSheet::ensureSourceData): 103 (WebCore::InspectorStyleSheetForInlineStyle::getStyleAttributeRanges): 104 1 105 2012-04-15 Noel Gordon <noel.gordon@gmail.com> 2 106 -
trunk/Source/WebCore/css/CSSGrammar.y
r114168 r114217 1002 1002 CSSParserString& str = $1; 1003 1003 CSSParser* p = static_cast<CSSParser*>(parser); 1004 Document* doc = p->findDocument(); 1005 if (doc && doc->isHTMLDocument()) 1004 if (p->m_context.isHTMLDocument) 1006 1005 str.lower(); 1007 1006 $$ = str; … … 1034 1033 $$ = p->createFloatingSelector(); 1035 1034 $$->setMatch(CSSSelector::Id); 1036 if (p->m_c ssParserMode == CSSQuirksMode)1035 if (p->m_context.mode == CSSQuirksMode) 1037 1036 $1.lower(); 1038 1037 $$->setValue($1); … … 1045 1044 $$ = p->createFloatingSelector(); 1046 1045 $$->setMatch(CSSSelector::Id); 1047 if (p->m_c ssParserMode == CSSQuirksMode)1046 if (p->m_context.mode == CSSQuirksMode) 1048 1047 $1.lower(); 1049 1048 $$->setValue($1); … … 1060 1059 $$ = p->createFloatingSelector(); 1061 1060 $$->setMatch(CSSSelector::Class); 1062 if (p->m_c ssParserMode == CSSQuirksMode)1061 if (p->m_context.mode == CSSQuirksMode) 1063 1062 $2.lower(); 1064 1063 $$->setValue($2); … … 1070 1069 CSSParserString& str = $1; 1071 1070 CSSParser* p = static_cast<CSSParser*>(parser); 1072 Document* doc = p->findDocument(); 1073 if (doc && doc->isHTMLDocument()) 1071 if (p->m_context.isHTMLDocument) 1074 1072 str.lower(); 1075 1073 $$ = str; -
trunk/Source/WebCore/css/CSSImportRule.cpp
r114006 r114217 68 68 bool crossOriginCSS = false; 69 69 bool validMIMEType = false; 70 CSSParserMode cssParserMode = m_parentStyleSheet ? m_parentStyleSheet-> cssParserMode(): CSSStrictMode;70 CSSParserMode cssParserMode = m_parentStyleSheet ? m_parentStyleSheet->parserContext().mode : CSSStrictMode; 71 71 bool enforceMIMEType = isStrictParserMode(cssParserMode); 72 72 Document* document = m_parentStyleSheet ? m_parentStyleSheet->findDocument() : 0; … … 82 82 83 83 String sheetText = sheet->sheetText(enforceMIMEType, &validMIMEType); 84 m_styleSheet->parseString(sheetText , cssParserMode);84 m_styleSheet->parseString(sheetText); 85 85 86 86 if (!document || !document->securityOrigin()->canRequest(baseURL)) -
trunk/Source/WebCore/css/CSSMediaRule.cpp
r113922 r114217 59 59 } 60 60 61 CSSParser parser(parserContext()); 61 62 CSSStyleSheet* styleSheet = parentStyleSheet(); 62 CSSParser parser(styleSheet ? styleSheet->internal()->cssParserMode() : CSSStrictMode);63 63 RefPtr<StyleRuleBase> newRule = parser.parseRule(styleSheet ? styleSheet->internal() : 0, ruleString); 64 64 if (!newRule) { -
trunk/Source/WebCore/css/CSSPageRule.cpp
r112923 r114217 72 72 return; 73 73 74 CSSParser p ;74 CSSParser parser(parserContext()); 75 75 CSSSelectorList selectorList; 76 p .parseSelector(selectorText, doc, selectorList);76 parser.parseSelector(selectorText, selectorList); 77 77 if (!selectorList.first()) 78 78 return; -
trunk/Source/WebCore/css/CSSParser.cpp
r114020 r114217 2 2 * Copyright (C) 2003 Lars Knoll (knoll@kde.org) 3 3 * Copyright (C) 2005 Allan Sandfeld Jensen (kde@carewolf.com) 4 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserved.4 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All rights reserved. 5 5 * Copyright (C) 2007 Nicholas Shanks <webkit@nickshanks.com> 6 6 * Copyright (C) 2008 Eric Seidel <eric@webkit.org> … … 78 78 #include "StylePropertyShorthand.h" 79 79 #include "StyleRule.h" 80 #include "TextEncoding.h" 80 81 #if ENABLE(CSS_FILTERS) 81 82 #include "WebKitCSSFilterValue.h" … … 174 175 return false; 175 176 } 176 177 CSSParser::CSSParser(CSSParserMode cssParserMode) 178 : m_cssParserMode(cssParserMode) 177 178 const CSSParserContext& strictCSSParserContext() 179 { 180 DEFINE_STATIC_LOCAL(CSSParserContext, strictContext, (CSSStrictMode)); 181 return strictContext; 182 } 183 184 CSSParserContext::CSSParserContext(CSSParserMode mode) 185 : mode(mode) 186 , isHTMLDocument(false) 187 , isCSSCustomFilterEnabled(false) 188 , isCSSRegionsEnabled(false) 189 { 190 } 191 192 CSSParserContext::CSSParserContext(Document* document) 193 : baseURL(document->baseURL()) 194 , mode(document->inQuirksMode() ? CSSQuirksMode : CSSStrictMode) 195 , isHTMLDocument(document->isHTMLDocument()) 196 , isCSSCustomFilterEnabled(document->settings() ? document->settings()->isCSSCustomFilterEnabled() : false) 197 , isCSSRegionsEnabled(document->cssRegionsEnabled()) 198 { 199 } 200 201 CSSParser::CSSParser(const CSSParserContext& context) 202 : m_context(context) 179 203 , m_important(false) 180 204 , m_id(CSSPropertyInvalid) … … 281 305 } 282 306 283 PassRefPtr<StyleKeyframe> CSSParser::parseKeyframeRule(StyleSheetInternal* sheet, const String &string)307 PassRefPtr<StyleKeyframe> CSSParser::parseKeyframeRule(StyleSheetInternal* sheet, const String& string) 284 308 { 285 309 setStyleSheet(sheet); … … 933 957 if (parseKeywordValue(declaration, propertyID, string, important)) 934 958 return true; 935 CSSParser parser(cssParserMode); 959 960 CSSParserContext context(cssParserMode); 961 if (contextStyleSheet) { 962 context = contextStyleSheet->parserContext(); 963 context.mode = cssParserMode; 964 } 965 CSSParser parser(context); 936 966 return parser.parseValue(declaration, propertyID, string, important, contextStyleSheet); 937 967 } … … 1013 1043 } 1014 1044 1015 void CSSParser::parseSelector(const String& string, Document* doc, CSSSelectorList& selectorList) 1016 { 1017 RefPtr<StyleSheetInternal> dummyStyleSheet = StyleSheetInternal::create(doc); 1018 1045 void CSSParser::parseSelector(const String& string, CSSSelectorList& selectorList) 1046 { 1047 RefPtr<StyleSheetInternal> dummyStyleSheet = StyleSheetInternal::create(); 1019 1048 setStyleSheet(dummyStyleSheet.get()); 1020 1049 m_selectorListForParseSelector = &selectorList; … … 1112 1141 } 1113 1142 1114 Document* CSSParser::findDocument() const 1115 { 1116 if (!m_styleSheet) 1117 return 0; 1118 return m_styleSheet->findDocument(); 1143 KURL CSSParser::completeURL(const CSSParserContext& context, const String& url) 1144 { 1145 if (url.isNull()) 1146 return KURL(); 1147 if (context.charset.isEmpty()) 1148 return KURL(context.baseURL, url); 1149 return KURL(context.baseURL, url, context.charset); 1150 } 1151 1152 KURL CSSParser::completeURL(const String& url) const 1153 { 1154 return completeURL(m_context, url); 1119 1155 } 1120 1156 … … 1576 1612 hotSpot = IntPoint(coords[0], coords[1]); 1577 1613 1578 if (!uri.isNull() && m_styleSheet) { 1579 // FIXME: The completeURL call should be done when using the CSSCursorImageValue, 1580 // not when creating it. 1581 list->append(CSSCursorImageValue::create(m_styleSheet->completeURL(uri), hotSpot)); 1582 } 1614 if (!uri.isNull()) 1615 list->append(CSSCursorImageValue::create(completeURL(uri), hotSpot)); 1583 1616 1584 1617 if ((inStrictMode() && !value) || (value && !(value->unit == CSSParserValue::Operator && value->iValue == ','))) … … 1661 1694 m_valueList->next(); 1662 1695 } else if (value->unit == CSSPrimitiveValue::CSS_URI) { 1663 if (m_styleSheet) { 1664 // FIXME: The completeURL call should be done when using the CSSImageValue, 1665 // not when creating it. 1666 parsedValue = CSSImageValue::create(m_styleSheet->completeURL(value->string)); 1667 m_valueList->next(); 1668 } 1696 parsedValue = CSSImageValue::create(completeURL(value->string)); 1697 m_valueList->next(); 1669 1698 } else if (isGeneratedImageValue(value)) { 1670 1699 if (parseGeneratedImage(m_valueList.get(), parsedValue)) … … 3025 3054 while (CSSParserValue* val = m_valueList->current()) { 3026 3055 RefPtr<CSSValue> parsedValue; 3027 if (val->unit == CSSPrimitiveValue::CSS_URI && m_styleSheet) {3056 if (val->unit == CSSPrimitiveValue::CSS_URI) { 3028 3057 // url 3029 // FIXME: The completeURL call should be done when using the CSSImageValue, 3030 // not when creating it. 3031 parsedValue = CSSImageValue::create(m_styleSheet->completeURL(val->string)); 3058 parsedValue = CSSImageValue::create(completeURL(val->string)); 3032 3059 } else if (val->unit == CSSParserValue::Function) { 3033 3060 // attr(X) | counter(X [,Y]) | counters(X, Y, [,Z]) | -webkit-gradient(...) … … 3111 3138 return 0; 3112 3139 3113 Document* document = findDocument(); 3114 if (document && document->isHTMLDocument()) 3140 if (m_context.isHTMLDocument) 3115 3141 attrName = attrName.lower(); 3116 3142 … … 3134 3160 } 3135 3161 if (valueList->current()->unit == CSSPrimitiveValue::CSS_URI) { 3136 // FIXME: The completeURL call should be done when using the CSSImageValue, 3137 // not when creating it. 3138 if (m_styleSheet) 3139 value = CSSImageValue::create(m_styleSheet->completeURL(valueList->current()->string)); 3162 value = CSSImageValue::create(completeURL(valueList->current()->string)); 3140 3163 return true; 3141 3164 } … … 4619 4642 bool CSSParser::parseFontFaceSrcURI(CSSValueList* valueList) 4620 4643 { 4621 // FIXME: The completeURL call should be done when using the CSSFontFaceSrcValue, 4622 // not when creating it. 4623 RefPtr<CSSFontFaceSrcValue> uriValue(CSSFontFaceSrcValue::create(m_styleSheet->completeURL(m_valueList->current()->string))); 4644 RefPtr<CSSFontFaceSrcValue> uriValue(CSSFontFaceSrcValue::create(completeURL(m_valueList->current()->string))); 4624 4645 4625 4646 CSSParserValue* value = m_valueList->next(); … … 4683 4704 4684 4705 while (CSSParserValue* value = m_valueList->current()) { 4685 if (value->unit == CSSPrimitiveValue::CSS_URI && m_styleSheet) {4706 if (value->unit == CSSPrimitiveValue::CSS_URI) { 4686 4707 if (!parseFontFaceSrcURI(values.get())) 4687 4708 return false; … … 5669 5690 5670 5691 if (!context.canAdvance() && context.allowImage()) { 5671 if (val->unit == CSSPrimitiveValue::CSS_URI && m_styleSheet) { 5672 // FIXME: The completeURL call should be done when using the CSSImageValue, 5673 // not when creating it. 5674 context.commitImage(CSSImageValue::create(m_styleSheet->completeURL(val->string))); 5675 } else if (isGeneratedImageValue(val)) { 5692 if (val->unit == CSSPrimitiveValue::CSS_URI) 5693 context.commitImage(CSSImageValue::create(completeURL(val->string))); 5694 else if (isGeneratedImageValue(val)) { 5676 5695 RefPtr<CSSValue> value; 5677 5696 if (parseGeneratedImage(m_valueList.get(), value)) … … 6738 6757 return 0; 6739 6758 6740 RefPtr<CSSImageValue> image = CSSImageValue::create( m_styleSheet->completeURL(arg->string));6759 RefPtr<CSSImageValue> image = CSSImageValue::create(completeURL(arg->string)); 6741 6760 imageSet->append(image); 6742 6761 … … 7021 7040 value = cssValuePool().createIdentifierValue(CSSValueNone); 7022 7041 else if (arg->unit == CSSPrimitiveValue::CSS_URI) { 7023 KURL shaderURL = m_styleSheet ? m_styleSheet->completeURL(arg->string) : KURL();7042 KURL shaderURL = completeURL(arg->string); 7024 7043 value = WebKitCSSShaderValue::create(shaderURL.string()); 7025 7044 hadAtLeastOneCustomShader = true; … … 7241 7260 if (filterType == WebKitCSSFilterValue::CustomFilterOperation) { 7242 7261 // Make sure parsing fails if custom filters are disabled. 7243 if (Document* document = findDocument()) { 7244 Settings* settings = document->settings(); 7245 if (!settings || !settings->isCSSCustomFilterEnabled()) 7246 return 0; 7247 } 7262 if (!m_context.isCSSCustomFilterEnabled) 7263 return 0; 7248 7264 7249 7265 RefPtr<WebKitCSSFilterValue> filterValue = parseCustomFilter(value); … … 7281 7297 bool CSSParser::cssRegionsEnabled() const 7282 7298 { 7283 if (Document* document = findDocument()) 7284 return document->cssRegionsEnabled(); 7285 7286 return false; 7287 } 7288 7289 bool CSSParser::parseFlowThread(const String& flowName, Document* doc) 7290 { 7291 ASSERT(doc); 7292 ASSERT(doc->cssRegionsEnabled()); 7293 7294 RefPtr<StyleSheetInternal> dummyStyleSheet = StyleSheetInternal::create(doc); 7299 return m_context.isCSSRegionsEnabled; 7300 } 7301 7302 bool CSSParser::parseFlowThread(const String& flowName) 7303 { 7304 RefPtr<StyleSheetInternal> dummyStyleSheet = StyleSheetInternal::create(); 7295 7305 setStyleSheet(dummyStyleSheet.get()); 7296 7306 … … 9022 9032 StyleRuleBase* CSSParser::createMediaRule(MediaQuerySet* media, RuleList* rules) 9023 9033 { 9024 if (!media || !rules || !m_styleSheet)9034 if (!media || !rules) 9025 9035 return 0; 9026 9036 m_allowImportRules = m_allowNamespaceDeclarations = false; … … 9059 9069 if (m_hasFontFaceOnlyValues) 9060 9070 deleteFontFaceOnlyValues(); 9061 rule->setProperties(StylePropertySet::create(m_parsedProperties.data(), m_parsedProperties.size(), m_c ssParserMode));9071 rule->setProperties(StylePropertySet::create(m_parsedProperties.data(), m_parsedProperties.size(), m_context.mode)); 9062 9072 result = rule.get(); 9063 9073 m_parsedRules.append(rule.release()); … … 9095 9105 } 9096 9106 RefPtr<StyleRuleFontFace> rule = StyleRuleFontFace::create(); 9097 rule->setProperties(StylePropertySet::create(m_parsedProperties.data(), m_parsedProperties.size(), m_c ssParserMode));9107 rule->setProperties(StylePropertySet::create(m_parsedProperties.data(), m_parsedProperties.size(), m_context.mode)); 9098 9108 clearProperties(); 9099 9109 StyleRuleFontFace* result = rule.get(); … … 9166 9176 selectorVector.append(pageSelector); 9167 9177 rule->parserAdoptSelectorVector(selectorVector); 9168 rule->setProperties(StylePropertySet::create(m_parsedProperties.data(), m_parsedProperties.size(), m_c ssParserMode));9178 rule->setProperties(StylePropertySet::create(m_parsedProperties.data(), m_parsedProperties.size(), m_context.mode)); 9169 9179 pageRule = rule.get(); 9170 9180 m_parsedRules.append(rule.release()); … … 9244 9254 RefPtr<StyleKeyframe> keyframe = StyleKeyframe::create(); 9245 9255 keyframe->setKeyText(keyString); 9246 keyframe->setProperties(StylePropertySet::create(m_parsedProperties.data(), m_parsedProperties.size(), m_c ssParserMode));9256 keyframe->setProperties(StylePropertySet::create(m_parsedProperties.data(), m_parsedProperties.size(), m_context.mode)); 9247 9257 9248 9258 clearProperties(); -
trunk/Source/WebCore/css/CSSParser.h
r113922 r114217 67 67 class CSSParser { 68 68 public: 69 CSSParser( CSSParserMode = CSSStrictMode);69 CSSParser(const CSSParserContext&); 70 70 71 71 ~CSSParser(); … … 82 82 PassOwnPtr<MediaQuery> parseMediaQuery(const String&); 83 83 84 Document* findDocument() const;85 86 84 void addProperty(CSSPropertyID, PassRefPtr<CSSValue>, bool important, bool implicit = false); 87 85 void rollbackLastProperties(int num); … … 156 154 PassRefPtr<CSSPrimitiveValue> parseColor(CSSParserValue* = 0); 157 155 bool parseColorFromValue(CSSParserValue*, RGBA32&); 158 void parseSelector(const String&, Document* doc,CSSSelectorList&);156 void parseSelector(const String&, CSSSelectorList&); 159 157 160 158 static bool fastParseColor(RGBA32&, const String&, bool strict); … … 222 220 223 221 bool cssRegionsEnabled() const; 224 bool parseFlowThread(const String& flowName , Document*);222 bool parseFlowThread(const String& flowName); 225 223 bool parseFlowThread(CSSPropertyID, bool important); 226 224 bool parseRegionThread(CSSPropertyID, bool important); … … 284 282 void clearProperties(); 285 283 286 CSSParserMode m_cssParserMode; 284 CSSParserContext m_context; 285 287 286 bool m_important; 288 287 CSSPropertyID m_id; … … 327 326 PassRefPtr<CSSPrimitiveValue> createPrimitiveNumericValue(CSSParserValue*); 328 327 PassRefPtr<CSSPrimitiveValue> createPrimitiveStringValue(CSSParserValue*); 329 328 329 static KURL completeURL(const CSSParserContext&, const String& url); 330 330 331 private: 331 332 inline bool isIdentifierStart(); … … 348 349 void setStyleSheet(StyleSheetInternal*); 349 350 350 inline bool inStrictMode() const { return m_cssParserMode == CSSStrictMode || m_cssParserMode == SVGAttributeMode; } 351 inline bool inQuirksMode() const { return m_cssParserMode == CSSQuirksMode; } 351 inline bool inStrictMode() const { return m_context.mode == CSSStrictMode || m_context.mode == SVGAttributeMode; } 352 inline bool inQuirksMode() const { return m_context.mode == CSSQuirksMode; } 353 354 KURL completeURL(const String& url) const; 352 355 353 356 void recheckAtKeyword(const UChar* str, int len); … … 441 444 bool shouldAcceptUnitLessValues(CSSParserValue*, Units, CSSParserMode); 442 445 443 inline bool validUnit(CSSParserValue* value, Units unitflags) { return validUnit(value, unitflags, m_c ssParserMode); }446 inline bool validUnit(CSSParserValue* value, Units unitflags) { return validUnit(value, unitflags, m_context.mode); } 444 447 bool validUnit(CSSParserValue*, Units, CSSParserMode); 445 448 -
trunk/Source/WebCore/css/CSSParserMode.h
r112769 r114217 1 1 /* 2 2 * Copyright (C) 2012 Adobe Systems Incorporated. All rights reserved. 3 * Copyright (C) 2012 Apple Inc. All rights reserved. 3 4 * 4 5 * Redistribution and use in source and binary forms, with or without … … 31 32 #define CSSParserMode_h 32 33 34 #include "KURL.h" 35 36 namespace WebCore { 37 38 class Document; 39 33 40 enum CSSParserMode { 34 41 CSSQuirksMode, … … 48 55 } 49 56 57 struct CSSParserContext { 58 CSSParserContext(CSSParserMode); 59 CSSParserContext(Document*); 60 61 KURL baseURL; 62 String charset; 63 CSSParserMode mode; 64 bool isHTMLDocument; 65 bool isCSSCustomFilterEnabled; 66 bool isCSSRegionsEnabled; 67 }; 68 69 const CSSParserContext& strictCSSParserContext(); 70 71 }; 72 50 73 #endif // CSSParserMode_h -
trunk/Source/WebCore/css/CSSRule.h
r113922 r114217 111 111 void setHasCachedSelectorText(bool hasCachedSelectorText) const { m_hasCachedSelectorText = hasCachedSelectorText; } 112 112 113 const CSSParserContext& parserContext() const 114 { 115 CSSStyleSheet* styleSheet = parentStyleSheet(); 116 return styleSheet ? styleSheet->internal()->parserContext() : strictCSSParserContext(); 117 } 118 113 119 private: 114 120 mutable unsigned m_hasCachedSelectorText : 1; -
trunk/Source/WebCore/css/CSSStyleRule.cpp
r113099 r114217 98 98 return; 99 99 100 CSSParser p ;100 CSSParser p(parserContext()); 101 101 CSSSelectorList selectorList; 102 p.parseSelector(selectorText, doc,selectorList);102 p.parseSelector(selectorText, selectorList); 103 103 if (!selectorList.first()) 104 104 return; -
trunk/Source/WebCore/css/CSSStyleSheet.cpp
r114168 r114217 39 39 #include "StylePropertySet.h" 40 40 #include "StyleRule.h" 41 #include "TextEncoding.h"42 41 #include <wtf/Deque.h> 43 42 … … 80 79 , m_originalURL(originalURL) 81 80 , m_finalURL(finalURL) 82 , m_charset(charset)83 81 , m_loadCompleted(false) 84 , m_cssParserMode(CSSQuirksMode)85 82 , m_isUserStyleSheet(false) 86 83 , m_hasSyntacticallyValidCSSHeader(true) 87 84 , m_didLoadErrorOccur(false) 88 85 , m_usesRemUnits(false) 86 , m_parserContext(parentNode->document()) 89 87 { 90 88 ASSERT(isAcceptableCSSStyleSheetParent(parentNode)); 89 90 updateBaseURL(); 91 m_parserContext.charset = charset; 91 92 } 92 93 … … 96 97 , m_originalURL(originalURL) 97 98 , m_finalURL(finalURL) 98 , m_charset(charset)99 99 , m_loadCompleted(false) 100 , m_cssParserMode((ownerRule && ownerRule->parentStyleSheet()) ? ownerRule->parentStyleSheet()->cssParserMode() : CSSStrictMode)101 100 , m_hasSyntacticallyValidCSSHeader(true) 102 101 , m_didLoadErrorOccur(false) 103 102 , m_usesRemUnits(false) 103 , m_parserContext((ownerRule && ownerRule->parentStyleSheet()) ? ownerRule->parentStyleSheet()->parserContext() : CSSStrictMode) 104 104 { 105 105 StyleSheetInternal* parentSheet = ownerRule ? ownerRule->parentStyleSheet() : 0; 106 m_isUserStyleSheet = parentSheet ? parentSheet->isUserStyleSheet() : false; 106 m_isUserStyleSheet = parentSheet && parentSheet->isUserStyleSheet(); 107 108 updateBaseURL(); 109 m_parserContext.charset = charset; 107 110 } 108 111 … … 264 267 } 265 268 266 bool StyleSheetInternal::parseString(const String &string, CSSParserMode cssParserMode) 267 { 268 return parseStringAtLine(string, cssParserMode, 0); 269 } 270 271 bool StyleSheetInternal::parseStringAtLine(const String& string, CSSParserMode cssParserMode, int startLineNumber) 272 { 273 setCSSParserMode(cssParserMode); 274 CSSParser p(cssParserMode); 269 bool StyleSheetInternal::parseString(const String &string) 270 { 271 return parseStringAtLine(string, 0); 272 } 273 274 bool StyleSheetInternal::parseStringAtLine(const String& string, int startLineNumber) 275 { 276 CSSParser p(parserContext()); 275 277 p.parseSheet(this, string, startLineNumber); 276 278 return true; … … 354 356 documentToUpdate->styleSelectorChanged(DeferRecalcStyle); 355 357 } 356 357 KURL StyleSheetInternal::baseURL() const 358 { 359 if (!m_finalURL.isNull()) 360 return m_finalURL; 361 if (StyleSheetInternal* parentSheet = parentStyleSheet()) 362 return parentSheet->baseURL(); 363 if (!m_ownerNode) 364 return KURL(); 365 return m_ownerNode->document()->baseURL(); 358 359 void StyleSheetInternal::updateBaseURL() 360 { 361 if (!m_finalURL.isNull()) { 362 m_parserContext.baseURL = m_finalURL; 363 return; 364 } 365 if (StyleSheetInternal* parentSheet = parentStyleSheet()) { 366 m_parserContext.baseURL = parentSheet->baseURL(); 367 return; 368 } 369 if (m_ownerNode) { 370 m_parserContext.baseURL = m_ownerNode->document()->baseURL(); 371 return; 372 } 373 m_parserContext.baseURL = KURL(); 366 374 } 367 375 368 376 KURL StyleSheetInternal::completeURL(const String& url) const 369 377 { 370 // Always return a null URL when passed a null string. 371 // FIXME: Should we change the KURL constructor to have this behavior? 372 // See also Document::completeURL(const String&) 373 if (url.isNull()) 374 return KURL(); 375 if (m_charset.isEmpty()) 376 return KURL(baseURL(), url); 377 const TextEncoding encoding = TextEncoding(m_charset); 378 return KURL(baseURL(), url, encoding); 378 return CSSParser::completeURL(m_parserContext, url); 379 379 } 380 380 … … 483 483 return 0; 484 484 } 485 CSSParser p(m_internal-> cssParserMode());485 CSSParser p(m_internal->parserContext()); 486 486 RefPtr<StyleRuleBase> rule = p.parseRule(m_internal.get(), ruleString); 487 487 -
trunk/Source/WebCore/css/CSSStyleSheet.h
r114168 r114217 67 67 68 68 ~StyleSheetInternal(); 69 70 const CSSParserContext& parserContext() const { return m_parserContext; } 69 71 70 72 void addNamespace(CSSParser*, const AtomicString& prefix, const AtomicString& uri); … … 73 75 void styleSheetChanged(); 74 76 75 bool parseString(const String& , CSSParserMode = CSSStrictMode);76 77 bool parseStringAtLine(const String&, CSSParserMode,int startLineNumber);77 bool parseString(const String&); 78 79 bool parseStringAtLine(const String&, int startLineNumber); 78 80 79 81 bool isLoading() const; … … 85 87 Document* findDocument(); 86 88 87 const String& charset() const { return m_ charset; }89 const String& charset() const { return m_parserContext.charset; } 88 90 89 91 bool loadCompleted() const { return m_loadCompleted; } … … 91 93 KURL completeURL(const String& url) const; 92 94 void addSubresourceStyleURLs(ListHashSet<KURL>&); 93 94 void setCSSParserMode(CSSParserMode cssParserMode) { m_cssParserMode = cssParserMode; }95 CSSParserMode cssParserMode() const { return m_cssParserMode; }96 95 97 96 void setIsUserStyleSheet(bool b) { m_isUserStyleSheet = b; } … … 128 127 void setTitle(const String& title) { m_title = title; } 129 128 130 void setFinalURL(const KURL& finalURL) { m_finalURL = finalURL; }129 void setFinalURL(const KURL& finalURL) { m_finalURL = finalURL; updateBaseURL(); } 131 130 const KURL& finalURL() const { return m_finalURL; } 132 KURL baseURL() const;131 const KURL& baseURL() const { return m_parserContext.baseURL; } 133 132 134 133 unsigned ruleCount() const; … … 147 146 void clearCharsetRule(); 148 147 bool hasCharsetRule() const { return !m_encodingFromCharsetRule.isNull(); } 148 149 void updateBaseURL(); 149 150 150 151 Node* m_ownerNode; … … 159 160 Vector<RefPtr<StyleRuleBase> > m_childRules; 160 161 OwnPtr<CSSNamespace> m_namespaces; 161 String m_charset;162 162 RefPtr<MediaQuerySet> m_mediaQueries; 163 163 164 164 bool m_loadCompleted : 1; 165 CSSParserMode m_cssParserMode;166 165 bool m_isUserStyleSheet : 1; 167 166 bool m_hasSyntacticallyValidCSSHeader : 1; 168 167 bool m_didLoadErrorOccur : 1; 169 168 bool m_usesRemUnits : 1; 169 170 CSSParserContext m_parserContext; 170 171 }; 171 172 -
trunk/Source/WebCore/css/CSSValuePool.cpp
r113922 r114217 28 28 29 29 #include "CSSParser.h" 30 #include "CSSStyleSheet.h" 30 31 #include "CSSValueKeywords.h" 31 32 #include "CSSValueList.h" -
trunk/Source/WebCore/css/StylePropertySet.cpp
r114207 r114217 537 537 { 538 538 m_properties.clear(); 539 CSSParser parser(cssParserMode()); 539 540 CSSParserContext context(cssParserMode()); 541 if (contextStyleSheet) { 542 context = contextStyleSheet->parserContext(); 543 context.mode = cssParserMode(); 544 } 545 CSSParser parser(context); 540 546 parser.parseDeclaration(this, styleDeclaration, 0, contextStyleSheet); 541 547 } -
trunk/Source/WebCore/css/WebKitCSSKeyframesRule.cpp
r113922 r114217 110 110 ASSERT(m_childRuleCSSOMWrappers.size() == m_keyframesRule->keyframes().size()); 111 111 112 CSSParser parser(parserContext()); 112 113 CSSStyleSheet* styleSheet = parentStyleSheet(); 113 CSSParser parser(styleSheet ? styleSheet->internal()->cssParserMode() : CSSStrictMode);114 114 RefPtr<StyleKeyframe> keyframe = parser.parseKeyframeRule(styleSheet ? styleSheet->internal() : 0, ruleText); 115 115 if (!keyframe) -
trunk/Source/WebCore/dom/Document.cpp
r114189 r114217 1088 1088 1089 1089 // Make a slower check for invalid flow name. 1090 CSSParser parser( CSSStrictMode);1091 if (!parser.parseFlowThread(flowName , this))1090 CSSParser parser(document()); 1091 if (!parser.parseFlowThread(flowName)) 1092 1092 return 0; 1093 1093 } … … 2717 2717 m_pageUserSheet = StyleSheetInternal::createInline(this, settings()->userStyleSheetLocation()); 2718 2718 m_pageUserSheet->setIsUserStyleSheet(true); 2719 m_pageUserSheet->parseString(userSheetText , strictToCSSParserMode(!inQuirksMode()));2719 m_pageUserSheet->parseString(userSheetText); 2720 2720 return m_pageUserSheet.get(); 2721 2721 } … … 2763 2763 RefPtr<StyleSheetInternal> parsedSheet = StyleSheetInternal::createInline(const_cast<Document*>(this), sheet->url()); 2764 2764 parsedSheet->setIsUserStyleSheet(sheet->level() == UserStyleUserLevel); 2765 parsedSheet->parseString(sheet->source() , strictToCSSParserMode(!inQuirksMode()));2765 parsedSheet->parseString(sheet->source()); 2766 2766 if (!m_pageGroupUserSheets) 2767 2767 m_pageGroupUserSheets = adoptPtr(new Vector<RefPtr<StyleSheetInternal> >); -
trunk/Source/WebCore/dom/Element.cpp
r114189 r114217 1757 1757 return false; 1758 1758 } 1759 1760 bool strictParsing = !document()->inQuirksMode(); 1761 CSSParser p(strictToCSSParserMode(strictParsing)); 1762 1759 CSSParserContext parserContext(document()); 1760 CSSParser parser(parserContext); 1763 1761 CSSSelectorList selectorList; 1764 p .parseSelector(selector, document(), selectorList);1762 parser.parseSelector(selector, selectorList); 1765 1763 1766 1764 if (!selectorList.first()) { … … 1775 1773 } 1776 1774 1777 SelectorChecker selectorChecker(document(), strictParsing);1775 SelectorChecker selectorChecker(document(), parserContext.mode == CSSStrictMode); 1778 1776 for (CSSSelector* selector = selectorList.first(); selector; selector = CSSSelectorList::next(selector)) { 1779 1777 if (selectorChecker.checkSelector(selector, this)) -
trunk/Source/WebCore/dom/Node.cpp
r113897 r114217 1671 1671 return 0; 1672 1672 } 1673 bool strictParsing = !document()->inQuirksMode(); 1674 CSSParser p(strictToCSSParserMode(strictParsing)); 1675 1673 CSSParser parser(document()); 1676 1674 CSSSelectorList querySelectorList; 1677 p .parseSelector(selectors, document(), querySelectorList);1675 parser.parseSelector(selectors, querySelectorList); 1678 1676 1679 1677 if (!querySelectorList.first() || querySelectorList.hasUnknownPseudoElements()) { … … 1698 1696 return 0; 1699 1697 } 1700 bool strictParsing = !document()->inQuirksMode(); 1701 CSSParser p(strictToCSSParserMode(strictParsing)); 1702 1698 CSSParser p(document()); 1703 1699 CSSSelectorList querySelectorList; 1704 p.parseSelector(selectors, document(),querySelectorList);1700 p.parseSelector(selectors, querySelectorList); 1705 1701 1706 1702 if (!querySelectorList.first() || querySelectorList.hasUnknownPseudoElements()) { -
trunk/Source/WebCore/dom/ProcessingInstruction.cpp
r113925 r114217 236 236 { 237 237 if (m_isCSS) 238 static_cast<CSSStyleSheet*>(m_sheet.get())->internal()->parseString(sheet , CSSStrictMode);238 static_cast<CSSStyleSheet*>(m_sheet.get())->internal()->parseString(sheet); 239 239 #if ENABLE(XSLT) 240 240 else if (m_isXSL) -
trunk/Source/WebCore/dom/StyleElement.cpp
r113922 r114217 170 170 m_loading = true; 171 171 RefPtr<StyleSheetInternal> styleSheet = StyleSheetInternal::create(e, String(), KURL(), document->inputEncoding()); 172 styleSheet->parseStringAtLine(text, st rictToCSSParserMode(!document->inQuirksMode()), startLineNumber);172 styleSheet->parseStringAtLine(text, startLineNumber); 173 173 styleSheet->setMediaQueries(mediaQueries.release()); 174 174 styleSheet->setTitle(e->title()); -
trunk/Source/WebCore/html/HTMLLinkElement.cpp
r113922 r114217 312 312 313 313 String sheetText = sheet->sheetText(enforceMIMEType, &validMIMEType); 314 styleSheet->parseString(sheetText , strictToCSSParserMode(strictParsing));314 styleSheet->parseString(sheetText); 315 315 316 316 // If we're loading a stylesheet cross-origin, and the MIME type is not -
trunk/Source/WebCore/html/shadow/ContentSelectorQuery.cpp
r112537 r114217 45 45 } 46 46 47 CSSParser parser( CSSStrictMode);48 parser.parseSelector(insertionPoint->select(), insertionPoint->document(),m_selectorList);47 CSSParser parser(insertionPoint->document()); 48 parser.parseSelector(insertionPoint->select(), m_selectorList); 49 49 50 50 m_isValidSelector = ContentSelectorQuery::validateSelectorList(); -
trunk/Source/WebCore/inspector/InspectorStyleSheet.cpp
r113922 r114217 314 314 RefPtr<StylePropertySet> tempMutableStyle = StylePropertySet::create(); 315 315 RefPtr<CSSStyleSourceData> sourceData = CSSStyleSourceData::create(); 316 CSSParser p ;316 CSSParser p(CSSStrictMode); 317 317 p.parseDeclaration(tempMutableStyle.get(), propertyText + " " + bogusPropertyName + ": none", &sourceData, m_style->parentStyleSheet()->internal()); 318 318 Vector<CSSPropertySourceData>& propertyData = sourceData->propertyData; … … 720 720 { 721 721 m_pageStyleSheet->internal()->clearRules(); 722 m_pageStyleSheet->internal()->parseString(text , m_pageStyleSheet->internal()->cssParserMode());722 m_pageStyleSheet->internal()->parseString(text); 723 723 m_pageStyleSheet->clearChildRuleCSSOMWrappers(); 724 724 m_pageStyleSheet->styleSheetChanged(); … … 1090 1090 1091 1091 RefPtr<StyleSheetInternal> newStyleSheet = StyleSheetInternal::create(); 1092 CSSParser p ;1092 CSSParser p(CSSStrictMode); 1093 1093 StyleRuleRangeMap ruleRangeMap; 1094 1094 p.parseSheet(newStyleSheet.get(), m_parsedStyleSheet->text(), 0, &ruleRangeMap); … … 1415 1415 1416 1416 RefPtr<StylePropertySet> tempDeclaration = StylePropertySet::create(); 1417 CSSParser p ;1417 CSSParser p(m_element->document()); 1418 1418 p.parseDeclaration(tempDeclaration.get(), m_styleText, result, m_element->document()->elementSheet()->internal()); 1419 1419 return true; -
trunk/Source/WebKit/chromium/src/WebDocument.cpp
r113922 r114217 181 181 RefPtr<StyleSheetInternal> parsedSheet = StyleSheetInternal::create(document.get()); 182 182 parsedSheet->setIsUserStyleSheet(level == UserStyleUserLevel); 183 parsedSheet->parseString(sourceCode , strictToCSSParserMode(!document->inQuirksMode()));183 parsedSheet->parseString(sourceCode); 184 184 document->addUserSheet(parsedSheet.release()); 185 185 }
Note: See TracChangeset
for help on using the changeset viewer.