We just added Opera 39 to our browser testing cloud. Opera 39 was released today and it uses Google Chromium 52 rendering engine. You can already cross-browser test your applications in Opera 39!

Cross-browser testing in Opera 39

Try Opera 39 in Browserling now!

Key changes in Opera 39:

  • Search pop-up.

Search pop-up makes searching from the browser easier. If you select text in Opera, a pop-up will appear offering the most common functions for text selection - search or copy. This feature can be turned on/off in the Browser - User Interface section of settings.

  • Customizable block lists to the native ad blocker.

Opera 39 adds customizable block list to the native ad blocker in Opera 39. With this release, advanced users can now add their own block lists. To find a new list, make a web search for blocking lists recommended for your region; then, copy and paste it into the "Custom block lists" dialog in your preferences. Once added, the browser will start using the list immediately without the need to restart Opera.

  • Improved video pop out.

Video pop out lets you easily detach and move a video over to the side of your screen, so that you can continue watching while you work, play or do research.

  • Personalized newsreader.

With Opera 39 you can also experience a new way of reading news. Go to the start page and click the newspaper icon on the left. Opera brings you personalized news in our brand new newsreader, with one-stop news tailored just for you.

  • Stability enhancements and bug fixes.

This version brings an optimization pass for the Blink memory manager, called heap compaction. It reduces memory usage by several megabytes per tab. This version inherits features from Chrome 52, such as new CSS contain property, which considers fewer elements while rendering, and the PerformanceObserver API that makes collecting real user measurement data easier.

Key developer changes in Opera 39:

Web Audio updates

AudioParam instances now have readonly minValue and maxValue properties that specify the minimum and maximum values the AudioParam can have. The value is clamped to lie in this range.

Fetch API: Response construction with ReadableStream

It's now possible to construct your own ReadableStream instances and to use them as bodies for Response objects, including from within service workers.

Fetch API: referrer policy

Requests made using the Fetch API can use a specific referrer policy, which affects the value of the Referer HTTP header that's sent to remote servers. This can be done by adding a referrerPolicy property to the options object passed to fetch, which accepts the following values: no-referrer, no-referrer-when-downgrade, origin, origin-when-cross-origin, and unsafe-url.

WebRTC: Storing RTCCertificates in IndexedDB

RTCCertificates are self-signed certificates used in the DTLS handshake when setting up a connection with an RTCPeerConnection. Chromium now allows web applications to store RTCCertificates by implementing the structured clone algorithm. This means RTCCertificates can be saved and loaded from an IndexedDB database, saving the cost of generating new certificates for new sessions.

Pause event loop during modal dialogs

When using alert(), confirm() or onbeforeunload, Chromium's old behavior was to block JavaScript while waiting for the result, but to allow all declarative animations to continue. As of this update, Chromium makes all main-thread tasks (such as <marquee> and CSS 2D animations) also pause during this interval.

New CSS Flexbox behavior for absolutely-positioned children

The static position of absolutely-positioned children used to be set as though they were a 0x0 flex item. The CSS Flexible Box Layout spec has since been updated to take such children fully out of flow and to set the static position based on align and justify properties.

Performance Observer

The Performance Observer API is essentially a streaming interface that can be used to gather low-level timing information asynchronously, as it's gathered by the browser.

Alternative Services

Alternative Services allow an origin serving an http:// or https:// resource to nominate additional origins that the client can choose to request the resource from instead when making subsequent requests. This can be used, for example, as a protocol upgrade mechanism, for connection pooling, or for load balancing.

Invalid <track kind> values are no longer treated as subtitles

Invalid values for <track kind> were previously treated as 'subtitles'. This means that any new values would be treated as subtitles by old browsers. Chromium now uses 'metadata' instead as the "invalid value default", to avoid browsers showing <track>s with unrecognized values.

CSS containment

The CSS contain property indicates that an element and its contents are, as much as possible, independent of the rest of the document tree. This allows the browser to recalculate layout (contain: layout), style (contain: style), paint (contain: paint), size (contain: size), or any combination of them for a limited area of the DOM and not the entire page.

CSP3 strict-dynamic

The 'strict-dynamic' source expression allows scripts loaded via nonce- or hash-based whitelists to load other scripts. Deploying CSP is now simpler than ever before.

meter { -webkit-appearance: none; }

Previously, there was no way to completely disable the browser's default rendering of <meter> elements and to restyle them using CSS. As of Chrome 52 and Opera 39, this finally became possible using -webkit-appearance: none.


The includes method on IDBKeyRange instances tests whether or not a key exists within the bounds of the range. Until all other browsers support this natively, a polyfill can be used.

createImageBitmap options

An ImageBitmapOptions object is an options object that can be passed to createImageBitmap(). The available options are: colorSpaceConversion that indicates whether the image is decoded using color space conversion. Either 'none' or 'default' (default). The value 'default' indicates that implementation-specific behavior is used. imageOrientation that indicates whether the image is presented as-is or flipped vertically. Either 'flipY' or 'none' (default). premultiplyAlpha that indicates that the bitmap color channels are premultiplied by the alpha channel. One of 'none', 'premultiply', or 'default' (default). resizeWidth that indicates the new width. resizeHeight that indicates the new height. resizeQuality that specifies an image scaling algorithm. One of 'pixelated', high', 'medium', or 'low' (default).

ES2016 exponentiation operator

ES2016 introduces an arithmetic operator two double stars ** equivalent of Math.pow(base, exponent), in which the lefthand-side expression serves as the base value, and the righthand-side expression serves as the exponent.

CSS font-variant-caps & font-variant-numeric

The CSS properties font-variant-caps and font-variant-numeric are now supported.

2D canvas filters

CanvasRenderingContext2D instances now support the filter property that applies effects to primitives drawn to the canvas. The filter value is parsed in the same way as CSS filters.


The srcObject property on HTMLMediaElement instances enables associating a MediaStream to a media element using a simple assignment. Previously, achieving this required first obtaining a URL associated to the MediaStream, and then associating this URL to the media element.

Deprecated and removed features in Opera 39:

  • X-Frame-Options is now ignored when present inside a <meta> tag, e.g. <meta http-equiv="X-Frame-Options" contents="DENY">, matching the spec. Use an HTTP header (X-Frame-Options: DENY) instead.
  • A non-standard and little-used variant of the postMessage() API is being deprecated, specifically postMessage(message, transferables, targetOrigin). Use postMessage(message, targetOrigin, transferables) instead.
  • The ended event & property and the onended event handler have been removed from the Media Capture and Streams spec and are now being deprecated in Chromium.

Coming in Opera 40: Built-in browser VPN

Opera 39 adds a beta version of a new, built-in, free and unlimited VPN. You will not find it in Opera 39 stable yet, but it will be added in Opera 40. You'll be able to enable VPN for tabs or globally in entire Opera browser.

Happy cross-browser testing in Opera 39!