Update on what happened in WebKit in the week from October 26 to November 2.
In this week's installment we have an improvement to WebKit when running under Flatpak, OpenSSL being made the default crypto backend for the WPE and GTK ports, improved support for the Media Playback Quality spec, and the usual plethora of improvements and fixes to the Layer-Based SVG Engine.
Cross-Port 🐱
When running in Flatpak, use the flatpak-portal D-Bus API to spawn sub processes instead of flatpak-spawn. This provides a small improvement in launch times and memory usage.
OpenSSL is now the default backend for crypto in the WPE and GTK ports. The libgcrypt backend will remain in tree for the current cycle but can be considered deprecated and will be removed after the next stable release series.
Multimedia 🎥
GStreamer-based multimedia support for WebKit, including (but not limited to) playback, capture, WebAudio, WebCodecs, and WebRTC.
Improved support for the Media Playback Quality spec in WebKitGTK/WPE, avoiding statistics counter resets during flushes and pauses, and properly keeping the statistics after player suspension.
Graphics 🖼️
Fixed the sizing of <foreignObject> in vertical writing modes in the Layer-Based SVG Engine (LBSE), where its width and height were swapped. The viewport size is now mapped to the logical axes, as the legacy SVG engine does.
Skipped SVG filters that change nothing, such as an feOffset without an offset or an feDropShadow with zero blur and offset, in the Layer-Based SVG Engine (LBSE), matching the legacy SVG engine.
Fixed missing repaints in the Layer-Based SVG Engine (LBSE) when an attribute of an SVG filter primitive changes before the filter has painted for the first time. The elements using the filter are now always repainted, as in the legacy SVG engine.
Removed an extra clip on the outermost <svg> element in the Layer-Based SVG Engine (LBSE), which truncated drop-shadow() filters, box-shadow, outlines painting outside the border box, and rotated inline <svg> elements. The existing viewport overflow clip already handles this correctly, including transforms.
Fixed getScreenCTM() in the Layer-Based SVG Engine (LBSE) to include CSS zoom on the outermost <svg> while still ignoring page zoom, matching the legacy SVG engine. This resolves the remaining getScreenCTM() issues in LBSE.
Removed the transform-to-root check from SVG container layout in the Layer-Based SVG Engine (LBSE), which re-laid out a whole subtree whenever an ancestor changed its transform to the outermost <svg> element. Transforms now invalidate the relevant state directly, so these extra re-layouts are no longer needed.
Fixed outlines, masks and event regions being displaced on an outermost <svg> that is not at the origin of its containing block in the Layer-Based SVG Engine (LBSE). Besides the visual fix, this also corrects the regions used for wheel event handling.
Fixed SVG text being laid out with a stale font size after its own transform changes in the Layer-Based SVG Engine (LBSE). The transform is now updated before the on-screen font size is computed, so text metrics match the legacy SVG engine.
Fixed non-scaling strokes on SVG text ensuring they are measured in the coordinate system of the outermost <svg> element, like shapes already were, instead of in screen space. A CSS transform on the outermost <svg> or on one of its HTML ancestors now scales the vector-effect: non-scaling-stroke of text correctly, in both the Layer-Based SVG Engine (LBSE) and the legacy SVG engine.
Aligned the filter source image to whole device pixels when repainting filtered SVG content in the Layer-Based SVG Engine (LBSE), so a repaint always fully replaces the pixels it touches, instead of leaving stale pixels behind when content wasn't device-pixel aligned.
That’s all for this week!