Changeset 30412 in webkit


Ignore:
Timestamp:
Feb 19, 2008 1:13:19 PM (16 years ago)
Author:
mitz@apple.com
Message:

WebCore:

Reviewed by Darin Adler.

  • fix <rdar://problem/5637569> CrashTracer: [REGRESSION] 620 crashes in Safari at com.apple.WebCore: WebCore::RenderBox::setStaticY + 15

Test: fast/text/wbr-styled.html

Changed RenderWordBreak to inherit from RenderText instead of
RenderInline.

  • rendering/RenderBlock.cpp: (WebCore::RenderBlock::calcInlinePrefWidths):
  • rendering/RenderFlow.h:
  • rendering/RenderText.cpp: (WebCore::RenderText::renderName): (WebCore::RenderText::isTextFragment): (WebCore::RenderText::isWordBreak):
  • rendering/RenderText.h:
  • rendering/RenderWordBreak.cpp: (WebCore::RenderWordBreak::RenderWordBreak):
  • rendering/RenderWordBreak.h:
  • rendering/bidi.cpp: (WebCore::RenderBlock::findNextLineBreak):

LayoutTests:

Reviewed by Darin Adler.

  • test for <rdar://problem/5637569> CrashTracer: [REGRESSION] 620 crashes in Safari at com.apple.WebCore: WebCore::RenderBox::setStaticY + 15
  • fast/text/wbr-styled.html: Added.
  • platform/mac-leopard/fast/text/wbr-styled-expected.checksum: Added.
  • platform/mac-leopard/fast/text/wbr-styled-expected.png: Added.
  • platform/mac/fast/css-generated-content/wbr-with-before-content-expected.txt:
  • platform/mac/fast/text/wbr-pre-expected.txt:
  • platform/mac/fast/text/wbr-styled-expected.txt: Added.
