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

Side by Side Diff: third_party/WebKit/Source/core/css/StyleSheetContents.cpp

Issue 1961173003: Corrected assert for cacheable stylesheets. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 7 months 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
OLDNEW
1 /* 1 /*
2 * (C) 1999-2003 Lars Knoll (knoll@kde.org) 2 * (C) 1999-2003 Lars Knoll (knoll@kde.org)
3 * Copyright (C) 2004, 2006, 2007, 2012 Apple Inc. All rights reserved. 3 * Copyright (C) 2004, 2006, 2007, 2012 Apple Inc. All rights reserved.
4 * 4 *
5 * This library is free software; you can redistribute it and/or 5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Library General Public 6 * modify it under the terms of the GNU Library General Public
7 * License as published by the Free Software Foundation; either 7 * License as published by the Free Software Foundation; either
8 * version 2 of the License, or (at your option) any later version. 8 * version 2 of the License, or (at your option) any later version.
9 * 9 *
10 * This library is distributed in the hope that it will be useful, 10 * This library is distributed in the hope that it will be useful,
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
80 , m_defaultNamespace(o.m_defaultNamespace) 80 , m_defaultNamespace(o.m_defaultNamespace)
81 , m_hasSyntacticallyValidCSSHeader(o.m_hasSyntacticallyValidCSSHeader) 81 , m_hasSyntacticallyValidCSSHeader(o.m_hasSyntacticallyValidCSSHeader)
82 , m_didLoadErrorOccur(false) 82 , m_didLoadErrorOccur(false)
83 , m_isMutable(false) 83 , m_isMutable(false)
84 , m_isReferencedFromResource(false) 84 , m_isReferencedFromResource(false)
85 , m_hasFontFaceRule(o.m_hasFontFaceRule) 85 , m_hasFontFaceRule(o.m_hasFontFaceRule)
86 , m_hasMediaQueries(o.m_hasMediaQueries) 86 , m_hasMediaQueries(o.m_hasMediaQueries)
87 , m_hasSingleOwnerDocument(true) 87 , m_hasSingleOwnerDocument(true)
88 , m_parserContext(o.m_parserContext) 88 , m_parserContext(o.m_parserContext)
89 { 89 {
90 ASSERT(o.isCacheable());
91
92 // FIXME: Copy import rules. 90 // FIXME: Copy import rules.
93 ASSERT(o.m_importRules.isEmpty()); 91 ASSERT(o.m_importRules.isEmpty());
94 92
95 for (unsigned i = 0; i < m_childRules.size(); ++i) 93 for (unsigned i = 0; i < m_childRules.size(); ++i)
96 m_childRules[i] = o.m_childRules[i]->copy(); 94 m_childRules[i] = o.m_childRules[i]->copy();
97 } 95 }
98 96
99 StyleSheetContents::~StyleSheetContents() 97 StyleSheetContents::~StyleSheetContents()
100 { 98 {
101 } 99 }
102 100
103 void StyleSheetContents::setHasSyntacticallyValidCSSHeader(bool isValidCss) 101 void StyleSheetContents::setHasSyntacticallyValidCSSHeader(bool isValidCss)
104 { 102 {
105 if (!isValidCss) { 103 if (!isValidCss) {
106 if (Document* document = clientSingleOwnerDocument()) 104 if (Document* document = clientSingleOwnerDocument())
107 removeSheetFromCache(document); 105 removeSheetFromCache(document);
108 } 106 }
109 m_hasSyntacticallyValidCSSHeader = isValidCss; 107 m_hasSyntacticallyValidCSSHeader = isValidCss;
110 } 108 }
111 109
112 bool StyleSheetContents::isCacheable() const 110 bool StyleSheetContents::isCacheableForResource() const
113 { 111 {
114 // This would require dealing with multiple clients for load callbacks. 112 // This would require dealing with multiple clients for load callbacks.
115 if (!loadCompleted()) 113 if (!loadCompleted())
116 return false; 114 return false;
117 // FIXME: StyleSheets with media queries can't be cached because their RuleS et 115 // FIXME: StyleSheets with media queries can't be cached because their RuleS et
118 // is processed differently based off the media queries, which might resolve 116 // is processed differently based off the media queries, which might resolve
119 // differently depending on the context of the parent CSSStyleSheet (e.g. 117 // differently depending on the context of the parent CSSStyleSheet (e.g.
120 // if they are in differently sized iframes). Once RuleSets are media query 118 // if they are in differently sized iframes). Once RuleSets are media query
121 // agnostic, we can restore sharing of StyleSheetContents with medea queries . 119 // agnostic, we can restore sharing of StyleSheetContents with medea queries .
122 if (m_hasMediaQueries) 120 if (m_hasMediaQueries)
123 return false; 121 return false;
124 // FIXME: Support copying import rules. 122 // FIXME: Support copying import rules.
125 if (!m_importRules.isEmpty()) 123 if (!m_importRules.isEmpty())
126 return false; 124 return false;
127 // FIXME: Support cached stylesheets in import rules. 125 // FIXME: Support cached stylesheets in import rules.
128 if (m_ownerRule) 126 if (m_ownerRule)
129 return false; 127 return false;
130 if (m_didLoadErrorOccur) 128 if (m_didLoadErrorOccur)
131 return false; 129 return false;
132 // It is not the original sheet anymore. 130 // It is not the original sheet anymore.
133 if (m_isMutable) 131 if (m_isMutable)
134 return false; 132 return false;
135 // If the header is valid we are not going to need to check the SecurityOrig in. 133 // If the header is valid we are not going to need to check the SecurityOrig in.
136 // FIXME: Valid mime type avoids the check too. 134 // FIXME: Valid mime type avoids the check too.
137 if (!m_hasSyntacticallyValidCSSHeader) 135 if (!m_hasSyntacticallyValidCSSHeader)
138 return false; 136 return false;
139 return true; 137 return true;
140 } 138 }
141 139
140 bool StyleSheetContents::isCacheableForStyleElement() const
141 {
142 // FIXME: Support copying import rules.
143 if (!importRules().isEmpty())
144 return false;
145 // Until import rules are supported in cached sheets it's not possible for l oading to fail.
146 DCHECK(!didLoadErrorOccur());
147 // It is not the original sheet anymore.
148 if (isMutable())
149 return false;
150 if (!hasSyntacticallyValidCSSHeader())
151 return false;
152 return true;
153 }
154
155
142 void StyleSheetContents::parserAppendRule(StyleRuleBase* rule) 156 void StyleSheetContents::parserAppendRule(StyleRuleBase* rule)
143 { 157 {
144 if (rule->isImportRule()) { 158 if (rule->isImportRule()) {
145 // Parser enforces that @import rules come before anything else 159 // Parser enforces that @import rules come before anything else
146 ASSERT(m_childRules.isEmpty()); 160 ASSERT(m_childRules.isEmpty());
147 StyleRuleImport* importRule = toStyleRuleImport(rule); 161 StyleRuleImport* importRule = toStyleRuleImport(rule);
148 if (importRule->mediaQueries()) 162 if (importRule->mediaQueries())
149 setHasMediaQueries(); 163 setHasMediaQueries();
150 m_importRules.append(importRule); 164 m_importRules.append(importRule);
151 m_importRules.last()->setParentStyleSheet(this); 165 m_importRules.last()->setParentStyleSheet(this);
(...skipping 341 matching lines...) Expand 10 before | Expand all | Expand 10 after
493 case StyleRuleBase::Supports: 507 case StyleRuleBase::Supports:
494 case StyleRuleBase::Viewport: 508 case StyleRuleBase::Viewport:
495 break; 509 break;
496 } 510 }
497 } 511 }
498 return false; 512 return false;
499 } 513 }
500 514
501 bool StyleSheetContents::hasFailedOrCanceledSubresources() const 515 bool StyleSheetContents::hasFailedOrCanceledSubresources() const
502 { 516 {
503 ASSERT(isCacheable()); 517 ASSERT(isCacheableForResource());
504 return childRulesHaveFailedOrCanceledSubresources(m_childRules); 518 return childRulesHaveFailedOrCanceledSubresources(m_childRules);
505 } 519 }
506 520
507 Document* StyleSheetContents::clientSingleOwnerDocument() const 521 Document* StyleSheetContents::clientSingleOwnerDocument() const
508 { 522 {
509 if (!m_hasSingleOwnerDocument || clientSize() <= 0) 523 if (!m_hasSingleOwnerDocument || clientSize() <= 0)
510 return nullptr; 524 return nullptr;
511 525
512 if (m_loadingClients.size()) 526 if (m_loadingClients.size())
513 return (*m_loadingClients.begin())->ownerDocument(); 527 return (*m_loadingClients.begin())->ownerDocument();
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
568 582
569 void StyleSheetContents::removeSheetFromCache(Document* document) 583 void StyleSheetContents::removeSheetFromCache(Document* document)
570 { 584 {
571 ASSERT(document); 585 ASSERT(document);
572 document->styleEngine().removeSheet(this); 586 document->styleEngine().removeSheet(this);
573 } 587 }
574 588
575 void StyleSheetContents::setReferencedFromResource(bool referenced) 589 void StyleSheetContents::setReferencedFromResource(bool referenced)
576 { 590 {
577 ASSERT(referenced != m_isReferencedFromResource); 591 ASSERT(referenced != m_isReferencedFromResource);
578 ASSERT(isCacheable()); 592 ASSERT(isCacheableForResource());
579 m_isReferencedFromResource = referenced; 593 m_isReferencedFromResource = referenced;
580 } 594 }
581 595
582 RuleSet& StyleSheetContents::ensureRuleSet(const MediaQueryEvaluator& medium, Ad dRuleFlags addRuleFlags) 596 RuleSet& StyleSheetContents::ensureRuleSet(const MediaQueryEvaluator& medium, Ad dRuleFlags addRuleFlags)
583 { 597 {
584 if (!m_ruleSet) { 598 if (!m_ruleSet) {
585 m_ruleSet = RuleSet::create(); 599 m_ruleSet = RuleSet::create();
586 m_ruleSet->addRulesFromSheet(this, medium, addRuleFlags); 600 m_ruleSet->addRulesFromSheet(this, medium, addRuleFlags);
587 } 601 }
588 return *m_ruleSet.get(); 602 return *m_ruleSet.get();
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
661 visitor->trace(m_ownerRule); 675 visitor->trace(m_ownerRule);
662 visitor->trace(m_importRules); 676 visitor->trace(m_importRules);
663 visitor->trace(m_namespaceRules); 677 visitor->trace(m_namespaceRules);
664 visitor->trace(m_childRules); 678 visitor->trace(m_childRules);
665 visitor->trace(m_loadingClients); 679 visitor->trace(m_loadingClients);
666 visitor->trace(m_completedClients); 680 visitor->trace(m_completedClients);
667 visitor->trace(m_ruleSet); 681 visitor->trace(m_ruleSet);
668 } 682 }
669 683
670 } // namespace blink 684 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/css/StyleSheetContents.h ('k') | third_party/WebKit/Source/core/dom/StyleEngine.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698