Firefox 6 pour les développeurs
===============================

1. Notes de versions pour développeurs
    1. Notes de versions pour développeurs
2. Modules complémentaires
    1. WebExtensions
    2. Thèmes
3. Fonctionnement interne de Firefox
    1. Le projet Mozilla
    2. Gecko
    3. Mode « headless »
    4. Modules de code Javascript
    5. JS-ctypes
    6. Le projet MathML
    7. MFBT
    8. Les projets Mozilla
    9. Le système de préférences
    10. Connexions WebIDL
    11. XPCOM
    12. XUL
4. Développer et contribuer
    1. Instructions de compilation
    2. Configuration des options de compilation (en-US)
    3. Fonctionnement de la compilation
    4. Code source de Mozilla
    5. Localisation
    6. Mercurial
    7. Assurance qualité
    8. Utilisation de code Mozilla dans d'autres projets

Firefox 6, basé sur Gecko 6.0, est sorti le 16 août 2011. Cet article fournit des informations à propos des changements qui affectent les développeurs dans cette version.

Changements pour les développeurs web
-------------------------------------

### HTML

* L'élément HTML5 `<progress>`, qui vous permet de créer une barre de progression, est maintenant supporté.
* L'analyse syntaxique de l'élément HTML5 `<track>`, qui spécifie les pistes de texte pour les éléments multimédias, est désormais supporté. Cet élément devrait apparaître dans les DOM, si son comportement n'est pas encore implémenté.
* L'élément `<iframe>` est désormais correctement coupé par son conteneur lorsque les coins du conteneur ont été arrondis à l'aide de la propriété `border-radius`.
* Les champs `<input>` des éléments `<form>` ne sont plus supportés par la propriété XUL `maxwidth`, cela n'a jamais été volontaire, et est contraire à la spécification HTML. Vous devriez plutôt utiliser l'attribut `size` pour définir la largeur maximum de champs de saisie.
* Les propriétés `fillStyle` et `strokeStyle` de `CanvasRenderingContext2d` (`<canvas>`) utilisées pour ignorer les déchets inclus après la définition d'une couleur valide, maintenant c'est traité comme une erreur. Par exemple, "rouge bleu" est une couleur utilisée pour être traitée comme du "rouge", alors qu'elle aurait dû être ignorée.
* La largeur et la hauteur des éléments `<canvas>` peuvent être correctement mis à 0px ; avant, lorsque vous essayez de le faire, elles se fixaient à 300px.
* le support de l'attribut HTML des données personnalisées (data-\*) a été ajouté. La propriété DOM `element.dataset` permet d'y accéder.
* Quand un élément `<textarea>` reçoit le focus, le point d'insertion de texte est désormais placé, par défaut, au début du texte plutôt qu'à la fin. Le comportement de Firefox est ainsi conforme avec les autres navigateurs.
### CSS

`-moz-text-decoration-color`

Cette nouvelle propriété vous permet de définir la couleur utilisée par les décorations du texte, comme le soulignement, le surlignement et le texte barré.

`-moz-text-decoration-line`

Cette nouvelle propriété vous permet de définir le type de décorations du texte ajoutée à un élément.

`-moz-text-decoration-style`

Cette nouvelle propriété vous permet de définir le style de décorations du texte, comme le soulignement, le surlignement et le texte barré. Les styles incluent les simples lignes, les lignes doubles, les lignes ondulées, les lignes pointillées, etc.

`-moz-hyphens`

Cette nouvelle propriété vous permet de contrôler la façon dont la césure des mots lors de retours à la ligne est gérée.

`-moz-orient` (en-US)