Location:
trunk
Files:
4 added
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r30399 r30412  
     12008-02-19  Dan Bernstein  <mitz@apple.com>
     2
     3        Reviewed by Darin Adler.
     4
     5        - test for <rdar://problem/5637569> CrashTracer: [REGRESSION] 620 crashes in Safari at com.apple.WebCore: WebCore::RenderBox::setStaticY + 15
     6
     7        * fast/text/wbr-styled.html: Added.
     8        * platform/mac-leopard/fast/text/wbr-styled-expected.checksum: Added.
     9        * platform/mac-leopard/fast/text/wbr-styled-expected.png: Added.
     10        * platform/mac/fast/css-generated-content/wbr-with-before-content-expected.txt:
     11        * platform/mac/fast/text/wbr-pre-expected.txt:
     12        * platform/mac/fast/text/wbr-styled-expected.txt: Added.
     13
    1142008-02-18  Dan Bernstein  <mitz@apple.com>
    215
  • trunk/LayoutTests/platform/mac/fast/css-generated-content/wbr-with-before-content-expected.txt

    r25970 r30412  
    1111          RenderText {#text} at (0,3) size 21x18
    1212            text run at (0,3) width 21: "foo"
    13           RenderWordBreak {WBR} at (0,0) size 0x18
    14             RenderInline (generated) at (0,0) size 0x18
    15               RenderText at (21,3) size 0x18
    16                 text run at (21,3) width 0: "\x{0}"
     13          RenderWordBreak {WBR} at (0,0) size 0x0
    1714          RenderText {#text} at (21,3) size 20x18
    1815            text run at (21,3) width 20: "bar"
  • trunk/LayoutTests/platform/mac/fast/text/wbr-pre-expected.txt

    r25970 r30412  
    77        RenderText {#text} at (0,0) size 184x15
    88          text run at (0,0) width 184: "[ONE] This is the first"
    9         RenderWordBreak {WBR} at (0,0) size 0x15
     9        RenderWordBreak {WBR} at (0,0) size 0x0
    1010        RenderText {#text} at (184,0) size 568x45
    1111          text run at (184,0) width 48: " line."
  • trunk/WebCore/ChangeLog

    r30411 r30412  
     12008-02-19  Dan Bernstein  <mitz@apple.com>
     2
     3        Reviewed by Darin Adler.
     4
     5        - fix <rdar://problem/5637569> CrashTracer: [REGRESSION] 620 crashes in Safari at com.apple.WebCore: WebCore::RenderBox::setStaticY + 15
     6
     7        Test: fast/text/wbr-styled.html
     8
     9        Changed RenderWordBreak to inherit from RenderText instead of
     10        RenderInline.
     11
     12        * rendering/RenderBlock.cpp:
     13        (WebCore::RenderBlock::calcInlinePrefWidths):
     14        * rendering/RenderFlow.h:
     15        * rendering/RenderText.cpp:
     16        (WebCore::RenderText::renderName):
     17        (WebCore::RenderText::isTextFragment):
     18        (WebCore::RenderText::isWordBreak):
     19        * rendering/RenderText.h:
     20        * rendering/RenderWordBreak.cpp:
     21        (WebCore::RenderWordBreak::RenderWordBreak):
     22        * rendering/RenderWordBreak.h:
     23        * rendering/bidi.cpp:
     24        (WebCore::RenderBlock::findNextLineBreak):
     25
    1262008-02-19  Anders Carlsson  <andersca@apple.com>
    227
  • trunk/WebCore/rendering/RenderBlock.cpp

    r30067 r30412  
    36533653                   
    36543654                    child->setPrefWidthsDirty(false);
    3655 
    3656                     if (static_cast<RenderFlow*>(child)->isWordBreak()) {
    3657                         // End a line and start a new line.
    3658                         m_minPrefWidth = max(inlineMin, m_minPrefWidth);
    3659                         inlineMin = 0;
    3660                     }
    3661                 }
    3662                 else {
     3655                } else {
    36633656                    // Inline replaced elts add in their margins to their min/max values.
    36643657                    int margins = 0;
     
    36893682                } else
    36903683                    clearPreviousFloat = false;
    3691                
     3684
    36923685                bool canBreakReplacedElement = !child->isImage() || allowImagesToBreak;
    36933686                if (canBreakReplacedElement && (autoWrap || oldAutoWrap) || clearPreviousFloat) {
     
    37013694                    inlineMax = 0;
    37023695                }
    3703                
     3696
    37043697                // Add in text-indent.  This is added in only once.
    37053698                int ti = 0;
     
    37103703                    childMax+=ti;
    37113704                }
    3712                
     3705
    37133706                // Add our width to the max.
    37143707                inlineMax += childMax;
     
    37333726                    trailingSpaceChild = 0;
    37343727                }
    3735             }
    3736             else if (child->isText())
    3737             {
     3728            } else if (child->isText()) {
    37383729                // Case (3). Text.
    37393730                RenderText* t = static_cast<RenderText *>(child);
     3731
     3732                if (t->isWordBreak()) {
     3733                    m_minPrefWidth = max(inlineMin, m_minPrefWidth);
     3734                    inlineMin = 0;
     3735                    continue;
     3736                }
    37403737
    37413738                // Determine if we have a breakable character.  Pass in
     
    37803777                if (!hasBreakableChar) {
    37813778                    inlineMin += childMin;
    3782                 }
    3783                 else {
     3779                } else {
    37843780                    // We have a breakable character.  Now we need to know if
    37853781                    // we start and end with whitespace.
     
    38113807                    m_maxPrefWidth = max(childMax, m_maxPrefWidth);
    38123808                    inlineMax = endMax;
    3813                 }
    3814                 else
     3809                } else
    38153810                    inlineMax += childMax;
    38163811            }
     
    38303825    if (style()->collapseWhiteSpace())
    38313826        stripTrailingSpace(inlineMax, inlineMin, trailingSpaceChild);
    3832    
     3827
    38333828    m_minPrefWidth = max(inlineMin, m_minPrefWidth);
    38343829    m_maxPrefWidth = max(inlineMax, m_maxPrefWidth);
  • trunk/WebCore/rendering/RenderFlow.h

    r25754 r30412  
    103103    virtual bool hasColumns() const { return m_hasColumns; }
    104104
    105     virtual bool isWordBreak() const { ASSERT(isInlineFlow()); return false; }
    106 
    107105    void checkConsistency() const;
    108106
  • trunk/WebCore/rendering/RenderText.cpp

    r30342 r30412  
    7777#endif
    7878
     79const char* RenderText::renderName() const
     80{
     81    return "RenderText";
     82}
     83
     84bool RenderText::isTextFragment() const
     85{
     86    return false;
     87}
     88
     89bool RenderText::isWordBreak() const
     90{
     91    return false;
     92}
     93
    7994void RenderText::setStyle(RenderStyle* newStyle)
    8095{
  • trunk/WebCore/rendering/RenderText.h

    r28298 r30412  
    3838#endif
    3939
    40     virtual const char* renderName() const { return "RenderText"; }
     40    virtual const char* renderName() const;
    4141
    42     virtual bool isTextFragment() const { return false; }
     42    virtual bool isTextFragment() const;
     43    virtual bool isWordBreak() const;
    4344
    4445    virtual PassRefPtr<StringImpl> originalText() const;
  • trunk/WebCore/rendering/RenderWordBreak.cpp

    r21405 r30412  
    3333
    3434RenderWordBreak::RenderWordBreak(HTMLElement* element)
    35     : RenderInline(element)
     35    : RenderText(element, StringImpl::empty())
    3636{
    3737}
     
    4747}
    4848
    49 bool RenderWordBreak::canHaveChildren() const
    50 {
    51     return false;
    5249}
    53 
    54 }
  • trunk/WebCore/rendering/RenderWordBreak.h

    r21405 r30412  
    2828#define RenderWordBreak_h
    2929
    30 #include "RenderInline.h"
     30#include "RenderText.h"
    3131
    3232namespace WebCore {
     
    3434class HTMLElement;
    3535
    36 class RenderWordBreak : public RenderInline {
     36class RenderWordBreak : public RenderText {
    3737public:
    3838    RenderWordBreak(HTMLElement*);
     
    4040    virtual const char* renderName() const;
    4141    virtual bool isWordBreak() const;
    42     virtual bool canHaveChildren() const;
    4342};
    4443
  • trunk/WebCore/rendering/bidi.cpp

    r29805 r30412  
    15071507            }
    15081508
    1509             if (static_cast<RenderFlow*>(o)->isWordBreak()) {
    1510                 w += tmpW;
    1511                 tmpW = 0;
    1512                 lBreak.obj = o;
    1513                 lBreak.pos = 0;
    1514             }
    15151509            tmpW += o->marginLeft() + o->borderLeft() + o->paddingLeft() +
    15161510                    o->marginRight() + o->borderRight() + o->paddingRight();
     
    15481542        } else if (o->isText()) {
    15491543            RenderText* t = static_cast<RenderText*>(o);
     1544
    15501545            int strlen = t->textLength();
    15511546            int len = strlen - pos;
     
    15691564            bool midWordBreak = false;
    15701565            bool breakAll = o->style()->wordBreak() == BreakAllWordBreak && autoWrap;
     1566
     1567            if (t->isWordBreak()) {
     1568                w += tmpW;
     1569                tmpW = 0;
     1570                lBreak.obj = o;
     1571                lBreak.pos = 0;
     1572                ASSERT(!len);
     1573            }
    15711574
    15721575            while (len) {
     
    18001803                atStart = false;
    18011804            }
    1802            
     1805
    18031806            // IMPORTANT: pos is > length here!
    18041807            if (!ignoringSpaces)
     
    18191822                    checkForBreak = false;
    18201823                    RenderText* nextText = static_cast<RenderText*>(next);
    1821                     if (nextText->textLength() != 0) {
     1824                    if (nextText->textLength()) {
    18221825                        UChar c = nextText->characters()[0];
    18231826                        if (c == ' ' || c == '\t' || (c == '\n' && !shouldPreserveNewline(next)))
     
    18261829                            // keep adding to |tmpW|.  Just update and continue.
    18271830                            checkForBreak = true;
    1828                     }
     1831                    } else if (nextText->isWordBreak())
     1832                        checkForBreak = true;
    18291833                    bool willFitOnLine = (w + tmpW <= width);
    18301834                    bool canPlaceOnLine = willFitOnLine || !autoWrapWasEverTrueOnLine;
Note: See TracChangeset for help on using the changeset viewer.