Firefox Quantum 57 para programadores
=====================================

Este artículo proporciona información sobre los cambios incluidos en Firefox 57 (también conocido como Firefox Quantum) que conciernen a los desarrolladores. Firefox 57 se disponibilizó al público el 14 de noviembre de 2017.

Firefox 57 === Firefox Quantum
------------------------------

Hemos bautizado a Firefox 57 como **Quantum** por el proyecto de ingeniería Firefox Quantum, cuyo objetivo ha sido el de reconstruir Firefox desde cero para darle un rendimiento y una estabilidad excelentes, así como mejorar su apariencia visual. Esta es la primera versión de Firefox en incluir algunos de estos cambios, así que quisimos conmemorar el acontecimiento.

**Nota:** para obtener más información sobre las funciones de Quantum incluidas en esta versión, consúltese el artículo «Firefox Quantum Developer Edition: el Firefox más rápido, con IU Photon y mejores herramientas», escrito por Dan Callahan.

El nuevo procesador de CSS en paralelo de Firefox ―también denominado **Quantum CSS** o **Stylo**― está activado de manera predeterminada en Firefox 57 para escritorio; las versiones para móviles darán el salto en el futuro. Los programadores no deberían notar ninguna diferencia importante, aparte de la amplia gama de mejoras de rendimiento. Sin embargo, existen algunas diferencias menores de funcionalidad en Stylo, las cuales se han implementado para corregir comportamientos no estándares de Gecko que habrían de desaparecer. Informaremos de esas diferencias en las páginas de referencia y en las notas de publicación según proceda (véanse Notas sobre Quantum CSS).

Cambios para programadores web
------------------------------

### Herramientas de desarrollo

*No hay ningún cambio.*

### HTML

* Los tipos «date» y «time» (en-US) de `<input>` ya están activados en todas las compilaciones (Error 1399036 en Firefox).
### CSS

* Ahora admitimos los valores `minimal-ui` y `standalone` de la consulta `display-mode` (Error 1369815 en Firefox). Consúltese también el campo de manifiesto de aplicación web `display`.
* Se corrigió un problema que causaba que la notación abreviada de la cuadrícula quedara restablecida al utilizar `grid-row-gap` (en-US) y `grid-column-gap` (Error 1387410 en Firefox).
* Se ha eliminado la preferencia `layout.css.clip-path-shapes.enabled`, que permitía activar o desactivar la compatibilidad de `<basic-shape>` con `clip-path` (en-US) (Error 1399767 en Firefox).

#### Notas sobre Quantum CSS

