Changeset 86521 in webkit


Ignore:
Timestamp:
May 15, 2011 7:55:17 PM (13 years ago)
Author:
morrita@google.com
Message:

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

Reviewed by Dimitri Glazkov.

ShadowContentElement should affect the order of renderer children
https://bugs.webkit.org/show_bug.cgi?id=59157

  • fast/html/details-add-details-child-1.html: Added.
  • fast/html/details-add-details-child-2.html: Added.
  • fast/html/details-nested-1.html: Added.
  • fast/html/details-nested-2.html: Added.
  • platform/chromium/test_expectations.txt:
  • platform/gtk/fast/html/details-open2-expected.txt:
  • platform/mac/fast/html/details-add-child-2-expected.txt:
  • platform/mac/fast/html/details-add-details-child-1-expected.png: Added.
  • platform/mac/fast/html/details-add-details-child-1-expected.txt: Copied from LayoutTests/platform/mac/fast/html/details-add-child-2-expected.txt.
  • platform/mac/fast/html/details-add-details-child-2-expected.png: Added.
  • platform/mac/fast/html/details-add-details-child-2-expected.txt: Copied from LayoutTests/platform/mac/fast/html/details-add-child-2-expected.txt.
  • platform/mac/fast/html/details-add-summary-10-and-click-expected.png: Added.
  • platform/mac/fast/html/details-add-summary-10-expected.png: Added.
  • platform/mac/fast/html/details-nested-1-expected.png: Added.
  • platform/mac/fast/html/details-nested-1-expected.txt: Added.
  • platform/mac/fast/html/details-nested-2-expected.png: Added.
  • platform/mac/fast/html/details-nested-2-expected.txt: Added.
  • platform/mac/fast/html/details-open2-expected.txt:
  • platform/qt/fast/html/details-add-child-2-expected.txt:
  • platform/qt/fast/html/details-open2-expected.txt:

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

ShadowContentElement should affect the order of renderer children
https://bugs.webkit.org/show_bug.cgi?id=59157

Introduced ShadowContentSelector to collect and forward content
children for each ShadowContentElement. ShadowRoot collects child
nodes of its host (we call these children "content children"), and
the descendant ShadowContentElement pulls that these content
children and put it under its child during
ShadowContentElement::attach().

Content children no longer create its renderer during its normal
attach() phase (called "light" phase). And they create it during
attach() as a content children instead (called "forwarded phase").
These phases are detected by NodeRendererFactory and represented
as NodeRendererFactory::AttachPhase value AttachContentLight and
AttachContentForwarded.

Tests: fast/html/details-add-details-child-1.html

fast/html/details-add-details-child-2.html
fast/html/details-nested-1.html
fast/html/details-nested-2.html

  • dom/Element.cpp: (WebCore::Element::attach): (WebCore::Element::childrenChanged):
  • dom/Node.cpp: (WebCore::NodeRendererFactory::NodeRendererFactory): (WebCore::NodeRendererFactory::shouldCreateRenderer): (WebCore::NodeRendererFactory::nextRenderer): (WebCore::NodeRendererFactory::createRendererIfNeeded):
  • dom/ShadowRoot.cpp: (WebCore::forceReattach): (WebCore::ShadowContentSelector::shadowRoot): (WebCore::ShadowContentSelector::activeElement): (WebCore::ShadowContentSelector::currentInstance): (WebCore::ShadowContentSelector::ShadowContentSelector): (WebCore::ShadowContentSelector::~ShadowContentSelector): (WebCore::ShadowContentSelector::attachChildrenFor): (WebCore::ShadowContentElement::attach): (WebCore::ShadowRoot::recalcStyle): (WebCore::ShadowRoot::activeContentContainer): (WebCore::ShadowRoot::hostChildrenChanged): (WebCore::ShadowRoot::attach):
  • dom/ShadowRoot.h:
  • html/shadow/ShadowContentElement.h: (WebCore::ShadowContentElement::rendererIsNeeded):
  • rendering/RenderDetails.cpp:
  • rendering/RenderDetails.h:
