Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(151)

Side by Side Diff: Source/core/css/RuleSet.cpp

Issue 42543007: StyleResolver should update RuleSets lazily. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Revised Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 2004-2005 Allan Sandfeld Jensen (kde@carewolf.com) 3 * (C) 2004-2005 Allan Sandfeld Jensen (kde@carewolf.com)
4 * Copyright (C) 2006, 2007 Nicholas Shanks (webkit@nickshanks.com) 4 * Copyright (C) 2006, 2007 Nicholas Shanks (webkit@nickshanks.com)
5 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All r ights reserved. 5 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All r ights reserved.
6 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> 6 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org>
7 * Copyright (C) 2007, 2008 Eric Seidel <eric@webkit.org> 7 * Copyright (C) 2007, 2008 Eric Seidel <eric@webkit.org>
8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/) 8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/)
9 * Copyright (c) 2011, Code Aurora Forum. All rights reserved. 9 * Copyright (c) 2011, Code Aurora Forum. All rights reserved.
10 * Copyright (C) Research In Motion Limited 2011. All rights reserved. 10 * Copyright (C) Research In Motion Limited 2011. All rights reserved.
(...skipping 347 matching lines...) Expand 10 before | Expand all | Expand 10 after
358 StyleRuleBase* regionStylingRule = childRules[i].get(); 358 StyleRuleBase* regionStylingRule = childRules[i].get();
359 if (regionStylingRule->isStyleRule()) 359 if (regionStylingRule->isStyleRule())
360 regionRuleSet->addStyleRule(static_cast<StyleRule*>(regionStylingRul e), addRuleFlags); 360 regionRuleSet->addStyleRule(static_cast<StyleRule*>(regionStylingRul e), addRuleFlags);
361 } 361 }
362 // Update the "global" rule count so that proper order is maintained 362 // Update the "global" rule count so that proper order is maintained
363 m_ruleCount = regionRuleSet->m_ruleCount; 363 m_ruleCount = regionRuleSet->m_ruleCount;
364 364
365 m_regionSelectorsAndRuleSets.append(RuleSetSelectorPair(regionRule->selector List().first(), regionRuleSet.release())); 365 m_regionSelectorsAndRuleSets.append(RuleSetSelectorPair(regionRule->selector List().first(), regionRuleSet.release()));
366 } 366 }
367 367
368 void RuleSet::addChildRules(const Vector<RefPtr<StyleRuleBase> >& rules, const M ediaQueryEvaluator& medium, bool hasDocumentSecurityOrigin, AddRuleFlags addRule Flags) 368 void RuleSet::addChildRules(const Vector<RefPtr<StyleRuleBase> >& rules, const M ediaQueryEvaluator& medium, AddRuleFlags addRuleFlags)
369 { 369 {
370 for (unsigned i = 0; i < rules.size(); ++i) { 370 for (unsigned i = 0; i < rules.size(); ++i) {
371 StyleRuleBase* rule = rules[i].get(); 371 StyleRuleBase* rule = rules[i].get();
372 372
373 if (rule->isStyleRule()) { 373 if (rule->isStyleRule()) {
374 StyleRule* styleRule = static_cast<StyleRule*>(rule); 374 StyleRule* styleRule = static_cast<StyleRule*>(rule);
375 375
376 const CSSSelectorList& selectorList = styleRule->selectorList(); 376 const CSSSelectorList& selectorList = styleRule->selectorList();
377 for (size_t selectorIndex = 0; selectorIndex != kNotFound; selectorI ndex = selectorList.indexOfNextSelectorAfter(selectorIndex)) { 377 for (size_t selectorIndex = 0; selectorIndex != kNotFound; selectorI ndex = selectorList.indexOfNextSelectorAfter(selectorIndex)) {
378 if (selectorList.hasCombinatorCrossingTreeBoundaryAt(selectorInd ex)) { 378 if (selectorList.hasCombinatorCrossingTreeBoundaryAt(selectorInd ex)) {
379 m_treeBoundaryCrossingRules.append(MinimalRuleData(styleRule , selectorIndex, addRuleFlags)); 379 m_treeBoundaryCrossingRules.append(MinimalRuleData(styleRule , selectorIndex, addRuleFlags));
380 } else if (selectorList.hasShadowDistributedAt(selectorIndex)) { 380 } else if (selectorList.hasShadowDistributedAt(selectorIndex)) {
381 m_shadowDistributedRules.append(MinimalRuleData(styleRule, s electorIndex, addRuleFlags)); 381 m_shadowDistributedRules.append(MinimalRuleData(styleRule, s electorIndex, addRuleFlags));
382 } else { 382 } else {
383 addRule(styleRule, selectorIndex, addRuleFlags); 383 addRule(styleRule, selectorIndex, addRuleFlags);
384 } 384 }
385 } 385 }
386 } else if (rule->isPageRule()) { 386 } else if (rule->isPageRule()) {
387 addPageRule(static_cast<StyleRulePage*>(rule)); 387 addPageRule(static_cast<StyleRulePage*>(rule));
388 } else if (rule->isMediaRule()) { 388 } else if (rule->isMediaRule()) {
389 StyleRuleMedia* mediaRule = static_cast<StyleRuleMedia*>(rule); 389 StyleRuleMedia* mediaRule = static_cast<StyleRuleMedia*>(rule);
390 if ((!mediaRule->mediaQueries() || medium.eval(mediaRule->mediaQueri es(), &m_viewportDependentMediaQueryResults))) 390 if ((!mediaRule->mediaQueries() || medium.eval(mediaRule->mediaQueri es(), &m_viewportDependentMediaQueryResults)))
391 addChildRules(mediaRule->childRules(), medium, hasDocumentSecuri tyOrigin, addRuleFlags); 391 addChildRules(mediaRule->childRules(), medium, addRuleFlags);
392 } else if (rule->isFontFaceRule()) { 392 } else if (rule->isFontFaceRule()) {
393 addFontFaceRule(static_cast<StyleRuleFontFace*>(rule)); 393 addFontFaceRule(static_cast<StyleRuleFontFace*>(rule));
394 } else if (rule->isKeyframesRule()) { 394 } else if (rule->isKeyframesRule()) {
395 addKeyframesRule(static_cast<StyleRuleKeyframes*>(rule)); 395 addKeyframesRule(static_cast<StyleRuleKeyframes*>(rule));
396 } else if (rule->isRegionRule()) { 396 } else if (rule->isRegionRule()) {
397 addRegionRule(static_cast<StyleRuleRegion*>(rule), hasDocumentSecuri tyOrigin); 397 addRegionRule(static_cast<StyleRuleRegion*>(rule), addRuleFlags & Ru leHasDocumentSecurityOrigin);
398 } else if (rule->isHostRule()) { 398 } else if (rule->isHostRule()) {
399 addHostRule(static_cast<StyleRuleHost*>(rule)); 399 addHostRule(static_cast<StyleRuleHost*>(rule));
400 } else if (rule->isViewportRule()) { 400 } else if (rule->isViewportRule() && !(addRuleFlags & ViewportRuleIsProc essed)) {
401 addViewportRule(static_cast<StyleRuleViewport*>(rule)); 401 addViewportRule(static_cast<StyleRuleViewport*>(rule));
402 } else if (rule->isSupportsRule() && static_cast<StyleRuleSupports*>(rul e)->conditionIsSupported()) { 402 } else if (rule->isSupportsRule() && static_cast<StyleRuleSupports*>(rul e)->conditionIsSupported()) {
403 addChildRules(static_cast<StyleRuleSupports*>(rule)->childRules(), m edium, hasDocumentSecurityOrigin, addRuleFlags); 403 addChildRules(static_cast<StyleRuleSupports*>(rule)->childRules(), m edium, addRuleFlags);
404 } 404 }
405 } 405 }
406 } 406 }
407 407
408 void RuleSet::addRulesFromSheet(StyleSheetContents* sheet, const MediaQueryEvalu ator& medium, bool hasDocumentSecurityOrigin) 408 void RuleSet::addRulesFromSheet(StyleSheetContents* sheet, const MediaQueryEvalu ator& medium, AddRuleFlags addRuleFlags)
409 { 409 {
410 ASSERT(sheet); 410 ASSERT(sheet);
411 411
412 const Vector<RefPtr<StyleRuleImport> >& importRules = sheet->importRules(); 412 const Vector<RefPtr<StyleRuleImport> >& importRules = sheet->importRules();
413 for (unsigned i = 0; i < importRules.size(); ++i) { 413 for (unsigned i = 0; i < importRules.size(); ++i) {
414 StyleRuleImport* importRule = importRules[i].get(); 414 StyleRuleImport* importRule = importRules[i].get();
415 if (importRule->styleSheet() && (!importRule->mediaQueries() || medium.e val(importRule->mediaQueries(), &m_viewportDependentMediaQueryResults))) 415 if (importRule->styleSheet() && (!importRule->mediaQueries() || medium.e val(importRule->mediaQueries(), &m_viewportDependentMediaQueryResults)))
416 addRulesFromSheet(importRule->styleSheet(), medium); 416 addRulesFromSheet(importRule->styleSheet(), medium, addRuleFlags);
417 } 417 }
418 418
419 AddRuleFlags addRuleFlags = static_cast<AddRuleFlags>((hasDocumentSecurityOr igin ? RuleHasDocumentSecurityOrigin : 0) | RuleCanUseFastCheckSelector); 419 addChildRules(sheet->childRules(), medium, static_cast<AddRuleFlags>(addRule Flags | RuleCanUseFastCheckSelector));
420 addChildRules(sheet->childRules(), medium, hasDocumentSecurityOrigin, addRul eFlags);
421 } 420 }
422 421
423 void RuleSet::addStyleRule(StyleRule* rule, AddRuleFlags addRuleFlags) 422 void RuleSet::addStyleRule(StyleRule* rule, AddRuleFlags addRuleFlags)
424 { 423 {
425 for (size_t selectorIndex = 0; selectorIndex != kNotFound; selectorIndex = r ule->selectorList().indexOfNextSelectorAfter(selectorIndex)) 424 for (size_t selectorIndex = 0; selectorIndex != kNotFound; selectorIndex = r ule->selectorList().indexOfNextSelectorAfter(selectorIndex))
426 addRule(rule, selectorIndex, addRuleFlags); 425 addRule(rule, selectorIndex, addRuleFlags);
427 } 426 }
428 427
429 void RuleSet::compactPendingRules(PendingRuleMap& pendingMap, CompactRuleMap& co mpactMap) 428 void RuleSet::compactPendingRules(PendingRuleMap& pendingMap, CompactRuleMap& co mpactMap)
430 { 429 {
(...skipping 28 matching lines...) Expand all
459 m_pageRules.shrinkToFit(); 458 m_pageRules.shrinkToFit();
460 m_viewportRules.shrinkToFit(); 459 m_viewportRules.shrinkToFit();
461 m_fontFaceRules.shrinkToFit(); 460 m_fontFaceRules.shrinkToFit();
462 m_keyframesRules.shrinkToFit(); 461 m_keyframesRules.shrinkToFit();
463 m_hostRules.shrinkToFit(); 462 m_hostRules.shrinkToFit();
464 m_treeBoundaryCrossingRules.shrinkToFit(); 463 m_treeBoundaryCrossingRules.shrinkToFit();
465 m_shadowDistributedRules.shrinkToFit(); 464 m_shadowDistributedRules.shrinkToFit();
466 } 465 }
467 466
468 } // namespace WebCore 467 } // namespace WebCore
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698