• Aleks Totic's avatar
    [LayoutNG] Fix stale style on a fragment after paint invalidation · fe3d571e
    Aleks Totic authored
    This makes ~50 additional tests to pass, and 3 to fail.
    
    Paint invalidation can cause styles on a NGPhysicalFragment to
    get out of sync with LayoutObject styles.
    
    There were two ways to fix this, I found a) to be cleaner for now.
    
    a) Make PhysicalFragments fetch style from LayoutObject
    Tricky part here is that :first-line and overflow:ellipsis get
    special styles.
    
    b) Rebuild PhysicalFragment tree with a shallow clonewithstyle
    I was unable to find a clean way to trigger tree rebuild here.
    Sample experiment to convert paint invalidations into
    layout invalidations triggered 100s DCHECK(!NeedsLayout())
    Possible fix would be to trap all places that call NeedsLayout()
    with intent to relayout, and replace them with NeedsLayout() ||
    NeedsNGLayout()
    
    This does not fix all invalidation bugs. DisplayItems outside of
    LayoutObject tree do not get invalidated correctly.
    
    fast/css/first-letter-hover.html
    fast/history/visited-link-hover-emphasis-color.html
    
    Bug: 819372
    Cq-Include-Trybots: master.tryserver.blink:linux_trusty_blink_rel;master.tryserver.chromium.linux:linux_layout_tests_layout_ng;master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2
    Change-Id: Ia11f8288b8f45423762c870a43615707d6a0cc93
    Reviewed-on: https://chromium-review.googlesource.com/956552
    Commit-Queue: Aleks Totic <atotic@chromium.org>
    Reviewed-by: default avatarMorten Stenshorne <mstensho@chromium.org>
    Reviewed-by: default avatarEmil A Eklund <eae@chromium.org>
    Reviewed-by: default avatarKoji Ishii <kojii@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#542664}
    fe3d571e
enable-blink-features=LayoutNG 350 KB