Location:
trunk
Files:
12 added
15 edited
2 copied

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r86519 r86521  
     12011-05-12  MORITA Hajime  <morrita@google.com>
     2
     3        Reviewed by Dimitri Glazkov.
     4
     5        ShadowContentElement should affect the order of renderer children
     6        https://bugs.webkit.org/show_bug.cgi?id=59157
     7
     8        * fast/html/details-add-details-child-1.html: Added.
     9        * fast/html/details-add-details-child-2.html: Added.
     10        * fast/html/details-nested-1.html: Added.
     11        * fast/html/details-nested-2.html: Added.
     12        * platform/chromium/test_expectations.txt:       
     13        * platform/gtk/fast/html/details-open2-expected.txt:
     14        * platform/mac/fast/html/details-add-child-2-expected.txt:
     15        * platform/mac/fast/html/details-add-details-child-1-expected.png: Added.
     16        * platform/mac/fast/html/details-add-details-child-1-expected.txt: Copied from LayoutTests/platform/mac/fast/html/details-add-child-2-expected.txt.
     17        * platform/mac/fast/html/details-add-details-child-2-expected.png: Added.
     18        * platform/mac/fast/html/details-add-details-child-2-expected.txt: Copied from LayoutTests/platform/mac/fast/html/details-add-child-2-expected.txt.
     19        * platform/mac/fast/html/details-add-summary-10-and-click-expected.png: Added.
     20        * platform/mac/fast/html/details-add-summary-10-expected.png: Added.
     21        * platform/mac/fast/html/details-nested-1-expected.png: Added.
     22        * platform/mac/fast/html/details-nested-1-expected.txt: Added.
     23        * platform/mac/fast/html/details-nested-2-expected.png: Added.
     24        * platform/mac/fast/html/details-nested-2-expected.txt: Added.
     25        * platform/mac/fast/html/details-open2-expected.txt:
     26        * platform/qt/fast/html/details-add-child-2-expected.txt:
     27        * platform/qt/fast/html/details-open2-expected.txt:
     28
    1292011-05-15  Yuzo Fujishima  <yuzo@google.com>
    230
  • trunk/LayoutTests/platform/chromium/test_expectations.txt

    r86518 r86521  
    39753975BUGWK59782 WIN MAC LINUX RELEASE : svg/filters/feDropShadow.svg = IMAGE
    39763976
     3977// Needs missing expectations.
     3978BUGWK59157 : fast/html/details-nested-2.html = FAIL
     3979BUGWK59157 : fast/html/details-nested-1.html = FAIL
     3980BUGWK59157 : fast/html/details-add-details-child-1.html = FAIL
     3981BUGWK59157 : fast/html/details-add-details-child-2.html = FAIL
     3982
    39773983// New test added in r85303.
    39783984BUG_HCLAM : compositing/masks/layer-mask-placement.html = IMAGE
  • trunk/LayoutTests/platform/gtk/fast/html/details-open2-expected.txt

    r84677 r86521  
    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-child-2-expected.txt

    r84632 r86521  
    1313            RenderText {#text} at (0,0) size 142x18
    1414              text run at (0,0) width 142: "should have bold test"
    15           RenderText {#text} at (0,0) size 0x0
  • trunk/LayoutTests/platform/mac/fast/html/details-add-details-child-1-expected.txt

    r86520 r86521  
    1313            RenderText {#text} at (0,0) size 142x18
    1414              text run at (0,0) width 142: "should have bold test"
    15           RenderText {#text} at (0,0) size 0x0
  • trunk/LayoutTests/platform/mac/fast/html/details-add-details-child-2-expected.txt

    r86520 r86521  
    1010            text run at (16,0) width 58: "summary"
    1111        RenderBlock (anonymous) at (0,18) size 784x18
    12           RenderInline {B} at (0,0) size 142x18
    13             RenderText {#text} at (0,0) size 142x18
    14               text run at (0,0) width 142: "should have bold test"
     12          RenderInline {SPAN} at (0,0) size 142x18
     13            RenderInline {B} at (0,0) size 142x18
     14              RenderText {#text} at (0,0) size 142x18
     15                text run at (0,0) width 142: "should have bold test"
    1516          RenderText {#text} at (0,0) size 0x0
  • trunk/LayoutTests/platform/mac/fast/html/details-open2-expected.txt

    r84632 r86521  
    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-add-child-2-expected.txt

    r84963 r86521  
    1313            RenderText {#text} at (0,0) size 142x22
    1414              text run at (0,0) width 142: "should have bold test"
    15           RenderText {#text} at (0,0) size 0x0
  • trunk/LayoutTests/platform/qt/fast/html/details-open2-expected.txt

    r84673 r86521  
    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

    r86520 r86521  
     12011-05-12  MORITA Hajime  <morrita@google.com>
     2
     3        ShadowContentElement should affect the order of renderer children
     4        https://bugs.webkit.org/show_bug.cgi?id=59157
     5
     6        Introduced ShadowContentSelector to collect and forward content
     7        children for each ShadowContentElement. ShadowRoot collects child
     8        nodes of its host (we call these children "content children"), and
     9        the descendant ShadowContentElement pulls that these content
     10        children and put it under its child during
     11        ShadowContentElement::attach().
     12       
     13        Content children no longer create its renderer during its normal
     14        attach() phase (called "light" phase). And they create it during
     15        attach() as a content children instead (called "forwarded phase").
     16        These phases are detected by NodeRendererFactory and represented
     17        as NodeRendererFactory::AttachPhase value AttachContentLight and
     18        AttachContentForwarded.
     19       
     20        Tests: fast/html/details-add-details-child-1.html
     21               fast/html/details-add-details-child-2.html
     22               fast/html/details-nested-1.html
     23               fast/html/details-nested-2.html
     24
     25        * dom/Element.cpp:
     26        (WebCore::Element::attach):
     27        (WebCore::Element::childrenChanged):
     28        * dom/Node.cpp:
     29        (WebCore::NodeRendererFactory::NodeRendererFactory):
     30        (WebCore::NodeRendererFactory::shouldCreateRenderer):
     31        (WebCore::NodeRendererFactory::nextRenderer):
     32        (WebCore::NodeRendererFactory::createRendererIfNeeded):
     33        * dom/ShadowRoot.cpp:
     34        (WebCore::forceReattach):
     35        (WebCore::ShadowContentSelector::shadowRoot):
     36        (WebCore::ShadowContentSelector::activeElement):
     37        (WebCore::ShadowContentSelector::currentInstance):
     38        (WebCore::ShadowContentSelector::ShadowContentSelector):
     39        (WebCore::ShadowContentSelector::~ShadowContentSelector):
     40        (WebCore::ShadowContentSelector::attachChildrenFor):
     41        (WebCore::ShadowContentElement::attach):
     42        (WebCore::ShadowRoot::recalcStyle):
     43        (WebCore::ShadowRoot::activeContentContainer):
     44        (WebCore::ShadowRoot::hostChildrenChanged):
     45        (WebCore::ShadowRoot::attach):
     46        * dom/ShadowRoot.h:
     47        * html/shadow/ShadowContentElement.h:
     48        (WebCore::ShadowContentElement::rendererIsNeeded):
     49        * rendering/RenderDetails.cpp:
     50        * rendering/RenderDetails.h:
     51
    1522011-05-13  MORITA Hajime  <morrita@google.com>
    253
  • trunk/Source/WebCore/dom/Element.cpp

    r86364 r86521  
    994994    StyleSelectorParentPusher parentPusher(this);
    995995
    996     if (ShadowRoot* shadow = shadowRoot()) {
    997         parentPusher.push();
    998         shadow->attach();
    999     }
    1000 
    1001996    if (firstChild())
    1002997        parentPusher.push();
    1003998    ContainerNode::attach();
     999
     1000    if (Node* shadow = shadowRoot()) {
     1001        parentPusher.push();
     1002        shadow->attach();
     1003    }
    10041004
    10051005    if (hasRareData()) {   
     
    13221322    else
    13231323        checkForSiblingStyleChanges(this, renderStyle(), false, beforeChange, afterChange, childCountDelta);
    1324     if (ShadowRoot* shadow = shadowRoot())
    1325         shadow->hostChildrenChanged();
    13261324}
    13271325
  • trunk/Source/WebCore/dom/Node.cpp

    r86248 r86521  
    14611461class NodeRendererFactory {
    14621462public:
    1463     enum Type {
    1464         NotFound,
    1465         AsLightChild,
    1466         AsShadowChild,
    1467         AsContentChild
     1463    enum TreeLocation {
     1464        LocationNotInTree,
     1465        LocationLightChild,
     1466        LocationShadowChild,
    14681467    };
    14691468
    1470     NodeRendererFactory(Node* node)
    1471         : m_type(NotFound)
    1472         , m_node(node)
    1473         , m_visualParentShadowRoot(0)
    1474     {
    1475         m_parentNodeForRenderingAndStyle = findVisualParent();
    1476     }
    1477  
     1469    enum AttachPhase {
     1470        AttachStraight,
     1471        AttachContentLight,
     1472        AttachContentForwarded,
     1473    };
     1474
     1475    explicit NodeRendererFactory(Node*);
    14781476    ContainerNode* parentNodeForRenderingAndStyle() const { return m_parentNodeForRenderingAndStyle; }
    14791477    void createRendererIfNeeded();
     
    14811479private:
    14821480    Document* document() { return m_node->document(); }
    1483     ContainerNode* findVisualParent();
    1484     RenderObject* nextRenderer() const { return m_node->nextRenderer(); }
     1481    void initialize();
     1482    RenderObject* nextRenderer() const;
    14851483    RenderObject* createRendererAndStyle();
    14861484    bool shouldCreateRenderer() const;
    14871485
    1488     Type m_type;
     1486    TreeLocation m_location;
     1487    AttachPhase m_phase;
    14891488    Node* m_node;
    14901489    ContainerNode* m_parentNodeForRenderingAndStyle;
     
    14921491};
    14931492
    1494 ContainerNode* NodeRendererFactory::findVisualParent()
     1493NodeRendererFactory::NodeRendererFactory(Node* node)
     1494    : m_location(LocationNotInTree)
     1495    , m_phase(AttachStraight)
     1496    , m_node(node)
     1497    , m_parentNodeForRenderingAndStyle(0)
     1498    , m_visualParentShadowRoot(0)
    14951499{
    14961500    ContainerNode* parent = m_node->parentOrHostNode();
    14971501    if (!parent)
    1498         return 0;
     1502        return;
    14991503
    15001504    if (parent->isShadowBoundary()) {
    1501         m_type = AsShadowChild;
    1502         return parent->shadowHost();
    1503     }
     1505        m_location = LocationShadowChild;
     1506        m_parentNodeForRenderingAndStyle = parent->shadowHost();
     1507        return;
     1508    }
     1509
     1510    m_location = LocationLightChild;
    15041511
    15051512    if (parent->isElementNode()) {
    15061513        m_visualParentShadowRoot = toElement(parent)->shadowRoot();
     1514
    15071515        if (m_visualParentShadowRoot) {
    1508             if (ContainerNode* contentContainer = m_visualParentShadowRoot->contentContainerFor(m_node)) {
    1509                 m_type = AsContentChild;
    1510                 return NodeRendererFactory(contentContainer).parentNodeForRenderingAndStyle();
    1511             }
    1512 
    1513             // FIXME: should be not found once light/shadow is mutual exclusive.
     1516            if (ContainerNode* contentContainer = m_visualParentShadowRoot->activeContentContainer()) {
     1517                m_phase = AttachContentForwarded;
     1518                m_parentNodeForRenderingAndStyle = NodeRendererFactory(contentContainer).parentNodeForRenderingAndStyle();
     1519                return;
     1520            }
     1521               
     1522            m_phase = AttachContentLight;
     1523            m_parentNodeForRenderingAndStyle = parent;
     1524            return;
    15141525        }
    15151526    }
    15161527
    1517     m_type = AsLightChild;
    1518     return parent;
     1528    m_parentNodeForRenderingAndStyle = parent;
    15191529}
    15201530
     
    15221532{
    15231533    ASSERT(m_parentNodeForRenderingAndStyle);
     1534
     1535    if (m_location == LocationNotInTree || m_phase == AttachContentLight)
     1536        return false;
    15241537
    15251538    RenderObject* parentRenderer = m_parentNodeForRenderingAndStyle->renderer();
     
    15271540        return false;
    15281541
    1529     if (m_type == AsLightChild) {
     1542    if (m_location == LocationLightChild && m_phase == AttachStraight) {
    15301543        // FIXME: Ignoring canHaveChildren() in a case of shadow children might be wrong.
    15311544        // See https://bugs.webkit.org/show_bug.cgi?id=52423
     
    15671580    newRenderer->setAnimatableStyle(style.release()); // setAnimatableStyle() can depend on renderer() already being set.
    15681581    return newRenderer;
     1582}
     1583
     1584RenderObject* NodeRendererFactory::nextRenderer() const
     1585{
     1586    if (m_phase != AttachContentForwarded)
     1587        return m_node->nextRenderer();
     1588    // Returns 0 here to insert renderer at the end of child list.
     1589    // We assume content children are always attached in tree order and
     1590    // there is no partial render tree creation.
     1591    return 0;
    15691592}
    15701593
     
    15961619        newRenderer = wrapWithRenderFullScreen(newRenderer, document());
    15971620#endif
     1621
     1622    // FIXME: This side effect should be visible from attach() code.
     1623    if (m_phase == AttachContentLight)
     1624        m_visualParentShadowRoot->hostChildrenChanged();
    15981625
    15991626    if (!newRenderer)
  • trunk/Source/WebCore/dom/ShadowRoot.cpp

    r84632 r86521  
    3636namespace WebCore {
    3737
     38static inline void forceReattach(Node* node)
     39{
     40    if (!node->attached())
     41        return;
     42    node->detach();
     43    node->attach();
     44}
     45
     46class ShadowContentSelector {
     47    WTF_MAKE_NONCOPYABLE(ShadowContentSelector);
     48public:
     49    explicit ShadowContentSelector(ShadowRoot*);
     50    ~ShadowContentSelector();
     51
     52    void attachChildrenFor(ShadowContentElement*);
     53    ShadowRoot* shadowRoot() const { return m_shadowRoot; }
     54    Element* activeElement() const { return m_activeElement; }
     55
     56    static ShadowContentSelector* currentInstance() { return s_currentInstance; }
     57
     58private:
     59    ShadowContentSelector* m_parent;
     60    ShadowRoot* m_shadowRoot;
     61    Element* m_activeElement;
     62    Vector<RefPtr<Node> > m_children;
     63
     64    static ShadowContentSelector* s_currentInstance;
     65};
     66
     67ShadowContentSelector* ShadowContentSelector::s_currentInstance = 0;
     68
     69ShadowContentSelector::ShadowContentSelector(ShadowRoot* shadowRoot)
     70    : m_parent(s_currentInstance)
     71    , m_shadowRoot(shadowRoot)
     72    , m_activeElement(0)
     73{
     74    s_currentInstance = this;
     75    for (Node* node = shadowRoot->shadowHost()->firstChild(); node; node = node->nextSibling())
     76        m_children.append(node);
     77}
     78
     79ShadowContentSelector::~ShadowContentSelector()
     80{
     81    ASSERT(s_currentInstance == this);
     82    s_currentInstance = m_parent;
     83}
     84
     85void ShadowContentSelector::attachChildrenFor(ShadowContentElement* contentElement)
     86{
     87    m_activeElement = contentElement;
     88
     89    for (size_t i = 0; i < m_children.size(); ++i) {
     90        Node* child = m_children[i].get();
     91        if (!child)
     92            continue;
     93        if (!contentElement->shouldInclude(child))
     94            continue;
     95
     96        forceReattach(child);
     97        m_children[i] = 0;
     98    }
     99
     100    m_activeElement = 0;
     101}
     102
     103// FIXME: Should have its own file. https://bugs.webkit.org/show_bug.cgi?id=59117 will fix this.
     104void ShadowContentElement::attach()
     105{
     106    ASSERT(!firstChild()); // Currently doesn't support any light child.
     107    HTMLDivElement::attach();
     108    if (ShadowContentSelector* selector = ShadowContentSelector::currentInstance())
     109        selector->attachChildrenFor(this);
     110}
     111
    38112ShadowRoot::ShadowRoot(Document* document)
    39113    : TreeScope(document)
     
    85159void ShadowRoot::recalcStyle(StyleChange change)
    86160{
    87     for (Node* n = firstChild(); n; n = n->nextSibling())
    88         n->recalcStyle(change);
     161    if (hasContentElement())
     162        forceReattach(this);
     163    else {
     164        for (Node* n = firstChild(); n; n = n->nextSibling())
     165            n->recalcStyle(change);
     166    }
    89167
    90168    clearNeedsStyleRecalc();
     
    92170}
    93171
    94 ContainerNode* ShadowRoot::contentContainerFor(Node* node)
    95 {
    96     // Current limitation:
    97     // - There is at most one content element for each shadow tree
    98     // - The shadow tree accepts any light node.
    99     for (Node* n = firstChild(); n; n = n->traverseNextNode(this)) {
    100         // FIXME: This should be replaced with tag-name checking once <content> is ready.
    101         // See also http://webkit.org/b/56973
    102         if (n->isShadowBoundary() && static_cast<ShadowContentElement*>(n)->shouldInclude(node))
    103             return toContainerNode(n);
    104     }
    105 
    106     return 0;
     172ContainerNode* ShadowRoot::activeContentContainer()
     173{
     174    ShadowContentSelector* selector = ShadowContentSelector::currentInstance();
     175    if (!selector || selector->shadowRoot() != this)
     176        return 0;
     177    return selector->activeElement();
    107178}
    108179
     
    111182    if (!hasContentElement())
    112183        return;
    113     Element* host = shadowHost();
    114     if (!host || !host->attached())
    115         return;
    116     host->detach();
    117     host->lazyAttach();
     184    // This results in forced detaching/attaching of the shadow render tree. See ShadowRoot::recalcStyle().
     185    setNeedsStyleRecalc();
    118186}
    119187
     
    135203}
    136204
    137 }
     205void ShadowRoot::attach()
     206{
     207    ShadowContentSelector selector(this);
     208    TreeScope::attach();
     209}
     210
     211}
  • trunk/Source/WebCore/dom/ShadowRoot.h

    r85644 r86521  
    3333
    3434class Document;
     35class ShadowContentElement;
    3536
    3637class ShadowRoot : public TreeScope {
     
    4142    virtual void recalcStyle(StyleChange = NoChange);
    4243
    43     ContainerNode* contentContainerFor(Node*);
     44    ContainerNode* activeContentContainer();
    4445    void hostChildrenChanged();
    4546
     
    5354    virtual bool childTypeAllowed(NodeType) const;
    5455    virtual bool applyAuthorSheets() const;
     56    virtual void attach();
    5557
    5658    bool hasContentElement() const;
  • trunk/Source/WebCore/html/shadow/ShadowContentElement.h

    r84632 r86521  
    4848
    4949    virtual bool shouldInclude(Node*) = 0;
     50    virtual void attach();
    5051
    5152private:
     
    5354    // See also http://webkit.org/b/56973
    5455    virtual bool isShadowBoundary() const { return true; }
     56    virtual bool rendererIsNeeded(RenderStyle*) { return false; }
    5557    virtual RenderObject* createRenderer(RenderArena*, RenderStyle*) { return 0; }
    5658};
  • trunk/Source/WebCore/rendering/RenderDetails.cpp

    r84632 r86521  
    3737}
    3838
    39 void RenderDetails::addChild(RenderObject* newChild, RenderObject* beforeChild)
    40 {
    41     if (static_cast<HTMLDetailsElement*>(node())->mainSummary() == newChild->node())
    42         RenderBlock::addChild(newChild, firstChild());
    43     else
    44         RenderBlock::addChild(newChild, beforeChild);
    45 }
    46 
    4739void RenderDetails::styleDidChange(StyleDifference diff, const RenderStyle* oldStyle)
    4840{
  • trunk/Source/WebCore/rendering/RenderDetails.h

    r84632 r86521  
    4040    virtual bool isDetails() const { return true; }
    4141    virtual void styleDidChange(StyleDifference, const RenderStyle* oldStyle);
    42     virtual void addChild(RenderObject* newChild, RenderObject *beforeChild = 0);
    4342};
    4443
Note: See TracChangeset for help on using the changeset viewer.