Chromium Code Reviews| Index: Source/core/css/resolver/SharedStyleFinder.cpp |
| diff --git a/Source/core/css/resolver/SharedStyleFinder.cpp b/Source/core/css/resolver/SharedStyleFinder.cpp |
| index 3d6bd946ede52f6d8b674ec735b5c636ba0ee670..cabed4465bce686b0a26e5aed455c541ae1b393b 100644 |
| --- a/Source/core/css/resolver/SharedStyleFinder.cpp |
| +++ b/Source/core/css/resolver/SharedStyleFinder.cpp |
| @@ -157,6 +157,19 @@ bool SharedStyleFinder::sharingCandidateHasIdenticalStyleAffectingAttributes(Ele |
| return true; |
| } |
| +static bool ancestorChainAllShareStyle(Element* parentA, Element* parentB) |
| +{ |
| + while (parentA != parentB) { |
| + ASSERT(parentA && parentB); |
| + if (parentA->renderStyle() != parentB->renderStyle()) |
| + return false; |
| + |
| + parentA = parentA->parentElement(); |
| + parentB = parentB->parentElement(); |
|
esprehn
2013/10/19 09:10:09
I don't think this is safe. If parentA has a null
|
| + } |
| + return true; |
| +} |
| + |
| bool SharedStyleFinder::canShareStyleWithElement(Element& candidate) const |
| { |
| if (element() == candidate) |
| @@ -167,7 +180,7 @@ bool SharedStyleFinder::canShareStyleWithElement(Element& candidate) const |
| return false; |
| if (!parent) |
| return false; |
| - if (element().parentElement()->renderStyle() != parent->renderStyle()) |
| + if (!ancestorChainAllShareStyle(element().parentElement(), parent)) |
| return false; |
| if (style->unique()) |
| return false; |