Changeset 168543 in webkit


Ignore:
Timestamp:
May 9, 2014 12:05:33 PM (10 years ago)
Author:
commit-queue@webkit.org
Message:

ASSERTION FAILED: object->style()->overflowX() == object->style()->overflowY()
https://bugs.webkit.org/show_bug.cgi?id=121682

Patch by Zsolt Borbely <zsborbely.u-szeged@partner.samsung.com> on 2014-05-09
Reviewed by Dirk Schulze.

Source/WebCore:
Add more overflow freedom to the SVG element:
-overflow-x and overflow-y for controlling each scrollbar independently is now supported
-overflow:scroll will display scrollbars regardless of the svg overflowing or not (as required by CSS)
-overflow:hidden will cause overflow to be clipped away and scrollbars to be hidden

Merged from Blink r172126 by <ed@opera.com>

Tests: svg/W3C-SVG-1.1-SE/painting-marker-05-f.svg

svg/W3C-SVG-1.1-SE/painting-marker-06-f.svg
svg/animations/animate-viewport-overflow-2.html
svg/animations/animate-viewport-overflow.html
svg/in-html/overflow-repaint.html
svg/in-html/overflow-svg-root-attr.html
svg/in-html/overflow-svg-root-style.html
svg/in-html/overflow-svg-root.html
svg/overflow/overflow-on-outermost-svg-element-horizontal-auto.svg
svg/overflow/overflow-on-outermost-svg-element-vertical-auto.svg
svg/overflow/overflow-scroll-on-outermost-svg-element.svg
svg/overflow/overflow-x-hidden-on-outermost-svg-element-expected.svg
svg/overflow/overflow-x-hidden-on-outermost-svg-element.svg
svg/overflow/overflow-y-hidden-on-outermost-svg-element-expected.svg
svg/overflow/overflow-y-hidden-on-outermost-svg-element.svg

  • css/StyleResolver.cpp:

(WebCore::StyleResolver::adjustRenderStyle):

  • page/FrameView.cpp:

(WebCore::FrameView::applyOverflowToViewport):

  • rendering/svg/RenderSVGRoot.cpp:

(WebCore::RenderSVGRoot::layout):
(WebCore::RenderSVGRoot::shouldApplyViewportClip):
(WebCore::RenderSVGRoot::paintReplaced):
(WebCore::RenderSVGRoot::computeFloatRectForRepaint):

  • rendering/svg/RenderSVGRoot.h:
  • rendering/svg/SVGRenderSupport.cpp:

(WebCore::SVGRenderSupport::isOverflowHidden):

LayoutTests:
Merge Blink r172126 by Erik Dahlström.

  • platform/efl/svg/overflow/overflow-on-outermost-svg-element-in-xhtml-visible-expected.txt:
  • platform/mac/svg/overflow/overflow-on-outermost-svg-element-in-xhtml-visible-expected.png:
  • platform/mac/svg/overflow/overflow-on-outermost-svg-element-in-xhtml-visible-expected.txt:
  • platform/mac/svg/text/non-bmp-positioning-lists-expected.txt: Added.
  • svg/W3C-SVG-1.1-SE/painting-marker-05-f-expected.png: Added.
  • svg/W3C-SVG-1.1-SE/painting-marker-05-f-expected.txt: Added.
  • svg/W3C-SVG-1.1-SE/painting-marker-05-f.svg: Added.
  • svg/W3C-SVG-1.1-SE/painting-marker-06-f-expected.png: Added.
  • svg/W3C-SVG-1.1-SE/painting-marker-06-f-expected.txt: Added.
  • svg/W3C-SVG-1.1-SE/painting-marker-06-f.svg: Added.
  • svg/animations/animate-viewport-overflow-2-expected.txt: Added.
  • svg/animations/animate-viewport-overflow-2.html: Added.
  • svg/animations/animate-viewport-overflow-expected.txt: Added.
  • svg/animations/animate-viewport-overflow.html: Added.
  • svg/in-html/overflow-repaint-expected.txt: Added.
  • svg/in-html/overflow-repaint.html: Added.
  • svg/in-html/overflow-svg-root-attr-expected.html: Added.
  • svg/in-html/overflow-svg-root-attr.html: Added.
  • svg/in-html/overflow-svg-root-expected.html: Added.
  • svg/in-html/overflow-svg-root-style-expected.html: Added.
  • svg/in-html/overflow-svg-root-style.html: Added.
  • svg/in-html/overflow-svg-root.html: Added.
  • svg/overflow/overflow-on-outermost-svg-element-horizontal-auto-expected.html: Added.
  • svg/overflow/overflow-on-outermost-svg-element-horizontal-auto.svg: Added.
  • svg/overflow/overflow-on-outermost-svg-element-ignore-attribute-1-expected.txt:
  • svg/overflow/overflow-on-outermost-svg-element-in-xhtml-visible-expected.png:
  • svg/overflow/overflow-on-outermost-svg-element-in-xhtml-visible-expected.txt: Copied from LayoutTests/platform/mac/svg/overflow/overflow-on-outermost-svg-element-in-xhtml-visible-expected.txt.
  • svg/overflow/overflow-on-outermost-svg-element-in-xhtml-visible.xhtml:
  • svg/overflow/overflow-on-outermost-svg-element-vertical-auto-expected.html: Added.
  • svg/overflow/overflow-on-outermost-svg-element-vertical-auto.svg: Added.
  • svg/overflow/overflow-scroll-on-outermost-svg-element-expected.txt: Added.
  • svg/overflow/overflow-scroll-on-outermost-svg-element.svg: Added.
  • svg/overflow/overflow-x-hidden-on-outermost-svg-element-expected.svg: Added.
  • svg/overflow/overflow-x-hidden-on-outermost-svg-element.svg: Added.
  • svg/overflow/overflow-y-hidden-on-outermost-svg-element-expected.svg: Added.
  • svg/overflow/overflow-y-hidden-on-outermost-svg-element.svg: Added.
