Firefox 7 pour les développeurs
===============================

Firefox 7, basé sur Gecko 7.0, est sorti le 27 september 2011. Cet article fournit des informations à propos des changements qui affectent les développeurs dans cette version.

Changements pour les développeurs Web
-------------------------------------

### HTML

* La propriété `profile` de `HTMLHeadElement` (en-US) a été supprimée, cette propriété est obsolète depuis Gecko 2.0.
* Les propriétés `x` et `y` de `HTMLImageElement` ont été supprimées.
* Le paramètre `before` de la méthode `add()` de `HTMLSelectElement` est désormais optionnel.
* L'attribut `background` de l'élément `<body>` n'est plus résolu en tant qu'URI, ce qui est conforme à la spécification HTML courante.
* L'attribut `label` de l'élément `<option>` reflète désormais la valeur du contenu texte de l'élément si l'attribut n'est pas spécifié.

#### Canvas

* Dans le cadre du projet Azure, le Backend Azure Direct2D a été implémenté et améliore considérablement les performances des canvas 2D.
* La spécification de valeurs invalides lors de l'appel de `setTransform()`, `bezierCurveTo()` ou `arcTo()` ne renvoie plus d'exception, ces appels sont à présent ignorés silencieusement.
* La méthode `isPointInPath()` (en-US) considère maintenant correctement la matrice de transformation lors de la comparaison du point spécifié au tracé en cours.
* L'appel de `strokeRect()` avec une largeur et une hauteur de zéro n'a désormais plus aucun effet.
* L'appel de `drawImage()` (en-US) avec une largeur ou hauteur `<canvas>` de zéro lance désormais `INVALID_STATE_ERR`.
* L'appel de `drawImage()` (en-US) avec des coordonnées non-finies ne renvoie plus d'exception.
* La méthode `toDataURL()` accepte désormais un second paramètre pour contrôler la qualité JPEG.
* Le support des opérations non-standards `clear` et `over` de `globalCompositeOperation` a été enlevé.
* Les ombres sont désormais uniquement dessinées pour les opérations de composition de `source-over`.
* Vous pouvez désormais configurer la règle de remplissage utilisé par la toile en définissant l'attribute (en-US) `mozFillRule` au contexte.
* Le support des attributs expérimentaux `mozDash`, `mozDashOffset`, `mozCurrentTransform` et `mozCurrentTransformInverse` a été ajouté.
* Le support des méthodes non-standards `mozDrawText()`, `mozMeasureText()`, `mozPathText()` et `mozTextAlongPath()` a été retiré.
### CSS

* `text-overflow` est désormais supporté.
* La propriété `-moz-orient` (en-US) a été corrigée pour que les éléments `<progress>` qui sont orientés verticalement aient des dimensions par défaut appropriées.
### MathML

* XLink href a été rétabli et l'attribut `href` de MathML3 est maintenant supporté. Les développeurs sont encouragés à passer à la dernière syntaxe.
* Le support de l'attribut `voffset` sur les éléments `<mpadded> (en-US)` a été ajouté et le comportement de l'attribut `lspace` a été fixé.
* L'élément de premier niveau `<math>` accepte maintenant tous les atributs de l'élément `<mstyle> (en-US)`.
* Le support des polices Asana Math a été ajouté.
* L'épaisseur des lignes `medium` des barres de fraction des éléments `<mfrac>` a été corrigé pour correspondre à l'épaisseur par défaut.
* Les noms des espaces négatifs (en-US) sont maintenant supportés.
### DOM

