Release Notes for Safari Technology Preview 253

Safari Technology Preview Release 253 is now available for download for macOS Golden Gate and macOS Tahoe. If you already have Safari Technology Preview installed, you can update it in System Settings under General → Software Update.

This release includes WebKit changes between: 320113@main…321067@main.

Accessibility

Resolved Issues

  • Fixed an issue where VoiceOver announced aria-keyshortcuts values containing Meta or Alt literally instead of using the macOS terminology Command and Option. (320424@main) (186342070)
  • Fixed an issue where VoiceOver could repeatedly announce the same live region content as it streamed into a page. (320576@main) (186694747)

Animations

New Features

  • Added support for style-originated scroll timelines to match globally, allowing them to be defined outside of the target’s hierarchy or that of an element with a timeline-scope property. (320183@main) (186261285)

Resolved Issues

  • Fixed an issue where an animation attached to a view timeline’s scroll range was not updated when the scroll container’s scrollable overflow changed. (320244@main) (185328465)
  • Fixed an issue where an animation could attach to a style-originated timeline made visible by timeline-scope instead of one established by an ancestor, which now takes priority. (320223@main) (186265325)
  • Fixed an issue where a style-originated timeline defined outside of a timeline-scope hierarchy could remain active instead of yielding an inactive timeline. (320227@main) (186330965)
  • Fixed an issue where changing a timeline-scope value did not update timelines for animations outside of its hierarchy. (320231@main) (186331685)
  • Fixed a regression where a paused and seeked animation incorrectly finished when resumed after a separate animation running at a non-default playback rate. (320238@main) (186339093)
  • Fixed an issue where the ViewTimeline constructor did not require a subject parameter. (320969@main) (187200265)

CSS

New Features

  • Added support for the extended numeric range in longhand East Asian counter styles. (320887@main) (109875198)
  • Added support for CSSContainerRule.conditions. (320762@main) (182257864)
  • Allow combining safe and unsafe keywords with normal alignment, and change safe behavior for absolutely (and fixed positioned) boxes to keep the box within their original containing block (the viewport). (185952139)
  • Added support for using sibling-index() and sibling-count() within container query conditions. (320493@main) (186564084)

