Changeset 87351 in webkit


Ignore:
Timestamp:
May 25, 2011 7:31:38 PM (13 years ago)
Author:
morrita@google.com
Message:

2011-05-24 MORITA Hajime <morrita@google.com>

RenderText with empty text is not created inside ShadowContentElement
https://bugs.webkit.org/show_bug.cgi?id=61111

  • Added tests that capture the probelem.
  • Updated expectations that were wrong.
  • fast/html/details-replace-summary-child.html: Added.
  • fast/html/details-replace-text.html: Added.
  • platform/gtk/fast/html/details-no-summary4-expected.txt:
  • platform/gtk/fast/html/details-open-javascript-expected.txt:
  • platform/gtk/fast/html/details-open4-expected.txt:
  • platform/mac/fast/html/details-add-details-child-2-expected.txt:
  • platform/mac/fast/html/details-no-summary4-expected.txt:
  • platform/mac/fast/html/details-open-javascript-expected.txt:
  • platform/mac/fast/html/details-open4-expected.txt:
  • platform/mac/fast/html/details-replace-summary-child-expected.png: Added.
  • platform/mac/fast/html/details-replace-summary-child-expected.txt: Added.
  • platform/mac/fast/html/details-replace-text-expected.png: Added.
  • platform/mac/fast/html/details-replace-text-expected.txt: Added.
  • platform/qt/fast/html/details-no-summary4-expected.txt:
  • platform/qt/fast/html/details-open-javascript-expected.txt:
  • platform/qt/fast/html/details-open4-expected.txt:

2011-05-24 MORITA Hajime <morrita@google.com>

Reviewed by Dimitri Glazkov.

RenderText with empty text is not created inside ShadowContentElement
https://bugs.webkit.org/show_bug.cgi?id=61111

  • Changed Text::rendererIsNeeded() to be shadow-aware.
  • previousRenderer(), nextRenderer() and parentRenderer() on NodeRenderingContext is now safe even if it's used with an attached node, which was originally used only during attach(). We need this change because these APIs are called inside CharacterData::updateRenderer() callstack.

Tests: fast/html/details-replace-summary-child.html

fast/html/details-replace-text.html

  • dom/NodeRenderingContext.cpp: (WebCore::NodeRenderingContext::NodeRenderingContext): (WebCore::NodeRenderingContext::nextRenderer): (WebCore::NodeRenderingContext::previousRenderer): (WebCore::NodeRenderingContext::parentRenderer): (WebCore::NodeRenderingContext::shouldCreateRenderer):
  • dom/NodeRenderingContext.h: (WebCore::NodeRenderingContext::parentNodeForRenderingAndStyle):
  • dom/Text.cpp: (WebCore::Text::rendererIsNeeded):
