Bajas y eliminaciones en Chrome 60

Joe Medley
Jo Medley

En casi todas las versiones de Chrome, vemos una cantidad significativa de actualizaciones y mejoras del producto, su rendimiento y las capacidades de la plataforma web. En este artículo, se describen las bajas y las eliminaciones en Chrome 60, que está en versión beta a partir del 8 de junio. Esta lista está sujeta a cambios en cualquier momento.

Seguridad

crypto.subtle ahora requiere un origen seguro

La API de Web Crypto, compatible desde Chrome 37, siempre ha funcionado en orígenes no seguros. Debido a la antigua política de Chrome de preferir los orígenes seguros para las funciones potentes, crypto.subtle no solo es visible en orígenes seguros.

Intención de quitar | Error de Chromium

Quita las navegaciones del marco superior iniciadas por el contenido a las URLs de datos

Debido a que los usuarios de navegadores no especializados no son técnicos, cada vez vemos que el esquema data: se usa en ataques de falsificación de identidad y suplantación de identidad (phishing). Para evitarlo, bloqueamos la carga de páginas web data: en el marco superior. Esto se aplica a las etiquetas <a>, window.open, window.location y mecanismos similares. El esquema data: seguirá funcionando para los recursos que cargue una página.

Esta función dejó de estar disponible en Chrome 58 y se quitó.

Intent de quitar | Seguimiento de Chromestatus | Error de Chromium

Inhabilita temporalmente navigator.sendBeacon() para algunos BLOB

La función navigator.sendBeacon() está disponible desde Chrome 39. Según la implementación original, el argumento data de la función podría contener cualquier BLOB arbitrario cuyo tipo no esté incluido en la lista segura de CORS. Creemos que esta es una posible amenaza de seguridad, aunque todavía nadie ha intentado aprovecharla. Debido a que NO tenemos una solución inmediata razonable para esto, temporalmente, sendBeacon() ya no se puede invocar en BLOB cuyo tipo NO esté en la lista de seguridad de CORS.

Si bien se implementó este cambio en Chrome 60, desde entonces se combinó con Chrome 59.

Error de Chromium

CSS

Hacer que el combinador subordinado que perfora las sombras se comporte como un combinador descendente

El combinador subordinado de perforaciones de sombras (>>>), que forma parte del nivel de módulo de alcance de CSS 1, estaba diseñado para hacer coincidir los elementos secundarios de un elemento principal particular, incluso cuando aparecían dentro de un shadow tree. Esto tenía algunas limitaciones. Primero, según las especificaciones, solo se podía usar en llamadas de JavaScript como querySelector() y no funcionaba en hojas de estilo. Lo que es más importante, los proveedores de navegadores no podían hacer que funcionara más allá de un nivel del Shadow DOM.

En consecuencia, se quitó el combinador descendiente de las especificaciones relevantes, incluida Shadow DOM v1. En lugar de quitar este selector de Chromium, en lugar de romper las páginas web, elegimos asignar un alias al combinador descendiente que perfora las sombras al combinador subordinado. El comportamiento original dejó de estar disponible en Chrome 45. El nuevo comportamiento se implementa en Chrome 61.

Intent de quitar | Seguimiento de Chromestatus | Error de Chromium

JavaScript

RTCPeerConnection.getStreamById() se dio de baja y se dio de baja

Hace casi dos años, se quitó getStreamById() de la especificación WebRTC. La mayoría de los demás navegadores ya lo quitaron de sus implementaciones. Aunque se cree que esta función se usa poco, también se cree que existe un riesgo menor de interoperabilidad con los navegadores basados en Edge y WebKit, aparte de Safari, en el que aún se admite getStreamById(). Los desarrolladores que necesiten una implementación alternativa pueden encontrar código de ejemplo en el intent para quitar, a continuación.

La eliminación se realiza en Chrome 62.

Intent de quitar | Seguimiento de Chromestatus | Error de Chromium

SVGPathElement.getPathSegAtLength dejó de estar disponible.

