Actualizar add-ons para Firefox 9

Firefox 9 no tiene grandes cambios que vayan a resultar en problemas de compatibilidad para los desarrolladores de complementos. Sin embargo, hay algunos elementos que pueden ser problematicos, así que vamos a echarles un vistazo.

¿Es necesario hacer algo?

Si tu complemento se distribuye en addons.mozilla.org (AMO), este ya ha sido verificado por una herramienta automatizada de verificación de compatibilidad. Los complementos que no utilizan APIs que cambiaron en Firefox 8, y no tienen componentes binarios (que deben volver a compilarse para cada versión mayor de Firefox), automáticamente se han actualizado en AMO para indicar que funcionan en Firefox 9.

Así que puedes empezar visitando AMO para comprobar si tu complemento requiere trabajo.

Nota: Todavía debes testear tu complemento en Firefox 9, incluso si ha sido actualizado automáticamente. Existen casos extremos que pueden no ser automáticamente detectados.

Los componentes de inicio pueden remover scripts con carga retrasada

Si tu complemento utiliza nsIChromeFrameMessageManager.loadFrameScript() con la bandera de carga retrasada establecida, el script se carga en cada frame creado desde ese punto. Esto está bien, expecto que hasta Firefox 9, no hay forma de parar la carga del script, por lo que este seguiría sucediendo incluso después de que tu add-on sea apagado.

Empezando en Firefox 9, tu debes llamar al nuevo método nsIChromeFrameMessageManager.removeDelayedFrameScript() para parar la carga de tu script. Lo puedes hacer como en este ejemplo:

js
browser.messageManager.removeDelayedFrameScript(
  "chrome://myextension/content/somescript.js",
);

Cambios en la interfaz

  • La interfaz nsIURL ha cambiado un poco. El atributo nsIURL.param se ha removido, y el método nsIURLParser.parsePath() tiene dos argumentos menos de los que tenía.
  • Los métodos registerOpenPage() and unregisterOpenPage() han sido removidos de nsIBrowserHistory. Estos métodos han sido deprecados.
  • El método nsIEditorSpellCheck.saveDefaultDictionary() ha sido removido como parte de los ajustes soportados en la revisión ortográfica. También nsIEditorSpellCheck.updateCurrentDictionary() no tomará parámetros.
  • La interfaz nsIGlobalHistory3 ha sido removida. Su funcionalidad (si había alguna) era muy limitada en el uso de complementos, por lo tanto no debería afectar a nadie.
  • Muchos atributos especializados de propiedades en canales han sido incluidas en la base de la interfaz nsIChannel. Esto no debe afectar en nada a la compatibilidad, ya que esas interfaces heredaban igualmente de nsIChannel.

Cambios de preferencia

Las preferencia geo.wifi.* no tendrán valores por defecto, aunque son respetados si los tienen. Si tu código los lee sin tener en cuenta los casos donde estos no existen, vas a necesitar actualizar tu código para tener en cuenta la excepxión que es lanzada cuando no están presentes.

Cambios en XPConnect

nodePrincipal y baseURIObject han sido movidos de nsDOMClassInfo a XrayWrapper. Esto no debería afectar a demasiados complementos, ya que esto solo sería un problema si estos intentan accedar a esas propiedades en los objetos DOM Node desde scripts no privilegiados que han pedido privilegios XPConnect usando enablePrivilege().

Cambios en el DOM

  • El hace tiempo obsoleto Navigator.taintEnabled() ha sido removido. No ha sido útil por mucho tiempo, pero era comúnmente utilizado en la deteción de script en navegadores, ya que era algo específico de Netscape. Llamar a este método arrojará una excepción en Firefox 9.
  • Los manejadores de eventos ahora son implementados como un estándar de interfaz IDL. En muchos casos, esto no te afectará, pero existen excepciones (en-US).

Otros cambios que puedan afectar a la compatibilidad binaria

Estos cambios son notables, pudiendo afectar a los componentes binarios XPCOM. De todas formas, estos necesitarán ser hechos de nuevo, desde que esto es requerido en cada gran lanzamiento en Firefox, ya que pueden introducir errores en el momento de compilación.

  • La interfaz nsIDOMHTMLDocument tiena ahora un nuevo atributo script el cual implementa el atributo Document.scripts.
  • El método nsIJumpListShortcut.iconImageUri() ha sido añadido, para posibilitar el establecimiento de favicons al saltar a entradis de lista tipo URI en Windows.

Cambio en el tema

El atributo pending ha sido añadido al elemento tab. Si este atributo está presente, la pestaña está en el proceso de ser restaurada por el servicio de almacenamiento de sesión. Tú puedes usar esto para dar estilos a la pestaña miestras dura el proceso de restauración. No importa si el usuario ha activado en preferencia la opción "No cargar las pestañas hasta que sean seleccionadas", el atributo pending se establece en las pestañas hasta que se cargan.

Similarmente, las pestañas también ahora tienen un atributo unread. Esta propiedad, si esta presente, indica que la pestaña ha cambiado desde el último momento en que estuvo activa. Tú puedes usarlo para dar diferentes estilos a las pestañas cuando hayan cambiado desde la última vez que el usuario las abrió. Este atributo también está presente en las pestañas que no han sido vistas durante la sesión actual.