| OLD | NEW |
| 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, 2013 Apple Inc.
All rights reserved. | 5 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 Apple Inc.
All rights 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 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 43 #include "core/css/CSSDefaultStyleSheets.h" | 43 #include "core/css/CSSDefaultStyleSheets.h" |
| 44 #include "core/css/CSSFontSelector.h" | 44 #include "core/css/CSSFontSelector.h" |
| 45 #include "core/css/CSSKeyframeRule.h" | 45 #include "core/css/CSSKeyframeRule.h" |
| 46 #include "core/css/CSSKeyframesRule.h" | 46 #include "core/css/CSSKeyframesRule.h" |
| 47 #include "core/css/CSSParser.h" | 47 #include "core/css/CSSParser.h" |
| 48 #include "core/css/CSSReflectValue.h" | 48 #include "core/css/CSSReflectValue.h" |
| 49 #include "core/css/CSSRuleList.h" | 49 #include "core/css/CSSRuleList.h" |
| 50 #include "core/css/CSSSelector.h" | 50 #include "core/css/CSSSelector.h" |
| 51 #include "core/css/CSSStyleRule.h" | 51 #include "core/css/CSSStyleRule.h" |
| 52 #include "core/css/CSSValueList.h" | 52 #include "core/css/CSSValueList.h" |
| 53 #include "core/css/CSSValuePool.h" |
| 53 #include "core/css/CSSVariableValue.h" | 54 #include "core/css/CSSVariableValue.h" |
| 54 #include "core/css/ElementRuleCollector.h" | 55 #include "core/css/ElementRuleCollector.h" |
| 55 #include "core/css/MediaQueryEvaluator.h" | 56 #include "core/css/MediaQueryEvaluator.h" |
| 56 #include "core/css/PageRuleCollector.h" | 57 #include "core/css/PageRuleCollector.h" |
| 57 #include "core/css/RuleSet.h" | 58 #include "core/css/RuleSet.h" |
| 58 #include "core/css/StylePropertySet.h" | 59 #include "core/css/StylePropertySet.h" |
| 59 #include "core/css/resolver/AnimatedStyleBuilder.h" | 60 #include "core/css/resolver/AnimatedStyleBuilder.h" |
| 60 #include "core/css/resolver/MatchResult.h" | 61 #include "core/css/resolver/MatchResult.h" |
| 61 #include "core/css/resolver/MediaQueryResult.h" | 62 #include "core/css/resolver/MediaQueryResult.h" |
| 62 #include "core/css/resolver/SharedStyleFinder.h" | 63 #include "core/css/resolver/SharedStyleFinder.h" |
| 63 #include "core/css/resolver/StyleAdjuster.h" | 64 #include "core/css/resolver/StyleAdjuster.h" |
| 64 #include "core/css/resolver/StyleBuilder.h" | 65 #include "core/css/resolver/StyleBuilder.h" |
| 65 #include "core/css/resolver/ViewportStyleResolver.h" | 66 #include "core/css/resolver/ViewportStyleResolver.h" |
| 66 #include "core/dom/DocumentStyleSheetCollection.h" | 67 #include "core/dom/DocumentStyleSheetCollection.h" |
| 67 #include "core/dom/NodeRenderStyle.h" | 68 #include "core/dom/NodeRenderStyle.h" |
| 68 #include "core/dom/NodeRenderingContext.h" | 69 #include "core/dom/NodeRenderingContext.h" |
| 69 #include "core/dom/Text.h" | 70 #include "core/dom/Text.h" |
| 70 #include "core/dom/shadow/ElementShadow.h" | 71 #include "core/dom/shadow/ElementShadow.h" |
| 71 #include "core/dom/shadow/ShadowRoot.h" | 72 #include "core/dom/shadow/ShadowRoot.h" |
| 72 #include "core/html/HTMLIFrameElement.h" | 73 #include "core/html/HTMLIFrameElement.h" |
| 73 #include "core/inspector/InspectorInstrumentation.h" | 74 #include "core/inspector/InspectorInstrumentation.h" |
| 74 #include "core/page/Frame.h" | 75 #include "core/page/Frame.h" |
| 75 #include "core/page/FrameView.h" | 76 #include "core/page/FrameView.h" |
| 77 #include "core/page/PageGroup.h" |
| 76 #include "core/rendering/RenderView.h" | 78 #include "core/rendering/RenderView.h" |
| 77 #include "core/rendering/style/KeyframeList.h" | 79 #include "core/rendering/style/KeyframeList.h" |
| 78 #include "core/rendering/style/StyleCustomFilterProgramCache.h" | 80 #include "core/rendering/style/StyleCustomFilterProgramCache.h" |
| 79 #include "core/svg/SVGDocumentExtensions.h" | 81 #include "core/svg/SVGDocumentExtensions.h" |
| 80 #include "core/svg/SVGElement.h" | 82 #include "core/svg/SVGElement.h" |
| 81 #include "core/svg/SVGFontFaceElement.h" | 83 #include "core/svg/SVGFontFaceElement.h" |
| 82 #include "wtf/StdLibExtras.h" | 84 #include "wtf/StdLibExtras.h" |
| 83 #include "wtf/Vector.h" | 85 #include "wtf/Vector.h" |
| 84 | 86 |
| 85 using namespace std; | 87 using namespace std; |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 130 m_medium = adoptPtr(new MediaQueryEvaluator("all")); | 132 m_medium = adoptPtr(new MediaQueryEvaluator("all")); |
| 131 | 133 |
| 132 if (root) | 134 if (root) |
| 133 m_rootDefaultStyle = styleForElement(root, 0, DisallowStyleSharing, Matc
hOnlyUserAgentRules); | 135 m_rootDefaultStyle = styleForElement(root, 0, DisallowStyleSharing, Matc
hOnlyUserAgentRules); |
| 134 | 136 |
| 135 if (m_rootDefaultStyle && view) | 137 if (m_rootDefaultStyle && view) |
| 136 m_medium = adoptPtr(new MediaQueryEvaluator(view->mediaType(), view->fra
me(), m_rootDefaultStyle.get())); | 138 m_medium = adoptPtr(new MediaQueryEvaluator(view->mediaType(), view->fra
me(), m_rootDefaultStyle.get())); |
| 137 | 139 |
| 138 m_styleTree.clear(); | 140 m_styleTree.clear(); |
| 139 | 141 |
| 142 if (document->isXHTMLMobileProfile()) { |
| 143 Vector<String> whitelist; |
| 144 whitelist.append(document->url()); |
| 145 static const char* sheet = "@viewport{-internal-priority:1;width:auto;he
ight:auto;zoom:1;}"; |
| 146 document->page()->group().addUserStyleSheet(sheet, KURL(), whitelist, Ve
ctor<String>(), InjectInAllFrames, UserStyleAuthorLevel, InjectInExistingDocumen
ts); |
| 147 } |
| 148 |
| 140 DocumentStyleSheetCollection* styleSheetCollection = document->styleSheetCol
lection(); | 149 DocumentStyleSheetCollection* styleSheetCollection = document->styleSheetCol
lection(); |
| 141 m_ruleSets.initUserStyle(styleSheetCollection, *m_medium, *this); | 150 m_ruleSets.initUserStyle(styleSheetCollection, *m_medium, *this); |
| 142 | 151 |
| 143 #if ENABLE(SVG_FONTS) | 152 #if ENABLE(SVG_FONTS) |
| 144 if (document->svgExtensions()) { | 153 if (document->svgExtensions()) { |
| 145 const HashSet<SVGFontFaceElement*>& svgFontFaceElements = document->svgE
xtensions()->svgFontFaceElements(); | 154 const HashSet<SVGFontFaceElement*>& svgFontFaceElements = document->svgE
xtensions()->svgFontFaceElements(); |
| 146 HashSet<SVGFontFaceElement*>::const_iterator end = svgFontFaceElements.e
nd(); | 155 HashSet<SVGFontFaceElement*>::const_iterator end = svgFontFaceElements.e
nd(); |
| 147 for (HashSet<SVGFontFaceElement*>::const_iterator it = svgFontFaceElemen
ts.begin(); it != end; ++it) | 156 for (HashSet<SVGFontFaceElement*>::const_iterator it = svgFontFaceElemen
ts.begin(); it != end; ++it) |
| 148 fontSelector()->addFontFaceRule((*it)->fontFaceRule()); | 157 fontSelector()->addFontFaceRule((*it)->fontFaceRule()); |
| 149 } | 158 } |
| 150 #endif | 159 #endif |
| 151 | 160 |
| 152 styleSheetCollection->appendActiveAuthorStyleSheets(this); | 161 styleSheetCollection->appendActiveAuthorStyleSheets(this); |
| 153 } | 162 } |
| 154 | 163 |
| 155 void StyleResolver::appendAuthorStyleSheets(unsigned firstNew, const Vector<RefP
tr<CSSStyleSheet> >& styleSheets) | 164 void StyleResolver::appendAuthorStyleSheets(unsigned firstNew, const Vector<RefP
tr<CSSStyleSheet> >& styleSheets) |
| 156 { | 165 { |
| 157 // This handles sheets added to the end of the stylesheet list only. In othe
r cases the style resolver | 166 // This handles sheets added to the end of the stylesheet list only. In othe
r cases the style resolver |
| 158 // needs to be reconstructed. To handle insertions too the rule order number
s would need to be updated. | 167 // needs to be reconstructed. To handle insertions too the rule order number
s would need to be updated. |
| 159 unsigned size = styleSheets.size(); | 168 unsigned size = styleSheets.size(); |
| 160 for (unsigned i = firstNew; i < size; ++i) { | 169 for (unsigned i = firstNew; i < size; ++i) { |
| 161 CSSStyleSheet* cssSheet = styleSheets[i].get(); | 170 CSSStyleSheet* cssSheet = styleSheets[i].get(); |
| 171 |
| 162 ASSERT(!cssSheet->disabled()); | 172 ASSERT(!cssSheet->disabled()); |
| 163 if (cssSheet->mediaQueries() && !m_medium->eval(cssSheet->mediaQueries()
, this)) | 173 if (cssSheet->mediaQueries() && !m_medium->eval(cssSheet->mediaQueries()
, this)) |
| 164 continue; | 174 continue; |
| 165 | 175 |
| 166 StyleSheetContents* sheet = cssSheet->contents(); | 176 StyleSheetContents* sheet = cssSheet->contents(); |
| 167 ScopedStyleResolver* resolver = ensureScopedStyleResolver(ScopedStyleRes
olver::scopingNodeFor(cssSheet)); | 177 ScopedStyleResolver* resolver = ensureScopedStyleResolver(ScopedStyleRes
olver::scopingNodeFor(cssSheet)); |
| 168 ASSERT(resolver); | 178 ASSERT(resolver); |
| 169 resolver->addRulesFromSheet(sheet, *m_medium, this); | 179 resolver->addRulesFromSheet(sheet, *m_medium, this); |
| 170 m_inspectorCSSOMWrappers.collectFromStyleSheetIfNeeded(cssSheet); | 180 m_inspectorCSSOMWrappers.collectFromStyleSheetIfNeeded(cssSheet); |
| 171 } | 181 } |
| 172 } | 182 } |
| 173 | 183 |
| 174 void StyleResolver::finishAppendAuthorStyleSheets() | 184 void StyleResolver::finishAppendAuthorStyleSheets() |
| 175 { | 185 { |
| 176 collectFeatures(); | 186 collectFeatures(); |
| 177 | 187 |
| 178 if (document()->renderer() && document()->renderer()->style()) | 188 if (document()->renderer() && document()->renderer()->style()) |
| 179 document()->renderer()->style()->font().update(fontSelector()); | 189 document()->renderer()->style()->font().update(fontSelector()); |
| 180 | 190 |
| 181 if (RuntimeEnabledFeatures::cssViewportEnabled()) | 191 collectViewportRules(); |
| 182 collectViewportRules(); | |
| 183 } | 192 } |
| 184 | 193 |
| 185 void StyleResolver::resetAuthorStyle(const ContainerNode* scopingNode) | 194 void StyleResolver::resetAuthorStyle(const ContainerNode* scopingNode) |
| 186 { | 195 { |
| 187 ScopedStyleResolver* resolver = scopingNode ? m_styleTree.scopedStyleResolve
rFor(scopingNode) : m_styleTree.scopedStyleResolverForDocument(); | 196 ScopedStyleResolver* resolver = scopingNode ? m_styleTree.scopedStyleResolve
rFor(scopingNode) : m_styleTree.scopedStyleResolverForDocument(); |
| 188 if (!resolver) | 197 if (!resolver) |
| 189 return; | 198 return; |
| 190 | 199 |
| 191 m_ruleSets.shadowDistributedRules().reset(scopingNode); | 200 m_ruleSets.shadowDistributedRules().reset(scopingNode); |
| 192 | 201 |
| (...skipping 830 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1023 m_styleResourceLoader.loadPendingResources(state.style(), state.elementStyle
Resources()); | 1032 m_styleResourceLoader.loadPendingResources(state.style(), state.elementStyle
Resources()); |
| 1024 | 1033 |
| 1025 document()->didAccessStyleResolver(); | 1034 document()->didAccessStyleResolver(); |
| 1026 | 1035 |
| 1027 // Now return the style. | 1036 // Now return the style. |
| 1028 return state.takeStyle(); | 1037 return state.takeStyle(); |
| 1029 } | 1038 } |
| 1030 | 1039 |
| 1031 void StyleResolver::collectViewportRules() | 1040 void StyleResolver::collectViewportRules() |
| 1032 { | 1041 { |
| 1033 ASSERT(RuntimeEnabledFeatures::cssViewportEnabled()); | |
| 1034 | |
| 1035 collectViewportRules(CSSDefaultStyleSheets::defaultStyle); | 1042 collectViewportRules(CSSDefaultStyleSheets::defaultStyle); |
| 1036 if (m_ruleSets.userStyle()) | 1043 if (m_ruleSets.userStyle()) |
| 1037 collectViewportRules(m_ruleSets.userStyle()); | 1044 collectViewportRules(m_ruleSets.userStyle()); |
| 1038 | 1045 |
| 1046 // OK to collect here for viewport meta etc, only the parser doesn't allow a
ddition |
| 1047 // of @viewport with the runtime check. |
| 1039 if (ScopedStyleResolver* scopedResolver = m_styleTree.scopedStyleResolverFor
Document()) | 1048 if (ScopedStyleResolver* scopedResolver = m_styleTree.scopedStyleResolverFor
Document()) |
| 1040 scopedResolver->collectViewportRulesTo(this); | 1049 scopedResolver->collectViewportRulesTo(this); |
| 1041 | 1050 |
| 1042 viewportStyleResolver()->resolve(); | 1051 viewportStyleResolver()->resolve(); |
| 1043 } | 1052 } |
| 1044 | 1053 |
| 1045 void StyleResolver::collectViewportRules(RuleSet* rules) | 1054 void StyleResolver::collectViewportRules(RuleSet* rules) |
| 1046 { | 1055 { |
| 1047 ASSERT(RuntimeEnabledFeatures::cssViewportEnabled()); | |
| 1048 | |
| 1049 rules->compactRulesIfNeeded(); | 1056 rules->compactRulesIfNeeded(); |
| 1050 | 1057 |
| 1051 const Vector<StyleRuleViewport*>& viewportRules = rules->viewportRules(); | 1058 const Vector<StyleRuleViewport*>& viewportRules = rules->viewportRules(); |
| 1052 for (size_t i = 0; i < viewportRules.size(); ++i) | 1059 for (size_t i = 0; i < viewportRules.size(); ++i) |
| 1053 viewportStyleResolver()->addViewportRule(viewportRules[i]); | 1060 viewportStyleResolver()->addViewportRule(viewportRules[i]); |
| 1054 } | 1061 } |
| 1055 | 1062 |
| 1056 PassRefPtr<RenderStyle> StyleResolver::defaultStyleForElement() | 1063 PassRefPtr<RenderStyle> StyleResolver::defaultStyleForElement() |
| 1057 { | 1064 { |
| 1058 StyleResolverState state(document(), 0); | 1065 StyleResolverState state(document(), 0); |
| (...skipping 437 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1496 m_viewportDependentMediaQueryResults.append(adoptPtr(new MediaQueryResult(*e
xpr, result))); | 1503 m_viewportDependentMediaQueryResults.append(adoptPtr(new MediaQueryResult(*e
xpr, result))); |
| 1497 } | 1504 } |
| 1498 | 1505 |
| 1499 bool StyleResolver::affectedByViewportChange() const | 1506 bool StyleResolver::affectedByViewportChange() const |
| 1500 { | 1507 { |
| 1501 unsigned s = m_viewportDependentMediaQueryResults.size(); | 1508 unsigned s = m_viewportDependentMediaQueryResults.size(); |
| 1502 for (unsigned i = 0; i < s; i++) { | 1509 for (unsigned i = 0; i < s; i++) { |
| 1503 if (m_medium->eval(&m_viewportDependentMediaQueryResults[i]->m_expressio
n) != m_viewportDependentMediaQueryResults[i]->m_result) | 1510 if (m_medium->eval(&m_viewportDependentMediaQueryResults[i]->m_expressio
n) != m_viewportDependentMediaQueryResults[i]->m_result) |
| 1504 return true; | 1511 return true; |
| 1505 } | 1512 } |
| 1513 |
| 1506 return false; | 1514 return false; |
| 1507 } | 1515 } |
| 1508 | 1516 |
| 1509 #ifdef STYLE_STATS | 1517 #ifdef STYLE_STATS |
| 1510 StyleSharingStats StyleResolver::m_styleSharingStats; | 1518 StyleSharingStats StyleResolver::m_styleSharingStats; |
| 1511 | 1519 |
| 1512 static void printStyleStats(unsigned searches, unsigned elementsEligibleForShari
ng, unsigned stylesShared, unsigned searchFoundSiblingForSharing, unsigned searc
hesMissedSharing, | 1520 static void printStyleStats(unsigned searches, unsigned elementsEligibleForShari
ng, unsigned stylesShared, unsigned searchFoundSiblingForSharing, unsigned searc
hesMissedSharing, |
| 1513 unsigned matchedPropertiesSearches, unsigned matchedPropertiesHit, unsigned
matchedPropertiesSharedInheritedHit, unsigned matchedPropertiesToCache, unsigned
matchedPropertiesEnteredIntoCache) | 1521 unsigned matchedPropertiesSearches, unsigned matchedPropertiesHit, unsigned
matchedPropertiesSharedInheritedHit, unsigned matchedPropertiesToCache, unsigned
matchedPropertiesEnteredIntoCache) |
| 1514 { | 1522 { |
| 1515 double percentOfElementsSharingStyle = (stylesShared * 100.0) / searches; | 1523 double percentOfElementsSharingStyle = (stylesShared * 100.0) / searches; |
| (...skipping 19 matching lines...) Expand all Loading... |
| 1535 m_matchedPropertiesSearches, m_matchedPropertiesHit, m_matchedProperties
SharedInheritedHit, m_matchedPropertiesToCache, m_matchedPropertiesEnteredIntoCa
che); | 1543 m_matchedPropertiesSearches, m_matchedPropertiesHit, m_matchedProperties
SharedInheritedHit, m_matchedPropertiesToCache, m_matchedPropertiesEnteredIntoCa
che); |
| 1536 | 1544 |
| 1537 fprintf(stderr, "Total:\n"); | 1545 fprintf(stderr, "Total:\n"); |
| 1538 printStyleStats(m_totalSearches, m_totalElementsEligibleForSharing, m_totalS
tylesShared, m_totalSearchFoundSiblingForSharing, m_totalSearchesMissedSharing, | 1546 printStyleStats(m_totalSearches, m_totalElementsEligibleForSharing, m_totalS
tylesShared, m_totalSearchFoundSiblingForSharing, m_totalSearchesMissedSharing, |
| 1539 m_totalMatchedPropertiesSearches, m_totalMatchedPropertiesHit, m_totalMa
tchedPropertiesSharedInheritedHit, m_totalMatchedPropertiesToCache, m_totalMatch
edPropertiesEnteredIntoCache); | 1547 m_totalMatchedPropertiesSearches, m_totalMatchedPropertiesHit, m_totalMa
tchedPropertiesSharedInheritedHit, m_totalMatchedPropertiesToCache, m_totalMatch
edPropertiesEnteredIntoCache); |
| 1540 fprintf(stderr, "-----------------------------------------------------------
---------------------\n"); | 1548 fprintf(stderr, "-----------------------------------------------------------
---------------------\n"); |
| 1541 } | 1549 } |
| 1542 #endif | 1550 #endif |
| 1543 | 1551 |
| 1544 } // namespace WebCore | 1552 } // namespace WebCore |
| OLD | NEW |