What’s new in Chromium 71 and Opera 58
Opera 58 (based on Chromium 71) for Mac, Windows, Linux is out! To find out what’s new for users, see our Desktop blog post. Here’s what it means for web developers.
Support for COLR/CPAL fonts
Opera now supports COLR/CPAL fonts which are vector based fonts with color information. As fonts become available, we can expect Unicode-based emojis to become more interesting.
Performance > Async touchpad pinch zoom events
By default touchpad events create synchronous synthetic ctrl+wheel events that allow documents to cancel them. This can unfortunately greatly increase the time between a user action and changes on the screen. To improve the situation the browser has changed so that if the first synthetic ctrl+wheel event is let through, then no more synthetic events will be created. If you do want to cancel pinch zoom, you need to cancel all the events. You can read more about this in the design document
JavaScript
JavaScript > Internationalization of relative times
With Intl.RelativeTimeFormat()
you can now get relative time descriptions for any supported locale. Two simple examples below:
formatter = new Intl.RelativeTimeFormat("en");
formatter.format(2.5, "hour"); // "in 2.5 hours"
formatter = new Intl.RelativeTimeFormat("sv", {numeric: "auto"}); // Swedish, text or numbers.
formatter.format(-1, "week"); // "förra veckan" (last week)
You can read more about what you can do with Intl.RelativeTimeFormat by reading what the feature developers say about it.
JavaScript Modules: Credentials mode defaults to “same-origin”
The default credentials mode for module script requests is changing from “omit” to “same-origin”, providing credentials to same-origin module script requests and their descendant scripts (static & dynamic imports). The previous behavior can be surprising in that it is misaligned with other high-level features like the Fetch API, and could not be reused for the main request, causing a second server connection which added latency.
Media
Media > Removed SpeechSynthesis.speak without user activation
Unfortunately speechSynthesis.speak() has been abused so it will now only be available once the user has interacted with the page. With this change, everything that makes sounds follows the same autoplay policy.
Media > MediaElement and MediaStream nodes defined only for AudioContext (removed from OfflineAudioContext)
Opera now only allows creation of MediaElementAudioSourceNode
, MediaStreamAudioSourceNode
, and MediaStreamAudioDestinationNode
elements using an AudioContext
. Previously these could be created using an OfflineAudioContext
, but that does not comply with the specification and made little sense.
Media > URL.createObject() can no longer be used for MediaStreams
The normal way to embed MediaStreams is to assign them to scrObject
, but until now URL.createObject()
has also worked. It has been deprecated since 2013 though and with this release, that obsolete method has been removed.
ServiceWorkers > Changes to when importScript() can be run
ServiceWorkers can no longer import scripts with importScripts() once the ServiceWorker has been installed.
Storage > Persistent storage permission requests
A site can request to store data persistently, that is, in a way that will not be exposed to automatic deletion just because of lack of storage space. In this version a site can request the user’s permission to do so through the persistent-storage
property in the Permission API.
Removed document.origin
The document.origin
property was not cross-browser and the supported, cross-browser, way to access ones origin is with self.origin
so in this release document.origin
was removed.
TextEncoderStream and TextDecoderStream APIs
Text encoding and decoding can now be done with streams to enable you to easily convert streams of binary data to text and vice-versa.
Unprefixed fullscreen API
For many years, the fullscreen API has had a vendor prefix (which all browser vendors have reused), but coming in Opera 58, and other Chromium 71 browser, there is a fully unprefixed fullscreen API.
CSS
CSS > Shorter syntax for double stops in color gradients
It is common to repeat color stops in a gradient to create single colored bands like this:
linear-gradient(45deg, black 25%, black 50%, white 50%, white 75%)
With the new CSS4 specification comes support for a more compact syntax where the repeated color name is no longer needed:
linear-gradient(45deg, black 25% 50%, white 50% 75%)
CSS > left
and right
for text-underline-position
Vertical text has had slightly undefined positioning of underlines. With the newly added values left
and right
for text-underline-position
, it should now be possible to make a cross-browser declaration of where an underline should be positioned.
CSS > Improve :host, :host-context, and ::slotted specificity
Certain Shadow DOM v1 CSS selectors did not match in the correct order. In Opera 58, :host() and :host-context() pseudo classes as well as ::slotted() arguments will be taken into account when calculating a selectors specificity.
WebKitAnimationEvent and WebKitTransitionEvent are removed
AnimationEvent
and TransitionEvent
, without the WebKit prefix, has been available for some time and in this Opera version the prefixed versions were removed after usage dropped had sufficiently.
What’s next?
If you’re interested in experimenting with features that are in the pipeline for future versions of Opera, we recommend following our Opera Developer stream.
You can also see features that we and other Chromium/Blink contributors are working on by looking at the Chrome Platform Status page.