Flow Change Log
Back to the download page
Change log to version 6.20.0
- Flow now supports the WebDriver endpoints for getting and setting cookies.
- Flow now supports the WebDriver /frame and /frame/parent endpoints.
- Added support for execCommand() command selectAll.
- Added support for execCommand() commands styleWithCSS & useCSS.
- Added support for execCommand() command bold.
- Added support for execCommand() commands forecolor, hiliteColor & backColor.
- Added support for execCommand() command fontName.
- Added support for execCommand() command fontSize.
- Added support for execCommand() commands subscript and superscript.
- Added support for execCommand() command italic.
- Flow "window" objects now contain JavaScript confirm() and prompt() methods.
- Added support for execCommand() command defaultParagraphSeparator.
- Added support for execCommand() commands justifyLeft, justifyRight, justifyFull & justifyCenter.
- Added support for parsing and serialising css text-align value 'justify' (renders as 'start').
- Flow no longer rejects nameless cookies.
- Drawing large text into canvas 2D contexts no longer ignores certain supported values of globalCompositeOperation.
- Flow now allows horizontal tab in cookie names and now rejects rather than truncating invalid cookie names or values.
- Flow should no longer fail to create WebDriver sessions when given required capabilities.
- Canvas 2D contexts no longer use software fallback rendering for certain supported values of globalCompositeOperation.
- Flow's WebDriver implementation now correctly sets the "ready" property in a "status" response.
Change log to version 6.19.0
- Flow now supports the WebDriver 2 protocol rather than the old Selenium protocol.
- Implemented Element.getHTML().
- Node.cloneNode() always clones any shadow tree, regardless of the deep flag, as per spec change.
- Implemented declarative shadow root.
- Flow's WebDriver implementation now supports the creation of new windows.
- Added support for CSS steps() easing function.
- Fixed parsing of forms inside templates.
- Flow now delays WebDriver page navigation completion until after contained scripts have loaded.
- Setting innerHTML on an HTMLTemplateElement now correctly removes its previous content.
- Improve quirks hashless colour parsing.
- Flow's WebDriver implementation no longer returns an error when trying to access the tag name for an HTML element.
Change log to version 6.18.0
- GTK builds now limit their redraw rate when OpenGL/GPU is busy to avoid latencies caused by buffer stuffing and unnecessary draw processing.
- Added support for CSS calc() to properties using CSS <position> values (transform-origin, perspective-origin, radial gradients, circle & ellipse shapes).
- Implemented value sanitisation for HTMLInputElement.type 'datetime-local' and 'time'.
- Added support for 4-component 'offset' variant of CSS <position>s.
- Added support the transition-behaviour CSS property.
- Added support for Document.execCommand() on HTMLInputElement & HTMLTextAreaElement.
- SVGImageElements representing bitmap images are now always eligible for hardware acceleration in Flow. The legacy 'buffered-rendering' attribute/property no longer has any affect on such elements.
- Fixed CSS 'line-height' to allow calc().
- Fixed CSS 'vertical-align' to handle calc().
- Fixed CSS 'text-ident' to handle calc().
- Fixed CSS clip <shape> parsing to handle calc().
- Added support for xywh() and rect() CSS <basic-shape>s, used by clip-path property.
- Added parsing support for CSS font-stretch.
- CSS font-size now accepts calc() values.
- Added support for CSS calc() <integer>s in <grid-line>
- Flow now supports the "valueAsNumber" property for input elements with type "number" and "range".
- Flow now supports the "valueAsNumber" property for input elements with type "month".
- Flow now supports the "valueAsNumber" property for input elements with type "time".
- Implemented Document.anchors and Document.applets.
- Server SSL certificates can be added to ~/.config/Flow/ServerCertificates/ in .der format. Also added command line option to disable server certificate verification.
- CSS type selector parsing now handles escaped characters.
- CSS <filter-value-list> are now interpolated as per spec.
- Setting HTMLInputElement.type now sets reflected content attribute of the same name.
- Setting HTMLButtonElement 'type' or 'value' IDL attribute now reflects the content attribute of the same name.
- Updated InputEvent.inputType on backspace key from 'deleteContent' to 'deleteContentBackward'
- SVG elements no longer sometimes fail to display when compositing is enabled, offscreen rendering is required (e.g. filters, masks) and the buffered-rendering attribute is set to "static". Broken since 5.12.4.
- Fixed CSSStyleRule.cssText getter serialiser to output curly braces when there are no properties.
- Fixed CSS font-family serialising of <generic-family>.
- CSS font-weight now correctly serialises keywords 'bold' and 'normal'.
- Updated CSS <ident> parsing to match CSS 3 Syntax spec.
- Fixed CSS <grid-line> (and shorthand property) serialising.
- Fixed CSS <grid-line> parsing. Component values for grid 'span' now follow CSS values grouping rules.
- Fixed CSS <filter-function>s to parse CSS calc()
- Fixed parsing of CSS an+b syntax.
- Fixed CSS <ident> parsing to ensure a valid identifier.
- Fixed setting CSSStyleRule.selectorText() to no longer throw away the stored declarations.
- CSS selectors (type, class, id and attribute selector) now serialise as an identifier.
- Fixed CSSMediaRule serialising.
Change log to version 6.17.0
- Implemented SVGUnknownElement.
- Update character codec to support GB18030-2022.
- Added support for Document.elementsFromPoint().
- CSS calc() now serialises summed values in sorted order (<number>, <percent> then <dimensions> by their units, ordered ASCII case-insensitively).
- Added support for more HTML 'presentational hint' attribute mappings.
- Exposed all supported SVG elements to JavaScript.
- Added support for parsing URLs with internationalised domain names.
- Added support for URL.canParse() and optional second parameter for URLSearchParams.delete() & has().
- Added support for decoding BMP image files to Flow.
- Updated Web Cryptography and add support for Ed25519, Ed448, X25519 and X448 algorithms.
- CSS <color> keyword is now serialised (for the specified value) as such.
- GTK builds no longer incorrectly draw canvas elements that contain alpha-blended content.
- Added support for CSS Animations & Transitions of transform-origin & perspective-origin properties and fixed their serialisation to use the resolved value.
- Added support for the 'none' value for the perspective property.
- Flow no longer crashes if an HTTP request is destroyed while the associated connection is also being destroyed.
- Flow GStreamer support no longer requires "dev" packages to be installed on x86 Linux desktop builds.
- Corrected HMAC's key size, if unspecified.
- CSS calc() now simplifies <dimensions> to canonical units.
- Updated serialising CSS <color> 'currentColor' to be 'currentcolor' as per CSS 4 color spec.
- GPU resources are no longer leaked when using canvas elements or CSS clip-path properties.
- CSS <shadow> serialising omits default values for optional components.
- Fixed CSS <filter-function> parsing to allow omitted optional arguments.
- Fixed CSS <filter-function> interpolation to ensure values are clamped where specified.
Change log to version 6.16.0
- Implemented dblclick event, and click counts on mouse events.
- Implemented Event.composedPath().
- Added support for parsing CSS Media Query Level 5 - User Preference Media Features. Default values used for user preference i.e. 'no-preference'.
- Flow now supports the "composed" property on Event objects.
- Added support for CSS <length> font-relative length units 'ch' and 'ic'.
- Added support for individual CSS transform properties rotate, translate and scale.
- CSS transform scale functions now handle <number> | <percentage> (as per CSS Transforms Module Level 2).
- Mac port now reports the correct mouse button state in scroll wheel events.
- Disabling a form element takes immediate effect, not deferred.
- Android port no longer maintains its own, separate URL history.
- Scrolling/panning by touch and pen/stylus now correctly accounts for HighDPI pixel ratio.
- Fix to not artificially limit the size of inline SVG.
- Input elements with type="range" no longer issue a "change" event when the mouse moves over them after the value has been changed.
- HTML "input" elements no longer update after actions where the mouse down occurs outside of the element.
- <input type="range"> now renders at the calculated width and height size.
- CSS transform function translateZ() no longer accepts <percentage>.
Change log to version 6.15.0
- Enabled MSE for 64-bit Pi builds (bullseye or later).
- Implemented Resize Observers.
- The GTK port now runs natively under Wayland instead of forcing the GDK X11 backend & Xwayland.
- Implemented CSS display value 'contents'.
- Improved compatibility and performance of postMessage() and structuredClone(). Maps, Sets and Errors are now supported by these methods.
- GTK platform timers can no longer be prevented from running by network activity.
- GTK Flow builds no longer issue a critical GLib warning when opening a new window.
- Improved weight handling with CFF format fonts.
- Freetype can now render MS symbol fonts (without a Unicode charmap).
- Android port now supports basic scrolling/panning by touch and pen/stylus.
Change log to version 6.14.0
- Added CSS gap support to Flexbox.
- Optimised parsing of innerHTML.
- Added support for onselectstart and onselectionchange attributes.
- Optimise selectors matching an id.
- Selection.stringifier now returns a concatenation of the rendered text.
- Focusing a contenteditable now sets the Selection range.
- Caret is now rendered at Selection range. Fixes caret handing within a contenteditable on Discord.
- document.execCommand() now operates at Selection Range.
- Changes within a textfield (<input> and <textarea>) now fire selectionchange event.
- Android builds now fire pointermove events for all touches when multiple fingers are used.
- Left and right arrow keys now amend caret position in a focused contenteditable.
- Various bug fixes to Selection API collapse() and selectAllChildren().
- Prevent firing spurious selectionchange events when function calls on Selection's Range have not modified the Range.
- Flow now queues a task on the user interaction task source to fire selectionchange event.
- Flow on text field changes now queues an element task on the user interaction task source given the element to fire a select event.
- Avoid sending mutations across shadow tree boundaries.
- CSS calc() parsing now ignores comments.
- Flow's HTMLMediaElement no longer incorrectly queues a "timeupdate" event immediately at playback start.
- Flow's media elements now support the preload="none" attribute.
- Cloning a HTMLTextArea now propagates the raw value and dirty value flag from the node being cloned.
- It is now possible to search and click using Selenium in XHTML documents.
- Flow now issues more frequent "timeupdate" events during media playback.
- Statically link libwebp for Debian/Raspberry Pi OS Bookworm compatibility.
- Updated libwebp to 1.3.2.
Change log to version 6.13.0
- Implemented individual character positioning on SVGTextElements.
- texImage2D now accepts ImageData as a data argument.
- Added support for Web Assembly streaming compilation & instantiation.
- Added support for Beacon (Navigator.sendBeacon()).
- Added support for parsing more CSS 3 & 4 pseudo classes.
- Added support for Firefox-proprietary MozMousePixelScroll event.
- Non-SVG namespaced element descendants of SVGForeignObject are now rendered.
- DOM mutations on Selection's Range now fire a selectionchange event.
- HTML namespaced Element descendants of SVGForeignObject are now rendered without needing an HTMLHTMLElement or HTMLBodyElement.
- Fixed incorrect width and height values for SVG elements in results from getBoundingClientRect.
- The .button and .which properties are now correct for pointermove events caused by touch input.
- Flow now correctly keeps a paused video paused when the media playback speed is no longer zero.
- Flow no longer continues to issue "timeupdate" events when the media playback rate is set to zero.
- Fixed appending spaces on contenteditable elements, if not preserving whitespace.
- Response objects now clone their Body if the fetch is complete.
- CSS properties that can refer to Elements (fill, stroke, marker, mask, clip-path and filter) now handle URL fragments that either contain non-ASCII characters or are percent-encoded.
- SVG Masks used by HTML are now scaled correctly on retina screens.
- Added support for no-cors mode and manual redirect mode to Fetch.
Change log to version 6.12.0
- Added support for SVGSVGElement.createLength(), SVGAnimatedLength.animVal and the full SVGLength interface (previously only SVGLength.value was supported).
- Added support for SVGLengthList, SVGAnimatedLengthList and expose SVGTextPositioningElement x, y, dx & dy IDL attributes.
- Added support for SVGStringList and SVGTests interfaces.
- Added support for SVG filter primitive IDL interfaces.
- Implemented CSSStyleSheet.replaceSync() and CSSStyleSheet.replace().
- Implemented Document.adoptedStyleSheets.
- Updated rgb() & hsl() parsing to match CSS Colour 4 spec.
- Flow now type checks the resolved values of CSS calc() (to CSS 3 values spec) for <integer>, <number>, <flex>, <angle>. <length> & <length-percentage>.
- 'flex-grow' and 'flex-shrink' CSS properties now handle parsing calc() values.
- Added --polyfill-audiocontext to inject a constructor for window.AudioContext.
- Flow no longer gets stuck in an infinite loop when an HTTP/2 header is split across frames.
- HTMLInputElement now preserves its state when cloned.
- Autoplay should now work correctly with "audio" elements that contain "source" elements.
- Fixes for parsing CSS selectors, especially when terminated early.
- Micro-optimisation for removing #text nodes with Element.removeChild().
- Flow now uses a case-insensitive match for header names when setting up a WebSockets connection.
- Improved rendering performance of interactive SVG documents on some platforms.
- Truncate cookie expiration to 2038-01-19, if time_t is only 32-bit.
- Increased precision of HTMLInputElement ranges to double.
- Document.open() now updates the document's URL.
- Stopped clip-path:inset() rects rendering when negative width.
- Flow now correctly issues a "seeking" event when re-starting a media element with a "loop" set.
- Android port now avoids re-locking direct textures with the same usage mode.
- Android port now uses zero-copy direct textures by default.
Change log to version 6.11.0
- Added support for SVGFitToViewBox, SVGAnimatedRect, SVGAnimatedPreserveAspectRatio & SVGPreserveAspectRatio interfaces.
- Added support for SVGAnimatedEnumation and expose attributes of this type on existing SVG interfaces. Added support for the SVGUnitTypes interface.
- Implemented CSS transitions for CSS filter property.
- Implemented stringification of CSSFontFaceRule.
- <input> placeholder now renders correctly when using an external font.
- Fixed retina rendering of css clip-path 'inset'
- Flow's Selenium implementation now allows cookies to be deleted.
- Fixed 'auto' margin handling for flex and grid.
- CSS transitions no longer require a transition-property property to trigger.
- Grid container 'auto' height is now clamped to max/min-height.
- Grid items are now clamped to min/max-sizes.
- Added support for SVGMarkerElement, SVGAnimatedAngle, SVGAngle interfaces. Added support for SVGSVGElement.createSVGAngle().
- Added support for SVGNumberList, SVGAnimatedNumberList.
- GStreamer media player error handling has been made more consistent.
- Prevent GStreamer "'GstDataURISrc' has no property" errors from appearing on the console.
- Flow now pauses the media player when the end is reached during media playback.
- Flow issues "seeking" and "seeked" events when resuming playback from the start after playback has ended.
Change log to version 6.10.0
- Added support for URLSearchParams.size.
- The navigator.hardwareConcurrency property is now supported.
- Increased efficiency of calculating the min/max-content-contributions of paragraphs within a Block Formatting Context.
- Improved performance of postMessage() and structuredClone().
- Added support for HTMLObjectElement.form and HTMLOutputElement.form.
- Added support for HTMLFieldSetElement.elements.
- Added support for css calc() when parsing <integer>
- Optimise Node.nodeName to avoid allocating unchangeable strings on every call.
- Added support for name="referrer" to HTMLMetaElement.
- Added support for import.meta.resolve() for module scripts.
- Added support for HTMLScriptElement.supports().
- Implemented CSS Grid 'Expand Flexible Tracks' algorithm when the free space is indefinite.
- Inline SVG inside HTML is now correctly sized when moved between screens with non-identical device pixel ratios.
- CSS @keyframes that contain duplicate time selectors no longer fail to animate in certain circumstances.
- The default "keydown" KeyboardEvent handling of 'return' (or 'enter') key within an editable <textarea> now dispatches a 'beforeInput' event with an inputType of "insertLineBreak".
- Fixes to SVG images: SVG animations proceed and SVGImageElements fire applicable onload events. Broken since 5.13.0.
- Improved handling of CSS grid track sizing algorithm 'Resolve Intrinsic Track Sizes' for non-spanning grid items with 'auto minimums'.
- DOMContentLoaded events are no longer omitted in certain circumstance when document.open() is used.
- Relative position offsets (e.g 'top') are now calculated for CSS grid items.
- GStreamer should no longer miss a playback state change when a seek completes.
- Improved serialising of property values from getComputedStyle().
- Parsing of CSS 'font' shorthand now conforms to CSS2.1.
- Serialising CSS 'font' shorthand (via getComputedStyle() or Element.style) now ignores the default value of optional properties.
- Flow now stops an element's prior media playback as the last part of the media element load algorithm.
- Optimised Element.namespaceURI.
- Optimise Element.tagName by caching recent calls.
- SVGUseElement now adds/removes the element instance (the cloned element referenced by the 'href') when the corresponding element's 'id' attribute changes.
- Media elements now stop immediately when the associated application window is closed.
- CSS 'font' shorthand parsing now correctly handles 'grid-template-areas'.
- Extended the supported codecs such that BBC HTML5 player test page works with Flow.
Change log to version 6.9.0
- Added support for the static Response.json() method.
- Added support for Headers.getSetCookie().
- Fix fetch of documents that are referred to by SVGUseElements or style, broken in 6.5.0.
- Fixed resolving the automatic minimum size of grid-items.
- Optimised calls to HTMLOrSVGElement.focus() to reduce unnecessary layout recalculations.
- Added windows-1252 as an alias encoding to XML parser.
- Grid containers now handle positioned offsets.
- Optimise decoding of input streams fed into the HTML parser.
- Fixed line numbers when source file has cr/lf line endings.
- Optimised the HTML tokeniser when called via innerHTML.
- Fixed abort when loading emoji-only web fonts on x86.
- Android builds now process multiple messages/events per event loop cycle.
- WebStorage now closes its underlying database when it's no longer accessible by the current page.
- Fix potential use of uninitialised memory by OpenGL drawing code.
- Web storage now correctly removes items that have an empty key, keys that differ only by case or contain certain characters.
- Improved performance of web storage by avoiding unnecessary regeneration of the underlying SQL statements.
- Improved performance of Storage.clear().
- Flow no longer leaks ANGLE WebGLContexts.
- Grid-item padding and margin percentages are now resolved against its grid-area containing block.
- Improvements to grid so it now correctly renders Wikipedia's new look desktop articles.
- Implemented CSS4 Box Sizing value 'fit-content'.
- Improved performance of reading data from localStorage.
Change log to version 6.8.0
- Flow now supports CSS Grid.
- Media elements now survive being removed from the tree and remain until media playback has ended.
- Fixed potential crash when deleting images from pseudo elements.
- Minor optimisation to innerHTML to not create a parser if given an empty string.
- HTML parser is now correctly case sensitive for matching Elements.
- GStreamer media player now uses GStreamer API for muting and unmuting audio.
- Collections now use mutations to respond to changes.
- Fixed HTML tokenisation when a non-ASCII character occurs immediately after a character reference.
Change log to version 6.7.0
- Implemented Fetch API.
- More CSS filter functions are now supported in HTML documents: brightness(), contrast(), grayscale(), hue-rotate(), invert(), saturate() and sepia().
- The opacity() CSS filter function is now fully supported in HTML documents.
- The CSSStyleSheet() constructor is now supported.
- Flow now supports the Media Playback Quality interface.
- Added :scope pseudo class support.
- Added :autofill pseudo, albeit hardcoded to false.
- Added support for calc() values on css property background-size.
- DOMExceptions created by scripts now only have non-zero '.code' properties where the standard defines a legacy value.
- Fixed rare crash during garbage collection of pseudo elements when Node Iterators are listening.
- Initial focus is now null, not the Document (legacy of SVG Tiny).
- Documents in an iFrame now have a valid referrer.
- Added @-webkit-keyframes alias for @keyframes.
- Adjacent elements that require offscreen rendering now always appear. Broken since 6.2.0 in certain circumstances.
- Improved the Firefox compatibility string in Flow's user agent.
- Only HTTP methods PATCH, POST and PUT specify a content-length of zero if there is no body.
- Fix potential crash when a bezier is drawn with a tiny scale factor.
- Expose SVGDefsElement, SVGDescElement, SVGGElement, SVGMetadataElement & SVGTitleElement interfaces to JavaScript.
- CSSStyleSheet.ownerRule is now null when there is no owner rule. StyleSheet.ownerNode is now null for stylesheets loaded via an @import rule.
- Blob's content-type is now correctly lower-cased.
Change log to version 6.6.0
- The FileReader and FileReaderSync interfaces are now supported. Fixes uploading images to Google Docs.
- GTK Flow now features a "Downloads" button on the toolbar.
- The HTMLAnchorElement.download attribute is now supported.
- The Blob.arrayBuffer() and .text() methods are now supported.
- Flow HTMLMediaElements now support the "preservesPitch" property, currently hardcoded to always return "false".
- GTK platform now displays a progress bar during downloads.
- Flow now correctly resumes media playback when the media element playback rate is changed from 0 back to a positive value.
- Flow now raises a "not supported" error rather than let media element playback rates become negative.
- Android port now supports file dialogues for type=file HTMLInputElements.
- Upgrade OpenSSL to 3.0.7.
Change log to version 6.5.0
- Style calculations are now handled in parallel.
- The HTMLCanvasElement.toBlob() method is now supported.
- Implemented HTMLImageElement.decode() so many sites now correctly load images that were previously grey rectangles. HTMLImageElement.complete is now correct.
- Navigating to a javascript: URL now only aborts any in-progress navigation if the script returns a string value.
- Box model layout is more efficient when laying out block formatting contexts without text descendants.
- Nested browsing contexts (e.g. IFrames) no longer navigate to an empty document when a javascript: URL returns a non-string value.
- Modifying srcset on an HTMLSourceElement beneath an HTMLPictureElement now correctly updates the image.
- URL fragments are now accepted when fetching 'blob:' URLs.
Change log to version 6.4.0
- Added support for secure contexts. The SubtleCrypto and CryptoKey interfaces are now only available in secure contexts. SharedWorkers can now only connect to existing instances when they have the same secure context state.
- Implemented SVGUseElement.x, .y, .width, .height, .instanceRoot and .animatedInstanceRoot.
- SVGTextElement now inherits from SVGTextPositioningElement.
- Implemented SVGImageElement.x and .y (width and height already exist).
- DOM interfaces are now created on-demand, to reduce latency when navigating documents.
- Fixed css line-height: normal sizing to match other browsers.
- Ensure that the resource selection algorithm is always run when the media URL changes.
- Renamed the legacy SVG 1.2 Tiny SVGAnimationElement to SVG12TAnimationElement.
- Split legacy SVGVisualMediaElement into SVGVideoElement and SVGAudioElement.
- Renamed legacy SVG Tiny SVGTimedElement to SVGAnimationElement.
- SVGSVGElement's parent is now SVGGraphicsElement matching SVG 2 (SVG1.2T had it inheriting from SVGTimedElement).
- Moved SVGElement.transform to SVGGraphicsElement.transform.
- Implemented .x, .y, .width and .height, .href on the correct objects, rather than SVGElement.
- Removed deprecated SVGException.
- GStreamer media player no longer assumes that "source-setup" callback takes place on the main thread.
- Flow now issues an earlier "timeupdate" event when starting media playback.
- Flow now issues the "seeking", "timeupdate", and "seeked" events when seeking to the current time.
- Document.getElementsByTagNameNS() & Element.getElementsByTagNameNS() now return a live list.
- Flow now ensures that the current playback position can never be negative when seeking.
- Media element "seekable" properties in Flow are no longer copies of the "buffered" property.
- Flow now ensures that the current playback position can never be negative when seeking.
Change log to version 6.3.0
- Added support for WindowOrWorkerGlobalScope.structuredClone().
- Added support for WindowOrWorkerGlobalScope.reportError().
- Ensure that successful conditional fetches for stale cache entries cause the cache entry to be refreshed.
- CSS absolute positioned boxes contained by a block which is contained by a relatively positioned inline are now correctly positioned.
- All supported font faces are now loaded for fonts with multiple font faces in Freetype.
- Performance optimisation by matching selectors against cached value for class attribute.
- Event handler function compiled from strings now have the correct name instead of appearing as anonymous functions in JavaScript stack traces.
- Event handlers on elements are now compiled with the correct lexical scope.
- ErrorEvent.error is now correctly default-initialised to undefined instead of null.
- Javascript environments of initial about:blank pages are no longer reused for different-origin documents.
- PointerEvents on Android ports now report width, height and the correct pointerType for touch input.
- Flow now runs the "dedicated media source failure" steps algorithm asynchronously.
Change log to version 6.2.0
- Added SVGTSpanElement JavaScript interface, together with SVGTextPositioningElement.
- Added support for WindowOrWorkerGlobalScope.queueMicrotask().
- Removed SVGElementInstance. Shadow tree elements now return the same object type as if they were normal elements, following SVG 2 updates.
- Removed SVGGraphics.getTransformToElement().
- Removed the viewport attribute from the SVGSVGElement interface.
- Added SVGGeometryElement. Moved getTotalLength(), and getPointAtLength() methods from SVGPathElement onto SVGGeometryElement.
- Implemented SVGAnimatedNumber and SVGGeometryElement.pathLength.
- Added support for css pseudo class :where().
- Updated css pseudo class :not() as per Selectors level 4 spec.
- Fixed a bug in which css inline content was hidden when it contained a block, and had a table sibling.
- Added support for top-level await in JavaScript modules.
- Scrolling of iframes under asynchronous scrolls now works correctly.
- Flow no longer crashes when the last "source" element child is removed from an active media element.
- Flow now handles XPath context nodes that aren't attached to the document tree correctly.
- Layout is now only requested for inline formatting contexts which reference the CSS font-family of a css-font which is added, loaded or removed.
- Implemented SVGElement.className to correctly return an SVGAnimatedString.
- Renamed SVGLocatableElement to SVGGraphicsElement, following SVG 2.
- Reimplemented SVGMatrix as a subclass of DOMMatrix for web compatibility.
- Wayland example port now available for SDK customers.
- Android now supports basic stylus/pen input.
- PointerEvent now supports the altitudeAngle and azimuthAngle properties.
Change log to version 6.1.0
- Asynchronous scrolling is now partially supported on platforms implementing asynchronous mode, including Raspberry PiOS.
- Added support for CSS shorthand property inset.
- Reduced unnecessary layout of flex-items with align-self: stretch, 'auto' computed cross-axis margins and 'auto' computed cross-size when their content height is already known. Improves performance of the YouTube home page.
- Removed dependency of libatomic.so on Raspberry Pi 64 bit builds.
- Optimised URL comparisons, speeding up determining whether a link has been visited.
- Optimised font family name matching.
- Optimised CSS property lookups for font-family.
- Fixed potential use-after-free GC bug in Document.createProcessingInstruction().
Change log to version 6.0.0
- Welcome page now dynamically hides the URL bar if there's a native URL bar.
- Implemented form file dialogues in the GTK port.
- Added support for the HTMLAnchorElement.text attribute.
- Added support for the SVGAElement interface.
- Added support for Node.lookupPrefix(), Node.lookupNamespaceURI() & Node.isDefaultNamespace().
- Implemented window.outerWidth/Height.
- Unsolicited HTTP 101 responses no longer raise a network error.
- Invalid CSS @keyframes selectors no longer cause subsequent rules to be ignored.
- DOMTokenList.replace() now returns a boolean to indicate whether the replacement occurred.
- Document.createProcessingInstruction() now validates its input, throwing an InvalidCharacterError DOMException when necessary.
- Document.createCDATASection() now validates its input, throwing exceptions as necessary.
- getElementsByClassName() now returns an empty collection when passed an empty / whitespace string.
- Fixed handling of null / empty namespace in Document.getElementsByTagNameNS() and Element.-getElementsByTagNameNS().
- Javascript Intl API's default locale is now controlled by the application.language.default option.
- Ensure that GStreamer media player correctly issues error events for loads that occur after a previous error.
- On desktop builds, the network.http.accept-language option's default value is now derived from application.language.default.
- Flow no longer leaks an image pixmap if decoding a WebP image fails.
Change log to version 5.17.0
- HTTP redirects are now subject to CORS restrictions.
- Added support for AbortController, AbortSignal and removal of event listeners via AbortSignal.
- The :target CSS pseudo-class is now supported.
- Navigating to URL fragments that are empty, 'top', percent-encoded or match an <a name=...> element is now supported in HTML documents.
- Added support for the EventTarget constructor.
- Added support for the legacy Event.srcElement and Event.returnValue attributes.
- Added support for Node.getRootNode().
- Disallow cross-origin access of objects apart from the specific Window & Location properties allowed by the HTML spec.
- Added <parsererror> root element for XML docs that fail to parse.
- Forms now accept data: actions.
- HTML Parser now supports encodings other than UTF-8.
- Implemented all the encodings in the Encoding specificiation. Added TextEncoder.encodeInto().
- Fixed synchronous HTTP fetches that perform cache validation.
- Conditional XMLHttpRequests (i.e. those including If-... headers) now bypass the HTTP cache.
- Flow now only honours redirects with assigned HTTP 3xx status codes, to align with the Fetch standard and other browsers.
- Response headers are no longer corrupted when servicing HTTP/2 Authentication.
- Fixed parsing, and added canonical serialisation of CSS shorthand property 'flex'.
- XMLHttpRequest now generates a Document for document responses with empty but non-null bodies, instead of generating null.
- WebKit's requests to completely bypass the HTTP cache are now honoured.
Change log to version 5.16.2
- Added support for the legacy Window.status property.
- Added support for MessageEvent.initMessageEvent().
- Added support for the Comment constructor.
- Added support for the DocumentFragment constructor.
- CanvasRenderingContext2D.setLineDash() now accepts a sequence instead of requiring an array and has no effect if any values are negative.
- MessageEvent.ports can now be initialised with a sequence instead of requiring an array, and throws if initialised with null.
- Added support for [Unscopable] behaviour for ParentNode and ChildNode methods.
- Fixed construction of DOM objects to use a non-default prototype if specified, for example in super() calls from user class constructors extending DOM interfaces, or the Reflect.construct() newTarget parameter.
- Properties on Window's prototype chain now shadow any Window 'named properties' with the same name.
- Window named properties with names that look like integers are now handled correctly.
- Moved ElementCSSInlineStyle.style 'mixin' attribute from Element interface to HTMLElement & SVGElement.
- Ensured that user-script getters & setters for overridden attributes are called when setting [PutForwards] attributes.
- Avoid potential infinite loop when rendering ellipses.
- Text constructor data argument is now optional.
- Unexpected HTTP 304 not-modified responses are no longer saved into the HTTP disc cache.
Change log to version 5.16.1
- DOMMatrix string methods are no longer available to Workers.
- Implemented WebSocket.bufferedAmount.
- Path2D.addPath() now accepts a DOMMatrix2DInit, rather than a DOMMatrix.
- Added support for the SSLKEYLOGFILE environment variable to allow decryption and inspection of TLS network traffic in Wireshark.
- Modified user agent string to claim Firefox 89 compatibility, so Facebook works.
- Flow now supports the JavaScript window.moveTo() method.
- Flow now supports the JavaScript window.moveBy() method.
- Flow now supports the JavaScript window.resizeBy() method.
- XMLHttpRequest now supports the 'x-user-defined' charset
- Flow's XMLHttpRequest.responseURL now always includes any URL credentials, to align with the Fetch standard and other browsers.
- Transform list parsing now correctly handles 'none', and CSS comments.
- Allow calc() in DOMMatrix.setMatrixFromString().
- DOMMatrix's constructor now throws if a DOMString is passed on a Worker.
- Corrected DOMMatrix's 2D flag after directly modifying the matrix.
- Corrected DOMMatrix.toString() to follow ECMAScript specification for number formatting.
- Fixed CSS transform parsing, which differs from SVG transform parsing.
Change log to version 5.16.0
- Implemented a URL blob store, so Blobs' lifetimes are correct. Removed the obsolete close() method.
- Implemented DOMMatrix.
- Added canvas setTransform(DOMMatrixInit) and getTransform().
- Fix possible crash when connecting to unknown or unreachable hosts.
- HTTP Strict Transport Security (HSTS) is now supported.
- HTTP authentication credentials will no longer be included, by default, in cross-origin fetches performed by scripts. HTTP authorisation challenges will no longer be answered for scripts performing cross-origin fetches.
Change log to version 5.15.4
- Flow now supports the File and FileList interfaces.
- Added support for HTMLElement.outerText
- Added support for ParentNode.replaceChildren().
- Added support for ChildNode.before(), after() and replaceWith().
- Implemented DOMQuad.
- Implemented DOMPoint (renamed and extended from SVGPoint).
- Implemented DOMRect.fromRect() and DOMRectReadOnly.fromRect().
- Exposed DOMRect and DOMRectReadOnly to Workers.
- DOMRect and DOMRectReadOnly instances are now Serializable.
- Implemented Crypto.randomUUID().
- Upgraded to openssl 3.0.0. Improves WebCryptography compliance.
- Updated SSL root certificates.
- CSS variable expansions are no longer susceptible to a 'billion laughs' attack.
- The size limit for individual HTTP/2 headers has been increased to 64KB.
- Fix EME test timeouts by preventing early garbage collection of WebKit605's MediaKeySystemAccess object.
- Fix crash when a node within an iframe receives focus, and removes the document within its focusin listener.
- Improved conformance of HTMLElement.innerText getter.
- Informational HTTP responses (1xx status codes) are now ignored.
- Fixed crash when a canvas requests a font with weight 'bolder' or 'lighter'.
Change log to version 5.15.2
- Added Web Cryptography.
- Added CSS white-space property to SVG content.
- Preserving whitespace in SVG now preserves it if an element contains only whitespace. Fixes Google Slides.
- Flex-items are now painted in 'order'-modified document order.
- Fixed the compiler target version so Flow works on the Pi Zero again.
- Fix to TreeWalker to avoid infinite loop if the node has been reparented (and has a child node that fails to match the filter).
- z-sorted elements no longer ignore updates to z-index in some rare circumstances.
- Fix infinite loop when parsing SVG Paths that have a closePath incorrectly followed by a number.
- Fixed display of error page for https sites with multiple DNS entries.
- Script resources are now always released in the correct thread when Workers are terminated.
- SVGTextContentElement.getComputedTextLength() now correctly returns 0 instead of -Inf if the text has no length.
- SVGLocatableElement.getBBox() now returns {0, 0, 0, 0}, rather than null, if the box is empty. This is a change from the SVG 1.2T specification.
- Title elements in XHTML documents are now honoured.
- The name and nodeName properties of Attr nodes now always include any namespace prefix.
- CSS transitions can now be started via inherited property changes.
- Template element's associated inert document now inherits the correct document type and createElement() now works correctly for such documents.
- Changes to non-default inherited properties are now correctly propagated to child elements which use the 'inherit' keyword.
- <img> element srcset and size attributes containing font relative units are now evaluated correctly.
Change log to version 5.14.4
- Table cells, rows and rowgroups now support CSS opacity.
- Fixes to TextDecoder to handle BOMs, and also to handle EOF correctly.
- Added support for css property overflow-wrap.
- document.all now returns the same HTMLAllCollection object for a given document.
- The HTML parser now correctly appends text nodes under otherwise empty form elements.
- HTMLCollections returned by named properties of document objects (e.g. document.exampleName) are now live and always reflect the current DOM tree.
- Fixed position elements now correctly generate full stacking contexts instead of pseudo stacking contexts.
- The same HTMLCollection is now returned when the same property name is accessed on a particular window, document or document.all object. Thus properties set by scripts on such collections no longer seemingly vanish. Inline SVG elements are now included in collections returned by named properties of window objects, to match other browsers.
- Calls getBoundingClient on table cells and their descendants now include the table row offset.
- Elements which have both box-shadow and opacity no longer render with clipped overflow content.
- Mouse events on inline <svg> descendant elements now work correctly.
- Synchronous XMLHttpRequests used in Workers are now aborted when that Worker is terminated, rather than hanging indefinitely.
Change log to version 5.14.3
- Flow media elements now issue "timeupdate" events during playback.
- Canvas now uses GPU acceleration for radial gradients on strokes and fills.
- Changing a 'display' property from 'table-column' to another, non-'none' value now consistently unhides descendents.
- CSS Animations will now stop/start when the 'display' property is set to/from 'none' on any ancestor element, not just the animated element.
- X11 port now ignores any auto-repeated keys when JavaScript can not process them in time.
- X11 port now correctly suppresses keyup events during an autorepeat sequence.
- YUV video frame rendering now supports render effects such as offscreen clipping and filters.
- Synthetic bolding is now less intense for stroke-like glyphs to avoid them looking too blurry.
- Added Arabic and Hebrew fallback fonts (Noto Sans) so more sites can render more correctly on the Pi.
- Script resources are now always released in the correct thread when Workers are terminated.
Change log to version 5.14.1
- Canvas paths stroked with linear gradients or patterns are now GPU accelerated.
- Added parsing for CSS touch-action to avoid an exception with YouTube's legacy browser support.
- Enabled support for WebAssembly.compile().
- Added support for the ImageData constructor.
- Updated parsing to handle css4 <color> 'hsl()' values.
- Updated parsing to handle css4 <color> 'rgb()' values.
- Added opacity parsing (rgba()) for stop-color, solid-color, and flood-color.
- Improved the performance of transformed image rendering in CanvasRenderingContext2D.
- Enabled support for BigInt and added support for serialising BigInt primitives & objects, BigInt64Array & BigUint64Array.
- Canvas fills using patterns are now accelerated using OpenGL.
- Implemented Document.all.
- Images drawn into canvases are now subject to same-origin and CORS restrictions.
- WebGL contexts now support implicitly clearing framebuffer contents when preserveDrawingBuffer is false.
- GPU YUV->RGB video frame conversion now uses the BT709 colour conversion standard.
- Canvas fills using patterns now render with edge anti-aliasing.
- Canvas fills using patterns now respect the fillRule parameter.
- GPU RGB->YUV video frame colour conversion is now enabled for OpenGL and GStreamer enabled builds by default.
- CSS Animations now avoid redundant style updates when properties do not change value between keyframes.
- An empty css url() is now correctly handled as an invalid resource.
- Mouse events are now correctly ignored on element if outside a rounded clipping region.
- Mouse clicks are now correctly clipped to the current clip region when transforms are applied.
- SVG feDisplacementMap elements no longer have any effect when their input is tainted.
- Persistent cookies are now saved at most every 10 seconds rather than after every modification.
- Mouse events are now correctly clipped when multiple clipping rectangles are applied.
- table-cells with percentage widths are now correctly sized for tables with 'width: auto' and 'table-layout: auto'.
Change log to version 5.13.6
- Optimised rendering of static images to multiple canvas contexts.
- Added Selection API functions and properties - selectionStart, selectionEnd, selectionDirection, setRangeText(), select() & setSelectionRange(), for HTMLInputElement and HTMLTextAreaElement.
- Added contextmenu events for desktop ports.
- Image elements now honour their "crossorigin" attribute. Cached images are now subject to origin and CORS restrictions when shared between documents.
- Fixed small leak after socket connection failure and then trying subsequent DNS records.
- Creating and drawing multiple linear gradients to a canvas no longer renders just the first created gradient.
- URLs of documents created by executing script from javascript: URLs are now correct.
- Suppress InputEvents if generated by a key press with a ctrl or meta modifier.
- Change the Firefox version compatibility part of the default user-agent string from 62 to 68.
- Angle parameter in -webkit-linear-gradient functions now use the correct origin.
- Losing/restoring window focus now correctly sends the appropriate FocusEvents to the focused Element.
- Focus events are now correctly fired up and down the focus chain, when focus is moving to or from an iframe.
- Clicking on a non-focusable element gives focus to the first focusable ancestor, rather than immediately to the Document.
- Setting the focus is now the default action for mousedown events (rather than pointerdown).
- Empty XML documents now finish loading.
- Bare media URLs (e.g. images or video) no longer fail to load when those URL contains certain characters. Images are now wrapped in an HTML, not XHTML, document.
- SVG <clipPath> elements containing <use> elements now work correctly.
- Fix crash when drawing gradients to multiple canvases.
- CanvasRenderingContext2D.getImageData no longer returns uninitialised data when called on accelerated canvases in certain circumstances.
- Pointer/mouse over/out/enter/leave events, and CSS :hover state update, are deferred by up to half a second when scrolling with a mouse wheel or trackpad.
- Added support for obsolete HTMLBodyElement attributes marginheight, marginwidth, bottommargin, leftmargin, rightmargin and topmargin.
- Canvas paths now invent an initial moveTo if it hasn't been called.
- CanvasPath methods in Path2D now have range checks.
- HTTP/2 connections to a server which closes the connection without sending a response no longer infinite loops.
- The existing WindowProxy object is now reused when creating a new Window in an existing browsing context, instead of creating a new WindowProxy for each new Window.
- Fixed potential crash if a script is appended to the DOM tree and removes itself.
Change log to version 5.13.4
- Added support for JavaScript Modules.
- Implemented TextEncoder.encode() and TextDecoder.decode() for UTF8 only.
- Added '--task-threads <num>' command line argument to set the number of task threads to use.
- Updated our pre-installed SSL certificates.
- Added support for css shorthand 'place-self'.
- Added support for css shorthand 'place-content'.
- Added support for css shorthand 'place-items'.
- Document.write() and Document.writeln() now return undefined, fixing the 'hivelogic enkoder'.
- HTMLImageElement.width and .height values no longer include padding, borders or margins.
- Timeout handlers now set the filename, line and column info to improve error reporting.
- The HTML parser now stops if the Document is aborted.
- Fixed crash when setting outerHTML on an element with a DocumentFragment parent and pass the correct context element to the HTML fragment parsing algorithm.
- HTTP disc cache no longer caches responses to requests made with a range header.
- Flow now plays video correctly on the W3C mediaevents test page after the "load" button has been pressed
- Documents that update their StyleSheets via CSSStyleDeclaration now correctly render with the new style.
Change log to version 5.13.2
- Added WebP support.
- Implemented the HTMLMediaElement load algorithm, resource fetch algorithm, and resource selection algorithm.
- Implemented XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE and ORDERED_NODE_SNAPSHOT_TYPE.
- Implemented Document.scrollingElement.
- Implemented XPathEvaluator interface and constructor.
- SVG elements can now be masked using SVG <mask> elements.
- The HTMLMediaElement play() method now returns a Promise.
- XMLHttpRequest.responseXML now returns an XMLDocument (instead of Document) if the Document is XML.
- Flow no longer accesses freed memory when the HTMLMediaElement play() method is called repeatedly.
- Flow HTMLMediaElements now issue a "seeked" event when a seek completes.
- GStreamer media player now resumes playback correctly if play() is called during a seek.
- Fixed potential double-free for HTTP passwords if two connections fail to authenticate near-simultaneously.
- Canvas rendering contexts are no longer accepted as image sources by drawImage() or createPattern(). Canvas elements themselves are still valid image sources.
- Flow no longer continues to display a poster image when video element playback begins.
- Flow now correctly positions the video window for video elements inserted using innerHTML.
- Ensure position:fixed items are always rendered on sites with large amounts of offscreen content.
- hsl colour values now correctly map to rgb values.
Change log to version 5.13.0
- Added support for setting <input> and <textarea> caret position on mouse click.
- The background-position and background-size CSS properties can now be animated.
- Added support for distinguishing left / right Shift / Control / Alt / Meta keys to KeyboardEvent.
- HTMLInputElement now moves the text caret to the beginning on an up arrow keypress or to the end on a down arrow keypress.
- HTMLTextAreaElement now moves the text caret on up or down arrow keypress.
- HTMLTextArea and HTMLInputElement now scroll the text caret into view when editing text or on a horizontal arrow keypress.
- HTMLTextAreaElement now moves the text caret on left or right arrow keypress.
- HTMLInputElement now moves the text caret on left or right arrow keypress.
- clip-path is now supported on both HTML and SVG elements, with both CSS basic shape and SVG <clipPath> element support.
- Added support for KeyboardEvent.key and KeyboardEvent.code.
- SVG 2's href attribute is now supported. It takes precedence over any xlink:href.
- pointerenter/mouseenter events are now sent in the correct order when mouse cursor crosses the boundary of multiple elements.
- Images belonging to a non-active Document are no longer loaded.
- The document "loaded" and "DOMContentLoad" events are now dispatched from a task rather than a timer.
- Mac builds no longer infinite loop with empty HTMLSelectElement entries.
- Content drawn to canvas with a globalCompositeOperation of lighter now renders correctly. Broken since 5.12.3.
- CSS variables are now enumerable via the CSSStyleDeclarations for element style attributes and CSS rules.
- User input events, such as keyboard or mouse, are now sent directly to the relevant nested browsing context (e.g. an IFrame or a legacy SVG <animation> element) and can no longer be observed by ancestor documents. Nested browsing contexts can now recieve drop and paste events.
- StyleSheets are now correctly parsed if they start with a UTF-8 BOM sequence.
- Removed invalid :first, :left and :right pseudo classes from the parser.
- Fixed scroll distance with page up/down on retina screens.
- Cookies are now truncated if they contain control codes.
- CSS comments inside CSS color values are now correctly handled.
- Pointer/mouse over/out/enter/leave events are now always fired, and CSS :hover state updated, when the mouse cursor moves between a nested browsing context and its container.
- Event handlers for mouse and pointer events now observe up-to-date CSS :hover state.
- X11 builds now scroll 53 pixels per wheel turn, matching Chromium on the Pi.
- macOS port's wheel and touchpad scrolling now more closely matches Safari and Chrome.
- Spurious pointerout and mouseout events are no longer sometimes fired if the mouse cursor re-enters a nested browsing context.
- Bidirectional text is now rendered by HTMLInputElement and HTMLTextAreaElement.
- KeyboardEvent.keyIdentifier is no longer set for keypress events, matching Safari's behaviour.
- Filled vector shapes which contain a single self-intersecting path in a single winding direction now render correctly in accelerated canvases.
- CSS variables inside CSS color values are now correctly handled.
- Fixed potential infinite loop parsing feColorMatrix attribute 'values'.
- Timeouts for HTTP/1 XMLHttpRequests over TLS are now honoured.
Change log to version 5.12.2
- Added support for css pseudo class :is(), and its deprecated alias :matches().
- Added support for pasting into html input and textarea elements.
- Added support for pasting into html content editable elements.
- Added basic support for ClipboardEvent.
- Added support for History.go().
- X11 builds now include the architecture in their user agent.
- Raspberry Pi builds now work on earlier versions of the Pi.
- The PointerEvent interface is now supported and these events are fired for native input. Compatibility MouseEvents are still fired, too.
- <fieldset> elements are now display:block by default.
- Flow no longer renders background or borders for <br> or <wbr> elements.
- Allow SVG images to created at pixel sizes larger than 2048.
- Middle and right mouse buttons now fire 'auxclick' events; 'click' events are now exclusive to the left mouse button.
- Mouse events inside iframes are no longer sometimes ignored.
- Flow no longer displays an error page when displaying search results from Yandex using HTTP/2.
- CSS image function names now have stricter parsing.
- HTTP/2 no longer merges trailer fields with the header section.
- Fixed crash in Workers when an HTTP/1 server provides a Content-Length header on a non-keep-alive connection. Data in excess of that declared by an HTTP/1 Content-Length header is now discarded.
- Startup time with large disc caches has been improved, and the default cache size on X11 desktops has been increased from 25MB to 100MB.
- Element.scrollIntoView now implements the 'nearest' rule correctly.
- CSS properties requiring stacking contexts such as opacity and filters now work correctly on inline elements.
Change log to version 5.12.1
- X11 and macOS builds now support the middle mouse button; macOS builds now also support the right mouse button.
- Improved ipv6 support by trying to connect to all returned DNS entries in turn, if previous ones fail.
- Enable ipv6 by default. Added --ipv4 command line option to force ipv4.
- X11 Platforms now request Liberation Sans as the default font.
- Added legacy attribute 'align' to thead, tbody, tfoot, tr, td and th elements.
- Added legacy attributes color and face to HTMLFontElement.
- Added support for subpixel positioning in font rendering.
- Added support for CSS linear/radial gradients using a mix of relative and absolute stop positions.
- Implemented focus, blur, focusin and focusout events, matching WebKit/Blink/Gecko's ordering, rather than the specification.
- Added ipv6 support to Windows port.
- Implemented inline relative position containing block for absolutely positioned descendants.
- Element.getClientRects() now returns the correct sizings for non-replaced inline elements.
- HTMLInputElement with type="button", "reset" or "submit" is now correctly horizontally aligned.
- Focus events are no longer sent when a node is removed from the DOM.
- Fixed CSS background-position parsing to support calc().
- macOS builds on HiDPI displays with application.hidpi:false no longer apply a smoothing filter when upscaling.
- CSS transform perspective functions with negative and zero length parameters are now handled correctly.
- Fixed rendering of non-absolute positioned elements with CSS mask-image property.
- Absolute positioned elements below relative positioned inline elements below overflow hidden elements now render correctly.
- Flex items with a CSS position value of 'static' now respect the CSS z-index property.