Changeset 83922 in webkit


Ignore:
Timestamp:
Apr 14, 2011 6:05:48 PM (13 years ago)
Author:
Dimitri Glazkov
Message:

2011-04-14 Dimitri Glazkov <Dimitri Glazkov>

Reviewed by Ojan Vafai.

Presence of shadow DOM should suppress rendering of ordinary child nodes
https://bugs.webkit.org/show_bug.cgi?id=58073

  • fast/dom/shadow/no-renderers-for-light-children-expected.txt: Added.
  • fast/dom/shadow/no-renderers-for-light-children.html: Added.

2011-04-14 Dimitri Glazkov <Dimitri Glazkov>

Reviewed by Ojan Vafai.

Presence of shadow DOM should suppress rendering of ordinary child nodes
https://bugs.webkit.org/show_bug.cgi?id=58073

Test: fast/dom/shadow/no-renderers-for-light-children.html

  • dom/Node.cpp: (WebCore::shadowRoot): Added a helper function. (WebCore::Node::setDocumentRecursively): Changed to use the helper. (WebCore::shouldCreateRendererFor): Expanded a long condition check into a helper function,

added a check for children of an element with a shadow DOM.

(WebCore::Node::createRendererAndStyle): Changed to use the helper.

Location:
trunk
Files:
3 added
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r83921 r83922  
     12011-04-14  Dimitri Glazkov  <dglazkov@chromium.org>
     2
     3        Reviewed by Ojan Vafai.
     4
     5        Presence of shadow DOM should suppress rendering of ordinary child nodes
     6        https://bugs.webkit.org/show_bug.cgi?id=58073
     7
     8        * fast/dom/shadow/no-renderers-for-light-children-expected.txt: Added.
     9        * fast/dom/shadow/no-renderers-for-light-children.html: Added.
     10
    1112011-04-14  James Robinson  <jamesr@chromium.org>
    212
  • trunk/Source/WebCore/ChangeLog

    r83915 r83922  
     12011-04-14  Dimitri Glazkov  <dglazkov@chromium.org>
     2
     3        Reviewed by Ojan Vafai.
     4
     5        Presence of shadow DOM should suppress rendering of ordinary child nodes
     6        https://bugs.webkit.org/show_bug.cgi?id=58073
     7
     8        Test: fast/dom/shadow/no-renderers-for-light-children.html
     9
     10        * dom/Node.cpp:
     11        (WebCore::shadowRoot): Added a helper function.
     12        (WebCore::Node::setDocumentRecursively): Changed to use the helper.
     13        (WebCore::shouldCreateRendererFor): Expanded a long condition check into a helper function,
     14            added a check for children of an element with a shadow DOM.
     15        (WebCore::Node::createRendererAndStyle): Changed to use the helper.
     16
    1172011-04-14  Adrienne Walker  <enne@google.com>
    218
  • trunk/Source/WebCore/dom/Node.cpp

    r83349 r83922  
    853853}
    854854
     855inline static ContainerNode* shadowRoot(Node* node)
     856{
     857    return node->isElementNode() ? toElement(node)->shadowRoot() : 0;
     858}
     859
    855860void Node::setDocumentRecursively(Document* newDocument)
    856861{
     
    861866        if (!node->isElementNode())
    862867            continue;
    863         if (Node* shadow = toElement(node)->shadowRoot())
     868        if (Node* shadow = shadowRoot(node))
    864869            shadow->setDocumentRecursively(newDocument);
    865870    }
     
    14531458}
    14541459
     1460static bool shouldCreateRendererFor(Node* node, ContainerNode* parentForRenderingAndStyle)
     1461{
     1462    RenderObject* parentRenderer = parentForRenderingAndStyle->renderer();
     1463    if (!parentRenderer)
     1464        return false;
     1465
     1466    bool atShadowBoundary = node->parentOrHostNode()->isShadowBoundary();
     1467
     1468    // FIXME: Ignoring canHaveChildren() in a case of isShadowRoot() might be wrong.
     1469    // See https://bugs.webkit.org/show_bug.cgi?id=52423
     1470    if (!parentRenderer->canHaveChildren() && !(node->isShadowRoot() || atShadowBoundary))
     1471        return false;
     1472
     1473    if (shadowRoot(parentForRenderingAndStyle) && !atShadowBoundary)
     1474        return false;
     1475
     1476    if (!parentForRenderingAndStyle->childShouldCreateRenderer(node))
     1477        return false;
     1478
     1479    return true;
     1480}
     1481
    14551482RenderObject* Node::createRendererAndStyle()
    14561483{
     
    14611488    ASSERT(parent);
    14621489
    1463     RenderObject* parentRenderer = parent->renderer();
    1464 
    1465     // FIXME: Ignoring canHaveChildren() in a case of isShadowRoot() might be wrong.
    1466     // See https://bugs.webkit.org/show_bug.cgi?id=52423
    1467     if (!parentRenderer || (!parentRenderer->canHaveChildren() && !(isShadowRoot() || parentNode()->isShadowBoundary())) || !parent->childShouldCreateRenderer(this))
     1490    if (!shouldCreateRendererFor(this, parent))
    14681491        return 0;
    14691492
     
    14761499        return 0;
    14771500
    1478     if (!parentRenderer->isChildAllowed(newRenderer, style.get())) {
     1501    if (!parent->renderer()->isChildAllowed(newRenderer, style.get())) {
    14791502        newRenderer->destroy();
    14801503        return 0;
Note: See TracChangeset for help on using the changeset viewer.