* Los valores de degradados radiales tales como `radial-gradient(circle gold,red)` funcionan en el sistema de estilos de Gecko anterior, pero no debería por la coma faltante entre `circle` y `gold` (Error 1383323 en Firefox). Quantum corrige este defecto.
* Cuando se da animación a un elemento ubicado fuera de la pantalla y se establece un tiempo de retardo, Gecko no actualiza la visualización correctamente en algunas plataformas, como Windows (Error 1383239 en Firefox). Esto ha quedado corregido en Quantum.
* En Gecko, no es posible desplegar de manera predeterminada los elementos `<details>` mediante el atributo `open` si tienen una propiedad `animation` activa (Error 1382124 en Firefox). Quantum corrige este problema.
* En Gecko, los efectos `transitions` no funcionan si se transiciona desde un `text-shadow` con un color especificado a un `text-shadow` sin ningún color (Error 726550 en Firefox). Este comportamiento se ha corregido en Quantum.
* En Gecko, cancelar una animación de relleno (p. ej., con `animation-fill-mode: forwards` definido) puede desencadenar un conjunto de transiciones en el mismo elemento, aunque únicamente una vez (véase el Error 1192592 en Firefox y estas pruebas para más información). Por lo general, las animaciones declaratorias no deberían desencadenar animaciones. Esto se ha corregido en Quantum.
* En Gecko, las animaciones que utilizan ems como unidad no reciben las modificaciones realizadas en `font-size` en el elemento padre del elemento animado, aunque deberían (Error 1254424 en Firefox). Quantum CSS corrige esto.
* Gecko además maneja la herencia de `font-size` de manera diferente a la de Quantum CSS, por lo que para algunas configuraciones de idioma, los tamaños de letra heredados quedaban más pequeños de lo esperado (véase Error 1391341 en Firefox). Quantum corrige esto.
* Gecko reutiliza el mismo mecanismo empleado al analizar una ficha de URL durante el análisis de las funciones `domain()` o `url-prefix()` para la regla `@-moz-document` (en-US). Quantum CSS no utiliza el mismo mecanismo y no considera las fichas como no válidas cuando contienen paréntesis o comillas (Error 1362333 en Firefox).
* En Gecko, cuando se define un tipo de letra del sistema como el valor del `tipo de letra` (en-US) de algún contexto del lienzo 2D (p. ej., `menu`), la obtención del valor del tipo de letra no devuelve el resultado correcto (no devuelve nada). Este problema quedó solucionado en Quantum. (Error 1374885 en Firefox).
* En Gecko, cuando se crea un subárbol desligado (p. ej., un `<div>` creado a través de `createElement()` que todavía no se inserta en el DOM), el elemento raíz del subárbol se define como un elemento de nivel bloque. En Quantum CSS, el elemento se define como alineado, tal como se define en la especificación (Error 1374994 en Firefox).
* Gecko rechaza las expresiones `calc()` ―lo que invalida el valor― cuando se utilizan como el componente radial de una función `radial-gradient()` (en-US) (Error 1376019 en Firefox). Quantum CSS lo resuelve.
* En Gecko, `calc(1*2*3)` no es analizado debidamente; Quantum CSS soluciona el problema (Error 1379467 en Firefox).
* En Quantum CSS, `calc()` se admite en todos los sitios que la especificación indica (Error 1350857 en Firefox). En Gecko, este no es el caso.
* Gecko contiene un defecto que provoca que los pseudoelementos `::before` y `::after` se generen aun si el valor de la propiedad `content` se define como `normal` o `none`. Este comportamiento es contrario a la especificación (Error 1387931 en Firefox) y se ha corregido en Quantum.
* Otro defecto de Gecko provoca que la propiedad `background-position` no pueda transicionarse entre dos valores que contengan números diferentes de valores `<position>` (en-US), por ejemplo, `background-position: 10px 10px;` y `background-position: 20px 20px, 30px 30px;` (véase Error 1390446 en Firefox). Quantum resuelve el error.
### SVG

*No hay ningún cambio.*

### JavaScript

* El bucle no estándar `for each...in` (E4X) fue eliminado. En su lugar, utilícese `for...of` y consúltese Atención: los bucles de JavaScript 1.6 «for-each-in» son obsoletos para obtener ayuda en la migración. (Error 1083470 en Firefox).
* Se marcaron como obsoletos los métodos `Object.prototype.watch()` y `unwatch()`. Se emitirá una alerta si se utilizan y serán eliminados en el futuro próximo (Error 934669 en Firefox).
* Se eliminaron los objetos `Iterator` (en-US) y `StopIteration` y el protocolo de iteración heredado (Error 1098412 en Firefox).
### API

#### API nuevas

* Se ha activado de manera predeterminada la API `PerformanceObserver` (en-US) (Error 1386021 en Firefox).
* Añadimos las interfaces `AbortController` (en-US) y `AbortSignal` (en-US) (conocidas como la API «Abort»), que permiten interrumpir las solicitudes del DOM (como las de recuperación) si así se desea (Error 1378342 en Firefox).

#### DOM

* Se ha implementado la propiedad `Selection.type` (en-US) de la API Selection (en-US) (Error 1359157 en Firefox).
* Se admite `Document.createEvent('FocusEvent')` ahora (Error 1388069 en Firefox).
* La propiedad `files` de la interfaz `HTMLInputElement` puede definirse ahora (Error 1384030 en Firefox).
* El método `HTMLDocument.getSelection()` se ha trasladado a la interfaz `Document` para que quede disponible para los documentos XML (Error 718711 en Firefox).
* Hemos implementado el suceso `messageerror`, el cual puede ejecutar código tras su desencadenamiento por parte de manejadores de sucesos utilizados en destinos de mensajes. Véase `MessagePort.onmessageerror` (en-US), `DedicatedWorkerGlobalScope.onmessageerror` (en-US), `Worker.onmessageerror` (en-US), `BroadcastChannel.onmessageerror` (en-US) y `Window.onmessageerror` (Error 1359017 en Firefox).
* Cuando se emplea la iteración en valores `Headers` (en-US), estos quedarán organizados en orden lexicográfico y se combinarán los valores de los nombres de cabeceras duplicados (Error 1396848 en Firefox).

