Changeset 162843 in webkit


Ignore:
Timestamp:
Jan 27, 2014, 9:12:46 AM (11 years ago)
Author:
Antti Koivisto
Message:

REGRESSION(r133214): Don't invalidate style when adding classes that don't match rules
https://bugs.webkit.org/show_bug.cgi?id=126177

Reviewed by Anders Carlsson.

Spotted by Elliott Sprehn in Chromium.

  • dom/Element.cpp:

(WebCore::checkSelectorForClassChange):

Remove unnecessary templating.

(WebCore::Element::classAttributeChanged):

Fix logic error with 'continue'.

Location:
trunk/Source/WebCore
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r162842 r162843  
     12014-01-27  Antti Koivisto  <antti@apple.com>
     2
     3        REGRESSION(r133214): Don't invalidate style when adding classes that don't match rules
     4        https://bugs.webkit.org/show_bug.cgi?id=126177
     5
     6        Reviewed by Anders Carlsson.
     7       
     8        Spotted by Elliott Sprehn in Chromium.
     9
     10        * dom/Element.cpp:
     11        (WebCore::checkSelectorForClassChange):
     12       
     13            Remove unnecessary templating.
     14
     15        (WebCore::Element::classAttributeChanged):
     16       
     17            Fix logic error with 'continue'.
     18
    1192014-01-27  Brendan Long  <b.long@cablelabs.com>
    220
  • trunk/Source/WebCore/dom/Element.cpp

    r162821 r162843  
    11541154}
    11551155
    1156 template<typename Checker>
    1157 static bool checkSelectorForClassChange(const SpaceSplitString& changedClasses, const Checker& checker)
     1156static bool checkSelectorForClassChange(const SpaceSplitString& changedClasses, const StyleResolver& styleResolver)
    11581157{
    11591158    unsigned changedSize = changedClasses.size();
    11601159    for (unsigned i = 0; i < changedSize; ++i) {
    1161         if (checker.hasSelectorForClass(changedClasses[i]))
     1160        if (styleResolver.hasSelectorForClass(changedClasses[i]))
    11621161            return true;
    11631162    }
     
    11651164}
    11661165
    1167 template<typename Checker>
    1168 static bool checkSelectorForClassChange(const SpaceSplitString& oldClasses, const SpaceSplitString& newClasses, const Checker& checker)
     1166static bool checkSelectorForClassChange(const SpaceSplitString& oldClasses, const SpaceSplitString& newClasses, const StyleResolver& styleResolver)
    11691167{
    11701168    unsigned oldSize = oldClasses.size();
    11711169    if (!oldSize)
    1172         return checkSelectorForClassChange(newClasses, checker);
     1170        return checkSelectorForClassChange(newClasses, styleResolver);
    11731171    BitVector remainingClassBits;
    11741172    remainingClassBits.ensureSize(oldSize);
     
    11761174    unsigned newSize = newClasses.size();
    11771175    for (unsigned i = 0; i < newSize; ++i) {
     1176        bool foundFromBoth = false;
    11781177        for (unsigned j = 0; j < oldSize; ++j) {
    11791178            if (newClasses[i] == oldClasses[j]) {
    11801179                remainingClassBits.quickSet(j);
    1181                 continue;
     1180                foundFromBoth = true;
    11821181            }
    11831182        }
    1184         if (checker.hasSelectorForClass(newClasses[i]))
     1183        if (foundFromBoth)
     1184            continue;
     1185        if (styleResolver.hasSelectorForClass(newClasses[i]))
    11851186            return true;
    11861187    }
     
    11891190        if (remainingClassBits.quickGet(i))
    11901191            continue;
    1191         if (checker.hasSelectorForClass(oldClasses[i]))
     1192        if (styleResolver.hasSelectorForClass(oldClasses[i]))
    11921193            return true;
    11931194    }
Note: See TracChangeset for help on using the changeset viewer.