Changeset 141964 in webkit


Ignore:
Timestamp:
Feb 5, 2013 8:28:57 PM (11 years ago)
Author:
hayato@chromium.org
Message:

Split each RuleSet and feature out from StyleResolver into its own class.
https://bugs.webkit.org/show_bug.cgi?id=107777

Reviewed by Dimitri Glazkov.

Splitting each RuleSet and feature out from StyleResover into its onw class, DocumentRuleSets,
to manage them separately.

This is one of the attempts to try to resolve meta bug (bug 89879)
to lose StyleResolver's weight. We need further action to factor
StyleResolver to separate it into some classes cleanly.
See also https://bugs.webkit.org/show_bug.cgi?id=108890. A following patch will address that.

No tests. No change in behavior.

  • CMakeLists.txt:
  • GNUmakefile.list.am:
  • Target.pri:
  • WebCore.gypi:
  • WebCore.xcodeproj/project.pbxproj:
  • css/CSSAllInOne.cpp:
  • css/DocumentRuleSets.cpp: Added.

(WebCore):
(WebCore::DocumentRuleSets::DocumentRuleSets):
(WebCore::DocumentRuleSets::~DocumentRuleSets):
(WebCore::DocumentRuleSets::initUserStyle): New helper to initialize each RuleSets.
(WebCore::DocumentRuleSets::collectRulesFromUserStyleSheets): Factored out from StyleResolver.
(WebCore::makeRuleSet): Ditto.
(WebCore::DocumentRuleSets::resetAuthorStyle): Ditto.
(WebCore::DocumentRuleSets::appendAuthorStyleSheets): Ditto.
(WebCore::DocumentRuleSets::collectFeatures): Ditto.
(WebCore::DocumentRuleSets::reportMemoryUsage): New methods to report memory usage. Factored out from StyleResolver.

  • css/DocumentRuleSets.h: Added.

(WebCore):
(DocumentRuleSets):
(WebCore::DocumentRuleSets::authorStyle): Moved from StyleResolver.
(WebCore::DocumentRuleSets::userStyle): Ditto.
(WebCore::DocumentRuleSets::features): Ditto.
(WebCore::DocumentRuleSets::sibling): Ditto.
(WebCore::DocumentRuleSets::uncommonAttribute): Ditto.

  • css/StyleResolver.cpp:

(WebCore::StyleResolver::StyleResolver):
(WebCore::StyleResolver::appendAuthorStyleSheets): Now calls DocumentRuleSets::appendAuthorStyleSheets.
(WebCore::StyleResolver::matchAuthorRules): Use m_ruleSets.
(WebCore::StyleResolver::matchUserRules): Ditto.
(WebCore::StyleResolver::classNamesAffectedByRules): Ditto.
(WebCore::StyleResolver::locateCousinList): Ditto.
(WebCore::StyleResolver::canShareStyleWithElement): Ditto.
(WebCore::StyleResolver::locateSharedStyle): Ditto.
(WebCore::StyleResolver::styleForPage): Ditto.
(WebCore::StyleResolver::checkRegionStyle): Ditto.
(WebCore::StyleResolver::applyProperty): Ditto.
(WebCore::StyleResolver::reportMemoryUsage): Now calls DocumentRuleSets::reportMemoryUsage.

  • css/StyleResolver.h:

(WebCore::StyleResolver::scopeResolver):
(StyleResolver):
(WebCore::StyleResolver::ruleSets): accessor r to DocumentRuleSets.
(WebCore::StyleResolver::usesSiblingRules): Use m_ruleSets.
(WebCore::StyleResolver::usesFirstLineRules): Ditto.
(WebCore::StyleResolver::usesBeforeAfterRules): Ditto.
(WebCore::StyleResolver::hasSelectorForAttribute): Ditto.
(WebCore::StyleResolver::hasSelectorForClass): Ditto.
(WebCore::StyleResolver::hasSelectorForId): Ditto.

  • dom/DocumentStyleSheetCollection.cpp:

(WebCore::DocumentStyleSheetCollection::updateActiveStyleSheets):

