Chromium Code Reviews| 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 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 150 // that sharing the style makes sense. Instead we should just not support st yle sharing | 150 // that sharing the style makes sense. Instead we should just not support st yle sharing |
| 151 // for them. | 151 // for them. |
| 152 if (element().hasTagName(progressTag)) { | 152 if (element().hasTagName(progressTag)) { |
| 153 if (element().shouldAppearIndeterminate() != candidate.shouldAppearIndet erminate()) | 153 if (element().shouldAppearIndeterminate() != candidate.shouldAppearIndet erminate()) |
| 154 return false; | 154 return false; |
| 155 } | 155 } |
| 156 | 156 |
| 157 return true; | 157 return true; |
| 158 } | 158 } |
| 159 | 159 |
| 160 static bool ancestorChainAllShareStyle(Element* parentA, Element* parentB) | |
| 161 { | |
| 162 while (parentA != parentB) { | |
| 163 ASSERT(parentA && parentB); | |
| 164 if (parentA->renderStyle() != parentB->renderStyle()) | |
| 165 return false; | |
| 166 | |
| 167 parentA = parentA->parentElement(); | |
| 168 parentB = parentB->parentElement(); | |
|
esprehn
2013/10/19 09:10:09
I don't think this is safe. If parentA has a null
| |
| 169 } | |
| 170 return true; | |
| 171 } | |
| 172 | |
| 160 bool SharedStyleFinder::canShareStyleWithElement(Element& candidate) const | 173 bool SharedStyleFinder::canShareStyleWithElement(Element& candidate) const |
| 161 { | 174 { |
| 162 if (element() == candidate) | 175 if (element() == candidate) |
| 163 return false; | 176 return false; |
| 164 Element* parent = candidate.parentElement(); | 177 Element* parent = candidate.parentElement(); |
| 165 RenderStyle* style = candidate.renderStyle(); | 178 RenderStyle* style = candidate.renderStyle(); |
| 166 if (!style) | 179 if (!style) |
| 167 return false; | 180 return false; |
| 168 if (!parent) | 181 if (!parent) |
| 169 return false; | 182 return false; |
| 170 if (element().parentElement()->renderStyle() != parent->renderStyle()) | 183 if (!ancestorChainAllShareStyle(element().parentElement(), parent)) |
| 171 return false; | 184 return false; |
| 172 if (style->unique()) | 185 if (style->unique()) |
| 173 return false; | 186 return false; |
| 174 if (style->hasUniquePseudoStyle()) | 187 if (style->hasUniquePseudoStyle()) |
| 175 return false; | 188 return false; |
| 176 if (candidate.tagQName() != element().tagQName()) | 189 if (candidate.tagQName() != element().tagQName()) |
| 177 return false; | 190 return false; |
| 178 if (candidate.inlineStyle()) | 191 if (candidate.inlineStyle()) |
| 179 return false; | 192 return false; |
| 180 if (candidate.needsStyleRecalc()) | 193 if (candidate.needsStyleRecalc()) |
| (...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 332 if (matchesRuleSet(m_siblingRuleSet) || matchesRuleSet(m_uncommonAttributeRu leSet)) | 345 if (matchesRuleSet(m_siblingRuleSet) || matchesRuleSet(m_uncommonAttributeRu leSet)) |
| 333 return 0; | 346 return 0; |
| 334 // Tracking child index requires unique style for each node. This may get se t by the sibling rule match above. | 347 // Tracking child index requires unique style for each node. This may get se t by the sibling rule match above. |
| 335 if (element().parentElement()->childrenSupportStyleSharing()) | 348 if (element().parentElement()->childrenSupportStyleSharing()) |
| 336 return 0; | 349 return 0; |
| 337 STYLE_STATS_ADD_STYLE_SHARED(); | 350 STYLE_STATS_ADD_STYLE_SHARED(); |
| 338 return shareElement->renderStyle(); | 351 return shareElement->renderStyle(); |
| 339 } | 352 } |
| 340 | 353 |
| 341 } | 354 } |
| OLD | NEW |