#### Sucesos de DOM

*No hay ningún cambio.*

#### Multimedia y WebRTC

* Ahora se admiten mensajes de cualquier tamaño (hasta 1 GiB, aunque 256 kiB es más interoperativo) en `RTCDataChannel` (en-US) por medio del uso de la opción «end-of-record» (EOR) en los mensajes de SCTP. Consúltese Understanding message size limits (en-US) para obtener más información (Error 979417 en Firefox).

**Nota:** Como Firefox aún no admite el protocolo ndata de SCTP, que permite intercalar mensajes de SCTP de varias fuentes, enviar objetos de datos grandes puede causar retardos importantes en el resto del tránsito SCTP. Véase el Error 1381145 en Firefox para estar al tanto de la implementación de ndata en Firefox.
* El método `RTCDataChannel.send()` (en-US) ahora puede emitir una excepción `TypeError` si el tamaño del mensaje que se intenta enviar no es compatible con el agente de usuario de destino (esto se implementó como parte del Error 979417 en Firefox).
* La API MediaStream Recording (en-US) se ha actualizado de modo que los sucesos `error` (en-US) que se envíen para notificar problemas acaecidos durante la grabación son ahora del tipo `MediaRecorderErrorEvent` (en-US) en lugar de sucesos genéricos.
* Se actualizó la documentación concerniente a `OfflineAudioContext` (en-US), dado que sus entradas de constructores pueden especificarse ahora dentro de un objeto en lugar de una lista de parámetros (Error 1388591 en Firefox).
### Seguridad

* Los URL `resource://` ya no filtran información (Error 863246 en Firefox)
* Los URI de datos ahora se manipulan como orígenes opacos únicos, en vez de heredar el origen del objeto de configuración responsable de la navegación (Error 1324406 en Firefox).
### Plugins

*No hay ningún cambio.*

### Otros

* El valor `fullscreen` del campo `display` del manifiesto de aplicación web ahora funciona en Firefox para Android 57 (Error 1126479 en Firefox).
* La modalidad sin periféricos de Firefox ahora incluye el parámetro `-screenshot`, que permite a los usuarios tomar capturas de pantalla de sitios web directamente desde la consola (Error 1378010 en Firefox).
Eliminaciones de la plataforma web
----------------------------------

### HTML

* `<link rel="preload">` (véase Precargar contenido con rel="preload" (en-US)) fue desactivado en Firefox 57 a causa de varios problemas de compatibilidad con la web (p. ej., Error 1405761 en Firefox). Se espera que para Firefox 58 quede lista la versión de reemplazo, la cual funcionará para recursos no almacenables en la antememoria.
### API

* La API Social, privativa de Mozilla, se ha eliminado completamente (Error 1388902 en Firefox).
### SVG

*No hay ningún cambio.*

Cambios relativos a los complementos y los programadores de Mozilla
-------------------------------------------------------------------

**Nota:** A partir de Firefox 57, se ha eliminado por completo la compatibilidad con los complementos basados en la tecnología XPCOM. Todas las extensiones deben convertirse para emplear la tecnología nueva, conocida como WebExtensions, o de lo contrario dejarán de funcionar.

### WebExtensions

Se añadieron o ampliaron las API siguientes:

* `bookmarks` (en-US)
    + compatibilidad con separadores mediante `bookmarks.BookmarkTreeNodeType` (en-US)
* `browser_action` (en-US)
    + propiedad `theme_icons` para iconos claros u oscuros en función del tema
* `browserAction` (en-US)
    + `browserAction.openPopup()` (en-US)
