OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) | 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) |
4 * (C) 2001 Dirk Mueller (mueller@kde.org) | 4 * (C) 2001 Dirk Mueller (mueller@kde.org) |
5 * (C) 2006 Alexey Proskuryakov (ap@webkit.org) | 5 * (C) 2006 Alexey Proskuryakov (ap@webkit.org) |
6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2011, 2012 Apple Inc. All | 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2011, 2012 Apple Inc. All |
7 * rights reserved. | 7 * rights reserved. |
8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. | 8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. |
9 * (http://www.torchmobile.com/) | 9 * (http://www.torchmobile.com/) |
10 * Copyright (C) 2008, 2009, 2011, 2012 Google Inc. All rights reserved. | 10 * Copyright (C) 2008, 2009, 2011, 2012 Google Inc. All rights reserved. |
(...skipping 429 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
440 } | 440 } |
441 } | 441 } |
442 | 442 |
443 void StyleEngine::setRuleUsageTracker(StyleRuleUsageTracker* tracker) { | 443 void StyleEngine::setRuleUsageTracker(StyleRuleUsageTracker* tracker) { |
444 m_tracker = tracker; | 444 m_tracker = tracker; |
445 | 445 |
446 if (m_resolver) | 446 if (m_resolver) |
447 m_resolver->setRuleUsageTracker(m_tracker); | 447 m_resolver->setRuleUsageTracker(m_tracker); |
448 } | 448 } |
449 | 449 |
| 450 RuleSet* StyleEngine::ruleSetForSheet(CSSStyleSheet& sheet) { |
| 451 if (!sheet.matchesMediaQueries(ensureMediaQueryEvaluator())) |
| 452 return nullptr; |
| 453 |
| 454 AddRuleFlags addRuleFlags = RuleHasNoSpecialState; |
| 455 if (m_document->getSecurityOrigin()->canRequest(sheet.baseURL())) |
| 456 addRuleFlags = RuleHasDocumentSecurityOrigin; |
| 457 return &sheet.contents()->ensureRuleSet(*m_mediaQueryEvaluator, addRuleFlags); |
| 458 } |
| 459 |
450 void StyleEngine::createResolver() { | 460 void StyleEngine::createResolver() { |
451 m_resolver = StyleResolver::create(*m_document); | 461 m_resolver = StyleResolver::create(*m_document); |
452 | 462 |
453 m_resolver->setRuleUsageTracker(m_tracker); | 463 m_resolver->setRuleUsageTracker(m_tracker); |
454 | 464 |
455 // A scoped style resolver for document will be created during | 465 // A scoped style resolver for document will be created during |
456 // appendActiveAuthorStyleSheets if needed. | 466 // appendActiveAuthorStyleSheets if needed. |
457 appendActiveAuthorStyleSheets(); | 467 appendActiveAuthorStyleSheets(); |
458 finishAppendAuthorStyleSheets(); | 468 finishAppendAuthorStyleSheets(); |
459 } | 469 } |
(...skipping 682 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1142 const MediaQueryEvaluator& StyleEngine::ensureMediaQueryEvaluator() { | 1152 const MediaQueryEvaluator& StyleEngine::ensureMediaQueryEvaluator() { |
1143 if (!m_mediaQueryEvaluator) { | 1153 if (!m_mediaQueryEvaluator) { |
1144 if (document().frame()) | 1154 if (document().frame()) |
1145 m_mediaQueryEvaluator = new MediaQueryEvaluator(document().frame()); | 1155 m_mediaQueryEvaluator = new MediaQueryEvaluator(document().frame()); |
1146 else | 1156 else |
1147 m_mediaQueryEvaluator = new MediaQueryEvaluator("all"); | 1157 m_mediaQueryEvaluator = new MediaQueryEvaluator("all"); |
1148 } | 1158 } |
1149 return *m_mediaQueryEvaluator; | 1159 return *m_mediaQueryEvaluator; |
1150 } | 1160 } |
1151 | 1161 |
| 1162 bool StyleEngine::mediaQueryAffectedByViewportChange() { |
| 1163 const MediaQueryEvaluator& evaluator = ensureMediaQueryEvaluator(); |
| 1164 const auto& results = |
| 1165 m_globalRuleSet.ruleFeatureSet().viewportDependentMediaQueryResults(); |
| 1166 for (unsigned i = 0; i < results.size(); ++i) { |
| 1167 if (evaluator.eval(results[i]->expression()) != results[i]->result()) |
| 1168 return true; |
| 1169 } |
| 1170 return false; |
| 1171 } |
| 1172 |
| 1173 bool StyleEngine::mediaQueryAffectedByDeviceChange() { |
| 1174 const MediaQueryEvaluator& evaluator = ensureMediaQueryEvaluator(); |
| 1175 const auto& results = |
| 1176 m_globalRuleSet.ruleFeatureSet().deviceDependentMediaQueryResults(); |
| 1177 for (unsigned i = 0; i < results.size(); ++i) { |
| 1178 if (evaluator.eval(results[i]->expression()) != results[i]->result()) |
| 1179 return true; |
| 1180 } |
| 1181 return false; |
| 1182 } |
| 1183 |
1152 DEFINE_TRACE(StyleEngine) { | 1184 DEFINE_TRACE(StyleEngine) { |
1153 visitor->trace(m_document); | 1185 visitor->trace(m_document); |
1154 visitor->trace(m_injectedAuthorStyleSheets); | 1186 visitor->trace(m_injectedAuthorStyleSheets); |
1155 visitor->trace(m_inspectorStyleSheet); | 1187 visitor->trace(m_inspectorStyleSheet); |
1156 visitor->trace(m_documentStyleSheetCollection); | 1188 visitor->trace(m_documentStyleSheetCollection); |
1157 visitor->trace(m_styleSheetCollectionMap); | 1189 visitor->trace(m_styleSheetCollectionMap); |
1158 visitor->trace(m_dirtyTreeScopes); | 1190 visitor->trace(m_dirtyTreeScopes); |
1159 visitor->trace(m_activeTreeScopes); | 1191 visitor->trace(m_activeTreeScopes); |
1160 visitor->trace(m_treeBoundaryCrossingScopes); | 1192 visitor->trace(m_treeBoundaryCrossingScopes); |
1161 visitor->trace(m_globalRuleSet); | 1193 visitor->trace(m_globalRuleSet); |
1162 visitor->trace(m_resolver); | 1194 visitor->trace(m_resolver); |
1163 visitor->trace(m_viewportResolver); | 1195 visitor->trace(m_viewportResolver); |
1164 visitor->trace(m_mediaQueryEvaluator); | 1196 visitor->trace(m_mediaQueryEvaluator); |
1165 visitor->trace(m_styleInvalidator); | 1197 visitor->trace(m_styleInvalidator); |
1166 visitor->trace(m_fontSelector); | 1198 visitor->trace(m_fontSelector); |
1167 visitor->trace(m_textToSheetCache); | 1199 visitor->trace(m_textToSheetCache); |
1168 visitor->trace(m_sheetToTextCache); | 1200 visitor->trace(m_sheetToTextCache); |
1169 visitor->trace(m_tracker); | 1201 visitor->trace(m_tracker); |
1170 CSSFontSelectorClient::trace(visitor); | 1202 CSSFontSelectorClient::trace(visitor); |
1171 } | 1203 } |
1172 | 1204 |
1173 DEFINE_TRACE_WRAPPERS(StyleEngine) { | 1205 DEFINE_TRACE_WRAPPERS(StyleEngine) { |
1174 for (auto sheet : m_injectedAuthorStyleSheets) { | 1206 for (auto sheet : m_injectedAuthorStyleSheets) { |
1175 visitor->traceWrappers(sheet); | 1207 visitor->traceWrappers(sheet); |
1176 } | 1208 } |
1177 visitor->traceWrappers(m_documentStyleSheetCollection); | 1209 visitor->traceWrappers(m_documentStyleSheetCollection); |
1178 } | 1210 } |
1179 | 1211 |
1180 } // namespace blink | 1212 } // namespace blink |
OLD | NEW |