Resolved Issues

  • Fixed an issue where a near-zero fixed background-size value collapsed the image tile to nothing. (320169@main) (140387662)
  • Fixed an issue where the [class~=foo] attribute selector did not perform as well as an equivalent class selector. (320862@main) (164128575)
  • Fixed an issue where highlight colors, such as those used by ::selection, did not inherit as a StyleColor, which could prevent values like color-mix(in oklab, teal 50%, currentcolor) from resolving correctly. (320228@main) (184495338)
  • Fixed an issue where a second CSS custom highlight sharing a Range with an already-registered highlight never painted. (320355@main) (185173794)
  • Fixed an issue where outside list markers were only repositioned after layout when their first formatted line was in a descendant block, instead of for every outside list marker. (320561@main) (185529863)
  • Fixed an issue where an inset box-shadow with a large spread on a wrapped inline element painted outside the element as full-width bands. (320150@main) (185651318)
  • Fixed an issue where CSS.highlights iterated in hash order instead of registration order after its wrapper was garbage collected. (320343@main) (185754041)
  • Fixed an issue where corner-shape rendered incorrectly when inner corners intersected. (320287@main) (185931169)
  • Fixed an issue where a grid item with an aspect-ratio could keep a stale inline size contribution when the grid container shrank. (320117@main) (186101273)
  • Fixed an issue where flexible grid tracks did not respect the grid container’s minimum and maximum size. (320160@main) (186103325)
  • Fixed an issue where fixed grid track sizing functions were overridden to zero while sizing tracks to fit non-spanning items. (320168@main) (186117142)
  • Fixed an issue where explicitly-placed grid items advanced the auto-placement cursor. (320253@main) (186118858)
  • Fixed an issue where the propagated root background was painted in the wrong position in vertical-rl writing mode. (320167@main) (186274088)
  • Fixed an issue where opening a <details> element made its <summary> one pixel shorter. (320461@main) (186413478)
  • Fixed an issue where a typed parameter of a CSS custom function did not keep its type. (320340@main) (186439114)
  • Fixed an issue where attr() stopped invalidating on attribute changes after a view transition. (320420@main) (186467515)
  • Fixed an issue where unicode-bidi and direction had no effect on an inside ::marker. (320504@main) (186468752)
  • Fixed an issue where fit-tolerance did not interpolate between <length-percentage> values. (320383@main) (186509338)
  • Fixed an issue where a grid item’s automatic minimum size was not clamped to a fixed maximum track sizing function. (320750@main) (186606479)
  • Fixed a regression where the line-height quirk in quirks mode was not applied to line boxes inside a nested inline-block element that had no line-height of its own. (320514@main) (186614663)
  • Fixed an issue where interpolating a <length-percentage> from a calc() value to a pure <length> dropped the percentage component at 100% progress. (320585@main) (186628152)
  • Fixed an issue where text-decoration-thickness and text-underline-offset did not preserve percentage values when interpolating. (320584@main) (186628810)
  • Fixed an issue where align-content left the list marker behind. (320532@main) (186676835)
  • Fixed an issue where text-indent moved an outside list marker along with the indented text. (320533@main) (186678552)
  • Fixed an issue where a float in a list item’s content pushed the outside list marker inward with the line. (320549@main) (186680551)
  • Fixed an issue where a tab character rendered too narrow when tab-size was small in a proportional font. (320671@main) (186698040)
  • Fixed an issue where a gradient in the content property painted blank. (320620@main) (186742805)
  • Fixed an issue where some combinations of corner-shape with thick borders rendered incorrectly. (320826@main) (186808871)
  • Fixed an issue where fit-content() grid tracks could be stretched beyond their argument instead of capping the track’s growth limit. (320780@main) (186961437)
  • Fixed an issue where an orthogonal <caption>‘s margins were missing from the table. (321056@main) (187137359)
  • Fixed an issue where an orthogonal <caption> ignored its margin against the table edge. (321060@main) (187139068)
  • Fixed an issue where transforming a table row group could misplace its absolutely positioned children. (321065@main) (187252945)
  • Fixed an issue where the resolved right and bottom values of an out-of-flow positioned element were wrong inside a vertical inline containing block. (321061@main) (187295559)
  • Fixed an issue where the identity and translation fast path of a transformation matrix ignored the w component when mapping a 4-component point. (321030@main) (187297446)

Canvas

Resolved Issues

  • Fixed an issue where a placeholder <canvas> element with no pushed OffscreenCanvas frame would fail instead of returning a transparent black image. (320202@main) (186229685)
  • Fixed an issue where an off-by-one error in the bottom-row check caused canvas noise injection to misclassify the bottom-left pixel. (320510@main) (186640624)
  • Fixed a performance regression where drawing a canvas onto itself with drawImage prevented its backing surface from being recycled. (320735@main) (186731221)
  • Fixed an issue where a canvas 2D context remained unusable after a temporary failure to allocate its backing store. (320605@main) (186799597)
  • Fixed an issue where drawing to <canvas> computed path bounds unnecessarily when the whole backing store was already marked dirty. (320709@main) (186946552)

Editing

Resolved Issues

  • Fixed an issue where the context menu in PDFs with copying disabled was missing text selection options. (320444@main) (186527750)
  • Fixed an issue on macOS where the Copy option was enabled in the edit menu after selecting text in a PDF that disallows copying. (320534@main) (186648332)

Forms

Resolved Issues

  • Fixed an issue where a large picker for a base-appearance <select> could render outside the viewport, by applying safe alignment to keep it within its original containing block. (320564@main) (185952139)

