Changeset 175641 in webkit


Ignore:
Timestamp:
Nov 5, 2014 1:26:28 PM (9 years ago)
Author:
hyatt@apple.com
Message:

Descendant ends up in wrong flow thread with nested columns and spans.
https://bugs.webkit.org/show_bug.cgi?id=137273

Reviewed by Simon Fraser.

Unskipped the two problematic span tests.

Source/WebCore:

  • rendering/RenderMultiColumnFlowThread.cpp:

(WebCore::isValidColumnSpanner):
Remove the guard and comment and added the assertion back in.

(WebCore::RenderMultiColumnFlowThread::flowThreadDescendantInserted):
Changed to no longer use handleSpannerRemoval. Because the spanner was removed from the flow thread's map,
handleSpannerRemoval was a no-op. So instead I just removed the placeholder by hand.

The second fix was to stop destroying the placeholder. Since the placeholder can just have been inserted, you
can't delete it, since otherwise code further up the stack will access the deleted object. For now, we just
leak the placeholder.

The third fix is to make sure the subtreeRoot is properly updated to be the new placeholder.

LayoutTests:

Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r175633 r175641  
     12014-11-04  David Hyatt  <hyatt@apple.com>
     2
     3        Descendant ends up in wrong flow thread with nested columns and spans.
     4        https://bugs.webkit.org/show_bug.cgi?id=137273
     5
     6        Reviewed by Simon Fraser.
     7
     8        Unskipped the two problematic span tests.
     9
     10        * TestExpectations:
     11
    1122014-11-05  Bem Jones-Bey  <bjonesbe@adobe.com>
    213
  • trunk/LayoutTests/TestExpectations

    r175633 r175641  
    104104# Expando properties on attribute nodes disappear
    105105webkit.org/b/88045 fast/dom/gc-attribute-node.html [ Failure Pass ]
    106 
    107 webkit.org/b/137316 fast/multicol/newmulticol/spanner-crash.html [ Crash Pass ]
    108106
    109107# These tests are incorrect in the CSS test suite and should be fixed there first.
     
    233231webkit.org/b/137883 transitions/created-while-suspended.html [ Failure Pass ]
    234232
    235 webkit.org/b/138145 fast/multicol/multicol-crazy-nesting.html [ Skip ]
    236 
    237233# Temporarily turn this off. Back on soon.
    238234webkit.org/b/138358 http/tests/multipart/stop-crash.html [ Skip ]
  • trunk/Source/WebCore/ChangeLog

    r175640 r175641  
     12014-11-04  David Hyatt  <hyatt@apple.com>
     2
     3        Descendant ends up in wrong flow thread with nested columns and spans.
     4        https://bugs.webkit.org/show_bug.cgi?id=137273
     5
     6        Reviewed by Simon Fraser.
     7
     8        Unskipped the two problematic span tests.
     9
     10        * rendering/RenderMultiColumnFlowThread.cpp:
     11        (WebCore::isValidColumnSpanner):
     12        Remove the guard and comment and added the assertion back in.
     13
     14        (WebCore::RenderMultiColumnFlowThread::flowThreadDescendantInserted):
     15        Changed to no longer use handleSpannerRemoval. Because the spanner was removed from the flow thread's map,
     16        handleSpannerRemoval was a no-op. So instead I just removed the placeholder by hand.
     17
     18        The second fix was to stop destroying the placeholder. Since the placeholder can just have been inserted, you
     19        can't delete it, since otherwise code further up the stack will access the deleted object. For now, we just
     20        leak the placeholder.
     21
     22        The third fix is to make sure the subtreeRoot is properly updated to be the new placeholder.
     23
    1242014-11-05  Andreas Kling  <akling@apple.com>
    225
  • trunk/Source/WebCore/rendering/RenderMultiColumnFlowThread.cpp

    r174875 r175641  
    243243{
    244244    // We assume that we're inside the flow thread. This function is not to be called otherwise.
    245     // ASSERT(descendant->isDescendantOf(flowThread));
    246     // FIXME: Put this back in when we figure out why spanner-crash.html is triggering it.
    247     // See https://bugs.webkit.org/show_bug.cgi?id=137273
    248     if (!descendant->isDescendantOf(flowThread))
    249         return false;
    250    
     245    ASSERT(descendant->isDescendantOf(flowThread));
     246
    251247    // First make sure that the renderer itself has the right properties for becoming a spanner.
    252248    RenderStyle& style = descendant->style();
     
    387383                // We have to nuke the placeholder, since the ancestor already lost the mapping to it when
    388384                // we shifted the placeholder down into this flow thread.
    389                 ancestorBlock.multiColumnFlowThread()->handleSpannerRemoval(spanner);
    390                 placeholder.destroy();
    391                
     385                if (subtreeRoot == descendant)
     386                    subtreeRoot = spanner;
     387                placeholder.parent()->removeChild(placeholder);
     388
    392389                // Now we process the spanner.
    393390                descendant = processPossibleSpannerDescendant(subtreeRoot, spanner);
Note: See TracChangeset for help on using the changeset viewer.