Location:
trunk
Files:
6 added
16 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r87350 r87351  
     12011-05-24  MORITA Hajime  <morrita@google.com>
     2
     3        RenderText with empty text is not created inside ShadowContentElement
     4        https://bugs.webkit.org/show_bug.cgi?id=61111
     5
     6        - Added tests that capture the probelem.
     7        - Updated expectations that were wrong.
     8
     9        * fast/html/details-replace-summary-child.html: Added.
     10        * fast/html/details-replace-text.html: Added.
     11        * platform/gtk/fast/html/details-no-summary4-expected.txt:
     12        * platform/gtk/fast/html/details-open-javascript-expected.txt:
     13        * platform/gtk/fast/html/details-open4-expected.txt:
     14        * platform/mac/fast/html/details-add-details-child-2-expected.txt:
     15        * platform/mac/fast/html/details-no-summary4-expected.txt:
     16        * platform/mac/fast/html/details-open-javascript-expected.txt:
     17        * platform/mac/fast/html/details-open4-expected.txt:
     18        * platform/mac/fast/html/details-replace-summary-child-expected.png: Added.
     19        * platform/mac/fast/html/details-replace-summary-child-expected.txt: Added.
     20        * platform/mac/fast/html/details-replace-text-expected.png: Added.
     21        * platform/mac/fast/html/details-replace-text-expected.txt: Added.
     22        * platform/qt/fast/html/details-no-summary4-expected.txt:
     23        * platform/qt/fast/html/details-open-javascript-expected.txt:
     24        * platform/qt/fast/html/details-open4-expected.txt:
     25
    1262011-05-25  Adam Klein  <adamk@chromium.org>
    227
  • trunk/LayoutTests/platform/chromium/test_expectations.txt

    r87350 r87351  
    41164116BUGCR83683 : fast/dom/HTMLLinkElement/prerender.html = TEXT
    41174117
     4118// Needs expectations
     4119BUGMORRITA : fast/html/details-replace-text.html = FAIL
     4120BUGMORRITA : fast/html/details-replace-summary-child.html = FAIL
     4121
    41184122// Regression from webkit r87118
    41194123BUGWK61342 MAC : fast/repaint/fixed-move-after-keyboard-scroll.html = IMAGE+TEXT
  • trunk/LayoutTests/platform/gtk/fast/html/details-no-summary4-expected.txt

    r84677 r87351  
    1111        RenderBlock (anonymous) at (0,19) size 784x29
    1212          RenderTextControl {INPUT} at (2,2) size 194x25 [bgcolor=#FFFFFF] [border: (2px inset #000000)]
    13           RenderText {#text} at (0,0) size 0x0
    1413layer at (13,32) size 188x19
    1514  RenderBlock {DIV} at (3,3) size 188x19
  • trunk/LayoutTests/platform/gtk/fast/html/details-open-javascript-expected.txt

    r84677 r87351  
    1111        RenderBlock (anonymous) at (0,19) size 784x29
    1212          RenderTextControl {INPUT} at (2,2) size 194x25 [bgcolor=#FFFFFF] [border: (2px inset #000000)]
    13           RenderText {#text} at (0,0) size 0x0
    1413      RenderDetails {DETAILS} at (0,48) size 784x19
    1514        RenderSummary {SUMMARY} at (0,0) size 784x19
  • trunk/LayoutTests/platform/gtk/fast/html/details-open4-expected.txt

    r84677 r87351  
    1111        RenderBlock (anonymous) at (0,19) size 784x29
    1212          RenderTextControl {INPUT} at (2,2) size 194x25 [bgcolor=#FFFFFF] [border: (2px inset #000000)]
    13           RenderText {#text} at (0,0) size 0x0
    1413layer at (13,32) size 188x19
    1514  RenderBlock {DIV} at (3,3) size 188x19
  • trunk/LayoutTests/platform/mac/fast/html/details-add-details-child-2-expected.txt

    r86521 r87351  
    1414              RenderText {#text} at (0,0) size 142x18
    1515                text run at (0,0) width 142: "should have bold test"
    16           RenderText {#text} at (0,0) size 0x0
  • trunk/LayoutTests/platform/mac/fast/html/details-no-summary4-expected.txt

    r84632 r87351  
    1111        RenderBlock (anonymous) at (0,18) size 784x23
    1212          RenderTextControl {INPUT} at (2,2) size 125x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)]
    13           RenderText {#text} at (0,0) size 0x0
    1413layer at (13,31) size 119x13
    1514  RenderBlock {DIV} at (3,3) size 119x13
  • trunk/LayoutTests/platform/mac/fast/html/details-open-javascript-expected.txt

    r84632 r87351  
    1111        RenderBlock (anonymous) at (0,18) size 784x23
    1212          RenderTextControl {INPUT} at (2,2) size 125x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)]
    13           RenderText {#text} at (0,0) size 0x0
    1413      RenderDetails {DETAILS} at (0,41) size 784x18
    1514        RenderSummary {SUMMARY} at (0,0) size 784x18
  • trunk/LayoutTests/platform/mac/fast/html/details-open4-expected.txt

    r84632 r87351  
    1111        RenderBlock (anonymous) at (0,18) size 784x23
    1212          RenderTextControl {INPUT} at (2,2) size 125x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)]
    13           RenderText {#text} at (0,0) size 0x0
    1413layer at (13,31) size 119x13
    1514  RenderBlock {DIV} at (3,3) size 119x13
  • trunk/LayoutTests/platform/qt/fast/html/details-no-summary4-expected.txt

    r84673 r87351  
    1111        RenderBlock (anonymous) at (0,22) size 784x30
    1212          RenderTextControl {INPUT} at (2,2) size 166x26
    13           RenderText {#text} at (0,0) size 0x0
    1413layer at (12,34) size 162x22
    1514  RenderBlock {DIV} at (2,2) size 162x22
  • trunk/LayoutTests/platform/qt/fast/html/details-open-javascript-expected.txt

    r84673 r87351  
    1111        RenderBlock (anonymous) at (0,22) size 784x30
    1212          RenderTextControl {INPUT} at (2,2) size 166x26
    13           RenderText {#text} at (0,0) size 0x0
    1413      RenderDetails {DETAILS} at (0,52) size 784x22
    1514        RenderSummary {SUMMARY} at (0,0) size 784x22
  • trunk/LayoutTests/platform/qt/fast/html/details-open4-expected.txt

    r84673 r87351  
    1111        RenderBlock (anonymous) at (0,22) size 784x30
    1212          RenderTextControl {INPUT} at (2,2) size 166x26
    13           RenderText {#text} at (0,0) size 0x0
    1413layer at (12,34) size 162x22
    1514  RenderBlock {DIV} at (2,2) size 162x22
  • trunk/Source/WebCore/ChangeLog

    r87347 r87351  
     12011-05-24  MORITA Hajime  <morrita@google.com>
     2
     3        Reviewed by Dimitri Glazkov.
     4
     5        RenderText with empty text is not created inside ShadowContentElement
     6        https://bugs.webkit.org/show_bug.cgi?id=61111       
     7
     8        - Changed Text::rendererIsNeeded() to be shadow-aware.
     9        - previousRenderer(), nextRenderer() and parentRenderer() on NodeRenderingContext is now
     10          safe even if it's used with an attached node, which was originally used only during attach().
     11          We need this change because these APIs are called inside CharacterData::updateRenderer() callstack.
     12       
     13        Tests: fast/html/details-replace-summary-child.html
     14               fast/html/details-replace-text.html
     15
     16        * dom/NodeRenderingContext.cpp:
     17        (WebCore::NodeRenderingContext::NodeRenderingContext):
     18        (WebCore::NodeRenderingContext::nextRenderer):
     19        (WebCore::NodeRenderingContext::previousRenderer):
     20        (WebCore::NodeRenderingContext::parentRenderer):
     21        (WebCore::NodeRenderingContext::shouldCreateRenderer):
     22        * dom/NodeRenderingContext.h:
     23        (WebCore::NodeRenderingContext::parentNodeForRenderingAndStyle):
     24        * dom/Text.cpp:
     25        (WebCore::Text::rendererIsNeeded):
     26
    1272011-05-25  Sailesh Agrawal  <sail@chromium.org>
    228
  • trunk/Source/WebCore/dom/NodeRenderingContext.cpp

    r87125 r87351  
    7575
    7676NodeRenderingContext::NodeRenderingContext(Node* node, RenderStyle* style)
    77     : m_location(LocationNotInTree)
     77    : m_location(LocationUndetermined)
    7878    , m_phase(AttachStraight)
    7979    , m_node(node)
     
    100100RenderObject* NodeRenderingContext::nextRenderer() const
    101101{
     102    if (RenderObject* renderer = m_node->renderer()) {
     103        ASSERT(m_location == LocationUndetermined);
     104        return renderer->nextSibling();
     105    }
     106
     107    ASSERT(m_location != LocationUndetermined);
     108
    102109    if (m_phase != AttachContentForwarded)
    103110        return m_node->nextRenderer();
     
    108115}
    109116
     117RenderObject* NodeRenderingContext::previousRenderer() const
     118{
     119    if (RenderObject* renderer = m_node->renderer()) {
     120        ASSERT(m_location == LocationUndetermined);
     121        return renderer->previousSibling();
     122    }
     123
     124    ASSERT(m_location != LocationUndetermined);
     125
     126    if (m_phase != AttachContentForwarded)
     127        return m_node->previousRenderer();
     128    // Returns lastChild() here to insert renderer at the end of child list.
     129    // We assume content children are always attached in tree order and
     130    // there is no partial render tree creation.
     131    if (RenderObject* parent = parentRenderer())
     132        return parent->lastChild();
     133    return 0;
     134}
     135
    110136RenderObject* NodeRenderingContext::parentRenderer() const
    111137{
    112     return m_parentNodeForRenderingAndStyle->renderer();
     138    if (RenderObject* renderer = m_node->renderer()) {
     139        ASSERT(m_location == LocationUndetermined);
     140        return renderer->parent();
     141    }
     142
     143    ASSERT(m_location != LocationUndetermined);
     144    return m_parentNodeForRenderingAndStyle ? m_parentNodeForRenderingAndStyle->renderer() : 0;
    113145}
    114146
     
    121153bool NodeRenderingContext::shouldCreateRenderer() const
    122154{
     155    ASSERT(m_location != LocationUndetermined);
    123156    ASSERT(parentNodeForRenderingAndStyle());
    124157
     
    198231    Node* node = m_context.node();
    199232    Document* document = node->document();
    200 
    201233    if (!document->shouldCreateRenderers())
    202234        return;
    203235
     236    RenderObject* parentRenderer = m_context.parentRenderer();
     237    RenderObject* nextRenderer = m_context.nextRenderer();
    204238    RenderObject* newRenderer = createRendererAndStyle();
    205239
     
    216250
    217251    // Note: Adding newRenderer instead of renderer(). renderer() may be a child of newRenderer.
    218     m_context.parentRenderer()->addChild(newRenderer, m_context.nextRenderer());
    219 }
    220 
    221 }
     252    parentRenderer->addChild(newRenderer, nextRenderer);
     253}
     254
     255}
  • trunk/Source/WebCore/dom/NodeRenderingContext.h

    r87125 r87351  
    4949    RenderObject* parentRenderer() const;
    5050    RenderObject* nextRenderer() const;
     51    RenderObject* previousRenderer() const;
    5152
    5253    RenderStyle* style() const;
     
    5960
    6061private:
     62
    6163    enum TreeLocation {
     64        LocationUndetermined,
    6265        LocationNotInTree,
    6366        LocationLightChild,
     
    8689inline ContainerNode* NodeRenderingContext::parentNodeForRenderingAndStyle() const
    8790{
     91    ASSERT(m_location != LocationUndetermined);
    8892    return m_parentNodeForRenderingAndStyle;
    8993}
     
    9397    return m_style.get();
    9498}
    95 
    9699
    97100class NodeRendererFactory {
  • trunk/Source/WebCore/dom/Text.cpp

    r87125 r87351  
    200200        return true;
    201201
    202     RenderObject *par = parentNode()->renderer();
    203    
     202    RenderObject* par = context.parentRenderer();
    204203    if (par->isTable() || par->isTableRow() || par->isTableSection() || par->isTableCol() || par->isFrameSet())
    205204        return false;
     
    208207        return true;
    209208   
    210     RenderObject *prev = previousRenderer();
     209    RenderObject* prev = context.previousRenderer();
    211210    if (prev && prev->isBR()) // <span><br/> <br/></span>
    212211        return false;
     
    220219            return false;
    221220       
    222         RenderObject *first = par->firstChild();
     221        RenderObject* first = par->firstChild();
    223222        while (first && first->isFloatingOrPositioned())
    224223            first = first->nextSibling();
    225         RenderObject *next = nextRenderer();
     224        RenderObject* next = context.nextRenderer();
    226225        if (!first || next == first)
    227226            // Whitespace at the start of a block just goes away.  Don't even
Note: See TracChangeset for help on using the changeset viewer.