HTML

Resolved Issues

  • Fixed an issue where the window load event could fail to fire if a readystatechange handler triggered a new load during page completion. (320331@main) (186373617)

JavaScript

New Features

  • Added support for BigInt values in Intl.PluralRules.prototype.select and Intl.PluralRules.prototype.selectRange. (320396@main) (186534585)
  • Added support for a faster Toom-3 multiplication algorithm for large BigInt values. (321013@main) (187336927)

Resolved Issues

  • Fixed an issue in JavaScriptCore where a stale inline cache for a custom accessor on a previously flattened dictionary could persist after the accessor was shadowed, which could cause code that replaces built-in properties at runtime (such as a test mocking library overriding XMLHttpRequest) to keep using the original value. (320742@main) (180048596)
  • Fixed an issue where Intl.DurationFormat in digital style included a stray separator when minutesDisplay was set to "auto" and minutes ended up hidden. (320182@main) (180722012)
  • Fixed an issue where Array.prototype.toSpliced threw a TypeError instead of a RangeError when the array’s length was Infinity. (320554@main) (184438837)
  • Fixed an issue where TypedArray setFromTypedArray could not use memmove when the region was intentionally overlapping and the spec algorithm needed to read back the modified result. (320130@main) (186145219)
  • Fixed an issue where the TypedArray constructor could produce incorrect results when copying Array content whose element access has side effects. (320185@main) (186227333)
  • Fixed a performance issue where String.prototype.toLowerCase and String.prototype.toUpperCase did not scan strings inline in the DFG and FTL JIT tiers. (320293@main) (186301688)
  • Fixed an issue where a character following a class set operand in a /v mode regular expression class incorrectly added U+0000 to the class. (320216@main) (186319779)
  • Fixed an issue where Temporal.ZonedDateTime.prototype.round resolved the rounded wall-clock time using a minute-rounded offset instead of the correct offset. (320217@main) (186319834)
  • Fixed an issue where Object.freeze() did not invalidate the megamorphic inline cache epoch, which could cause stale property accesses on a frozen object. (320276@main) (186393610)
  • Fixed an issue where deleting a property of a dictionary prototype in place did not invalidate the megamorphic store cache. (320375@main) (186513123)
  • Fixed a performance issue where RegExp.prototype.test did not fast-fail when the input string was shorter than the pattern’s minimum possible match length. (320487@main) (186534079)
  • Fixed an issue where regular expression lookbehind assertions could fail to match, or match at an invalid position, due to incorrect handling of surrogate pairs in the regular expression interpreter. (320492@main) (186536137)
  • Fixed an issue where Atomics.isLockFree() converted its argument with a 32-bit integer conversion instead of ToIntegerOrInfinity, which could cause it to incorrectly return true for large size values. (320715@main) (186610789)
  • Fixed an issue where a stack frame for a script loaded from a data: URL included the entire script in Error.stack instead of a truncated URL. (320770@main) (186614179)
  • Fixed an issue where a JIT fast path for RegExp.prototype.test could skip the required read of lastIndex, silently dropping observable side effects. (320582@main) (186792229)
  • Fixed an issue where tail-call optimization was skipped for eval calls that didn’t resolve to the real eval function, and incorrectly applied inside generator and async function bodies, which could produce incorrect results. (320687@main) (186840477)
  • Fixed an issue where RegExp.escape incorrectly narrowed supplementary code points to 16 bits. (320682@main) (186962453)
  • Fixed an issue where a \- following a class set operand in a /v mode regular expression class incorrectly threw a SyntaxError. (320683@main) (186962513)
  • Fixed an issue where RegExp::deleteCode() cleared a regular expression’s cached pattern atom, which could cause incorrect values from static RegExp properties such as leftContext and rightContext after the compiled code was reclaimed while idle. (320817@main) (187104089)
  • Fixed an issue where String.prototype.at and String.prototype.codePointAt could return an incorrect value for an out-of-bounds or negative index because the JIT compiler could eliminate their bounds check. (321014@main) (187336661)