Une nouvelle propriété (pour l'instant spécifique à Mozilla) qui vous permet de contrôler l'orientation verticale ou horizontale de certains éléments (en particulier `<progress>`).

`::-moz-progress-bar`

Un pseudo-élément spécifique à Mozilla qui vous permet de définir le style de la zone d'un élément `<progress>` représentant la fraction d'une tâche.

#### Autres changements

* La propriété `@-moz-document` (en-US) a une nouvelle fonction `regexp()`, qui vous permet d'adapter l'URL du document à une regular expression.
* La propriété CSS `azimuth` n'est plus supportée, comme nous avons enlevé le peu de code que nous avions pour le groupe média `aural`. Il n'a jamais été implémenté de manière significative, donc il était plus logique de supprimer cette implémentation crufty pour le moment, au lieu d'essayer de le rafistoler.
* Avant, la pseudo-classe `:hover` n'était pas appliquée aux sélecteurs de classe quand on était en mode quirks, par exemple, `.someclass:hover` ne fonctionne pas. Cette bizarrerie a été enlevée.
* La pseudo-classe `:indeterminate` peut être appliquée à l'élément `<progress>`. Cela n'est pas un standard, mais nous espérons que ce soit adopté par les autres navigateurs car c'est utile.
* La valeur `-moz-win-exclude-glass` a été ajoutée à la propriété CSS `-moz-appearance` afin d'exclure des zones opaques dans les effets d'Aero Glass sur les systèmes Windows.
* Le bug 658949 change la façon dont le symbole dièse (#) est traité dans les données URI qui peut briser les feuilles de style CSS qui contiennent un tel symbole.
### DOM

Utilisation de media queries à partir de code (en-US)

Vous pouvez désormais tester le résultat d'une chaîne media query en programmant la méthode `window.matchMedia()` et l'interface `MediaQueryList` (en-US).

Evènements tactile (en-US)

Firefox 6 ajout le support du standard W3C sur les évènements tactile, cela facilite l'interprétation d'une ou plusieurs touches à la fois sur les surfaces tactiles comme les écrans tactiles et pavés tactiles.

Evènements server-sent

Les évènements server-sent permettent à une application Web de demander à un serveur pour envoyer des événements comme n'importe quel événement DOM localement créé.

* `navigator.securityPolicy`, qui a depuis longtemps retourné une chaîne vide, a simplement été supprimé.
* `BlobBuilder` est maintenant implémenté, même si pour l'instant il est préfixé (vous devez utiliser `MozBlobBuilder`).
* `document.height` et `document.width` ont été supprimées. bug 585877
* Les propriétés `entities` et `notations` de l'objet `DocumentType`, qui n'ont jamais été implémentées et renvoyées toujours `null`, ont été retirées, car elles ont également été enlevées de la spécification.
* L'interface `DOMConfiguration` et la propriété `document.domConfig` qu'elle utilisait ont été supprimées, elles n'ont jamais été supportées et ont depuis été retirées de la spécification DOM.
* L'évènement `hashchange` comprend désormais les champs `newURL` et `oldURL` (en-US).
* La méthode `abort()` de l'interface `FileReader` retourne maintenant une exception si aucun fichier n'est en cours de lecture lorqu'elle est utilisée.
* La méthode `window.postMessage()` utilise maintenant l'algorithme de clonage structuré (en-US) pour vous permettre de transmettre d'une fenêtre à une autre des objets JavaScript au lieu de chaînes.
* L'API `window.history` utilise désormais l'algorithme de clonage structuré (en-US) pour sérialiser des objets que vous passez avec les méthodes `pushState()` et `replaceState()`, ce qui vous permet d'utiliser des objets plus complexes (y compris ceux qui contiennent des références de graphes cycliques).
* Vous pouvez désormais détecter lorsqu'une impression a été lancée et a été achevée (en-US) grâce aux nouveaux évènements `beforeprint` et `afterprint`.
* La propriété `document.strictErrorChecking` a été supprimée, car elle n'a jamais été implémentée et a été retiré de la spécification DOM.
* La propriété standard `event.defaultPrevented` est maintenant supportée, vous devriez utiliser à la place la méthode non-standard `getPreventDefault()` pour détecter si `event.preventDefault()` a été appelée sur l'événement.
* La propriété `window.top` est désormais en lecture seule.
* DOM views, which we never documented, have been removed. This was a bit of implementation detail that was unnecessarily complicating things, so we got rid of it. If you notice this change, you're probably doing something wrong.
* La fonction `EventTarget` de la méthode `addEventListener()` est désormais facultative, car ça l'est dans WebKit (et aussi dans la dernière version de la spécification).
* La propriété `mozResponseArrayBuffer` de l'objet `XMLHttpRequest` a été remplacé par les propriétés `responseType` et `response`.
* La propriété `element.dataset` a été ajoutée à l'interface `HTMLElement` permettant d'accéder aux attributs globaux `data-*` global attributes d'un élément.
* L'interface `CustomEvent` a été implémentée. (voir bug 427537)
* Pour des raisons de sécurité, les URIs `data:` et `javascript:` n'héritent plus de l'environnment de sécurité de la page active lorsque l'utilisateur les saisit dans la barre d'adresse, mais un nouvel environnment de sécurité vide est créé. Par exemple, le script chargé en entrant l'URI `javascript:` dans la barre d'adresse n'a plus accès aux méthodes DOM et similaires. Ces URIs continueront à travailler comme avant lorsqu'elles sont utilisées par le script.
### JavaScript

* Avant, il était possible d'utiliser l'opérateur `new` sur plusieurs fonctions natives (eval, parseInt, Date.parse, etc) ce qui, conformément à la spécification, n'était pas autorisé. Désormais ce comportement n'est plus supporté. Cette façon d'utiliser l'opérateur `new` n'a jamais été officiellement supportée et était peu utilisée, donc il est peu probable que ce changement vous affecte.
* ECMAScript Harmony WeakMaps a été ajouté en tant que prototype.
### SVG

* L'attribut `pathLength` est désormais supporté.
* Les modèles SVG, les dégradés et les filtres fonctionnent désormais correctement lorsqu'ils sont chargés à partir de `data:` URLs.
### MathML

* L'implémentation de `<mstyle>` (en-US) a été corrigée.
### Accessibilité (ARIA)

* Un événement de changement d'état est à présent correctement envoyé lors d'un changement de la valeur de `aria-busy`.
* Un événement de changement d'attribut est à présent correctement envoyé lorsque survient `aria-sort`.
### Réseau

WebSockets

Pour Firefox 6, WebSockets a été mis à jour à la version 07 du protocole. De plus, l'objet `WebSocket` a été renommé en `MozWebSocket` pour l'empêcher d'être utilisé de façon incorrecte pour détecter la disponibilité des WebSockets sans préfixe.

* L'analyse de l'en-tête `Content-Disposition` a été fixée afin d'interpréter correctement les antislashs des caractères ASCII. Auparavant, il été remplacé par le caractère underscore ("\_").
* La valeur du champ du chemin de l'en-tête `Set-Cookie` est désormais correctement interprétée lors de l'utilisation de guillements, auparavant, ils étaient considérés comme faisant partie de la chaîne du chemin d'accès à la place d'être des délimiteurs. **Ce changement peut affecter la compatibilité avec certains sites web**, les auteurs doivent vérifier leur code.
* L'en-tête de la requête `Upgrade` est désormais supporté, vous pouvez demander la mise à niveau d'un canal vers un autre protocole HTTP en appelant `nsIHttpChannelInternal.HTTPUpgrade()`.
### Autres changements

* Le support des microrésumés a été enlevé, ils n'ont jamais été très utilisés, n'étaient pas très détectable et continuer leur support été d'apporter des améliorations à Places (favoris et historique) à l'architecture difficile.
* WebGL supporte maintenant l'extension `OES_texture_float`.
* Le nouvel outil Ardoise offre un endroit pratique pour expérimenter du code JavaScript.
* La méthode `console.trace()` a été ajouté à ConsoleAPI (voir bug 585956).
Changements pour les développeurs de Mozilla et de modules complémentaires
--------------------------------------------------------------------------

Pour des conseils utiles sur la mise à jour des extensions pour Firefox 6, voir Updating add-ons for Firefox 6.

**Note :** Firefox 6 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 méthode `openSafeFileOutputStream()` ouvre maintenant les fichiers avec l'indicateur de comportement `DEFER_OPEN` au lieu d'essayer de les ouvrir immédiatement.

#### XPCOMUtils.jsm

* La nouvelle méthode `importRelative()` vous permet de charger un module de code JavaScript depuis un chemin relatif au chemin d'un autre module de code JavaScript. Cela rend plus facile la construction de modules qui dépendent les uns des autres.
### XPCOM

* `nsCOMArray<T>` dispose désormais d'une méthode `RemoveObjectsAt()` pour enlever plusieurs objets à la fois à partir d'un tableau.
### Utilisation du DOM depuis le chrome

Utilisation de l'API DOM File dans du code chrome

Bien que vous avez toujours pu utiliser l'API DOM File à partir du code chrome, le constructeur `File` supporte désormais la spécification d'un chemin d'accès local lorsqu'il est utilisé depuis le chrome. De plus, vous pouvez également spécifier le fichier pour accéder à l'aide de l'API DOM File en utilisant un objet `nsIFile`.

### Changements dans les interfaces

* `nsINavHistoryQueryOptions` supporte désormais le tri par orde de frecency à l'aide des nouvelles constantes `SORT_BY_FRECENCY_ASCENDING` et `SORT_BY_FRECENCY_DESCENDING`.
* `nsIFilePicker` a un nouvel attribut `nsIFilePicker.addToRecentDocs`, qui vous permet d'indiquer que le fichier sélectionné doit être ajoutée à la liste "documents récents" de l'utilisateur si il y en a une. Cet attribut n'a aucun effet en mode navigation privée.
* Les méthodes de `nsINavBookmarkObserver` avec les paramètres ID d'un élément exigent désormais un GUID.
* `nsIPrefBranch.clearUserPref()` ne génère plus d'exception si la préférence spécifié n'existe pas ou n'a pas de valeur définie par l'utilisateur. Désormais, il ne fait rien.
* L'interface `nsIMemoryReporter` prend désormais en charge l'indication du type de mémoire qui est décrite (mappée, heap, ou autre).
* L'attribut `stateData` de `nsISHEntry` renvoi désormais à `nsIStructuredCloneContainer`.
* `nsIURI` a un nouvel attribut `nsIURI.ref`, qui renvoie la partie de référence (la partie après le "#") de l'URI. Il y a également de nouvelles méthodes `nsIURI.cloneIgnoringRef()` qui clone `nsIURI` sans l'élément ref et `nsIURI.equalsExceptRef()` qui se compare à un autre `nsIURI` en ignorant l'élément ref.

#### Nouvelles interfaces

`mozIAsyncFavicons`

Un nouveau service qui vous permet d'accéder au service favicon de façon asynchrone.

`nsIEventSource`

*Détails à venir.*

`nsIGSettingsCollection`

*Détails à venir.*

`nsIGSettingsService`

*Détails à venir.*

`nsIHttpUpgradeListener`

L'interface de rappel pour le traitement des demandes de mise à niveau HTTP via la méthode `nsIHttpChannelInternal.HTTPUpgrade()`.

`nsIStructuredCloneContainer`

Un conteneur pour les objets qui ont été sérialisé à l'aide de l'algorithme de clonage structuré (en-US).

`nsITelemetry`

Implémentation du support de la télémétrie permettant d'enregistrer des données de télémétrie pour être utilisé pour présenter des histogrammes à des fins de suivi des performances. Voir bug 649502 et bug 585196.

`nsITimedChannel`

Voir bug 576006.

`nsIWebSocketListener`

Voir bug 640003.

`nsIWebSocketProtocol`

Voir bug 640003.

#### Interfaces supprimées

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

* `nsIDOMDocumentEvent` (voir bug 655517)
* `nsIDOMDocumentTraversal` (voir bug 655514)
* `nsIDOMDocumentRange` (voir bug 655513)
* `IWeaveCrypto` (voir bug 651596)
* `nsIDOM3DocumentEvent` (voir bug 481863)
* `nsIDOMAbstractView`
* `nsILiveTitleNotificationSubject`
* `nsIPlugin` (voir bug 637253)
* `nsIPluginInstance` (voir bug 637253)
* `nsIHTMLEditRules` (voir bug 633750)
* `nsIXSLTProcessorObsolete` (voir bug 649534)
### Autres changements

Utilisation des préférences à partir du code d'application

Une nouvelle API statique est disponible pour accéder facilement aux préférences, ce n'est disponible que pour le code d'application et ne peut pas être utilisé par les modules complémentaires.

Voir aussi
----------

* 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