Hace más de dos años, getPathSegAtLength() se quitó de la especificación de SVG. Como solo hay unos pocos hits en httparchive, dejará de estar disponible en Chrome 60. Se espera que la eliminación se realice en Chrome 62, que se lanzará a principios o mediados de octubre.

Intención de dar de baja | Seguimiento de Chromestatus | Error de Chromium

Cómo mover getContextAttributes() detrás de una marca

La función getContextAttributes() es compatible con CanvasRenderingContext2D desde 2013. Sin embargo, la función no formaba parte de ningún estándar y no se volvió parte de uno desde ese momento. Se debería haber implementado detrás de la marca de línea de comandos --enable-experimental-canvas-features, pero no se produjo por error. En Chrome 60, este descuido se corrigió. Se cree que este cambio es seguro, ya que no hay datos que muestren que alguien esté usando el método.

Error de Chromium

Quita Headers.prototype.getAll()

La función Headers.prototype.getAll() se quita según la versión más reciente de la especificación de recuperación.

Intent de quitar | Seguimiento de Chromestatus | Error de Chromium

Quita indexadaDB.webkitGetDatabaseNames()

Agregamos esta función cuando la base de datos indexada era relativamente nueva en Chrome y los prefijos eran de moda. La API muestra de forma asíncrona una lista de nombres de bases de datos existentes en un origen, que parecían razonables.

Lamentablemente, el diseño es defectuoso, ya que los resultados pueden quedar obsoletos en cuanto se muestran, por lo que solo se puede usar para el registro, no para la lógica de aplicación seria. El problema de GitHub incluye vínculos/vínculos a análisis anteriores sobre alternativas, que requerirían un enfoque diferente. Si bien hubo un interés constante por parte de los desarrolladores, debido a la falta de progreso entre navegadores, los autores de las bibliotecas solucionaron el problema.

Los desarrolladores que necesitan esta función deben desarrollar su propia solución. Las bibliotecas como Dexie.js, por ejemplo, usan una tabla global que, a su vez, es otra base de datos para hacer un seguimiento de los nombres de las bases de datos.

Esta función dejó de estar disponible en Chrome 58 y se quitó.

Intent de quitar | Seguimiento de Chromestatus | Error de Chromium

Se quitarán WEBKIT_KEYFRAMES_RULE y WEBKIT_KEYFRAME_RULE.

Se quitaron las constantes no estándar WEBKIT_KEYFRAMES_RULE y WEBKIT_KEYFRAME_RULE de la regla de CSS. En su lugar, los desarrolladores deben usar KEYFRAMES_RULE y KEYFRAME_RULE.

Intent de quitar | Seguimiento de Chromestatus | Error de Chromium

Interfaz de usuario

Exigir gestos del usuario para los diálogos beforeunload

A partir de Chrome 60, el diálogo beforeunload solo aparecerá si el marco que intenta mostrarlo recibió un gesto del usuario o una interacción del usuario (o si algún marco incorporado recibió ese gesto). Para que quede claro, esto no es un cambio en el envío del evento beforeunload. Solo cambia si se muestra el diálogo.

El diálogo beforeunload es un cuadro de diálogo modal de la app. Por lo tanto, es intrínsecamente hostil para el usuario, lo que significa que responde a la navegación del usuario cuestionando su decisión. Esta función tiene usos positivos. Por ejemplo, a menudo se usa para advertir a los usuarios cuándo perderán datos cuando naveguen.

Si bien hace un tiempo se quitó la posibilidad de que una página proporcione texto para el diálogo beforeunload, los diálogos beforeunload siguen siendo un vector de abuso. En particular, los diálogos de beforeunload son parte de los sitios web de estafa, en los que el audio de reproducción automática y el texto amenazante proporcionan un contexto en el que Chromium proporciona un mensaje que indica que estás seguro de que quieres salir de esta página y se vuelve preocupante.

Queremos usar hilos de la aguja y solo permitir los buenos usos del diálogo beforeunload. Los buenos usos del diálogo son aquellos en los que el usuario tiene un estado que podría perderse. Si el usuario nunca interactuó con la página, no puede tener ningún estado que se pueda perder y, por lo tanto, no arriesgamos a perder datos si suprimemos el diálogo en ese caso.