Media

Resolved Issues

  • Fixed an issue where wireless playback could create a remote media session helper too eagerly, which could delay switching an active playback route to a wireless device. (320748@main) (184536781)
  • Fixed an issue where MediaRecorder could hold back a lone video keyframe indefinitely instead of using it to start a new recording segment. (320219@main) (186229843)
  • Fixed an issue where an AV1 sequence header that exactly filled the buffer was incorrectly rejected due to an off-by-one bounds check. (321041@main) (187306821)
  • Fixed an issue where black video-range pixel buffers were produced with super-black values instead of legal black. (321040@main) (187309125)

Networking

Resolved Issues

  • Fixed an issue where custom scheme CORS checks incorrectly blocked subresources loaded from an HTML document opened via a file: URL. (320685@main) (179999480)
  • Fixed an issue where reading a file-backed Blob range larger than 2GB truncated the read length due to an integer overflow. (320981@main) (187207663)
  • Fixed an issue where validation of an HTTP header value did not check its final character, allowing control characters and DEL to be accepted as valid. (321019@main) (187288970)

Performance

Resolved Issues

  • Fixed an issue where navigation could redundantly parse and decode a page’s URL multiple times, causing significant hangs for pages with very long URLs. (320292@main) (185796614)
  • Fixed excessive CPU and power usage caused by IntersectionObserver observation on pages with many observed elements. (320395@main) (185839711)
  • Fixed an issue where style resolution for elements sharing a scroll-timeline name could block the main thread for multiple seconds. (320902@main) (186090970)
  • Fixed an issue where ScrollingStateTree::insertNode performed redundant work reordering children on pages with many sibling scrolling nodes. (320527@main) (186143008)
  • Fixed an issue where ordinary property changes, such as toggling overflow: hidden, could trigger an unnecessary full-layer repaint. (320296@main) (186422878)

Rendering

Resolved Issues

  • Fixed an issue where a layer with a negative z-index inside a stacking context failed to composite correctly when overlapping an externally composited layer. (320473@main) (130595406)
  • Fixed an issue where the <mo> operator dictionary was consulted even when the element contained non-text content. (320730@main) (173078723)
  • Fixed an issue where accents and other combining marks could be painted outside their base letter when letter-spacing, word-spacing, expansion, or synthetic bold were applied. (320957@main) (186013305)
  • Fixed a regression that caused extra spacing to appear between an image and surrounding content near the bottom of a page. (320115@main) (186102748)
  • Fixed an issue where hovering links could trigger unnecessarily wide repaints, by repainting ink-overflow-only style changes without running inline layout. (320128@main) (186104270)
  • Fixed an issue where text nodes inside a display: contents element received redundant updates during style resolution. (320144@main) (186246705)
  • Fixed an issue where content changing inside an element with a blur() filter did not properly repaint, leaving stale pixels around the edge of the filtered region. (320398@main) (186278957)
  • Fixed an issue where a MathML rowspan="0" attribute was incorrectly clamped to 1. (320324@main) (186420659)
  • Fixed an issue where non-MathML children of <annotation> and <annotation-xml> were not rendered. (320334@main) (186429768)
  • Fixed an issue where drawing a native image did not respect the requested InterpolationQuality, affecting image scaling across canvas, SVG, and PDF rendering paths. (320429@main) (186439811)
  • Fixed an issue where a layer with clip-path or mask could be treated as fully opaque, causing incorrect rendering. (320634@main) (186722177)
  • Fixed an issue where a position: sticky element with -webkit-box-reflect applied could composite its reflection incorrectly. (320712@main) (186812790)
  • Fixed an issue where an optimization to text matrix handling when drawing glyphs could cause text to render upside down. (321067.5@safari-7626.1.8-branch) (187588379)

