• Morten Stenshorne's avatar
    Reland: Floats and out-of-flow objects may not be adjacent to anonymous blocks. · b414bf17
    Morten Stenshorne authored
    Floats and out-of-flow objects need to be true layout siblings of the
    inlines, or rendering will be wrong. This means that such objects should
    never be siblings of anonymous blocks, but rather inside them. This
    already works correctly for initial layout tree building, and also for
    many DOM manipulations. However, code was missing to satisfy this
    requirement if we removed a regular block that was a sibling of an
    anonymous block and either a float or out-of-flow positioned object.
    
    This even caused a crash triggered by ruby code, which ended up mixing
    inline and block children within the same container. That is not
    allowed. This happened in the MoveAllChildrenIncludingFloatsTo() call
    inside LayoutRubyBase::MoveBlockChildren(). Added a DCHECK to
    MoveAllChildrenIncludingFloatsTo() (which could fail prior to this fix);
    When moving children from one container to another, either both or none
    of the containers must have inline children.
    
    This is a reland of https://chromium-review.googlesource.com/1102690
    with some modifications to avoid bug 853552.
    
    Bug: 852640
    Change-Id: I0f8a0aa5523e8fe60c841164d25aad088f4b728f
    Reviewed-on: https://chromium-review.googlesource.com/1104900
    Commit-Queue: Morten Stenshorne <mstensho@chromium.org>
    Commit-Queue: Emil A Eklund <eae@chromium.org>
    Reviewed-by: default avatarEmil A Eklund <eae@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#568196}
    b414bf17
toggle-float-add-continuation-crash.html 882 Bytes