| 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 637 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 648 | 648 |
| 649 // Create the style | 649 // Create the style |
| 650 state.setStyle(ComputedStyle::clone(elementStyle)); | 650 state.setStyle(ComputedStyle::clone(elementStyle)); |
| 651 | 651 |
| 652 // We don't need to bother with !important. Since there is only ever one | 652 // We don't need to bother with !important. Since there is only ever one |
| 653 // decl, there's nothing to override. So just add the first properties. | 653 // decl, there's nothing to override. So just add the first properties. |
| 654 // We also don't need to bother with animation properties since the only | 654 // We also don't need to bother with animation properties since the only |
| 655 // relevant one is animation-timing-function and we special-case that in | 655 // relevant one is animation-timing-function and we special-case that in |
| 656 // CSSAnimations.cpp | 656 // CSSAnimations.cpp |
| 657 bool inheritedOnly = false; | 657 bool inheritedOnly = false; |
| 658 applyMatchedProperties<HighPropertyPriority>(state, result, false, result.fi
rstRule(), result.lastRule(), inheritedOnly); | 658 applyMatchedProperties<HighPropertyPriority>(state, result, false, result.be
gin(), result.end(), inheritedOnly); |
| 659 | 659 |
| 660 // If our font got dirtied, go ahead and update it now. | 660 // If our font got dirtied, go ahead and update it now. |
| 661 updateFont(state); | 661 updateFont(state); |
| 662 | 662 |
| 663 // Now do rest of the properties. | 663 // Now do rest of the properties. |
| 664 applyMatchedProperties<LowPropertyPriority>(state, result, false, result.fir
stRule(), result.lastRule(), inheritedOnly); | 664 applyMatchedProperties<LowPropertyPriority>(state, result, false, result.beg
in(), result.end(), inheritedOnly); |
| 665 | 665 |
| 666 loadPendingResources(state); | 666 loadPendingResources(state); |
| 667 | 667 |
| 668 didAccess(); | 668 didAccess(); |
| 669 | 669 |
| 670 return state.takeStyle(); | 670 return state.takeStyle(); |
| 671 } | 671 } |
| 672 | 672 |
| 673 // This function is used by the WebAnimations JavaScript API method animate(). | 673 // This function is used by the WebAnimations JavaScript API method animate(). |
| 674 // FIXME: Remove this when animate() switches away from resolution-dependent par
sing. | 674 // FIXME: Remove this when animate() switches away from resolution-dependent par
sing. |
| (...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 843 PageRuleCollector collector(rootElementStyle, pageIndex); | 843 PageRuleCollector collector(rootElementStyle, pageIndex); |
| 844 | 844 |
| 845 collector.matchPageRules(CSSDefaultStyleSheets::instance().defaultPrintStyle
()); | 845 collector.matchPageRules(CSSDefaultStyleSheets::instance().defaultPrintStyle
()); |
| 846 | 846 |
| 847 if (ScopedStyleResolver* scopedResolver = document().scopedStyleResolver()) | 847 if (ScopedStyleResolver* scopedResolver = document().scopedStyleResolver()) |
| 848 scopedResolver->matchPageRules(collector); | 848 scopedResolver->matchPageRules(collector); |
| 849 | 849 |
| 850 bool inheritedOnly = false; | 850 bool inheritedOnly = false; |
| 851 | 851 |
| 852 const MatchResult& result = collector.matchedResult(); | 852 const MatchResult& result = collector.matchedResult(); |
| 853 applyMatchedProperties<HighPropertyPriority>(state, result, false, result.fi
rstRule(), result.lastRule(), inheritedOnly); | 853 applyMatchedProperties<HighPropertyPriority>(state, result, false, result.be
gin(), result.end(), inheritedOnly); |
| 854 | 854 |
| 855 // If our font got dirtied, go ahead and update it now. | 855 // If our font got dirtied, go ahead and update it now. |
| 856 updateFont(state); | 856 updateFont(state); |
| 857 | 857 |
| 858 applyMatchedProperties<LowPropertyPriority>(state, result, false, result.fir
stRule(), result.lastRule(), inheritedOnly); | 858 applyMatchedProperties<LowPropertyPriority>(state, result, false, result.beg
in(), result.end(), inheritedOnly); |
| 859 | 859 |
| 860 loadPendingResources(state); | 860 loadPendingResources(state); |
| 861 | 861 |
| 862 didAccess(); | 862 didAccess(); |
| 863 | 863 |
| 864 // Now return the style. | 864 // Now return the style. |
| 865 return state.takeStyle(); | 865 return state.takeStyle(); |
| 866 } | 866 } |
| 867 | 867 |
| 868 PassRefPtr<ComputedStyle> StyleResolver::initialStyleForElement() | 868 PassRefPtr<ComputedStyle> StyleResolver::initialStyleForElement() |
| (...skipping 377 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1246 } | 1246 } |
| 1247 | 1247 |
| 1248 if (!CSSPropertyPriorityData<priority>::propertyHasPriority(property)) | 1248 if (!CSSPropertyPriorityData<priority>::propertyHasPriority(property)) |
| 1249 continue; | 1249 continue; |
| 1250 | 1250 |
| 1251 StyleBuilder::applyProperty(current.id(), state, current.value()); | 1251 StyleBuilder::applyProperty(current.id(), state, current.value()); |
| 1252 } | 1252 } |
| 1253 } | 1253 } |
| 1254 | 1254 |
| 1255 template <CSSPropertyPriority priority> | 1255 template <CSSPropertyPriority priority> |
| 1256 void StyleResolver::applyMatchedProperties(StyleResolverState& state, const Matc
hResult& matchResult, bool isImportant, int startIndex, int endIndex, bool inher
itedOnly) | 1256 void StyleResolver::applyMatchedProperties(StyleResolverState& state, const Matc
hResult& matchResult, bool isImportant, unsigned startIndex, unsigned endIndex,
bool inheritedOnly) |
| 1257 { | 1257 { |
| 1258 if (startIndex == -1) | 1258 if (startIndex == endIndex) |
| 1259 return; | 1259 return; |
| 1260 | 1260 |
| 1261 ASSERT(startIndex >= 0 && endIndex < static_cast<int>(matchResult.matchedPro
perties.size())); | 1261 ASSERT_WITH_SECURITY_IMPLICATION(endIndex <= matchResult.matchedProperties.s
ize()); |
| 1262 | 1262 |
| 1263 if (state.style()->insideLink() != NotInsideLink) { | 1263 if (state.style()->insideLink() != NotInsideLink) { |
| 1264 for (int i = startIndex; i <= endIndex; ++i) { | 1264 for (unsigned i = startIndex; i < endIndex; ++i) { |
| 1265 const MatchedProperties& matchedProperties = matchResult.matchedProp
erties[i]; | 1265 const MatchedProperties& matchedProperties = matchResult.matchedProp
erties[i]; |
| 1266 unsigned linkMatchType = matchedProperties.m_types.linkMatchType; | 1266 unsigned linkMatchType = matchedProperties.m_types.linkMatchType; |
| 1267 // FIXME: It would be nicer to pass these as arguments but that requ
ires changes in many places. | 1267 // FIXME: It would be nicer to pass these as arguments but that requ
ires changes in many places. |
| 1268 state.setApplyPropertyToRegularStyle(linkMatchType & CSSSelector::Ma
tchLink); | 1268 state.setApplyPropertyToRegularStyle(linkMatchType & CSSSelector::Ma
tchLink); |
| 1269 state.setApplyPropertyToVisitedLinkStyle(linkMatchType & CSSSelector
::MatchVisited); | 1269 state.setApplyPropertyToVisitedLinkStyle(linkMatchType & CSSSelector
::MatchVisited); |
| 1270 | 1270 |
| 1271 applyProperties<priority>(state, matchedProperties.properties.get(),
isImportant, inheritedOnly, static_cast<PropertyWhitelistType>(matchedPropertie
s.m_types.whitelistType)); | 1271 applyProperties<priority>(state, matchedProperties.properties.get(),
isImportant, inheritedOnly, static_cast<PropertyWhitelistType>(matchedPropertie
s.m_types.whitelistType)); |
| 1272 } | 1272 } |
| 1273 state.setApplyPropertyToRegularStyle(true); | 1273 state.setApplyPropertyToRegularStyle(true); |
| 1274 state.setApplyPropertyToVisitedLinkStyle(false); | 1274 state.setApplyPropertyToVisitedLinkStyle(false); |
| 1275 return; | 1275 return; |
| 1276 } | 1276 } |
| 1277 for (int i = startIndex; i <= endIndex; ++i) { | 1277 for (unsigned i = startIndex; i < endIndex; ++i) { |
| 1278 const MatchedProperties& matchedProperties = matchResult.matchedProperti
es[i]; | 1278 const MatchedProperties& matchedProperties = matchResult.matchedProperti
es[i]; |
| 1279 applyProperties<priority>(state, matchedProperties.properties.get(), isI
mportant, inheritedOnly, static_cast<PropertyWhitelistType>(matchedProperties.m_
types.whitelistType)); | 1279 applyProperties<priority>(state, matchedProperties.properties.get(), isI
mportant, inheritedOnly, static_cast<PropertyWhitelistType>(matchedProperties.m_
types.whitelistType)); |
| 1280 } | 1280 } |
| 1281 } | 1281 } |
| 1282 | 1282 |
| 1283 static unsigned computeMatchedPropertiesHash(const MatchedProperties* properties
, unsigned size) | 1283 static unsigned computeMatchedPropertiesHash(const MatchedProperties* properties
, unsigned size) |
| 1284 { | 1284 { |
| 1285 return StringHasher::hashMemory(properties, sizeof(MatchedProperties) * size
); | 1285 return StringHasher::hashMemory(properties, sizeof(MatchedProperties) * size
); |
| 1286 } | 1286 } |
| 1287 | 1287 |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1329 | 1329 |
| 1330 return; | 1330 return; |
| 1331 } | 1331 } |
| 1332 applyInheritedOnly = true; | 1332 applyInheritedOnly = true; |
| 1333 } | 1333 } |
| 1334 | 1334 |
| 1335 // Now we have all of the matched rules in the appropriate order. Walk the r
ules and apply | 1335 // Now we have all of the matched rules in the appropriate order. Walk the r
ules and apply |
| 1336 // high-priority properties first, i.e., those properties that other propert
ies depend on. | 1336 // high-priority properties first, i.e., those properties that other propert
ies depend on. |
| 1337 // The order is (1) high-priority not important, (2) high-priority important
, (3) normal not important | 1337 // The order is (1) high-priority not important, (2) high-priority important
, (3) normal not important |
| 1338 // and (4) normal important. | 1338 // and (4) normal important. |
| 1339 applyMatchedProperties<HighPropertyPriority>(state, matchResult, false, matc
hResult.firstRule(), matchResult.lastRule(), applyInheritedOnly); | 1339 applyMatchedProperties<HighPropertyPriority>(state, matchResult, false, matc
hResult.begin(), matchResult.end(), applyInheritedOnly); |
| 1340 applyMatchedProperties<HighPropertyPriority>(state, matchResult, true, match
Result.firstAuthorRule(), matchResult.lastAuthorRule(), applyInheritedOnly); | 1340 applyMatchedProperties<HighPropertyPriority>(state, matchResult, true, match
Result.beginAuthor(), matchResult.endAuthor(), applyInheritedOnly); |
| 1341 applyMatchedProperties<HighPropertyPriority>(state, matchResult, true, match
Result.firstUARule(), matchResult.lastUARule(), applyInheritedOnly); | 1341 applyMatchedProperties<HighPropertyPriority>(state, matchResult, true, match
Result.beginUA(), matchResult.endUA(), applyInheritedOnly); |
| 1342 | 1342 |
| 1343 if (UNLIKELY(isSVGForeignObjectElement(element))) { | 1343 if (UNLIKELY(isSVGForeignObjectElement(element))) { |
| 1344 // LayoutSVGRoot handles zooming for the whole SVG subtree, so foreignOb
ject content should not be scaled again. | 1344 // LayoutSVGRoot handles zooming for the whole SVG subtree, so foreignOb
ject content should not be scaled again. |
| 1345 // | 1345 // |
| 1346 // FIXME: The following hijacks the zoom property for foreignObject so t
hat children of foreignObject get the | 1346 // FIXME: The following hijacks the zoom property for foreignObject so t
hat children of foreignObject get the |
| 1347 // correct font-size in case of zooming. 'zoom' has HighPropertyPriority
, along with other font-related | 1347 // correct font-size in case of zooming. 'zoom' has HighPropertyPriority
, along with other font-related |
| 1348 // properties used as input to the FontBuilder, so resetting it here may
cause the FontBuilder to recompute the | 1348 // properties used as input to the FontBuilder, so resetting it here may
cause the FontBuilder to recompute the |
| 1349 // font used as inheritable font for foreignObject content. If we want t
o support zoom on foreignObject we'll | 1349 // font used as inheritable font for foreignObject content. If we want t
o support zoom on foreignObject we'll |
| 1350 // need to find another way of handling the SVG zoom model. | 1350 // need to find another way of handling the SVG zoom model. |
| 1351 state.setEffectiveZoom(ComputedStyle::initialZoom()); | 1351 state.setEffectiveZoom(ComputedStyle::initialZoom()); |
| 1352 } | 1352 } |
| 1353 | 1353 |
| 1354 if (cachedMatchedProperties && cachedMatchedProperties->computedStyle->effec
tiveZoom() != state.style()->effectiveZoom()) { | 1354 if (cachedMatchedProperties && cachedMatchedProperties->computedStyle->effec
tiveZoom() != state.style()->effectiveZoom()) { |
| 1355 state.fontBuilder().didChangeEffectiveZoom(); | 1355 state.fontBuilder().didChangeEffectiveZoom(); |
| 1356 applyInheritedOnly = false; | 1356 applyInheritedOnly = false; |
| 1357 } | 1357 } |
| 1358 | 1358 |
| 1359 // If our font got dirtied, go ahead and update it now. | 1359 // If our font got dirtied, go ahead and update it now. |
| 1360 updateFont(state); | 1360 updateFont(state); |
| 1361 | 1361 |
| 1362 // Many properties depend on the font. If it changes we just apply all prope
rties. | 1362 // Many properties depend on the font. If it changes we just apply all prope
rties. |
| 1363 if (cachedMatchedProperties && cachedMatchedProperties->computedStyle->fontD
escription() != state.style()->fontDescription()) | 1363 if (cachedMatchedProperties && cachedMatchedProperties->computedStyle->fontD
escription() != state.style()->fontDescription()) |
| 1364 applyInheritedOnly = false; | 1364 applyInheritedOnly = false; |
| 1365 | 1365 |
| 1366 // Now do the normal priority UA properties. | 1366 // Now do the normal priority UA properties. |
| 1367 applyMatchedProperties<LowPropertyPriority>(state, matchResult, false, match
Result.firstUARule(), matchResult.lastUARule(), applyInheritedOnly); | 1367 applyMatchedProperties<LowPropertyPriority>(state, matchResult, false, match
Result.beginUA(), matchResult.endUA(), applyInheritedOnly); |
| 1368 | 1368 |
| 1369 // Cache the UA properties to pass them to LayoutTheme in adjustComputedStyl
e. | 1369 // Cache the UA properties to pass them to LayoutTheme in adjustComputedStyl
e. |
| 1370 state.cacheUserAgentBorderAndBackground(); | 1370 state.cacheUserAgentBorderAndBackground(); |
| 1371 | 1371 |
| 1372 // Now do the author and user normal priority properties and all the !import
ant properties. | 1372 // Now do the author and user normal priority properties and all the !import
ant properties. |
| 1373 applyMatchedProperties<LowPropertyPriority>(state, matchResult, false, match
Result.firstAuthorRule(), matchResult.lastAuthorRule(), applyInheritedOnly); | 1373 applyMatchedProperties<LowPropertyPriority>(state, matchResult, false, match
Result.beginAuthor(), matchResult.endAuthor(), applyInheritedOnly); |
| 1374 applyMatchedProperties<LowPropertyPriority>(state, matchResult, true, matchR
esult.firstAuthorRule(), matchResult.lastAuthorRule(), applyInheritedOnly); | 1374 applyMatchedProperties<LowPropertyPriority>(state, matchResult, true, matchR
esult.beginAuthor(), matchResult.endAuthor(), applyInheritedOnly); |
| 1375 applyMatchedProperties<LowPropertyPriority>(state, matchResult, true, matchR
esult.firstUARule(), matchResult.lastUARule(), applyInheritedOnly); | 1375 applyMatchedProperties<LowPropertyPriority>(state, matchResult, true, matchR
esult.beginUA(), matchResult.endUA(), applyInheritedOnly); |
| 1376 | 1376 |
| 1377 loadPendingResources(state); | 1377 loadPendingResources(state); |
| 1378 | 1378 |
| 1379 if (!cachedMatchedProperties && cacheHash && MatchedPropertiesCache::isCache
able(element, *state.style(), *state.parentStyle())) { | 1379 if (!cachedMatchedProperties && cacheHash && MatchedPropertiesCache::isCache
able(element, *state.style(), *state.parentStyle())) { |
| 1380 INCREMENT_STYLE_STATS_COUNTER(*this, matchedPropertyCacheAdded); | 1380 INCREMENT_STYLE_STATS_COUNTER(*this, matchedPropertyCacheAdded); |
| 1381 m_matchedPropertiesCache.add(*state.style(), *state.parentStyle(), cache
Hash, matchResult); | 1381 m_matchedPropertiesCache.add(*state.style(), *state.parentStyle(), cache
Hash, matchResult); |
| 1382 } | 1382 } |
| 1383 | 1383 |
| 1384 ASSERT(!state.fontBuilder().fontDirty()); | 1384 ASSERT(!state.fontBuilder().fontDirty()); |
| 1385 } | 1385 } |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1483 visitor->trace(m_watchedSelectorsRules); | 1483 visitor->trace(m_watchedSelectorsRules); |
| 1484 visitor->trace(m_treeBoundaryCrossingRules); | 1484 visitor->trace(m_treeBoundaryCrossingRules); |
| 1485 visitor->trace(m_styleResourceLoader); | 1485 visitor->trace(m_styleResourceLoader); |
| 1486 visitor->trace(m_styleSharingLists); | 1486 visitor->trace(m_styleSharingLists); |
| 1487 visitor->trace(m_pendingStyleSheets); | 1487 visitor->trace(m_pendingStyleSheets); |
| 1488 visitor->trace(m_document); | 1488 visitor->trace(m_document); |
| 1489 #endif | 1489 #endif |
| 1490 } | 1490 } |
| 1491 | 1491 |
| 1492 } // namespace blink | 1492 } // namespace blink |
| OLD | NEW |