SVG

New Features

  • Added support for the SVG 2 path attribute on <textPath>, which lets text follow an inline path without referencing a separate <path> element via href. (321038@main) (185831618)

Resolved Issues

  • Fixed an issue where SVG conditional processing attributes on clipPath, mask, and pattern elements incorrectly prevented the resource from being referenced. (320207@main) (19103270)
  • Fixed an issue where SVG number attributes did not revert to their initial value when removed or set to an invalid value. (320226@main) (165378154)
  • Fixed an issue where a SMIL animation of a presentation attribute was never released after the animated element was detached from the document, permanently freezing the animated value. (320199@main) (185452156)
  • Fixed an issue where SVGLength resolved ex units by rounding the font’s x-height up to a whole pixel, causing the SVG DOM and getComputedStyle to disagree. (320606@main) (185984854)
  • Fixed an issue where additive color animations in SVG lost precision due to per-layer 8-bit rounding. (320166@main) (186223510)
  • Fixed an issue where an SVG transform change could leave an ancestor layer’s cached repaint rects stale, resulting in incorrect repainting. (320722@main) (187005898)
  • Fixed an issue where SVGImage::isAnimating() returned true for SVG images that had no animations. (320839@main) (187106396)

Security

Resolved Issues

  • Fixed an issue where a click in a backgrounded window could result in an action being taken. (320186@main) (186280350)
  • Fixed an issue where CredentialStorage::removeCredentialsWithOrigin failed to purge HTTPS credentials that used the default port. (320968@main) (187210150)

Web API

New Features

  • Added support for QuotaExceededError as a DOMException subclass, exposed on window and worker global scopes. (320856@main) (141586555)

Resolved Issues

  • Fixed an issue where scrollWidth and clientWidth returned inconsistent values when the page was zoomed in or out due to rounding. (320773@main) (121879134)
  • Fixed an issue where rotating the device to landscape orientation could pause a video playing in full screen, by adding a site-specific quirk. (320318@main) (148284059)
  • Fixed several URLPattern matching issues affecting Service Worker routing, including incorrect encoding of the username and password components and unhandled unclosed pattern groups. (320122@main) (183434701)
  • Fixed an issue where WebDriver reported an empty URL instead of about:blank for a browsing context that had not yet navigated. (320428@main) (183468933)
  • Fixed an issue where WKWebView.magnification reported the pre-gesture scale for a few moments after a pinch-to-zoom gesture ended, instead of the scale about to commit. (320341@main) (185381317)
  • Fixed an issue where Cache.delete() and Cache.keys() swallowed exceptions thrown while constructing a Request from a URL string. (320524@main) (186636105)
  • Fixed a regression where WebXR hit testing failed with a TypeError when offsetRay was not specified. (320717@main) (186997100)
  • Fixed an issue where interrupting a scroll with a tap could incorrectly trigger navigation of the link under the pointer. (321053@main) (187268555)
  • Fixed an issue where click events did not include the modifier keys that were pressed at the time of the click. (320984@main) (187270584)

Web Extensions

New Features

  • Added support for the offscreen API. (318833@main) (184269255)

Resolved Issues

  • Fixed an issue where i18n.getMessage() dropped non-string substitution arguments instead of coercing them to strings. (320931@main) (149855718)
  • Fixed an issue where webRequest.onBeforeRequest reported the resource type main_frame instead of sub_frame for subframe document loads. (321067@main) (167403388)
  • Fixed an issue where a high priority static declarativeNetRequest redirect rule was not favored over a low priority session redirect rule. (320739@main) (176176246)
  • Fixed an issue where webRequest events did not fire for loads blocked by a declarativeNetRequest rule. (320336@main) (176177851)
  • Fixed an issue where webRequest events did not fire for page loads created with tabs.create. (320430@main) (177727052)
  • Fixed an issue where an extension’s service worker lost its clients after being unloaded and reloaded, preventing it from finding an existing offscreen document. (320198@main) (186116488)
  • Fixed an issue where an extension’s popover could be cut off because vh, svh, and lvh units resolved to the popover’s minimum height instead of its actual size. (320726@main) (186391990)

