commit | 712c3cf3ed8201420acf23f760eaa34be20781cd | [log] [tgz] |
---|---|---|
author | Majid Valipour <majidvp@chromium.org> | Tue May 07 21:51:38 2019 |
committer | Commit Bot <commit-bot@chromium.org> | Tue May 07 21:51:38 2019 |
tree | a9b9547b4eead43c32f222221b35ac0b85bcd8df | |
parent | 7181ee07e464941e2aa3889dd19c7c3ea5eebd8d [diff] |
Correctly handle scroll-snap-type changes to 'none' Previously when a scroll container's snap type is changed to 'none' its data was discarded including all of its snap areas. However this is incorrect. Because while the snap type is 'none', the element is still a scroll container which per spec [1] means that is should continue to captures the snap areas in its subtree for whom it is the nearest ancestor scroll container . The only difference is that it no longer snaps. The fix is that we no longer remove the snap container data just because is has a 'none' snap type and instead keep it and its snap areas. But we check the snap type before performing any snap. To ensure this does not introduce any performance regression, this CL also includes an optimization where we avoid re-calculating snap_container_data when the snap type is 'none'. So keeping these snap data should not be cheap. Note that there is another problem where if the current snap container is no longer a scroll container (e.g., overflow: scroll => overflow: visible) we release its snap areas and they become "orphan". But if we are to do this correctly, we should re-assign these areas to the next stroller in the chain. Similarly when an element becomes a scroll container, it can potentially take over snap areas from its parent snap container. This patch does not address that situation yet but fixes the easier problem. [1] https://drafts.csswg.org/css-scroll-snap/#overview Bug: 953575 Test: - wpt/css/css-scroll-snap/scroll-snap-type-change.html => Changing snap-type should work correctly - wpt/css/css-scroll-snap/scroll-snap-type.html => Add a specific test for type 'none' to ensure it does not snap Change-Id: Ie493ad68ecba818ed41c0ee103ccf44725ff6e3f Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1589899 Reviewed-by: Majid Valipour <majidvp@chromium.org> Reviewed-by: David Bokan <bokan@chromium.org> Commit-Queue: Majid Valipour <majidvp@chromium.org> Cr-Commit-Position: refs/heads/master@{#657460}
Chromium is an open-source browser project that aims to build a safer, faster, and more stable way for all users to experience the web.
The project's web site is https://www.chromium.org.
Documentation in the source is rooted in docs/README.md.
Learn how to Get Around the Chromium Source Code Directory Structure .