Location:
trunk/Source/WebCore
Files:
2 added
10 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/CMakeLists.txt

    r141928 r141964  
    10711071    css/CSSValueList.cpp
    10721072    css/CSSValuePool.cpp
     1073    css/DocumentRuleSets.cpp
    10731074    css/FontFeatureValue.cpp
    10741075    css/FontValue.cpp
  • trunk/Source/WebCore/ChangeLog

    r141963 r141964  
     12013-02-05  Hayato Ito  <hayato@chromium.org>
     2
     3        Split each RuleSet and feature out from StyleResolver into its own class.
     4        https://bugs.webkit.org/show_bug.cgi?id=107777
     5
     6        Reviewed by Dimitri Glazkov.
     7
     8        Splitting each RuleSet and feature out from StyleResover into its onw class, DocumentRuleSets,
     9        to manage them separately.
     10
     11        This is one of the attempts to try to resolve meta bug (bug 89879)
     12        to lose StyleResolver's weight.  We need further action to factor
     13        StyleResolver to separate it into some classes cleanly.
     14        See also https://bugs.webkit.org/show_bug.cgi?id=108890. A following patch will address that.
     15
     16        No tests. No change in behavior.
     17
     18        * CMakeLists.txt:
     19        * GNUmakefile.list.am:
     20        * Target.pri:
     21        * WebCore.gypi:
     22        * WebCore.xcodeproj/project.pbxproj:
     23        * css/CSSAllInOne.cpp:
     24        * css/DocumentRuleSets.cpp: Added.
     25        (WebCore):
     26        (WebCore::DocumentRuleSets::DocumentRuleSets):
     27        (WebCore::DocumentRuleSets::~DocumentRuleSets):
     28        (WebCore::DocumentRuleSets::initUserStyle): New helper to initialize each RuleSets.
     29        (WebCore::DocumentRuleSets::collectRulesFromUserStyleSheets): Factored out from StyleResolver.
     30        (WebCore::makeRuleSet): Ditto.
     31        (WebCore::DocumentRuleSets::resetAuthorStyle): Ditto.
     32        (WebCore::DocumentRuleSets::appendAuthorStyleSheets): Ditto.
     33        (WebCore::DocumentRuleSets::collectFeatures): Ditto.
     34        (WebCore::DocumentRuleSets::reportMemoryUsage): New methods to report memory usage. Factored out from StyleResolver.
     35        * css/DocumentRuleSets.h: Added.
     36        (WebCore):
     37        (DocumentRuleSets):
     38        (WebCore::DocumentRuleSets::authorStyle): Moved from StyleResolver.
     39        (WebCore::DocumentRuleSets::userStyle): Ditto.
     40        (WebCore::DocumentRuleSets::features): Ditto.
     41        (WebCore::DocumentRuleSets::sibling): Ditto.
     42        (WebCore::DocumentRuleSets::uncommonAttribute): Ditto.
     43        * css/StyleResolver.cpp:
     44        (WebCore::StyleResolver::StyleResolver):
     45        (WebCore::StyleResolver::appendAuthorStyleSheets): Now calls DocumentRuleSets::appendAuthorStyleSheets.
     46        (WebCore::StyleResolver::matchAuthorRules): Use m_ruleSets.
     47        (WebCore::StyleResolver::matchUserRules): Ditto.
     48        (WebCore::StyleResolver::classNamesAffectedByRules): Ditto.
     49        (WebCore::StyleResolver::locateCousinList): Ditto.
     50        (WebCore::StyleResolver::canShareStyleWithElement): Ditto.
     51        (WebCore::StyleResolver::locateSharedStyle): Ditto.
     52        (WebCore::StyleResolver::styleForPage): Ditto.
     53        (WebCore::StyleResolver::checkRegionStyle): Ditto.
     54        (WebCore::StyleResolver::applyProperty): Ditto.
     55        (WebCore::StyleResolver::reportMemoryUsage): Now calls DocumentRuleSets::reportMemoryUsage.
     56        * css/StyleResolver.h:
     57        (WebCore::StyleResolver::scopeResolver):
     58        (StyleResolver):
     59        (WebCore::StyleResolver::ruleSets): accessor r to DocumentRuleSets.
     60        (WebCore::StyleResolver::usesSiblingRules): Use m_ruleSets.
     61        (WebCore::StyleResolver::usesFirstLineRules): Ditto.
     62        (WebCore::StyleResolver::usesBeforeAfterRules): Ditto.
     63        (WebCore::StyleResolver::hasSelectorForAttribute): Ditto.
     64        (WebCore::StyleResolver::hasSelectorForClass): Ditto.
     65        (WebCore::StyleResolver::hasSelectorForId): Ditto.
     66        * dom/DocumentStyleSheetCollection.cpp:
     67        (WebCore::DocumentStyleSheetCollection::updateActiveStyleSheets):
     68
    1692013-02-05  Julien Chaffraix  <jchaffraix@webkit.org>
    270
  • trunk/Source/WebCore/GNUmakefile.list.am

    r141928 r141964  
    26212621        Source/WebCore/css/CSSVariableValue.h \
    26222622        Source/WebCore/css/DashboardRegion.h \
     2623        Source/WebCore/css/DocumentRuleSets.cpp \
     2624        Source/WebCore/css/DocumentRuleSets.h \
    26232625        Source/WebCore/css/FontFeatureValue.cpp \
    26242626        Source/WebCore/css/FontFeatureValue.h \
  • trunk/Source/WebCore/Target.pri

    r141928 r141964  
    308308    css/CSSValueList.cpp \
    309309    css/CSSValuePool.cpp \
     310    css/DocumentRuleSets.cpp \
    310311    css/FontFeatureValue.cpp \
    311312    css/FontValue.cpp \
  • trunk/Source/WebCore/WebCore.gypi

    r141928 r141964  
    15461546            'css/Counter.h',
    15471547            'css/DashboardRegion.h',
     1548            'css/DocumentRuleSets.cpp',
     1549            'css/DocumentRuleSets.h',
    15481550            'css/FontFeatureValue.cpp',
    15491551            'css/FontFeatureValue.h',
  • trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj

    r141928 r141964  
    14381438                4A38BF5014FE1C0900612512 /* WebSocketDeflateFramer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4A38BF4E14FE1C0900612512 /* WebSocketDeflateFramer.cpp */; };
    14391439                4A38BF5114FE1C0900612512 /* WebSocketDeflateFramer.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A38BF4F14FE1C0900612512 /* WebSocketDeflateFramer.h */; };
     1440                4A4F48A916B0DFC000EDBB29 /* DocumentRuleSets.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4A4F48A716B0DFC000EDBB29 /* DocumentRuleSets.cpp */; };
     1441                4A4F48AA16B0DFC000EDBB29 /* DocumentRuleSets.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A4F48A816B0DFC000EDBB29 /* DocumentRuleSets.h */; };
    14401442                4A5A2ADB161E7E00005889DD /* WebSocketExtensionParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4A5A2AD9161E7E00005889DD /* WebSocketExtensionParser.cpp */; };
    14411443                4A5A2ADC161E7E00005889DD /* WebSocketExtensionParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A5A2ADA161E7E00005889DD /* WebSocketExtensionParser.h */; };
     
    88188820                4A38BF4E14FE1C0900612512 /* WebSocketDeflateFramer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = WebSocketDeflateFramer.cpp; path = Modules/websockets/WebSocketDeflateFramer.cpp; sourceTree = "<group>"; };
    88198821                4A38BF4F14FE1C0900612512 /* WebSocketDeflateFramer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WebSocketDeflateFramer.h; path = Modules/websockets/WebSocketDeflateFramer.h; sourceTree = "<group>"; };
     8822                4A4F48A716B0DFC000EDBB29 /* DocumentRuleSets.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DocumentRuleSets.cpp; sourceTree = "<group>"; };
     8823                4A4F48A816B0DFC000EDBB29 /* DocumentRuleSets.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DocumentRuleSets.h; sourceTree = "<group>"; };
    88208824                4A5A2AD9161E7E00005889DD /* WebSocketExtensionParser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = WebSocketExtensionParser.cpp; path = Modules/websockets/WebSocketExtensionParser.cpp; sourceTree = "<group>"; };
    88218825                4A5A2ADA161E7E00005889DD /* WebSocketExtensionParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WebSocketExtensionParser.h; path = Modules/websockets/WebSocketExtensionParser.h; sourceTree = "<group>"; };
     
    2184321847                                CAE9F90E146441F000C245B1 /* CSSVariableValue.h */,
    2184421848                                A80E6CE10A1989CA007FB8C5 /* DashboardRegion.h */,
     21849                                4A4F48A716B0DFC000EDBB29 /* DocumentRuleSets.cpp */,
     21850                                4A4F48A816B0DFC000EDBB29 /* DocumentRuleSets.h */,
    2184521851                                4A6E9FC113C17D1D0046A7F8 /* FontFeatureValue.cpp */,
    2184621852                                4A6E9FC213C17D1D0046A7F8 /* FontFeatureValue.h */,
     
    2341923425                                14947FFE12F80CD200A0F631 /* DocumentOrderedMap.h in Headers */,
    2342023426                                BCCFBAE80B5152ED0001F1D7 /* DocumentParser.h in Headers */,
     23427                                4A4F48AA16B0DFC000EDBB29 /* DocumentRuleSets.h in Headers */,
    2342123428                                AD6E71AD1668899D00320C13 /* DocumentSharedObjectPool.h in Headers */,
    2342223429                                E47E276516036ED200EE2AFB /* DocumentStyleSheetCollection.h in Headers */,
     
    2706227069                                14947FFD12F80CD200A0F631 /* DocumentOrderedMap.cpp in Sources */,
    2706327070                                A8C2280E11D4A59700D5A7D3 /* DocumentParser.cpp in Sources */,
     27071                                4A4F48A916B0DFC000EDBB29 /* DocumentRuleSets.cpp in Sources */,
    2706427072                                AD6E71AC1668899D00320C13 /* DocumentSharedObjectPool.cpp in Sources */,
    2706527073                                E47E276816036EDC00EE2AFB /* DocumentStyleSheetCollection.cpp in Sources */,
  • trunk/Source/WebCore/css/CSSAllInOne.cpp

    r141750 r141964  
    7070#include "CSSValueList.cpp"
    7171#include "CSSValuePool.cpp"
     72#include "DocumentRuleSets.cpp"
    7273#include "InspectorCSSOMWrappers.cpp"
    7374#include "RuleFeature.cpp"
  • trunk/Source/WebCore/css/StyleResolver.cpp

    r141844 r141964  
    260260        m_medium = adoptPtr(new MediaQueryEvaluator(view->mediaType(), view->frame(), m_rootDefaultStyle.get()));
    261261
    262     resetAuthorStyle();
     262    m_ruleSets.resetAuthorStyle();
    263263
    264264    DocumentStyleSheetCollection* styleSheetCollection = document->styleSheetCollection();
    265     OwnPtr<RuleSet> tempUserStyle = RuleSet::create();
    266     if (CSSStyleSheet* pageUserSheet = styleSheetCollection->pageUserSheet())
    267         tempUserStyle->addRulesFromSheet(pageUserSheet->contents(), *m_medium, this);
    268     collectRulesFromUserStyleSheets(styleSheetCollection->injectedUserStyleSheets(), *tempUserStyle);
    269     collectRulesFromUserStyleSheets(styleSheetCollection->documentUserStyleSheets(), *tempUserStyle);
    270     if (tempUserStyle->m_ruleCount > 0 || tempUserStyle->m_pageRules.size() > 0)
    271         m_userStyle = tempUserStyle.release();
     265    m_ruleSets.initUserStyle(styleSheetCollection, *m_medium, *this);
    272266
    273267#if ENABLE(SVG_FONTS)
     
    283277}
    284278
    285 void StyleResolver::collectRulesFromUserStyleSheets(const Vector<RefPtr<CSSStyleSheet> >& userSheets, RuleSet& userStyle)
    286 {
    287     for (unsigned i = 0; i < userSheets.size(); ++i) {
    288         ASSERT(userSheets[i]->contents()->isUserStyleSheet());
    289         userStyle.addRulesFromSheet(userSheets[i]->contents(), *m_medium, this);
    290     }
    291 }
    292 
    293 static PassOwnPtr<RuleSet> makeRuleSet(const Vector<RuleFeature>& rules)
    294 {
    295     size_t size = rules.size();
    296     if (!size)
    297         return nullptr;
    298     OwnPtr<RuleSet> ruleSet = RuleSet::create();
    299     for (size_t i = 0; i < size; ++i)
    300         ruleSet->addRule(rules[i].rule, rules[i].selectorIndex, rules[i].hasDocumentSecurityOrigin ? RuleHasDocumentSecurityOrigin : RuleHasNoSpecialState);
    301     ruleSet->shrinkToFit();
    302     return ruleSet.release();
    303 }
    304 
    305 void StyleResolver::resetAuthorStyle()
    306 {
    307     m_authorStyle = RuleSet::create();
    308     m_authorStyle->disableAutoShrinkToFit();
    309 }
    310 
    311279void StyleResolver::appendAuthorStyleSheets(unsigned firstNew, const Vector<RefPtr<CSSStyleSheet> >& styleSheets)
    312280{
    313     // This handles sheets added to the end of the stylesheet list only. In other cases the style resolver
    314     // needs to be reconstructed. To handle insertions too the rule order numbers would need to be updated.
    315     unsigned size = styleSheets.size();
    316     for (unsigned i = firstNew; i < size; ++i) {
    317         CSSStyleSheet* cssSheet = styleSheets[i].get();
    318         ASSERT(!cssSheet->disabled());
    319         if (cssSheet->mediaQueries() && !m_medium->eval(cssSheet->mediaQueries(), this))
    320             continue;
    321         StyleSheetContents* sheet = cssSheet->contents();
    322 #if ENABLE(STYLE_SCOPED) || ENABLE(SHADOW_DOM)
    323         if (const ContainerNode* scope = StyleScopeResolver::scopeFor(cssSheet)) {
    324             ensureScopeResolver()->ensureRuleSetFor(scope)->addRulesFromSheet(sheet, *m_medium, this, scope);
    325             continue;
    326         }
    327 #endif
    328 
    329         m_authorStyle->addRulesFromSheet(sheet, *m_medium, this);
    330         m_inspectorCSSOMWrappers.collectFromStyleSheetIfNeeded(cssSheet);
    331     }
    332     m_authorStyle->shrinkToFit();
    333     collectFeatures();
    334    
     281    m_ruleSets.appendAuthorStyleSheets(firstNew, styleSheets, m_medium.get(), m_inspectorCSSOMWrappers, document()->isViewSource(), this);
    335282    if (document()->renderer() && document()->renderer()->style())
    336283        document()->renderer()->style()->font().update(fontSelector());
     
    640587
    641588    // Match global author rules.
    642     MatchRequest matchRequest(m_authorStyle.get(), includeEmptyRules);
     589    MatchRequest matchRequest(m_ruleSets.authorStyle(), includeEmptyRules);
    643590    RuleRange ruleRange = result.ranges.authorRuleRange();
    644591    collectMatchingRules(matchRequest, ruleRange);
     
    651598void StyleResolver::matchUserRules(MatchResult& result, bool includeEmptyRules)
    652599{
    653     if (!m_userStyle)
     600    if (!m_ruleSets.userStyle())
    654601        return;
    655602   
     
    657604
    658605    result.ranges.lastUserRule = result.matchedProperties.size() - 1;
    659     MatchRequest matchRequest(m_userStyle.get(), includeEmptyRules);
     606    MatchRequest matchRequest(m_ruleSets.userStyle(), includeEmptyRules);
    660607    RuleRange ruleRange = result.ranges.userRuleRange();
    661608    collectMatchingRules(matchRequest, ruleRange);
     
    793740{
    794741    for (unsigned i = 0; i < classNames.size(); ++i) {
    795         if (m_features.classesInRules.contains(classNames[i].impl()))
     742        if (m_ruleSets.features().classesInRules.contains(classNames[i].impl()))
    796743            return true;
    797744    }
     
    868815        return 0;
    869816#endif
    870     if (p->hasID() && m_features.idsInRules.contains(p->idForStyleResolution().impl()))
     817    if (p->hasID() && m_ruleSets.features().idsInRules.contains(p->idForStyleResolution().impl()))
    871818        return 0;
    872819
     
    1050997        return false;
    1051998
    1052     if (element->hasID() && m_features.idsInRules.contains(element->idForStyleResolution().impl()))
     999    if (element->hasID() && m_ruleSets.features().idsInRules.contains(element->idForStyleResolution().impl()))
    10531000        return false;
    10541001    if (element->hasScopedHTMLStyleChild())
     
    11331080#endif
    11341081    // Ids stop style sharing if they show up in the stylesheets.
    1135     if (state.styledElement->hasID() && m_features.idsInRules.contains(state.styledElement->idForStyleResolution().impl()))
     1082    if (state.styledElement->hasID() && m_ruleSets.features().idsInRules.contains(state.styledElement->idForStyleResolution().impl()))
    11361083        return 0;
    11371084    if (parentElementPreventsSharing(state.element->parentElement()))
     
    11651112
    11661113    // Can't share if sibling rules apply. This is checked at the end as it should rarely fail.
    1167     if (styleSharingCandidateMatchesRuleSet(m_siblingRuleSet.get()))
     1114    if (styleSharingCandidateMatchesRuleSet(m_ruleSets.sibling()))
    11681115        return 0;
    11691116    // Can't share if attribute rules apply.
    1170     if (styleSharingCandidateMatchesRuleSet(m_uncommonAttributeRuleSet.get()))
     1117    if (styleSharingCandidateMatchesRuleSet(m_ruleSets.uncommonAttribute()))
    11711118        return 0;
    11721119    // Can't share if @host @-rules apply.
     
    14371384    CSSDefaultStyleSheets::ensureDefaultStyleSheetsForElement(element, needsCollection);
    14381385    if (needsCollection)
    1439         collectFeatures();
     1386        m_ruleSets.collectFeatures(document()->isViewSource(), m_scopeResolver.get());
    14401387
    14411388    MatchResult matchResult;
     
    16381585    MatchResult result;
    16391586    matchPageRules(result, CSSDefaultStyleSheets::defaultPrintStyle, isLeft, isFirst, page);
    1640     matchPageRules(result, m_userStyle.get(), isLeft, isFirst, page);
     1587    matchPageRules(result, m_ruleSets.userStyle(), isLeft, isFirst, page);
    16411588    // Only consider the global author RuleSet for @page rules, as per the HTML5 spec.
    1642     matchPageRules(result, m_authorStyle.get(), isLeft, isFirst, page);
     1589    matchPageRules(result, m_ruleSets.authorStyle(), isLeft, isFirst, page);
    16431590    m_state.lineHeightValue = 0;
    16441591    bool inheritedOnly = false;
     
    20101957    // so all region rules are global by default. Verify whether that can stand or needs changing.
    20111958
    2012     unsigned rulesSize = m_authorStyle->m_regionSelectorsAndRuleSets.size();
     1959    unsigned rulesSize = m_ruleSets.authorStyle()->m_regionSelectorsAndRuleSets.size();
    20131960    for (unsigned i = 0; i < rulesSize; ++i) {
    2014         ASSERT(m_authorStyle->m_regionSelectorsAndRuleSets.at(i).ruleSet.get());
    2015         if (checkRegionSelector(m_authorStyle->m_regionSelectorsAndRuleSets.at(i).selector, regionElement))
     1961        ASSERT(m_ruleSets.authorStyle()->m_regionSelectorsAndRuleSets.at(i).ruleSet.get());
     1962        if (checkRegionSelector(m_ruleSets.authorStyle()->m_regionSelectorsAndRuleSets.at(i).selector, regionElement))
    20161963            return true;
    20171964    }
    20181965
    2019     if (m_userStyle) {
    2020         rulesSize = m_userStyle->m_regionSelectorsAndRuleSets.size();
     1966    if (m_ruleSets.userStyle()) {
     1967        rulesSize = m_ruleSets.userStyle()->m_regionSelectorsAndRuleSets.size();
    20211968        for (unsigned i = 0; i < rulesSize; ++i) {
    2022             ASSERT(m_userStyle->m_regionSelectorsAndRuleSets.at(i).ruleSet.get());
    2023             if (checkRegionSelector(m_userStyle->m_regionSelectorsAndRuleSets.at(i).selector, regionElement))
     1969            ASSERT(m_ruleSets.userStyle()->m_regionSelectorsAndRuleSets.at(i).ruleSet.get());
     1970            if (checkRegionSelector(m_ruleSets.userStyle()->m_regionSelectorsAndRuleSets.at(i).selector, regionElement))
    20241971                return true;
    20251972        }
     
    28852832                    didSet = true;
    28862833                    // register the fact that the attribute value affects the style
    2887                     m_features.attrsInRules.add(attr.localName().impl());
     2834                    m_ruleSets.features().attrsInRules.add(attr.localName().impl());
    28882835                } else if (contentValue->isCounter()) {
    28892836                    Counter* counterValue = contentValue->getCounterValue();
     
    51675114}
    51685115
    5169 void StyleResolver::collectFeatures()
    5170 {
    5171     m_features.clear();
    5172     // Collect all ids and rules using sibling selectors (:first-child and similar)
    5173     // in the current set of stylesheets. Style sharing code uses this information to reject
    5174     // sharing candidates.
    5175     if (CSSDefaultStyleSheets::defaultStyle)
    5176         m_features.add(CSSDefaultStyleSheets::defaultStyle->features());
    5177     if (m_authorStyle)
    5178         m_features.add(m_authorStyle->features());
    5179     if (document()->isViewSource())
    5180         m_features.add(CSSDefaultStyleSheets::viewSourceStyle()->features());
    5181 
    5182     if (m_scopeResolver)
    5183         m_scopeResolver->collectFeaturesTo(m_features);
    5184     if (m_userStyle)
    5185         m_features.add(m_userStyle->features());
    5186 
    5187     m_siblingRuleSet = makeRuleSet(m_features.siblingRules);
    5188     m_uncommonAttributeRuleSet = makeRuleSet(m_features.uncommonAttributeRules);
    5189 }
    5190 
    51915116void StyleResolver::MatchedProperties::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
    51925117{
     
    52135138{
    52145139    MemoryClassInfo info(memoryObjectInfo, this, WebCoreMemoryTypes::CSS);
    5215     info.addMember(m_authorStyle, "authorStyle");
    5216     info.addMember(m_userStyle, "userStyle");
    5217     info.addMember(m_features, "features");
    5218     info.addMember(m_siblingRuleSet, "siblingRuleSet");
    5219     info.addMember(m_uncommonAttributeRuleSet, "uncommonAttributeRuleSet");
     5140    info.addMember(m_ruleSets, "ruleSets");
    52205141    info.addMember(m_keyframesRuleMap, "keyframesRuleMap");
    52215142    info.addMember(m_matchedPropertiesCache, "matchedPropertiesCache");
  • trunk/Source/WebCore/css/StyleResolver.h

    r141750 r141964  
    2727#include "CSSToStyleMap.h"
    2828#include "CSSValueList.h"
     29#include "DocumentRuleSets.h"
    2930#include "InspectorCSSOMWrappers.h"
    3031#include "LinkHash.h"
     
    170171    Element* element() const { return m_state.element; }
    171172    Document* document() const { return m_document; }
     173    StyleScopeResolver* scopeResolver() const { return m_scopeResolver.get(); }
    172174    const FontDescription& fontDescription() { return style()->fontDescription(); }
    173175    const FontDescription& parentFontDescription() { return parentStyle()->fontDescription(); }
     
    180182    bool hasParentNode() const { return m_state.parentNode; }
    181183
    182     void resetAuthorStyle();
     184    // FIXME: It could be better to call m_ruleSets.appendAuthorStyleSheets() directly after we factor StyleRsolver further.
     185    // https://bugs.webkit.org/show_bug.cgi?id=108890
    183186    void appendAuthorStyleSheets(unsigned firstNew, const Vector<RefPtr<CSSStyleSheet> >&);
    184187
    185 private:
     188    DocumentRuleSets& ruleSets() { return m_ruleSets; }
     189    const DocumentRuleSets& ruleSets() const { return m_ruleSets; }
     190
    186191#if ENABLE(STYLE_SCOPED) || ENABLE(SHADOW_DOM)
    187192    StyleScopeResolver* ensureScopeResolver()
     
    202207#endif
    203208
     209private:
    204210    void initForStyleResolve(Element*, RenderStyle* parentStyle = 0, PseudoId = NOPSEUDO);
    205211    void initElement(Element*);
    206     void collectFeatures();
    207212    RenderStyle* locateSharedStyle();
    208213    bool styleSharingCandidateMatchesRuleSet(RuleSet*);
     
    272277    bool checkRegionStyle(Element* regionElement);
    273278
    274     bool usesSiblingRules() const { return !m_features.siblingRules.isEmpty(); }
    275     bool usesFirstLineRules() const { return m_features.usesFirstLineRules; }
    276     bool usesBeforeAfterRules() const { return m_features.usesBeforeAfterRules; }
     279    bool usesSiblingRules() const { return !m_ruleSets.features().siblingRules.isEmpty(); }
     280    bool usesFirstLineRules() const { return m_ruleSets.features().usesFirstLineRules; }
     281    bool usesBeforeAfterRules() const { return m_ruleSets.features().usesBeforeAfterRules; }
    277282
    278283    static bool createTransformOperations(CSSValue* inValue, RenderStyle* inStyle, RenderStyle* rootStyle, TransformOperations& outOperations);
     
    413418    String pageName(int pageIndex) const;
    414419
    415     OwnPtr<RuleSet> m_authorStyle;
    416     OwnPtr<RuleSet> m_userStyle;
    417 
    418     RuleFeatureSet m_features;
    419     OwnPtr<RuleSet> m_siblingRuleSet;
    420     OwnPtr<RuleSet> m_uncommonAttributeRuleSet;
     420    DocumentRuleSets m_ruleSets;
    421421
    422422    typedef HashMap<AtomicStringImpl*, RefPtr<StyleRuleKeyframes> > KeyframesRuleMap;
     
    525525    static RenderStyle* s_styleNotYetAvailable;
    526526
    527     void collectRulesFromUserStyleSheets(const Vector<RefPtr<CSSStyleSheet> >&, RuleSet& userStyle);
    528 
    529527    void cacheBorderAndBackground();
    530528
     
    604602{
    605603    ASSERT(!attributeName.isEmpty());
    606     return m_features.attrsInRules.contains(attributeName.impl());
     604    return m_ruleSets.features().attrsInRules.contains(attributeName.impl());
    607605}
    608606
     
    610608{
    611609    ASSERT(!classValue.isEmpty());
    612     return m_features.classesInRules.contains(classValue.impl());
     610    return m_ruleSets.features().classesInRules.contains(classValue.impl());
    613611}
    614612
     
    616614{
    617615    ASSERT(!idValue.isEmpty());
    618     return m_features.idsInRules.contains(idValue.impl());
     616    return m_ruleSets.features().idsInRules.contains(idValue.impl());
    619617}
    620618
  • trunk/Source/WebCore/dom/DocumentStyleSheetCollection.cpp

    r141570 r141964  
    479479        StyleResolver* styleResolver = m_document->styleResolver();
    480480        if (styleResolverUpdateType == Reset) {
    481             styleResolver->resetAuthorStyle();
     481            styleResolver->ruleSets().resetAuthorStyle();
    482482            styleResolver->appendAuthorStyleSheets(0, activeCSSStyleSheets);
    483483        } else {
Note: See TracChangeset for help on using the changeset viewer.