Web Inspector

New Features

  • Added support for network throttling of the inspected page. (320893@main) (144892477)

Resolved Issues

  • Fixed an issue in Web Inspector where WebSocket handshake headers were missing when using the Network.framework loader. (320156@main) (185255819)
  • Fixed an issue in Web Inspector where a Debugger.globalObjectCleared event from a subframe cleared every target’s script map instead of only the affected target’s. (320787@main) (187042936)

WebAssembly

Resolved Issues

  • Fixed an issue where JS string builtins and imported string constants were not applied when compiling WebAssembly modules loaded as ES modules. (320174@main) (186037843)
  • Fixed an issue where the WebAssembly.Exception constructor rejected null options and incorrectly accepted non-object options. (320215@main) (186319813)
  • Fixed an issue where the WebAssembly validator rejected i31.get_s and i31.get_u when the operand’s static type was a bottom reference type. (320578@main) (186660590)

WebDriver

Resolved Issues

  • Fixed an issue where WebDriver BiDi’s script.call_function trimmed error messages incorrectly, cutting off part of the message. (320205@main) (186311752)
  • Fixed an issue where WebDriver’s deleteAllCookies command could report success before cookies had actually finished being deleted. (320440@main) (186410147)
  • Fixed an issue where WebDriver reported a stale element reference error instead of a no such element error for a node reference belonging to a different browsing context. (320518@main) (186615759)
  • Fixed an issue where WebDriver did not properly handle the right-hand variants of modifier keys, such as ShiftRight and ControlRight, on Cocoa platforms. (320741@main) (186961436)
  • Fixed a regression where WebDriver returned no such element instead of stale element reference for a node reference from a previous document. (320729@main) (187042183)
  • Fixed an issue where WebDriver’s Add Cookie command dropped the cookie when the request did not include a sameSite attribute. (320916@main) (187193380)

WebGL

Resolved Issues

  • Fixed an issue where WebGL contexts created with premultipliedAlpha: false were composited incorrectly. (320650@main) (53509398)

WebGPU

Resolved Issues

  • Fixed an issue where uploading a canvas as a WebGPU texture had very poor performance. (320765@main) (153642354)
  • Fixed an issue where GPUDevice.createBindGroup()‘s fast path failed to reuse bind groups containing a GPUBuffer entry alongside an external texture, forcing an unnecessary full rebuild. (320309@main) (186379208)
  • Fixed an issue where a WebGPU external texture imported from a video element using WebM or MSE playback rendered as a black placeholder instead of the video frame. (320427@main) (186470526)
  • Fixed an issue where using WebGPU render bundles on some GPUs could cause the device to be unexpectedly lost. (320689@main) (186688781)
  • Fixed an issue where WebGPU could report the primitive-index feature as available on GPUs that don’t support it, resulting in an uncaptured error. (320691@main) (186690340)
  • Fixed an issue in WebGPU where an array value constructor referenced through a type alias could generate invalid Metal Shading Language, silently producing incorrect compute results. (320690@main) (186803296)
  • Fixed an issue in WebGPU where inlining three or more calls to a function operating on a large struct could silently miscompile on some devices, producing incorrect results. (320697@main) (186804865)
  • Fixed an issue where asynchronous pipeline creation could stall rendering. (321042@main) (187296614)

WebRTC

Resolved Issues

  • Fixed an issue where a WebRTC UDP connection to an unresolved remote address was incorrectly restricted to IPv6. (320716@main) (186844205)
  • Fixed an issue where a TURN UDP connection could fail unnecessarily when DNS resolution failed, by allowing the socket to open directly to the host. (320720@main) (186847964)