⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 276547 in webkit


Ignore:
Timestamp:
Apr 24, 2021, 12:41:54 AM (5 years ago)
Author:
commit-queue@webkit.org
Message:

Move selectedOptions cache invalidation timing
https://bugs.webkit.org/show_bug.cgi?id=224894

Patch by Rob Buis <rbuis@igalia.com> on 2021-04-24
Reviewed by Ryosuke Niwa.

Source/WebCore:

Move selectedOptions cache invalidation timing out
of setSelectedState, having it in setSelectedState
can cause selectedOptions cache invalidation while
determining the cache.

Test: fast/dom/HTMLSelectElement/selected-options-item-crash.html

  • html/HTMLOptionElement.cpp:

(WebCore::HTMLOptionElement::setSelectedState):

  • html/HTMLSelectElement.cpp:

(WebCore::HTMLSelectElement::updateListBoxSelection):
(WebCore::HTMLSelectElement::selectOption):
(WebCore::HTMLSelectElement::deselectItemsWithoutValidation):
(WebCore::HTMLSelectElement::restoreFormControlState):
(WebCore::HTMLSelectElement::reset):
(WebCore::HTMLSelectElement::updateSelectedState):

LayoutTests:

Add test for this.

  • fast/dom/HTMLSelectElement/selected-options-item-crash-expected.txt: Added.
  • fast/dom/HTMLSelectElement/selected-options-item-crash.html: Added.
Location:
trunk
Files:
2 added
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r276526 r276547  
     12021-04-24  Rob Buis  <rbuis@igalia.com>
     2
     3        Move selectedOptions cache invalidation timing
     4        https://bugs.webkit.org/show_bug.cgi?id=224894
     5
     6        Reviewed by Ryosuke Niwa.
     7
     8        Add test for this.
     9
     10        * fast/dom/HTMLSelectElement/selected-options-item-crash-expected.txt: Added.
     11        * fast/dom/HTMLSelectElement/selected-options-item-crash.html: Added.
     12
    1132021-04-23  Chris Dumez  <cdumez@apple.com>
    214
  • trunk/Source/WebCore/ChangeLog

    r276546 r276547  
     12021-04-24  Rob Buis  <rbuis@igalia.com>
     2
     3        Move selectedOptions cache invalidation timing
     4        https://bugs.webkit.org/show_bug.cgi?id=224894
     5
     6        Reviewed by Ryosuke Niwa.
     7
     8        Move selectedOptions cache invalidation timing out
     9        of setSelectedState, having it in setSelectedState
     10        can cause selectedOptions cache invalidation while
     11        determining the cache.
     12
     13        Test: fast/dom/HTMLSelectElement/selected-options-item-crash.html
     14
     15        * html/HTMLOptionElement.cpp:
     16        (WebCore::HTMLOptionElement::setSelectedState):
     17        * html/HTMLSelectElement.cpp:
     18        (WebCore::HTMLSelectElement::updateListBoxSelection):
     19        (WebCore::HTMLSelectElement::selectOption):
     20        (WebCore::HTMLSelectElement::deselectItemsWithoutValidation):
     21        (WebCore::HTMLSelectElement::restoreFormControlState):
     22        (WebCore::HTMLSelectElement::reset):
     23        (WebCore::HTMLSelectElement::updateSelectedState):
     24
    1252021-04-23  Ian Gilbert  <iang@apple.com>
    226
  • trunk/Source/WebCore/html/HTMLOptionElement.cpp

    r275161 r276547  
    235235    m_isSelected = selected;
    236236    invalidateStyleForSubtree();
    237 
    238     if (RefPtr<HTMLSelectElement> select = ownerSelectElement())
    239         select->invalidateSelectedItems();
    240237}
    241238
  • trunk/Source/WebCore/html/HTMLSelectElement.cpp

    r261013 r276547  
    656656    }
    657657
     658    invalidateSelectedItems();
    658659    scrollToSelection();
    659660    updateValidity();
     
    882883    }
    883884
     885    invalidateSelectedItems();
    884886    updateValidity();
    885887
     
    963965            downcast<HTMLOptionElement>(*element).setSelectedState(false);
    964966    }
     967    invalidateSelectedItems();
    965968}
    966969
     
    10281031    }
    10291032
     1033    invalidateSelectedItems();
    10301034    setOptionsChangedOnRenderer();
    10311035    updateValidity();
     
    10861090        firstOption->setSelectedState(true);
    10871091
     1092    invalidateSelectedItems();
    10881093    setOptionsChangedOnRenderer();
    10891094    invalidateStyleForSubtree();
     
    13221327        setActiveSelectionAnchorIndex(listIndex);
    13231328
     1329    invalidateSelectedItems();
    13241330    setActiveSelectionEndIndex(listIndex);
    13251331    updateListBoxSelection(!multiSelect);
Note: See TracChangeset for help on using the changeset viewer.