Issue metadata
Sign in to add a comment
|
Scrollbar in iframe child div "overflow-x: auto" not painted initially after post-load iframe resize.
Reported by
eugene.b...@gmail.com,
May 28 2017
|
||||||||||||||||||||||
Issue descriptionUserAgent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Steps to reproduce the problem: 1. Save attached HTML documents 2. Open parent.html What is the expected behavior? There should always be a horizontal scrollbar below the green rectangle. This problem seems to only happen when: 1. iframe content has an element with overflow-x="scroll" or "auto" 2. iframe scrolling="no" 3. Initial iframe height is shorter that its content. What went wrong? Element's horizontal scrollbar is not visible when hosted in iframe. Did this work before? N/A Chrome version: 61.0.3114.0 Channel: canary OS Version: 6.1 (Windows 7, Windows Server 2008 R2) Flash Version: Works in Firefox 51.0.1 and IE11
,
May 30 2017
Tested the issue on Windows 7 & 10 using chrome stable version #58.0.3029.110 and Latest canary #60.0.3114.0. Unable able to repro this issue. Following are the steps followed to reproduce the issue. ------------ 1. Downloaded both attachments(Parent.html and Child.hmtl) 2. Opened parent.html and Observed that Horizontal scrollbar is seen. 3. Also opened child.html and Observed that Horizontal scrollbar is seen. Attaching screen cast for reference. eugene.brain.ong@ - Could you please verify the screen-cast and let us know if anything is missed from our side.If possible please provide an expected behavior screen cast explaining about the issue. Thanks...!!
,
May 31 2017
Expected behavior is the scrollbar should always be visible. Jump to 0:14 of your screen-cast and notice that scrollbar is hidden and only becomes visible when your mouse is on top of where the scrollbar should be. Please also see attached screenshot
,
May 31 2017
Thank you for providing more feedback. Adding requester "jbanavatu@chromium.org" to the cc list and removing "Needs-Feedback" label. For more details visit https://www.chromium.org/issue-tracking/autotriage - Your friendly Sheriffbot
,
May 31 2017
Able to reproduce on Windows-10 & 7, Ubuntu 14.04 and Mac OS 10.12 using chrome stable M58-58.0.3029.110 and latest M60-61.0.3115.0 Following are the steps followed to reproduce the issue. ------------ 1. Downloaded both attachments(Parent.html and Child.hmtl) 2. Opened parent.html and Observed that Horizontal scrollbar is seen only after mouse hover. Bisect Information: ===================== Good build:54.0.2816.0 Bad Build :54.0.2817.0 You are probably looking for a change made after 409290 (known good), but no later than 409291 (first known bad). CHANGELOG URL: https://chromium.googlesource.com/chromium/src/+log/f0c034ea05c19080c63bf73afb5200c49f203db1..ccb9e13712b1632b889960d1d85d556c0139fd51 From the above change log suspecting below change Review-Url: https://codereview.chromium.org/1484163002 wkorman@ - Could you please check whether this is caused with respect to your change, if not please help us in assigning it to the right owner. Thanks!
,
May 31 2017
,
Aug 7 2017
I can repro on Linux at ToT. It looks like a visual rect/paint invalidation issue. The scroller is not composited.
The last display item list horizontal scrollbar visual rects before paint is stable, and when horizontal scrollbar is still not visible, shows empty visual rects for the scrollbar parts:
"index": 6,
"properties": "client: \"0x12a167c24150 HorizontalScrollbar\", visualRect: \"0,0 0x0\", type: \"BeginTransform\", transform: [1.000000,0.000000,0.000000,1.000000,8.000000,8.000000]"
},
{
"index": 7,
"properties": "client: \"0x12a167c24150 HorizontalScrollbar\", visualRect: \"0,0 0x0\", type: \"DrawingScrollbarBackButtonStart\", rect: [0.000000,210.000000 15.000000x15.000000]"
},
{
"index": 8,
"properties": "client: \"0x12a167c24150 HorizontalScrollbar\", visualRect: \"0,0 0x0\", type: \"DrawingScrollbarForwardButtonEnd\", rect: [289.000000,210.000000 15.000000x15.000000]"
},
{
"index": 9,
"properties": "client: \"0x12a167c24150 HorizontalScrollbar\", visualRect: \"0,0 0x0\", type: \"DrawingScrollbarBackTrack\", rect: [15.000000,210.000000 67.000000x15.000000]"
},
{
"index": 10,
"properties": "client: \"0x12a167c24150 HorizontalScrollbar\", visualRect: \"0,0 0x0\", type: \"DrawingScrollbarForwardTrack\", rect: [82.000000,210.000000 207.000000x15.000000]"
},
{
"index": 11,
"properties": "client: \"0x12a167c24150 HorizontalScrollbar\", visualRect: \"0,0 0x0\", type: \"DrawingScrollbarThumb\", rect: [15.000000,210.000000 135.000000x15.000000]"
},
{
"index": 12,
"properties": "client: \"0x12a167c24150 HorizontalScrollbar\", visualRect: \"0,0 0x0\", type: \"EndTransform\""
},
Once we hover over the scrollbar prompting it to paint properly the visual rects for the scrollbar parts are non-empty:
{
"index": 6,
"properties": "client: \"0x12a167c24150 HorizontalScrollbar\", visualRect: \"18,228 304x15\", type: \"BeginTransform\", transform: [1.000000,0.000000,0.000000,1.000000,8.000000,8.000000]"
},
{
"index": 7,
"properties": "client: \"0x12a167c24150 HorizontalScrollbar\", visualRect: \"18,228 304x15\", type: \"DrawingScrollbarBackButtonStart\", rect: [0.000000,210.000000 15.000000x15.000000]"
},
{
"index": 8,
"properties": "client: \"0x12a167c24150 HorizontalScrollbar\", visualRect: \"18,228 304x15\", type: \"DrawingScrollbarForwardButtonEnd\", rect: [289.000000,210.000000 15.000000x15.000000]"
},
{
"index": 9,
"properties": "client: \"0x12a167c24150 HorizontalScrollbar\", visualRect: \"18,228 304x15\", type: \"DrawingScrollbarBackTrack\", rect: [15.000000,210.000000 67.000000x15.000000]"
},
{
"index": 10,
"properties": "client: \"0x12a167c24150 HorizontalScrollbar\", visualRect: \"18,228 304x15\", type: \"DrawingScrollbarForwardTrack\", rect: [82.000000,210.000000 207.000000x15.000000]"
},
{
"index": 11,
"properties": "client: \"0x12a167c24150 HorizontalScrollbar\", visualRect: \"18,228 304x15\", type: \"DrawingScrollbarThumb\", rect: [15.000000,210.000000 135.000000x15.000000]"
},
{
"index": 12,
"properties": "client: \"0x12a167c24150 HorizontalScrollbar\", visualRect: \"18,228 304x15\", type: \"EndTransform\""
},
,
Aug 7 2017
,
Sep 20 2017
TL;DR = it looks like we are either computing an incorrect clip for this case, or we need to force another invalidation of the scrollbars once layout is complete. In PaintInvalidationCapableScrollableArea we mark the horizontal scrollbar for invalidation, but when we compute the invalidation rect we start with scrollbar->FrameRect() = (0,210 304x15) and then in ScrollControlVisualRect(), MapLocalRectToVisualRectInBacking() turns it into an empty rect. Within MapLocalRectToVisualRectInBacking(), GeometryMapper::LocalToAncestorVisualRect() is called with an input rect that looks about right, (8,218 304x15) but produces an empty rect. GeometryMapper::LocalToAncestorVisualRectInternal() calls SlowLocalToAncestorVisualRectWithEffects() due to local effect node being null and ancestor effect node non-null (it's the root effect node). This computes a new local and ancestor state and calls GeometryMapper::LocalToAncestorVisualRectInternal() recursively. We then build a transform matrix, map the rect, and: mapped_rect = (18,228 304x15). clip_rect = (10,10 320x50) rect_to_map.Intersect(mapped_rect) = empty rect In LocalToAncestorClipRectInternal() we hit the first precomputed clip cache while loop and retrieve a cached clip of (10,10 320x50) which we don't further modify before returning. Visually at this point when paused in cgdb the iframe is shown in content shell as a small box 50px high. So these values actually may be correct, and perhaps we just need to invalidate the scrollbars again subsequently once another layout that incorporates the full size of the iframe is complete, and that's not happening for some reason.
,
Sep 20 2017
LocalFrameView::UpdateScrollbarGeometry() is called subsequently with the updated frame rect (10,10 320x240) but we don't invalidate the scrollbars on the div within the frame. The cached clip following this is correct as (10,10 320x240) and so I think we're missing an invalidation.
,
Sep 21 2017
I can repro the horizontal scrollbar issue even without "scrolling='no'" on the iframe tag. Removing that attribute just produces an additional vertical scrollbar that would otherwise be hidden. Also, in some cases adding logging changes timing such that we do paint scrollbars correctly on initial render without mouse hover. For some reason when the iframe is resized by the setTimeout-delayed height mutation we aren't invalidating the overflowed div. We do invalidate its parent but I'm not seeing why we skip invalidating the child 'target' initially, but we do invalidate it on mouse hover. Passing to wangxianzhu@ who is more familiar with this area for input. Adding slightly modified parent/child html without 'scrolling="no"' and with ids added to make it easier to see.
,
Sep 21 2017
Attaching files intended to be in last comment.
,
Oct 18 2017
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/6dfcf90347222e60d56fd65231a2819d0f908c3d commit 6dfcf90347222e60d56fd65231a2819d0f908c3d Author: Xianzhu Wang <wangxianzhu@chromium.org> Date: Wed Oct 18 01:41:54 2017 Ensure update of scrollbar and caret visual rects on ancestor clip change When an ancestor clip changes, we set kSubtreeVisualRectUpdate to update descendant visual rects which may be affected by the clip change. Previously we early returned in PaintInvalidator::InvalidatePaint() for descendants that had only kSubtreeVisualRectUpdate flag set. This caused other visual rects (of e.g. scrollbars, carets) that are updated during LayoutObject::InvalidatePaint() not updated. Now move the early return from PaintInvalidator::InvalidatePaint() into ObjectPaintInvalidator::ComputePaintInvalidationReason() to ensure the visual rects are updated. Bug: 727155 Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2 Change-Id: I28f92281363c693b16121f48d21ab4f808990f14 Reviewed-on: https://chromium-review.googlesource.com/719716 Commit-Queue: Xianzhu Wang <wangxianzhu@chromium.org> Reviewed-by: Chris Harrelson <chrishtr@chromium.org> Cr-Commit-Position: refs/heads/master@{#509648} [modify] https://crrev.com/6dfcf90347222e60d56fd65231a2819d0f908c3d/third_party/WebKit/LayoutTests/FlagExpectations/enable-slimming-paint-v2 [add] https://crrev.com/6dfcf90347222e60d56fd65231a2819d0f908c3d/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/caret-ancestor-clip-change-expected.txt [add] https://crrev.com/6dfcf90347222e60d56fd65231a2819d0f908c3d/third_party/WebKit/LayoutTests/paint/invalidation/caret-ancestor-clip-change-expected.html [add] https://crrev.com/6dfcf90347222e60d56fd65231a2819d0f908c3d/third_party/WebKit/LayoutTests/paint/invalidation/caret-ancestor-clip-change-expected.txt [add] https://crrev.com/6dfcf90347222e60d56fd65231a2819d0f908c3d/third_party/WebKit/LayoutTests/paint/invalidation/caret-ancestor-clip-change.html [add] https://crrev.com/6dfcf90347222e60d56fd65231a2819d0f908c3d/third_party/WebKit/LayoutTests/paint/invalidation/scrollbar-ancestor-clip-change-expected.html [add] https://crrev.com/6dfcf90347222e60d56fd65231a2819d0f908c3d/third_party/WebKit/LayoutTests/paint/invalidation/scrollbar-ancestor-clip-change-expected.txt [add] https://crrev.com/6dfcf90347222e60d56fd65231a2819d0f908c3d/third_party/WebKit/LayoutTests/paint/invalidation/scrollbar-ancestor-clip-change.html [modify] https://crrev.com/6dfcf90347222e60d56fd65231a2819d0f908c3d/third_party/WebKit/Source/core/paint/BoxPaintInvalidatorTest.cpp [modify] https://crrev.com/6dfcf90347222e60d56fd65231a2819d0f908c3d/third_party/WebKit/Source/core/paint/ObjectPaintInvalidator.cpp [modify] https://crrev.com/6dfcf90347222e60d56fd65231a2819d0f908c3d/third_party/WebKit/Source/core/paint/PaintInvalidator.cpp
,
Oct 18 2017
,
Oct 19 2017
Your change meets the bar and is auto-approved for M63. Please go ahead and merge the CL to branch 3239 manually. Please contact milestone owner if you have questions. Owners: cmasso@(Android), cmasso@(iOS), gkihumba@(ChromeOS), govind@(Desktop) For more details visit https://www.chromium.org/issue-tracking/autotriage - Your friendly Sheriffbot
,
Oct 19 2017
,
Oct 19 2017
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/470d6c4b534703585e010cf3db7db1559e573ca6 commit 470d6c4b534703585e010cf3db7db1559e573ca6 Author: Xianzhu Wang <wangxianzhu@chromium.org> Date: Thu Oct 19 16:18:20 2017 Ensure update of scrollbar and caret visual rects on ancestor clip change When an ancestor clip changes, we set kSubtreeVisualRectUpdate to update descendant visual rects which may be affected by the clip change. Previously we early returned in PaintInvalidator::InvalidatePaint() for descendants that had only kSubtreeVisualRectUpdate flag set. This caused other visual rects (of e.g. scrollbars, carets) that are updated during LayoutObject::InvalidatePaint() not updated. Now move the early return from PaintInvalidator::InvalidatePaint() into ObjectPaintInvalidator::ComputePaintInvalidationReason() to ensure the visual rects are updated. TBR=wangxianzhu@chromium.org (cherry picked from commit 6dfcf90347222e60d56fd65231a2819d0f908c3d) Bug: 727155 Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2 Change-Id: I28f92281363c693b16121f48d21ab4f808990f14 Reviewed-on: https://chromium-review.googlesource.com/719716 Commit-Queue: Xianzhu Wang <wangxianzhu@chromium.org> Reviewed-by: Chris Harrelson <chrishtr@chromium.org> Cr-Original-Commit-Position: refs/heads/master@{#509648} Reviewed-on: https://chromium-review.googlesource.com/728300 Reviewed-by: Xianzhu Wang <wangxianzhu@chromium.org> Cr-Commit-Position: refs/branch-heads/3239@{#66} Cr-Branched-From: adb61db19020ed8ecee5e91b1a0ea4c924ae2988-refs/heads/master@{#508578} [modify] https://crrev.com/470d6c4b534703585e010cf3db7db1559e573ca6/third_party/WebKit/LayoutTests/FlagExpectations/enable-slimming-paint-v2 [add] https://crrev.com/470d6c4b534703585e010cf3db7db1559e573ca6/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/caret-ancestor-clip-change-expected.txt [add] https://crrev.com/470d6c4b534703585e010cf3db7db1559e573ca6/third_party/WebKit/LayoutTests/paint/invalidation/caret-ancestor-clip-change-expected.html [add] https://crrev.com/470d6c4b534703585e010cf3db7db1559e573ca6/third_party/WebKit/LayoutTests/paint/invalidation/caret-ancestor-clip-change-expected.txt [add] https://crrev.com/470d6c4b534703585e010cf3db7db1559e573ca6/third_party/WebKit/LayoutTests/paint/invalidation/caret-ancestor-clip-change.html [add] https://crrev.com/470d6c4b534703585e010cf3db7db1559e573ca6/third_party/WebKit/LayoutTests/paint/invalidation/scrollbar-ancestor-clip-change-expected.html [add] https://crrev.com/470d6c4b534703585e010cf3db7db1559e573ca6/third_party/WebKit/LayoutTests/paint/invalidation/scrollbar-ancestor-clip-change-expected.txt [add] https://crrev.com/470d6c4b534703585e010cf3db7db1559e573ca6/third_party/WebKit/LayoutTests/paint/invalidation/scrollbar-ancestor-clip-change.html [modify] https://crrev.com/470d6c4b534703585e010cf3db7db1559e573ca6/third_party/WebKit/Source/core/paint/BoxPaintInvalidatorTest.cpp [modify] https://crrev.com/470d6c4b534703585e010cf3db7db1559e573ca6/third_party/WebKit/Source/core/paint/ObjectPaintInvalidator.cpp [modify] https://crrev.com/470d6c4b534703585e010cf3db7db1559e573ca6/third_party/WebKit/Source/core/paint/PaintInvalidator.cpp |
|||||||||||||||||||||||
►
Sign in to add a comment |
|||||||||||||||||||||||
Comment 1 by eugene.b...@gmail.com
, May 28 2017324 bytes
324 bytes View Download