Today Opera 36 was released. We just deployed it to our browser testing cloud. Opera 36 is based on Google Chrome 49. It's now available for cross-browser testing to everyone!

Web testing in Opera 36

Try Opera 36 in Browserling now!

Opera 36 improvements

  • Stability enhancements and bug fixes.
  • Updated support for the latest Chromium/Blink release, version 49.
  • Faster and more stable transitions between internal pages.
  • Hidden sync button when signed in without any problems.
  • Better touch support and some interface tweaks for Windows 10 users.
  • Start page matches bookmarks manager and other internal pages.
  • The news feed now appears just below the Speed Dial.
  • Bookmarks, synced tabs and history are now on the left side of the start page.
  • Theme and news feed topics can now be quickly changed from the settings menu in the top-right of the start page.

New developer features in Opera 36

  • ES6 Proxy and Reflect

Proxy objects can be used to define custom behavior for fundamental operations such as property lookup, assignment, enumeration, function invocation, etc. The Reflect API offers imperative methods for invoking, examining or modifying values at runtime, and is very useful for working with Proxies.

  • URLSearchParams

The URLSearchParams API defines helper methods for working with the query string of a URL.

  • Smooth scrolling

As of Chromium 49, scrolling is getting smoother on Windows and Linux. But that's not all: there are more potential improvements that may land soon, through Houdini and CSS properties like scroll-behavior: smooth.

  • HTMLMediaElement.prototype.disableRemotePlayback

The Remote Playback API specification defines a disableRemotePlayback setter on HTMLMediaElement instances, which can be used to signal to the browser that this media element should not be played remotely. Enabling disableRemotePlayback by setting it to true causes the browser to not show any UI advertising remote playback, and prevents the element from being played remotely.

  • ES6 block-scoped bindings in sloppy mode

Const, let, class and function now follow the proper ES6 semantics even in sloppy (non-strict) mode.

  • Cookie Prefixes

Cookie Prefixes are a way of "smuggling" information in the name prefix of a cookie to ensure that certain attributes accompany the request to set a cookie. Chromium now supports the following cookie prefixes: Secure-, which signals to the browser that the Secure attribute is required. Host-, which signals to the browser that both the Path=/ and Secure attributes are required, and at the same time, that the Domain attribute must not be present.

  • <a rel=noopener>

You may be familiar with <a rel=noreferrer>, which prevents sending the Referer HTTP header and sets window.opener to null when following a link. If you only want to disable window.opener but still send the Referer header, you can now use rel=noopener. Note that this is only needed for links that open a new navigation context, i.e. target="_blank".

  • Web Audio API updates

The Web Audio API defines IIRFilterNode, which is an AudioNode processor implementing a general IIR filter. Once created, the coefficients of the IIR filter cannot be changed, and no automation functions are allowed. Chromium now also supports suspend() and resume() methods on OfflineAudioContext instances.

  • CSS Custom Properties (CSS Variables)

The CSS Variables spec defines a new primitive value type that is accepted by all CSS properties, as well as custom properties for defining them. As with other CSS values, they can be updated programmatically using JavaScript.

  • High-resolution event time stamps

Event.prototype.timeStamp indicates the time at which a given event took place. Previously, this timeStamp value was represented as a DOMTimeStamp, which was a whole number of milliseconds since the system epoch.

  • Promise rejection events

Two new global events, unhandledrejection and rejectionhandled, can be used to keep track of Promise rejections, including whether those rejections are handled after the fact.

  • Symbol.toStringTag

Using Symbol.toStringTag, user-defined types can return customized output when passed to Object.prototype.toString (either directly or as a result of string coercion) by storing a descriptive string in a Symbol.toStringTag-keyed property.

  • Faster and more secure HTTPS connections

The standardized versions of the ChaCha20 stream cipher and Poly1305 authenticator are now used for TLS connections in Chromium. Compared to AES-GCM, this new TLS cipher suite is more secure, saves network bandwidth, and operates three times faster on devices that lack AES hardware acceleration such as most Android devices.

  • Fetch API updates

The 'navigate' request mode as defined in the Fetch API specification is now supported. FetchEvent.prototype.clientId is now implemented. This read-only property returns the ID of the Client that the current service worker is controlling. The Clients.get() method can then be passed this ID to retrieve the associated client.

  • Geolocation now HTTPS-only

The Secure Contexts specification lists the Geolocation API as an example of an API that should only be available over secure contexts such as HTTPS. As of Chromium 49, the Geolocation API won't work over insecure contexts anymore. If you need to use Geolocation, use HTTPS.

  • Audio Output Devices API

The Audio Output Devices API specification defines a set of JavaScript APIs that let a web app manage how audio is rendered on the user's audio output devices. With this feature it's now possible for web apps to send audio to authorized output devices other than the system default.

  • Improved handling of insecure source expressions in CSP

Sniffly is a timing attack to sniff browser history. One of its variants was based on a clever trick combining CSP and HSTS. In response, the CSP matching algorithm was updated to make insecure schemes in source expressions match their secure variants. That is, http: is now equivalent to http: https:, and http://example.com to http://example.com. Likewise, 'self' now matches https and wss variants of the page's origin, even on pages whose scheme is http.

  • ES6 destructuring assignment

Destructuring assignment makes it possible to extract data from arrays or objects using a syntax that mirrors the construction of array and object literals.

  • Service worker: WindowClient.prototype.navigate()

It is now possible to trigger navigation from a service worker using the navigate() method on a WindowClient instance.

  • Case-insensitive attribute value selectors

In HTML, the attribute values of certain attributes are compared ASCII-case-insensitively.

  • ES6 default function parameter values

ES6 allows formal parameters to be initialized with default values if no value (or undefined) is passed.

Deprecated and removed developer features in Opera 36

  • The WebRTC RTCPeerConnection methods createOffer() and createAnswer() now require an error handler as well as a success handler, matching the spec. Previously it was possible to call these methods with only a success handler. That usage is deprecated. This change paves the way for introducing promises on these methods, as required by the WebRTC spec.
  • Support for the HTML element has been removed. See the intent to deprecate mail for some background on this decision.
  • The non-standard navigator.getStorageUpdates() has been removed. It used to be a no-op anyway.
  • The presence of getComputedStyle(element).css (except for .cssFloat) is non-standard behavior, so support for it has been removed. Use getComputedStyle(element). instead.
  • Document.defaultCharset has been deprecated and will be removed in a future release.
  • Support for the Pointer Lock API's prefixed event properties MouseEvent.prototype.webkitMovementX and MouseEvent.prototype.webkitMovementY has been removed. Use the standardized versions, i.e. MouseEvent.prototype.movementX and MouseEvent.prototype.movementY, instead.
  • Object.observe has been deprecated as it is no longer on the standardization track and will be removed in a future release.
  • Previously, Chromium treated the first two arguments (type and listener) of addEventListener and removeEventListener as optional, while they are non-optional in the spec and in other browsers. This has changed: calling these methods with zero or one argument now throws an exception.
  • The non-standard TouchEvent.prototype.initTouchEvent is now deprecated. Use the Touch and TouchEvent constructors instead.

Happy cross-browser testing in Opera 36!