Changeset 141733 in webkit
- Timestamp:
- Feb 3, 2013 8:53:39 PM (11 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 2 added
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/CMakeLists.txt
r141543 r141733 1029 1029 css/CSSCrossfadeValue.cpp 1030 1030 css/CSSCursorImageValue.cpp 1031 css/CSSDefaultStyleSheets.cpp 1031 1032 css/CSSFontFace.cpp 1032 1033 css/CSSFontFaceRule.cpp -
trunk/Source/WebCore/ChangeLog
r141730 r141733 1 2013-02-03 Hayato Ito <hayato@chromium.org> 2 3 Split default style-sheet statics out from StyleResolver into its own class 4 https://bugs.webkit.org/show_bug.cgi?id=107780 5 6 Reviewed by Dimitri Glazkov. 7 8 Factored static variables and logic about default style sheets out from StyleResolver into its own class 9 CSSDefaultStyleSheets. This is a following patch after r141373. 10 11 No new tests, refactoring only. 12 13 * CMakeLists.txt: 14 * GNUmakefile.list.am: 15 * Target.pri: 16 * WebCore.gypi: 17 * WebCore.xcodeproj/project.pbxproj: 18 * css/CSSAllInOne.cpp: 19 * css/CSSDefaultStyleSheets.cpp: Added. 20 (WebCore): 21 (WebCore::elementCanUseSimpleDefaultStyle): 22 (WebCore::screenEval): 23 (WebCore::printEval): 24 (WebCore::parseUASheet): 25 (WebCore::CSSDefaultStyleSheets::initDefaultStyle): 26 (WebCore::CSSDefaultStyleSheets::loadFullDefaultStyle): 27 (WebCore::CSSDefaultStyleSheets::loadSimpleDefaultStyle): 28 (WebCore::CSSDefaultStyleSheets::viewSourceStyle): 29 (WebCore::CSSDefaultStyleSheets::ensureDefaultStyleSheetsForElement): 30 * css/CSSDefaultStyleSheets.h: Added. 31 (WebCore): 32 (CSSDefaultStyleSheets): 33 * css/StyleResolver.cpp: 34 (WebCore): 35 (WebCore::StyleResolver::StyleResolver): 36 (WebCore::StyleResolver::matchUARules): 37 (WebCore::StyleResolver::styleForElement): 38 (WebCore::StyleResolver::styleForPage): 39 (WebCore::InspectorCSSOMWrappers::getWrapperForRuleInSheets): 40 (WebCore::StyleResolver::collectFeatures): 41 (WebCore::StyleResolver::reportMemoryUsage): 42 1 43 2013-02-03 Kentaro Hara <haraken@chromium.org> 2 44 -
trunk/Source/WebCore/GNUmakefile.list.am
r141720 r141733 2528 2528 Source/WebCore/css/CSSCursorImageValue.cpp \ 2529 2529 Source/WebCore/css/CSSCursorImageValue.h \ 2530 Source/WebCore/css/CSSDefaultStyleSheets.cpp \ 2531 Source/WebCore/css/CSSDefaultStyleSheets.h \ 2530 2532 Source/WebCore/css/CSSFontFace.cpp \ 2531 2533 Source/WebCore/css/CSSFontFace.h \ -
trunk/Source/WebCore/Target.pri
r141571 r141733 257 257 css/CSSCursorImageValue.cpp \ 258 258 css/CSSFontFace.cpp \ 259 css/CSSDefaultStyleSheets.cpp \ 259 260 css/CSSFontFaceRule.cpp \ 260 261 css/CSSFontFaceSrcValue.cpp \ -
trunk/Source/WebCore/WebCore.gypi
r141668 r141733 1462 1462 'css/CSSCrossfadeValue.h', 1463 1463 'css/CSSCursorImageValue.cpp', 1464 'css/CSSDefaultStyleSheets.cpp', 1465 'css/CSSDefaultStyleSheets.h', 1464 1466 'css/CSSFontFace.cpp', 1465 1467 'css/CSSFontFace.h', -
trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj
r141523 r141733 1447 1447 4A6E9FC813C17D570046A7F8 /* FontFeatureSettings.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A6E9FC613C17D570046A7F8 /* FontFeatureSettings.h */; settings = {ATTRIBUTES = (Private, ); }; }; 1448 1448 4A8C96EB0BE69032004EEFF0 /* FrameSelectionMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4A8C96EA0BE69032004EEFF0 /* FrameSelectionMac.mm */; }; 1449 4A9CC81716BB9AC600EC645A /* CSSDefaultStyleSheets.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4A9CC81516BB9AC600EC645A /* CSSDefaultStyleSheets.cpp */; }; 1450 4A9CC81816BB9AC600EC645A /* CSSDefaultStyleSheets.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A9CC81616BB9AC600EC645A /* CSSDefaultStyleSheets.h */; }; 1449 1451 4ABDFF0B14DBE385004D117D /* HTMLShadowElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4ABDFF0714DBE312004D117D /* HTMLShadowElement.cpp */; }; 1450 1452 4ABDFF0C14DBE385004D117D /* HTMLShadowElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 4ABDFF0814DBE312004D117D /* HTMLShadowElement.h */; }; … … 8814 8816 4A6E9FC613C17D570046A7F8 /* FontFeatureSettings.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; path = FontFeatureSettings.h; sourceTree = "<group>"; }; 8815 8817 4A8C96EA0BE69032004EEFF0 /* FrameSelectionMac.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; name = FrameSelectionMac.mm; path = mac/FrameSelectionMac.mm; sourceTree = "<group>"; }; 8818 4A9CC81516BB9AC600EC645A /* CSSDefaultStyleSheets.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CSSDefaultStyleSheets.cpp; sourceTree = "<group>"; }; 8819 4A9CC81616BB9AC600EC645A /* CSSDefaultStyleSheets.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CSSDefaultStyleSheets.h; sourceTree = "<group>"; }; 8816 8820 4ABDFF0714DBE312004D117D /* HTMLShadowElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HTMLShadowElement.cpp; sourceTree = "<group>"; }; 8817 8821 4ABDFF0814DBE312004D117D /* HTMLShadowElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTMLShadowElement.h; sourceTree = "<group>"; }; … … 21703 21707 AA0978ED0ABAA6E100874480 /* CSSCursorImageValue.cpp */, 21704 21708 AA0978EE0ABAA6E100874480 /* CSSCursorImageValue.h */, 21709 4A9CC81516BB9AC600EC645A /* CSSDefaultStyleSheets.cpp */, 21710 4A9CC81616BB9AC600EC645A /* CSSDefaultStyleSheets.h */, 21705 21711 BC64B4CD0CB4298A005F2B62 /* CSSFontFace.cpp */, 21706 21712 BC64B4CE0CB4298A005F2B62 /* CSSFontFace.h */, … … 23221 23227 2D8FEBDD143E3EF70072502B /* CSSCrossfadeValue.h in Headers */, 23222 23228 AA21ECCD0ABF0FC6002B834C /* CSSCursorImageValue.h in Headers */, 23229 4A9CC81816BB9AC600EC645A /* CSSDefaultStyleSheets.h in Headers */, 23223 23230 BC64B4D60CB4298A005F2B62 /* CSSFontFace.h in Headers */, 23224 23231 A80E6CFD0A1989CA007FB8C5 /* CSSFontFaceRule.h in Headers */, … … 26882 26889 2D8FEBDC143E3EF70072502B /* CSSCrossfadeValue.cpp in Sources */, 26883 26890 AA21ECCA0ABF0FBA002B834C /* CSSCursorImageValue.cpp in Sources */, 26891 4A9CC81716BB9AC600EC645A /* CSSDefaultStyleSheets.cpp in Sources */, 26884 26892 BC64B4D50CB4298A005F2B62 /* CSSFontFace.cpp in Sources */, 26885 26893 A80E6CE70A1989CA007FB8C5 /* CSSFontFaceRule.cpp in Sources */, -
trunk/Source/WebCore/css/CSSAllInOne.cpp
r140115 r141733 35 35 #include "CSSCrossfadeValue.cpp" 36 36 #include "CSSCursorImageValue.cpp" 37 #include "CSSDefaultStyleSheets.cpp" 37 38 #include "CSSFontFace.cpp" 38 39 #include "CSSFontFaceRule.cpp" -
trunk/Source/WebCore/css/StyleResolver.cpp
r141570 r141733 34 34 #include "CSSCalculationValue.h" 35 35 #include "CSSCursorImageValue.h" 36 #include "CSSDefaultStyleSheets.h" 36 37 #include "CSSFontFaceRule.h" 37 38 #include "CSSFontSelector.h" … … 58 59 #include "CachedImage.h" 59 60 #include "CalculationValue.h" 60 #include "Chrome.h"61 #include "ChromeClient.h"62 61 #include "ContentData.h" 63 62 #include "ContextFeatures.h" … … 212 211 } 213 212 214 static RuleSet* defaultStyle;215 static RuleSet* defaultQuirksStyle;216 static RuleSet* defaultPrintStyle;217 static RuleSet* defaultViewSourceStyle;218 static StyleSheetContents* simpleDefaultStyleSheet;219 static StyleSheetContents* defaultStyleSheet;220 static StyleSheetContents* quirksStyleSheet;221 static StyleSheetContents* svgStyleSheet;222 static StyleSheetContents* mathMLStyleSheet;223 static StyleSheetContents* mediaControlsStyleSheet;224 static StyleSheetContents* fullscreenStyleSheet;225 static StyleSheetContents* plugInsStyleSheet;226 227 213 RenderStyle* StyleResolver::s_styleNotYetAvailable; 228 229 static void loadFullDefaultStyle();230 static void loadSimpleDefaultStyle();231 232 // FIXME: It would be nice to use some mechanism that guarantees this is in sync with the real UA stylesheet.233 static const char* simpleUserAgentStyleSheet = "html,body,div{display:block}head{display:none}body{margin:8px}div:focus,span:focus{outline:auto 5px -webkit-focus-ring-color}a:-webkit-any-link{color:-webkit-link;text-decoration:underline}a:-webkit-any-link:active{color:-webkit-activelink}";234 235 static inline bool elementCanUseSimpleDefaultStyle(Element* e)236 {237 return e->hasTagName(htmlTag) || e->hasTagName(headTag) || e->hasTagName(bodyTag) || e->hasTagName(divTag) || e->hasTagName(spanTag) || e->hasTagName(brTag) || e->hasTagName(aTag);238 }239 240 static const MediaQueryEvaluator& screenEval()241 {242 DEFINE_STATIC_LOCAL(const MediaQueryEvaluator, staticScreenEval, ("screen"));243 return staticScreenEval;244 }245 246 static const MediaQueryEvaluator& printEval()247 {248 DEFINE_STATIC_LOCAL(const MediaQueryEvaluator, staticPrintEval, ("print"));249 return staticPrintEval;250 }251 214 252 215 static StylePropertySet* leftToRightDeclaration() … … 300 263 Element* root = document->documentElement(); 301 264 302 if (!defaultStyle) { 303 if (!root || elementCanUseSimpleDefaultStyle(root)) 304 loadSimpleDefaultStyle(); 305 else 306 loadFullDefaultStyle(); 307 } 265 CSSDefaultStyleSheets::initDefaultStyle(root); 308 266 309 267 // construct document root element default style. this is needed … … 485 443 486 444 m_matchedPropertiesCacheAdditionsSinceLastSweep = 0; 487 }488 489 static StyleSheetContents* parseUASheet(const String& str)490 {491 StyleSheetContents* sheet = StyleSheetContents::create().leakRef(); // leak the sheet on purpose492 sheet->parseString(str);493 return sheet;494 }495 496 static StyleSheetContents* parseUASheet(const char* characters, unsigned size)497 {498 return parseUASheet(String(characters, size));499 }500 501 static void loadFullDefaultStyle()502 {503 if (simpleDefaultStyleSheet) {504 ASSERT(defaultStyle);505 ASSERT(defaultPrintStyle == defaultStyle);506 delete defaultStyle;507 simpleDefaultStyleSheet->deref();508 defaultStyle = RuleSet::create().leakPtr();509 defaultPrintStyle = RuleSet::create().leakPtr();510 simpleDefaultStyleSheet = 0;511 } else {512 ASSERT(!defaultStyle);513 defaultStyle = RuleSet::create().leakPtr();514 defaultPrintStyle = RuleSet::create().leakPtr();515 defaultQuirksStyle = RuleSet::create().leakPtr();516 }517 518 // Strict-mode rules.519 String defaultRules = String(htmlUserAgentStyleSheet, sizeof(htmlUserAgentStyleSheet)) + RenderTheme::defaultTheme()->extraDefaultStyleSheet();520 defaultStyleSheet = parseUASheet(defaultRules);521 defaultStyle->addRulesFromSheet(defaultStyleSheet, screenEval());522 defaultPrintStyle->addRulesFromSheet(defaultStyleSheet, printEval());523 524 // Quirks-mode rules.525 String quirksRules = String(quirksUserAgentStyleSheet, sizeof(quirksUserAgentStyleSheet)) + RenderTheme::defaultTheme()->extraQuirksStyleSheet();526 quirksStyleSheet = parseUASheet(quirksRules);527 defaultQuirksStyle->addRulesFromSheet(quirksStyleSheet, screenEval());528 }529 530 static void loadSimpleDefaultStyle()531 {532 ASSERT(!defaultStyle);533 ASSERT(!simpleDefaultStyleSheet);534 535 defaultStyle = RuleSet::create().leakPtr();536 // There are no media-specific rules in the simple default style.537 defaultPrintStyle = defaultStyle;538 defaultQuirksStyle = RuleSet::create().leakPtr();539 540 simpleDefaultStyleSheet = parseUASheet(simpleUserAgentStyleSheet, strlen(simpleUserAgentStyleSheet));541 defaultStyle->addRulesFromSheet(simpleDefaultStyleSheet, screenEval());542 543 // No need to initialize quirks sheet yet as there are no quirk rules for elements allowed in simple default style.544 }545 546 static RuleSet* viewSourceStyle()547 {548 if (!defaultViewSourceStyle) {549 defaultViewSourceStyle = RuleSet::create().leakPtr();550 defaultViewSourceStyle->addRulesFromSheet(parseUASheet(sourceUserAgentStyleSheet, sizeof(sourceUserAgentStyleSheet)), screenEval());551 }552 return defaultViewSourceStyle;553 }554 555 static void ensureDefaultStyleSheetsForElement(Element* element)556 {557 if (simpleDefaultStyleSheet && !elementCanUseSimpleDefaultStyle(element))558 loadFullDefaultStyle();559 560 #if ENABLE(SVG)561 if (element->isSVGElement() && !svgStyleSheet) {562 // SVG rules.563 svgStyleSheet = parseUASheet(svgUserAgentStyleSheet, sizeof(svgUserAgentStyleSheet));564 defaultStyle->addRulesFromSheet(svgStyleSheet, screenEval());565 defaultPrintStyle->addRulesFromSheet(svgStyleSheet, printEval());566 }567 #endif568 569 #if ENABLE(MATHML)570 if (element->isMathMLElement() && !mathMLStyleSheet) {571 // MathML rules.572 mathMLStyleSheet = parseUASheet(mathmlUserAgentStyleSheet, sizeof(mathmlUserAgentStyleSheet));573 defaultStyle->addRulesFromSheet(mathMLStyleSheet, screenEval());574 defaultPrintStyle->addRulesFromSheet(mathMLStyleSheet, printEval());575 }576 #endif577 578 #if ENABLE(VIDEO)579 if (!mediaControlsStyleSheet && (element->hasTagName(videoTag) || element->hasTagName(audioTag))) {580 String mediaRules = String(mediaControlsUserAgentStyleSheet, sizeof(mediaControlsUserAgentStyleSheet)) + RenderTheme::themeForPage(element->document()->page())->extraMediaControlsStyleSheet();581 mediaControlsStyleSheet = parseUASheet(mediaRules);582 defaultStyle->addRulesFromSheet(mediaControlsStyleSheet, screenEval());583 defaultPrintStyle->addRulesFromSheet(mediaControlsStyleSheet, printEval());584 }585 #endif586 587 #if ENABLE(FULLSCREEN_API)588 if (!fullscreenStyleSheet && element->document()->webkitIsFullScreen()) {589 String fullscreenRules = String(fullscreenUserAgentStyleSheet, sizeof(fullscreenUserAgentStyleSheet)) + RenderTheme::defaultTheme()->extraFullScreenStyleSheet();590 fullscreenStyleSheet = parseUASheet(fullscreenRules);591 defaultStyle->addRulesFromSheet(fullscreenStyleSheet, screenEval());592 defaultQuirksStyle->addRulesFromSheet(fullscreenStyleSheet, screenEval());593 }594 #endif595 596 if (!plugInsStyleSheet && (element->hasTagName(objectTag) || element->hasTagName(embedTag))) {597 String plugInsRules = String(plugInsUserAgentStyleSheet, sizeof(plugInsUserAgentStyleSheet)) + RenderTheme::themeForPage(element->document()->page())->extraPlugInsStyleSheet() + element->document()->page()->chrome()->client()->plugInExtraStyleSheet();598 plugInsStyleSheet = parseUASheet(plugInsRules);599 defaultStyle->addRulesFromSheet(plugInsStyleSheet, screenEval());600 }601 602 ASSERT(defaultStyle->features().idsInRules.isEmpty());603 ASSERT(mathMLStyleSheet || defaultStyle->features().siblingRules.isEmpty());604 445 } 605 446 … … 1355 1196 1356 1197 // First we match rules from the user agent sheet. 1357 if ( simpleDefaultStyleSheet)1198 if (CSSDefaultStyleSheets::simpleDefaultStyleSheet) 1358 1199 result.isCacheable = false; 1359 1200 RuleSet* userAgentStyleSheet = m_medium->mediaTypeMatchSpecific("print") 1360 ? defaultPrintStyle :defaultStyle;1201 ? CSSDefaultStyleSheets::defaultPrintStyle : CSSDefaultStyleSheets::defaultStyle; 1361 1202 matchUARules(result, userAgentStyleSheet); 1362 1203 1363 1204 // In quirks mode, we match rules from the quirks user agent sheet. 1364 1205 if (!m_selectorChecker.strictParsing()) 1365 matchUARules(result, defaultQuirksStyle);1206 matchUARules(result, CSSDefaultStyleSheets::defaultQuirksStyle); 1366 1207 1367 1208 // If document uses view source styles (in view source mode or in xml viewer mode), then we match rules from the view source style sheet. 1368 1209 if (document()->isViewSource()) 1369 matchUARules(result, viewSourceStyle());1210 matchUARules(result, CSSDefaultStyleSheets::viewSourceStyle()); 1370 1211 } 1371 1212 … … 1605 1446 } 1606 1447 1607 ensureDefaultStyleSheetsForElement(element);1448 CSSDefaultStyleSheets::ensureDefaultStyleSheetsForElement(element); 1608 1449 1609 1450 MatchResult matchResult; … … 1801 1642 1802 1643 MatchResult result; 1803 matchPageRules(result, defaultPrintStyle, isLeft, isFirst, page);1644 matchPageRules(result, CSSDefaultStyleSheets::defaultPrintStyle, isLeft, isFirst, page); 1804 1645 matchPageRules(result, m_userStyle.get(), isLeft, isFirst, page); 1805 1646 // Only consider the global author RuleSet for @page rules, as per the HTML5 spec. … … 2744 2585 { 2745 2586 if (m_styleRuleToCSSOMWrapperMap.isEmpty()) { 2746 collectFromStyleSheetContents(m_styleSheetCSSOMWrapperSet, simpleDefaultStyleSheet);2747 collectFromStyleSheetContents(m_styleSheetCSSOMWrapperSet, defaultStyleSheet);2748 collectFromStyleSheetContents(m_styleSheetCSSOMWrapperSet, quirksStyleSheet);2749 collectFromStyleSheetContents(m_styleSheetCSSOMWrapperSet, svgStyleSheet);2750 collectFromStyleSheetContents(m_styleSheetCSSOMWrapperSet, mathMLStyleSheet);2751 collectFromStyleSheetContents(m_styleSheetCSSOMWrapperSet, mediaControlsStyleSheet);2752 collectFromStyleSheetContents(m_styleSheetCSSOMWrapperSet, fullscreenStyleSheet);2587 collectFromStyleSheetContents(m_styleSheetCSSOMWrapperSet, CSSDefaultStyleSheets::simpleDefaultStyleSheet); 2588 collectFromStyleSheetContents(m_styleSheetCSSOMWrapperSet, CSSDefaultStyleSheets::defaultStyleSheet); 2589 collectFromStyleSheetContents(m_styleSheetCSSOMWrapperSet, CSSDefaultStyleSheets::quirksStyleSheet); 2590 collectFromStyleSheetContents(m_styleSheetCSSOMWrapperSet, CSSDefaultStyleSheets::svgStyleSheet); 2591 collectFromStyleSheetContents(m_styleSheetCSSOMWrapperSet, CSSDefaultStyleSheets::mathMLStyleSheet); 2592 collectFromStyleSheetContents(m_styleSheetCSSOMWrapperSet, CSSDefaultStyleSheets::mediaControlsStyleSheet); 2593 collectFromStyleSheetContents(m_styleSheetCSSOMWrapperSet, CSSDefaultStyleSheets::fullscreenStyleSheet); 2753 2594 2754 2595 collectFromDocumentStyleSheetCollection(styleSheetCollection); … … 5419 5260 // in the current set of stylesheets. Style sharing code uses this information to reject 5420 5261 // sharing candidates. 5421 m_features.add( defaultStyle->features());5262 m_features.add(CSSDefaultStyleSheets::defaultStyle->features()); 5422 5263 m_features.add(m_authorStyle->features()); 5423 5264 if (document()->isViewSource()) 5424 m_features.add( viewSourceStyle()->features());5265 m_features.add(CSSDefaultStyleSheets::viewSourceStyle()->features()); 5425 5266 5426 5267 if (m_scopeResolver) … … 5493 5334 5494 5335 // FIXME: move this to a place where it would be called only once? 5495 info.addMember( defaultStyle, "defaultStyle");5496 info.addMember( defaultQuirksStyle, "defaultQuirksStyle");5497 info.addMember( defaultPrintStyle,"defaultPrintStyle");5498 info.addMember( defaultViewSourceStyle, "defaultViewSourceStyle");5336 info.addMember(CSSDefaultStyleSheets::defaultStyle, "defaultStyle"); 5337 info.addMember(CSSDefaultStyleSheets::defaultQuirksStyle, "defaultQuirksStyle"); 5338 info.addMember(CSSDefaultStyleSheets::defaultPrintStyle,"defaultPrintStyle"); 5339 info.addMember(CSSDefaultStyleSheets::defaultViewSourceStyle, "defaultViewSourceStyle"); 5499 5340 } 5500 5341
Note: See TracChangeset
for help on using the changeset viewer.