the Chromium logo

The Chromium Projects

October 2021 - 2 sprint's worth of highlights

October 2021 Chrome Interactions Highlights Archives: go/interactions-team-highlights
CompositeBGColorAnimation finch xidachen@ launched finch on the stable channel for 1% of the population (detailed result). Overall, we got very good results on throughput metrics, but slightly more memory consumption on Windows (~1.5%). The increase in memory is explained by how garbage collection is scheduled. Most importantly, there was no regression on the first or large contentful paint. A crash was discovered owing to the fact that not all colors are handled the same way. System colors behave more like references. For example, the “Field” color refers to the default background color for an input field. The correct color is resolved later in the pipeline, and cannot presently be used with a composited background color animation. These animations are now deferred to the main thread (link). image With this final known issue fixed, we’re ready to review performance metrics for launch. Scroll timeline kevers@ landed a number of spec changes to web-animations-2 in support of scroll-linked animations. These spec changes largely address issues with timing in the API. Previously all timing was recorded in milliseconds. With progress-based animations, times are reported as CSSNumericValue percentages. The spec changes also address some edge cases for scroll-linked animations that are in the paused state as well as the effect phase when at limits of the scroll range. image Pull request links: PR6656, PR6655, PR6508, PR6479. PR6702, PR6712. kevers@ fixed some flaky scroll animation tests (link). One source of flakes was caused by slight platform dependencies combined with floating point rounding errors. By tweaking the tests to not depend on scrollbar width and to have nice integer expected values, these tests no longer flake. The flakiness was discovered while working on a polyfill implementation of scroll timelines. Another source of flakes was due to improper assumptions when making a style change before an animation frame (link). kevers@ fixed 2 clusterfuzz failures. Both were caused by unexpected input: malformed scrollOffsets (link), and unsupported effect delays (link).
<td><td>lock-renderer-for-middle-click-autoscroll.html  (<a
href="https://crrev.com/925854">r925854</a>)</td></td>

<td><td>scrollbar-double-click.html             (<a
href="https://crrev.com/925896">r925896</a>)</td></td>
<td><td>background-attachment-local-scrolling.htm</td></td>
<td><td>plugin-overlay-scrollbar-mouse-capture.html</td></td>

<td><td>reset-scroll-in-onscroll.html                   (<a
href="https://crrev.com/927008">r927008</a>)</td></td>
\[Scroll Unification\] Web test burn-down Scroll unification is an important code health project to streamline the scrolling process. Currently, there are multiple code paths, which need to be considered when addressing a bug or updating scroll behavior. This cycle, skobes@ has focused on burning down the number of test failures.
This reduced the number of outstanding web test regressions by 16%.
Responsive composited animations kevers@ fixed the responsiveness of composited animations to changes in the animation environment (link). For main thread animations, ConversionCheckers detect changes that would affect interpolations of properties during an animation. These changes now trigger an invalidation of the compositor keyframe snapshots. Some further tweaks were required to defer updating the compositor snapshots until after the ConversionCheckers have run.
@keyframes spin { 0% { transform: scaleX(var(--scale)) rotate(0deg); } 100% { transform: scaleX(var(--scale)) rotate(180deg); } } image
Infinite user activation by extensions (mustaq@) Extension messaging API needs to trigger an artificial user activation in background scripts to allow access to user-activation-gated APIs like Permissions and popup. This trigger caused a challenging P1 security bug reported by a user 2+ years ago (internally we knew it even before that). The problem here is that a malicious site or extension can craft a delayed message-reply sequence to effectively extend the lifespan of the original user activation, and even repeat the sequence indefinitely to secure a “forever-active” state. That means, a single user click in one webpage could allow infinite popups from any tabs! image In addition to being a challenging problem by itself, the bug “worsened” two other security bugs (on leaking autofill 966562 and bypassing sandbox restriction 1035315) in the last two years! After a long brainstorming through unactionable whiteboard drawings, misleading UMA discovery and stalled design discussion, we were able to find and land a fix in Q3, yayy!
Fixed overscroll glow position (flackr@) Overscroll glow on android could appear in the wrong position. image The scrollable viewport bounds didn’t include the current bounds delta from active touch dragging. Fixed using ScrollTree::container_bounds. Smooth scroll vs. JS scroll (skobes@) Achievements: Learned a lot about how to handle JS scrolls in the middle of a user-triggered smooth scroll (wheel, keyboard). Both the main thread and the compositor thread were handling this improperly in different ways. A new proposal enables "adjustment" behavior in virtual scrollers. easeinout.png
Bug status update image image
Chrome Interactions Highlights | October 2021 go/interactions-team