* `browserSettings` (en-US)
    + `allowPopupsForUserEvents` (en-US)
    + `homepageOverride` (en-US)
    + `imageAnimationBehavior` (en-US)
    + `newTabPageOverride` (en-US)
* `browsingData` (en-US)
    + `browsingData.removeLocalStorage()` (en-US)
* `clipboard` (en-US)
    + `setImageData()` (en-US)
* `contextualIdentities` (en-US)
    + `onCreated` (en-US)
    + `onRemoved` (en-US)
    + `onUpdated` (en-US)
    + `colorCode` y `iconUrl` en `contextualIdentitities.ContextualIdentity` (en-US)
* `devtools.panels` (en-US)
    + `devtools.panels.ElementsPanel.createSidebarPane()` (en-US)
* `downloads` (en-US)
    + opción `incognito` en `downloads.download()` (en-US)
    + propiedad `estimatedEndTime` en `downloads.DownloadItem` (en-US)
* `find`
    + `find()` (en-US)
    + `highlightResults()` (en-US)
    + `removeHighlighting()` (en-US)
* `pageAction.openPopup()` (en-US)
* `privacy`
    + `websites.trackingProtectionMode`
* `proxy` (en-US)
    + `FindProxyForURL()` puede devolver un objeto ahora
* `runtime` (en-US)
    + `runtime.openOptionsPage()` (en-US) funciona en Android
* `sessions` (en-US)
    + `setTabValue()` (en-US)
    + `getTabValue()` (en-US)
    + `removeTabValue()` (en-US)
    + `setWindowValue()` (en-US)
    + `getWindowValue()` (en-US)
    + `removeWindowValue()` (en-US)
* `sidebarAction` (en-US)
    + `sidebarAction.open()` (en-US)
* `storage`
    + `storage.managed` (en-US)
* `tabs` (en-US)
    + opción `loadReplace` en `tabs.update()` (en-US)
    + propiedad `discarded` en `tabs.Tab` (en-US), `tabs.onUpdated` y `tabs.query()` (en-US)
    + `tabs.create()` (en-US) puede abrir URL con «view-source:»
    + propiedad `openerTabId` en `tabs.Tab` (en-US), `tabs.create()` (en-US), `tabs.query()` (en-US) y `tabs.update()` (en-US)
* `theme` (en-US)
    + `colors.toolbar`
    + `colors.toolbar_field`
    + `colors.toolbar_field_text`
    + `colors.toolbar_text`
* `theme` (en-US)
    + opción `windowId` para `theme.update()`
* `webRequest` (en-US)
    + `filterResponseData()` (en-US)
    + propiedad `proxyInfo` en sucesos `webRequest` (en-US)
* `windows` (en-US)
    + opción `allowScriptsToClose` en `windows.create()` (en-US)
Versiones anteriores
--------------------

* Firefox 56 for developers (en-US)
* Firefox 55 for developers (en-US)
* Firefox 54 for developers (en-US)
* Firefox 53 for developers (en-US)
* Firefox 52 for developers (en-US)
* Firefox 51 for developers (en-US)
* Firefox 50 for developers
* Firefox 49 for developers (en-US)
* Firefox 48 for developers (en-US)
* Firefox 47 for developers (en-US)
* Firefox 46 for developers (en-US)
* Firefox 45 for developers (en-US)
* Firefox 44 for developers (en-US)
* Firefox 43 for developers (en-US)
* Firefox 42 for developers (en-US)
* Firefox 41 for developers (en-US)
* Firefox 40 for developers (en-US)
* Firefox 39 for developers (en-US)
* Firefox 38 for developers (en-US)
* Firefox 37 for developers (en-US)
* Firefox 36 for developers (en-US)
* Firefox 35 for developers (en-US)
* Firefox 34 for developers (en-US)
* Firefox 33 for developers (en-US)
* Firefox 32 for developers (en-US)
* Firefox 31 for developers (en-US)
* Firefox 30 for developers
* Firefox 29 for developers (en-US)
* Firefox 28 for developers (en-US)
* Firefox 27 for developers (en-US)
* Firefox 26 for developers (en-US)