What’s new in Chromium 56 and Opera 43

Opera 43 (based on Chromium 56) for Mac, Windows, Linux is out! To find out what’s new for users, see our Desktop blog. Here’s what it means for web developers.

Prerender from address bar

Opera will now prerender pages that are typed into the address bar, before the user hits enter, which can make the page finish loading much sooner.

If you can predict what the user’s likely next navigation will be, you can start a prerender from the current page by using <link rel=prerender>. This has actually been supported since Opera 15, but this seemed like a good opportunity for a reminder. 🙂 For more information about how to use prerender and other resource hints, see Resource Hints – What is Preload, Prefetch, and Preconnect? by Brian Jackson.

Opera now allows users to select link text instead of always dragging the link (like in Opera 12). The user can select by dragging left or right, and start a drag-and-drop by dragging up or down.

Not being able to select text to copy and paste is often frustrating for users. But in some cases it can be justified, like if a link is being used to act as a button, or if text is used only for decoration. To disable text selection in general, CSS user-select: none can be used.

Scroll anchoring intervention

When some content changes above the viewport (e.g., an image is loaded), what used to happen is that the rest of the content is pushed down. With the scroll anchoring intervention the scroll position is updated to keep the content currently in the viewport stable. This behavior can be disabled for a specific subtree or for the whole page by using CSS overflow-anchor: none. See this video for a comparison with and without this intervention.

CSS

  • Opera now supports position: sticky, a new way to position elements. A position: sticky element is relatively-positioned, but becomes position: fixed after the user reaches a certain scroll position. This results in smoother scroll without jumps compared to trying to achieve the same thing with scroll events and JavaScript. For more info see this article by Paul Kinlan.
  • The new generic font family system-ui is now supported, which matches the platform’s default UI font.
  • touch-action: pinch-zoom is now supported.
  • Non-whitespace Unicode control characters will now be rendered according to the specification, rather than being ignored.

HTTP Referrer-Policy header

The new Referrer-Policy HTTP header allows sites to forward site traffic by URL without leaking the user’s session identifier or other private information.

Events: keyboardEvent.isComposing

The KeyboardEvent interface now supports the isComposing attribute which returns true if this event is fired between compositionstart and compositionend events.

Canvas

ImageBitmapRenderingContext can be used to reduce memory consumption and compositing overhead by rendering pixel data in the form of an ImageBitmap.

Audio/video

  • ConstantSourceNode is a new audio source node that produces a constant output mixed with an AudioParam.
  • Two Web Audio ChannelSplitterNode interface attributes are now read-only: channelCount, which is defined by numberOfOutputs in createChannelSplitter(), and channelCountMode, which is set to explicit.
  • PannerNode.rolloffFactor now clamps to the nominal range of a PannerNode’s distance model to describe the volume reduction rate as the source moves away from the listener.
  • Support for FLAC is enabled within the FLAC and Ogg containers for the audio HTML element and decodeAudioData().
  • OPUS can now be used with decodeAudioData(), expanding the variety of audio codecs supported by the Web Audio API.

Shadow DOM

  • Shadow DOM’s slotchange events bubble, but no longer re-fires, at a slot’s assignedSlot.

Deprecated and removed features

  • Non-script MIME types for external scripts (e.g., <script src="foo" type="something/something">) was deprecated (generated a message in the console) in Opera 42 and now in Opera 43 are no longer pre-fetched. This typically results in less wasted fetches. <script data-src="foo" type="something/something"> is recommended instead.
  • The Web Audio API no longer includes the deprecated Doppler API, including speedOfSound, dopplerFactor, and setVelocity.
  • RTCPeerConnection now accepts iceTransportPolicy as an RTCConfiguration parameter as well as iceTransports.
  • RTCPeerConnection is now available without a webkit prefix, though webkitRTCPeerConnection still remains.
  • The reflected-xss directive has been removed from Content Security Policy 2 since it was solely a wrapper for the X-XSS-Protection header and provided no additional functionality.
  • Support for the MediaStreamTrack.getSources() method has been removed in favor of MediaDevices.enumerateDevices().
  • The CSP referrer directive is no longer supported in favor of the new Referrer-Policy header mentioned above.
  • Legacy CBC-mode ECDSA cipher suites ECDHE_ECDSA_WITH_AES_128_CBC_SHA and ECDHE_ECDSA_WITH_AES_256_CBC_SHA have been removed in favor of modern ciphers such as ECDHE_ECDSA_WITH_AES_128_GCM_SHA256.
  • ECDSA with both SHA-1 and SHA-512 have been removed to reduce dependencies on SHA-1 and align with TLS 1.3’s new ECDSA handling.
  • MIDIMessageEvent.receivedTime has been deprecated in favor of Event.timeStamp, since Event.timeStamp now supports high-resolution monotonic time instead of epoch time.

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.