* Les méthodes non-standards `getAsBinary()`, `getAsDataURL()` et `getAsText()` de l'interface `File` ont été supprimées ainsi que les propriétés non-standards `fileName` et `fileSize`.
* L'interface `FormData` (en-US) ne signale plus le nom du fichier comme une chaîne vide lors de l'envoi l'en-tête HTTP `Content-Disposition` si les données ont été définies à l'aide de `Blob`. Cela corrige les erreurs qui avaient lieu sur certains serveurs.
* L'attribut `element.dir` renvoie désormais toujours son résultat en minuscules, comme l'exige la spécification HTML.
* la méthode `readAsArrayBuffer()` de `FileReader` est maintenant implémentée.
* `document.createEntityReference` a été retiré. Elle n'a jamais été correctement implémentée et n'est pas intégrée dans la plupart des autres navigateurs.
* `document.normalizeDocument` a été retiré. Utilisez `Node.normalize` à la place.
* `DOMTokenList.item` renvoie désormais `undefined` si `index` est en dehors des limites, auparavant il renvoyé `null`.
* `Node.getFeature` a été supprimé.
* Les interfaces `HTMLInsElement` et `HTMLDelElement` ont été retirées, depuis que les éléments `<ins>` et `<del>` utilisent l'interface `HTMLModElement` (en-US).
* Dans le but d'être conforme à la prochaine spécification DOM4 où `Attr` n'hérite plus de `Node` (il l'a fait dans les DOM Core 1, 2 and 3), beaucoup de propriétés et méthodes de `Node` sur l'interface `Attr` sont maintenant des rapports d'alertes (en-US) que nous nous efforçons de retirer dans une version ultérieure.
* Ajout du support des propriétés `window.ondeviceorientation` (en-US) et `window.ondevicemotion` (en-US) sur les objets `window`.
* `window.resizeTo` (en-US), `window.resizeBy`, `window.moveTo` (en-US) et `window.moveBy` (en-US) ne s'appliquent plus à la fenêtre principale.
### JavaScript

* La propriété `Function.arity` a été enlevée, utilisez `Function.length` (en-US) à la place.
### WebSockets

* la préférence `network.websocket.max-connections` est utilisée pour déterminer le nombre maximum de connexions à WebSocket qui peuvent être ouvertes en même temps. La valeur par défaut est 200.
* La version 8 du protocole WebSocket (comme spécifié par IETF draft 10) est maintenant utilisé à la place de la version 7 du protocole utilisé par Firefox 6.
* L'API WebSocket est maintenant disponible sur Firefox Mobile.
### Console API

* Les messages enregistrés avec `console.log` alors que la console web n'est pas ouverte sont toujours enregistrés, bien qu'ils ne s'affichent pas lorsque la console web est ouverte.
### Web timing

* Première implémentation de la spécification Navigation Timing qui fournit des données pouvant être utilisées pour mesurer les performances d'un site.
### XML

* En plus de la précédente prise en charge de `text/xsl`, les feuilles de style XSLT peuvent désormais utiliser les médias Internet officiels (MIME) de type `application/xslt+xml` (dans la feuille de style d'instruction de traitement ou le champ d'en-tête HTTP Link).
Changements pour les développeurs de Mozilla et de modules complémentaires
--------------------------------------------------------------------------

Ces changements affectent les développeurs d'extensions ainsi que les développeurs qui travaillent sur ou avec le code de Mozilla lui-même. Les developpeurs d'extensions doivent voir Updating extensions for Firefox 7 pour plus d'informations.

**Note :** Firefox 7 requiert que les composants binaires soient recompilés, comme pour toutes les versions majeures de Firefox. Pour plus de détails, voir Interfaces Binaires.

### Modules de code JavaScript

#### FileUtils.jsm

* la nouvelle méthode `openFileOutputStream()` ouvre un flux de sortie du fichier, la variante non-sécurisée, pour écrire dedans.

#### AddonManager.jsm

* Le gestionnaire de modules complémentaires a de nouvelles méthodes pour gérer les listes d'extensions qui ont changé durant le démarrage des applications : `AddonManager.addStarupChange()`, `AddonManager.removeStartupChange()` et `AddonManager.getStartupChanges()`.
* .
### XUL

* Les éléments `<tree>` peuvent désormais conserver l'état des triangles d'affichage si les nœuds référencés par les `datasources` ont tous des ID uniques spécifiés par les attributs "id".
* Les éléments `<panel>` peuvent désormais être configurés pour permettre à l'utilisateur de les faire glisser en cliquant n'importe où sur leur arrière-plan avec le nouvel attribut `backdrag`.
### XPCOM

* La nouvelle méthode `Components.utils.schedulePreciseGC()` vous permet de programmer un cycle approfondi de collection de garbage de se produire à un moment donné lorsqu'aucun code JavaScript n'est exécuté, un rappel est exécuté une fois la collecte terminée.
* La méthode `Components.utils.unload()` vous permet de décharger les modules de code JavaScript déjà chargés en appelant `Components.utils.load()`.
### Rapporteur de mémoire

Ajout du support pour le multi-reporters, c'est le rapporteur de mémoire qui rassemble des données sur demande et effectue un rappel pour chaque résultat généré. Voir `nsIMemoryMultiReporter` et `nsIMemoryMultiReporterCallback` pour les interfaces nécessaires, ainsi que les méthodes `nsIMemoryReporterManager.registerMultiReporter()` et `nsIMemoryReporterManager.unregisterMultiReporter()`.

### Changements de l'expérience utilisateur

* Les options des extensions peuvent désormais être être affichées à l'intérieur du gestionnaire de modules complémentaires.
* La destination des téléchargements est désormais gardée en mémoire sur une base site par site. Ces données peuvent être accessibles par DownloadLastDir.jsm.
### Changements dans le système de compilation

* L'API d'intégration d'ActiveX n'est plus compilée et son support a été retiré du système de compilation. Des interfaces ont également été supprimées, voir Interfaces supprimées.
* Vous n'avez plus besoin de préciser `-Zc:wchar_t-` lors de la compilation sous Windows. Pour plus de détails, voir la documentation sur la compilation.
### Changements dans les interfaces

* `nsISocketTransport` offre désormais un nouveau drapeau de connexion : `DISABLE_IPV6`, cela entraîne des tentatives de connexion uniquement aux adresses IPv4, en ignorant toutes les adresses IPv6 disponibles. De plus, `nsIDNSService` offre désormais un nouveau drapeau de résolution : `RESOLVE_DISABLE_IPV6`, ce qui entraîne un résolution des noms de domaine en ne tenant compte que des hôtes IPv4 et en ignorant toutes les adresses IPv6 disponibles. Ces changements permettent d'implémenter la stratégie "happy eyeballs" pour améliorer le temps de réponse lors d'une tentative de connexion sur les hôtes qui supportent à la fois IPv4 et IPv6 (en particulier ceux qui ont brisé la connectivité IPv6).
* `inIDOMUtils` a deux nouvelles méthodes, `inIDOMUtils.getChildrenForNode()` qui renvoie une liste des nœuds enfants d'un noeud et `inIDOMUtils.getUsedFontFaces()` qui renvoie la liste des police de caractères utilisées dans une gamme.
* L'interface `nsIMarkupDocumentViewer_MOZILLA_2_0_BRANCH` a été intégrée dans l'interface `nsIMarkupDocumentViewer`.
* L'interface `nsIDOMWindow2` a été intégrée dans l'interface `nsIDOMWindow`.
* L'interface `nsIDOMWindow_2_0_BRANCH` a été intégrée dans l'interface `nsIDOMWindowInternal`.
* Les méthodes `nsINavHistoryObserver` avec des paramètres d'URI exigent désormais un GUID.
* L'interface `nsISHistory_2_0_BRANCH` a été intégrée dans l'interface `nsISHistory`.
* `nsITelemetry` a une nouvelle méthode, `nsITelemetry.getHistogramById()` qui retourne un histogramme par son ID, et un nouvel attribut `canRecord` qui, lorsqu'il est défini sur `false` désactive l'enregistrement des statistiques de télémétrie. Les statistiques de télémétrie ne sont plus enregistrées lorsque l'on est en mode de navigation privée. (voir bug Firefox 661574 et bug Firefox 661573)
 Les histogrammes de télémétrie définis avec `nsITelemetry.newHistogram()` ne seront pas rapportés dans le ping de télémétrie.
* L'interface `nsIMemoryReporter` a été sensiblement modifiée, si vous l'utilisez, vous devez faire quelques ajustements à votre code.
* Les en-têtes `nsIXMLHttpRequest` fixées par `nsIXMLHttpRequest.setRequestHeader()` sont envoyées à la demande lorsque l'on suit une redirection. Auparavant, ces en-têtes n'auraient pas été envoyées.
* `nsIDocShell` a un nouvel attribut `allowWindowControl`. Si il est `true`, le contenu du docshell est autorisé à contrôler la fenêtre (c'est-à-dire la déplacer ou la redimensionner).
* L'interface `nsIThreadInternal2` a été intégrée dans l'interface `nsIThreadInternal`.

#### Nouvelles interfaces

`nsIDOMFontFace`

Décrit une seule police de caractères.

`nsIDOMFontFaceList`

Décrit une liste de polices de caractères, chacune représentée par `nsIDOMFontFace`.

#### Interfaces supprimées

Les interfaces suivantes ont été supprimées car elles n'étaient plus indispensables :

* `nsIDOM3Attr`
* `nsIDOM3Node`
* `nsIDOM3TypeInfo`
* `nsIDOM3Text`
* `nsIDOMDocumentStyle`
* `nsIDOMNSDocument`
* `nsIDOMNSFeatureFactory`
* `nsIDOMNSHTMLDocument`
* `nsIDOMNSHTMLFormElement`
* `nsIDOMNSHTMLHRElement`
* `nsIDOMNSHTMLTextAreaElement`

Les interfaces suivantes ont été supprimées dans le cadre du retrait de l'API ActiveX :

* `DITestScriptHelper`
* `DWebBrowserEvents`
* `DWebBrowserEvents2`
* `IDispatch`
* `IMozControlBridge`
* `IMozPluginHostCtrl`
* `IWebBrowser`
* `IWebBrowser2`
* `IWebBrowserApp`
* `IXMLDocument`
* `IXMLElement`
* `IXMLElementCollection`
* `IXMLError`
* `nsIActiveXSecurityPolicy`
* `nsIDispatchSupport`
* `nsIMozAxPlugin`
* `nsIScriptEventHandler`
* `nsIScriptEventManager`
### Autres changements

* La structure de la fenêtre de la bibliothèque (`places.xul`) a été nettoyée. Cela pourrait casser les extensions et les thèmes
* L'apparence de la fenêtre d'aperçu avant impression a été modernisé et les auteurs de thèmes sont invités à avoir le même style en utilisant les pseudo-éléments CSS `::-moz-page`, `::-moz-page-sequence` et `::-moz-scrolled-page-sequence`
Voir aussi
----------

* Firefox 6 pour les développeurs
* Firefox 5 pour les développeurs
* Firefox 4 pour les développeurs
* Firefox 3.6 pour les développeurs
* Firefox 3.5 pour les développeurs
* Firefox 3 pour les développeurs
* Firefox 2 pour les développeurs
* Firefox 1.5 pour les développeurs