Location:
trunk
Files:
29 added
13 edited
1 copied

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r168542 r168543  
     12014-05-09  Zsolt Borbely  <zsborbely.u-szeged@partner.samsung.com>
     2
     3        ASSERTION FAILED: object->style()->overflowX() == object->style()->overflowY()
     4        https://bugs.webkit.org/show_bug.cgi?id=121682
     5
     6        Reviewed by Dirk Schulze.
     7
     8        Merge Blink r172126 by Erik Dahlström.
     9
     10        * platform/efl/svg/overflow/overflow-on-outermost-svg-element-in-xhtml-visible-expected.txt:
     11        * platform/mac/svg/overflow/overflow-on-outermost-svg-element-in-xhtml-visible-expected.png:
     12        * platform/mac/svg/overflow/overflow-on-outermost-svg-element-in-xhtml-visible-expected.txt:
     13        * platform/mac/svg/text/non-bmp-positioning-lists-expected.txt: Added.
     14        * svg/W3C-SVG-1.1-SE/painting-marker-05-f-expected.png: Added.
     15        * svg/W3C-SVG-1.1-SE/painting-marker-05-f-expected.txt: Added.
     16        * svg/W3C-SVG-1.1-SE/painting-marker-05-f.svg: Added.
     17        * svg/W3C-SVG-1.1-SE/painting-marker-06-f-expected.png: Added.
     18        * svg/W3C-SVG-1.1-SE/painting-marker-06-f-expected.txt: Added.
     19        * svg/W3C-SVG-1.1-SE/painting-marker-06-f.svg: Added.
     20        * svg/animations/animate-viewport-overflow-2-expected.txt: Added.
     21        * svg/animations/animate-viewport-overflow-2.html: Added.
     22        * svg/animations/animate-viewport-overflow-expected.txt: Added.
     23        * svg/animations/animate-viewport-overflow.html: Added.
     24        * svg/in-html/overflow-repaint-expected.txt: Added.
     25        * svg/in-html/overflow-repaint.html: Added.
     26        * svg/in-html/overflow-svg-root-attr-expected.html: Added.
     27        * svg/in-html/overflow-svg-root-attr.html: Added.
     28        * svg/in-html/overflow-svg-root-expected.html: Added.
     29        * svg/in-html/overflow-svg-root-style-expected.html: Added.
     30        * svg/in-html/overflow-svg-root-style.html: Added.
     31        * svg/in-html/overflow-svg-root.html: Added.
     32        * svg/overflow/overflow-on-outermost-svg-element-horizontal-auto-expected.html: Added.
     33        * svg/overflow/overflow-on-outermost-svg-element-horizontal-auto.svg: Added.
     34        * svg/overflow/overflow-on-outermost-svg-element-ignore-attribute-1-expected.txt:
     35        * svg/overflow/overflow-on-outermost-svg-element-in-xhtml-visible-expected.png:
     36        * svg/overflow/overflow-on-outermost-svg-element-in-xhtml-visible-expected.txt: Copied from LayoutTests/platform/mac/svg/overflow/overflow-on-outermost-svg-element-in-xhtml-visible-expected.txt.
     37        * svg/overflow/overflow-on-outermost-svg-element-in-xhtml-visible.xhtml:
     38        * svg/overflow/overflow-on-outermost-svg-element-vertical-auto-expected.html: Added.
     39        * svg/overflow/overflow-on-outermost-svg-element-vertical-auto.svg: Added.
     40        * svg/overflow/overflow-scroll-on-outermost-svg-element-expected.txt: Added.
     41        * svg/overflow/overflow-scroll-on-outermost-svg-element.svg: Added.
     42        * svg/overflow/overflow-x-hidden-on-outermost-svg-element-expected.svg: Added.
     43        * svg/overflow/overflow-x-hidden-on-outermost-svg-element.svg: Added.
     44        * svg/overflow/overflow-y-hidden-on-outermost-svg-element-expected.svg: Added.
     45        * svg/overflow/overflow-y-hidden-on-outermost-svg-element.svg: Added.
     46
    1472014-05-09  Alexey Proskuryakov  <ap@apple.com>
    248
  • trunk/LayoutTests/platform/efl/svg/overflow/overflow-on-outermost-svg-element-in-xhtml-visible-expected.txt

    r140245 r168543  
    55    RenderInline {body} at (0,0) size 400x17
    66      RenderText {#text} at (0,0) size 0x0
    7       RenderSVGRoot {svg} at (0,0) size 400x400
    8         RenderSVGRect {rect} at (0,0) size 400x400 [fill={[type=SOLID] [color=#008000]}] [x=0.00] [y=0.00] [width=4000.00] [height=4000.00]
     7      RenderSVGRoot {svg} at (0,0) size 4000x4000
     8        RenderSVGRect {rect} at (0,0) size 4000x4000 [fill={[type=SOLID] [color=#008000]}] [x=0.00] [y=0.00] [width=4000.00] [height=4000.00]
    99      RenderText {#text} at (0,0) size 0x0
    1010    RenderText {#text} at (0,0) size 0x0
  • trunk/LayoutTests/platform/mac/svg/overflow/overflow-on-outermost-svg-element-in-xhtml-visible-expected.txt

    r103407 r168543  
    55    RenderInline {body} at (0,0) size 400x18
    66      RenderText {#text} at (0,0) size 0x0
    7       RenderSVGRoot {svg} at (0,0) size 400x400
    8         RenderSVGRect {rect} at (0,0) size 400x400 [fill={[type=SOLID] [color=#008000]}] [x=0.00] [y=0.00] [width=4000.00] [height=4000.00]
     7      RenderSVGRoot {svg} at (0,0) size 4000x4000
     8        RenderSVGRect {rect} at (0,0) size 4000x4000 [fill={[type=SOLID] [color=#008000]}] [x=0.00] [y=0.00] [width=4000.00] [height=4000.00]
    99      RenderText {#text} at (0,0) size 0x0
    1010    RenderText {#text} at (0,0) size 0x0
  • trunk/LayoutTests/svg/overflow/overflow-on-outermost-svg-element-ignore-attribute-1-expected.txt

    r149088 r168543  
    11layer at (0,0) size 4000x4000
    2   RenderView at (0,0) size 785x585
     2  RenderView at (0,0) size 800x600
    33layer at (0,0) size 4000x4000
    44  RenderSVGRoot {svg} at (0,0) size 4000x4000
  • trunk/LayoutTests/svg/overflow/overflow-on-outermost-svg-element-in-xhtml-visible-expected.txt

    r168542 r168543  
    55    RenderInline {body} at (0,0) size 400x18
    66      RenderText {#text} at (0,0) size 0x0
    7       RenderSVGRoot {svg} at (0,0) size 400x400
    8         RenderSVGRect {rect} at (0,0) size 400x400 [fill={[type=SOLID] [color=#008000]}] [x=0.00] [y=0.00] [width=4000.00] [height=4000.00]
     7      RenderSVGRoot {svg} at (0,0) size 4000x4000
     8        RenderSVGRect {rect} at (0,0) size 4000x4000 [fill={[type=SOLID] [color=#008000]}] [x=0.00] [y=0.00] [width=4000.00] [height=4000.00]
    99      RenderText {#text} at (0,0) size 0x0
    1010    RenderText {#text} at (0,0) size 0x0
  • trunk/LayoutTests/svg/overflow/overflow-on-outermost-svg-element-in-xhtml-visible.xhtml

    r54551 r168543  
    11<!--
    22 Verify default overflow rules for the outermost <svg> element in non-standalone documents.
    3  You should see a 400x400 green rectangle, not covering the whole screen size.
     3 The green rectangle should cover the entire screen, since no clipping is done for overflow:visible.
    44
    55 Spec reference:
  • trunk/Source/WebCore/ChangeLog

    r168536 r168543  
     12014-05-09  Zsolt Borbely  <zsborbely.u-szeged@partner.samsung.com>
     2
     3        ASSERTION FAILED: object->style()->overflowX() == object->style()->overflowY()
     4        https://bugs.webkit.org/show_bug.cgi?id=121682
     5
     6        Reviewed by Dirk Schulze.
     7
     8        Add more overflow freedom to the SVG element:
     9        -overflow-x and overflow-y for controlling each scrollbar independently is now supported
     10        -overflow:scroll will display scrollbars regardless of the svg overflowing or not (as required by CSS)
     11        -overflow:hidden will cause overflow to be clipped away and scrollbars to be hidden
     12
     13        Merged from Blink r172126 by <ed@opera.com>
     14
     15        Tests: svg/W3C-SVG-1.1-SE/painting-marker-05-f.svg
     16               svg/W3C-SVG-1.1-SE/painting-marker-06-f.svg
     17               svg/animations/animate-viewport-overflow-2.html
     18               svg/animations/animate-viewport-overflow.html
     19               svg/in-html/overflow-repaint.html
     20               svg/in-html/overflow-svg-root-attr.html
     21               svg/in-html/overflow-svg-root-style.html
     22               svg/in-html/overflow-svg-root.html
     23               svg/overflow/overflow-on-outermost-svg-element-horizontal-auto.svg
     24               svg/overflow/overflow-on-outermost-svg-element-vertical-auto.svg
     25               svg/overflow/overflow-scroll-on-outermost-svg-element.svg
     26               svg/overflow/overflow-x-hidden-on-outermost-svg-element-expected.svg
     27               svg/overflow/overflow-x-hidden-on-outermost-svg-element.svg
     28               svg/overflow/overflow-y-hidden-on-outermost-svg-element-expected.svg
     29               svg/overflow/overflow-y-hidden-on-outermost-svg-element.svg
     30
     31        * css/StyleResolver.cpp:
     32        (WebCore::StyleResolver::adjustRenderStyle):
     33        * page/FrameView.cpp:
     34        (WebCore::FrameView::applyOverflowToViewport):
     35        * rendering/svg/RenderSVGRoot.cpp:
     36        (WebCore::RenderSVGRoot::layout):
     37        (WebCore::RenderSVGRoot::shouldApplyViewportClip):
     38        (WebCore::RenderSVGRoot::paintReplaced):
     39        (WebCore::RenderSVGRoot::computeFloatRectForRepaint):
     40        * rendering/svg/RenderSVGRoot.h:
     41        * rendering/svg/SVGRenderSupport.cpp:
     42        (WebCore::SVGRenderSupport::isOverflowHidden):
     43
    1442014-05-09  Jer Noble  <jer.noble@apple.com>
    245
  • trunk/Source/WebCore/css/StyleResolver.cpp

    r168079 r168543  
    13191319
    13201320    if (e && e->isSVGElement()) {
    1321         // Spec: http://www.w3.org/TR/SVG/masking.html#OverflowProperty
    1322         if (style.overflowY() == OSCROLL)
    1323             style.setOverflowY(OHIDDEN);
    1324         else if (style.overflowY() == OAUTO)
    1325             style.setOverflowY(OVISIBLE);
    1326 
    1327         if (style.overflowX() == OSCROLL)
    1328             style.setOverflowX(OHIDDEN);
    1329         else if (style.overflowX() == OAUTO)
    1330             style.setOverflowX(OVISIBLE);
    1331 
    13321321        // Only the root <svg> element in an SVG document fragment tree honors css position
    13331322        if (!(e->hasTagName(SVGNames::svgTag) && e->parentNode() && !e->parentNode()->isSVGElement()))
  • trunk/Source/WebCore/page/FrameView.cpp

    r168380 r168543  
    586586
    587587    if (o->isSVGRoot()) {
    588         // overflow is ignored in stand-alone SVG documents.
    589         if (!toRenderSVGRoot(o)->isEmbeddedThroughFrameContainingSVGDocument())
    590             return;
    591         overflowX = OHIDDEN;
    592         overflowY = OHIDDEN;
     588        // FIXME: evaluate if we can allow overflow for these cases too.
     589        // Overflow is always hidden when stand-alone SVG documents are embedded.
     590        if (toRenderSVGRoot(o)->isEmbeddedThroughFrameContainingSVGDocument()) {
     591            overflowX = OHIDDEN;
     592            overflowY = OHIDDEN;
     593        }
    593594    }
    594595
  • trunk/Source/WebCore/rendering/svg/RenderSVGRoot.cpp

    r168350 r168543  
    197197    }
    198198
     199    if (!shouldApplyViewportClip()) {
     200        FloatRect contentRepaintRect = repaintRectInLocalCoordinates();
     201        contentRepaintRect = m_localToBorderBoxTransform.mapRect(contentRepaintRect);
     202        addVisualOverflow(enclosingLayoutRect(contentRepaintRect));
     203    }
     204
    199205    updateLayerTransform();
    200206
     
    202208
    203209    clearNeedsLayout();
     210}
     211
     212bool RenderSVGRoot::shouldApplyViewportClip() const
     213{
     214    // the outermost svg is clipped if auto, and svg document roots are always clipped
     215    // When the svg is stand-alone (isDocumentElement() == true) the viewport clipping should always
     216    // be applied, noting that the window scrollbars should be hidden if overflow=hidden.
     217    return style().overflowX() == OHIDDEN
     218        || style().overflowX() == OAUTO
     219        || style().overflowX() == OSCROLL
     220        || this->isRoot();
    204221}
    205222
     
    238255    childPaintInfo.context->save();
    239256
    240     // Apply initial viewport clip - not affected by overflow handling
    241     childPaintInfo.context->clip(pixelSnappedIntRect(overflowClipRect(paintOffset, paintInfo.renderNamedFlowFragment)));
     257    // Apply initial viewport clip
     258    if (shouldApplyViewportClip())
     259        childPaintInfo.context->clip(pixelSnappedIntRect(overflowClipRect(paintOffset, paintInfo.renderNamedFlowFragment)));
    242260
    243261    // Convert from container offsets (html renderers) to a relative transform (svg renderers).
     
    333351        shadow->adjustRectForShadow(repaintRect);
    334352
    335     // Apply initial viewport clip - not affected by overflow settings
    336     repaintRect.intersect(pixelSnappedBorderBoxRect());
     353    // Apply initial viewport clip
     354    if (shouldApplyViewportClip())
     355        repaintRect.intersect(pixelSnappedBorderBoxRect());
    337356
    338357    LayoutRect rect = enclosingIntRect(repaintRect);
  • trunk/Source/WebCore/rendering/svg/RenderSVGRoot.h

    r168350 r168543  
    104104    virtual bool canHaveChildren() const override { return true; }
    105105
     106    bool shouldApplyViewportClip() const;
    106107    void updateCachedBoundaries();
    107108    void buildLocalToBorderBoxTransform();
  • trunk/Source/WebCore/rendering/svg/SVGRenderSupport.cpp

    r165546 r168543  
    293293bool SVGRenderSupport::isOverflowHidden(const RenderElement& renderer)
    294294{
    295     // SVG doesn't support independent x/y overflow
    296     ASSERT(renderer.style().overflowX() == renderer.style().overflowY());
    297 
    298     // OSCROLL is never set for SVG - see StyleResolver::adjustRenderStyle
    299     ASSERT(renderer.style().overflowX() != OSCROLL);
    300 
    301295    // RenderSVGRoot should never query for overflow state - it should always clip itself to the initial viewport size.
    302296    ASSERT(!renderer.isRoot());
    303297
    304     return renderer.style().overflowX() == OHIDDEN;
     298    return renderer.style().overflowX() == OHIDDEN || renderer.style().overflowX() == OSCROLL;
    305299}
    306300
Note: See TracChangeset for help on using the changeset viewer.