New issue
Advanced search Search tips

Issue 837007 link

Starred by 2 users

Issue metadata

Status: Fixed
Owner:
Closed: Nov 27
Components:
EstimatedDays: ----
NextAction: ----
OS: Linux , Android , Windows , Mac
Pri: 2
Type: Bug

Blocking:
issue 798719



Sign in to add a comment

Implicit Root Scroller can prevent scrolling of ancestor scrollers

Reported by h...@jonjohnjohnson.com, Apr 25 2018

Issue description

UserAgent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3404.0 Safari/537.36

Steps to reproduce the problem:
1. Go to testcase -> http://output.jsbin.com/gedurer/11
2. Try scrolling horizontally, no scrolling happens.
3. Open inspector and toggle 'position:fixed' property declaration for the '.pager' selector.
4. Horizontal scrolling is enabled.

What is the expected behavior?
Because '.pager' element has a scrollWidth that is larger than its clientWidth and its 'overflow' is set to 'auto'/'scroll', it should be user scrollable.

What went wrong?
User cannot scroll on initial layout of spec compliant scrollable element.

Did this work before? Yes My other chrome 65.

Does this work in other browsers? Yes

Chrome version: 68.0.3404.0  Channel: canary
OS Version: OS X 10.12.6
Flash Version: 

Created from comments here -> https://bugs.chromium.org/p/chromium/issues/detail?id=825544
 
Please assign to bokan@chromium.org :)

Comment 2 by bokan@chromium.org, Apr 26 2018

Components: Blink>Scroll
Labels: -Pri-2 OS-Android OS-Linux OS-Windows Pri-3
Owner: bokan@chromium.org
Status: Assigned (was: Unconfirmed)

Comment 3 by bokan@chromium.org, Apr 26 2018

Blocking: 798719
Hey bokan@chromium.org, I don't mean to bother you, but wondering if you'd guess this other test case not allowing horizontal scrolling in a fixed scrolling element fitting the viewport, has the same cause as this issue.

-> https://output.jsbin.com/rutoceb/quiet

Open it in safari, see how using a horizontally scrolling gesture on the full screen red element behaves as normal, scrolling content left and right. In chromium, no scrolling is afforded from the same input. If I change the right property to -1px on the 'root' element, then the red block doesn't perfectly match the viewport (initial containing block?) and everything behaves as expected.

If it's a different cause, I'm happy to file a separate issue. Thanks for your time.
Labels: -Type-Bug-Regression Type-Bug
Yes, I believe it's the same issue. It's related to the "Implicit Root Scroller" feature - until recently that was gated by chrome://flags/#enable-experimental-web-platform-features. I've recently enabled it in Canary (temporarily) for testing. I'll be turning it off shortly but I'll fix this issue before I ship it out to stable channel.
Labels: -Pri-3 Pri-2
Status: Started (was: Assigned)
Summary: Implicit Root Scroller can prevent scrolling of ancestor scrollers (was: [css-overflow] element with clientWidth wider than viewport and scrollable overflow not user scrollable until relayout?)
Project Member

Comment 7 by bugdroid1@chromium.org, Nov 27

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/59d9ba119448a269289d57e7c3d23a7f04f19248

commit 59d9ba119448a269289d57e7c3d23a7f04f19248
Author: David Bokan <bokan@chromium.org>
Date: Tue Nov 27 19:17:33 2018

[root-scroller] Don't promote when ancestor is scrollable

If we have a candidate implicit root scroller, we should only promote it
if it doesn't have a scrollable ancestor. The reason for this is that we
end scroll chaining at the root scroller. This is necessary as the root
scroller consumes all scroll in the form of overscroll effects. A (user)
scrollable ancestor would be broken in this case, as shown in the
example on the attached bug.

Note: overflow in an ancestor is still allowed, as long as its overflow
style is hidden or visible.

Bug:  837007 
Change-Id: Ied7a9f02eab76c4ea59fced94d0804ba47ef4e4a
Reviewed-on: https://chromium-review.googlesource.com/c/1351590
Reviewed-by: Dave Tapuska <dtapuska@chromium.org>
Commit-Queue: David Bokan <bokan@chromium.org>
Cr-Commit-Position: refs/heads/master@{#611245}
[modify] https://crrev.com/59d9ba119448a269289d57e7c3d23a7f04f19248/third_party/blink/renderer/core/page/scrolling/root_scroller_controller.cc
[modify] https://crrev.com/59d9ba119448a269289d57e7c3d23a7f04f19248/third_party/blink/renderer/core/page/scrolling/root_scroller_test.cc

Status: Fixed (was: Started)
Hey bokan@chromium.org, with your fix enabled, would you mind testing this url again...

https://output.jsbin.com/rutoceb/quiet

Not for the horizontal scrolling of the viewport covering scroll container...

But for the little white rectangles that rest on the bottom edge of the screen. I ask, because the bug that it exhibits is only happening in the jsbin output endpoint, and not in the editor endpoint (https://jsbin.com/rutoceb/edit) which has the scrollers obviously not on the edge of the window. And if it isn't fixed by your changes, I will file it as a possible issue with the implementation of overscroll-behavior.

Steps are...
1. Hover mouse on any white rectangle.
2. Attempt to scroll vertically.
3. Notice nothing scrolls, white rectangles do not scroll into view.
4. Move mouse a few pixels above white rectangles top edges, into the area which is not a horizontal scroll container.
5. Attempt vertical scroll and see how white rectangles scroll into view.
6. Again try to scroll vertically from white rectangles, nothing happens to scroll them away, until hovering area a few pixels above.

Once more, this bug is only seen in this full screen (windows edge) scroll container ui, not in the editable link from the text.
Just checked - I believe it's unrelated to this bug or the ImplicitRootScroller feature more generally (you can try disabling/enabling using --disable-blink-features=ImplicitRootScroller or --enable-blink-features=ImplicitRootScroller).

I was, however, able to make it work when using a low-DPI configuration (e.g. --force-device-scale-factor=1). I can reproduce your issue when using (default, on my system) high DPI (--force-device-scale-factor=2). I'll continue to investigate where the problem is - in the mean time, would you mind filing a new bug? Thanks
Ok, found the problem and filed bug 909083. FYI: this is a bug in how we handle pointer-events: none. If you remove it from the .tray element everything works.
Project Member

Comment 12 by bugdroid1@chromium.org, Dec 7

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/eb070d8200bc92b44e939751833273617194c947

commit eb070d8200bc92b44e939751833273617194c947
Author: David Bokan <bokan@chromium.org>
Date: Fri Dec 07 14:04:30 2018

[root-scroller] Allow horizontal document scrolling

In https://crrev.com/59d9ba119448a269289d57e7c3d23a7f04f19248 we added
the restriction that an element can only be promoted to implicit root
scroller if none of its ancestors have scrolling or clipping.

This inadvertantly removed a special case for allowing a horizontally
scrollable document.

Bug:  837007 
Change-Id: I5a52d821266a5775e5be8641bdb6ed56fc9892f3
Reviewed-on: https://chromium-review.googlesource.com/c/1366784
Reviewed-by: Dave Tapuska <dtapuska@chromium.org>
Commit-Queue: David Bokan <bokan@chromium.org>
Cr-Commit-Position: refs/heads/master@{#614688}
[modify] https://crrev.com/eb070d8200bc92b44e939751833273617194c947/third_party/blink/renderer/core/page/scrolling/root_scroller_controller.cc
[modify] https://crrev.com/eb070d8200bc92b44e939751833273617194c947/third_party/blink/renderer/core/page/scrolling/root_scroller_test.cc

Sign in to add a comment