Firefox 9 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 9, basé sur Gecko 9.0, est sorti le 20 décembre 2011 sur Windows. La version 9.0.1, qui corrige un problème de plantage découvert au dernier moment, est sortie le 21 décembre 2011, sur Mac et Linux.

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

### HTML

* L'attribut `value` de `<li>` peut désormais être négatif comme c'est indiqué dans HTML5. Auparavant les valeurs négatives été converties à 0.
* Vous pouvez désormais specifier le début et la fin du temps d'un média (en-US) dans l'URI en utilisant les éléments `<audio>` et `<video>`.
* Les éléments `<input>` et `<textarea>` respectent désormais la valeur de l'attribut `lang` (en-US) lors de l'appel du correcteur orthographique.
* Firefox sur Android permet désormais la prise de photo avec le téléphone sans devoir quitter le navigateur lorsque l'élément `<input>` est utilisé avec `type="file"` et `accept="image/*"`.
* Les images ICO de style PNG de Windows Vista sont à présent supportée.
* Les images dessinées qui utilisent l'attribut `crossorigin` pour demander l'accès à CORS n'altère plus le canvas quand CORS est accordé.
* La valeur de l'attribut `rowspan` peut désormais aller jusqu'à 65 534, contre 8190 avant.
### CSS

* La propriété `font-stretch` est à présent supportée.
* La propriété `columns` est à présent supportée, avec le préfixe `-moz`. C'est un raccourci des propriétés suivantes : `column-width` et `column-count`.
* Quand une feuille de style incluse à l'aide de l'élément `<link>` a été entièrement chargée et analysée (mais pas encore appliquée au document), l'`load` event est désormais déclenché. En outre, si une erreur survient durant le traitement d'une feuille de style, l'événement `error` est déclenché.
* Vous pouvez à présent spécifier les paramètres de débordement pour les bords, à la fois à gauche et à droite, du contenu en utilisant une nouvelle syntaxe de deux valeurs pour `text-overflow`.
### DOM

Utilisation du mode plein écran (en-US)

La nouvelle API pour le plein écran offre un moyen de présenter le contenu en utilisant la totalité de l'écran, sans l'interface du navigateur. C'est très bien pour les vidéos et les jeux. Cette API est encore expérimentale et préfixée.

* La méthode `Node.contains()` est désormais implémentée, elle vous permet de déterminer si un nœud donné est un descendant d'un autre noeud.
* L'attribut `Node.parentElement` a été implémenté, cela renvoie l'`Element` parent d'un noeud DOM, ou `null` si le parent n'est pas un élément.
* Les évènements de composition (en-US) du DOM Level 3 sont à présent supportés.
* L'attribut `Document.scripts` a été implémenté, il renvoie `HTMLCollection` de tous les éléments `<script>` du document.
* la méthode `Document.queryCommandSupported()` a été implémentée.
* L'ensemble des événements qui peuvent être écoutés sur les éléments `<body>` a été révisé pour correspondre à la dernière version de la spécification HTML5. La liste des événements dans la référence d'événements DOM reflète ceux qui peuvent être écoutés sur les `<body>`.
* L'évènement `readystatechange` est désormais uniquement tiré sur le document, comme prévu.
* Les gestionnaires d'événements sont désormais implémentés comme des interfaces IDL standard. Dans la plupart des cas, cela n'affectera pas le contenu, mais il y a des exceptions (en-US).
* Un nouveau type de réponse, "`moz-json`", a été ajouté à `XMLHttpRequest`, laissant `XMLHttpRequest` analyser automatiquement les chaînes JSON, quand vous demandez ce type, une chaîne JSON est analysé, afin que la valeur de la propriété `response` est la résultante de l'objet JavaScript.
* Les évènements "progress" de `XMLHttpRequest` (en-US) sont à présent correctement envoyé pour chaque bloc de données reçu, dans le passé il était possible pour que le dernier bloc de données reçu ne déclenche pas un évènement "progress". Maintenant, vous pouvez suivre uniquement la progression des évènements "progress", au lieu d'avoir également à surveiller les évènements "load" pour détecter la réception du dernier bloc de données.
* Dans le passé, l'appel de `addEventListener()` avec un écouteur `null` renvoyait une exception. maintenant il ne retourne plus d'erreur et est sans effet.
* La nouvelle propriété `navigator.doNotTrack` permet à votre contenu de déterminer facilement si l'utilisateur a activé la préférence do-no-track, si la valeur est "oui", vous ne devez pas suivre l'utilisateur.
* Les objets `Range` et `Selection` se comportent désormais selon leurs spécifications lorsque `splitText()` et `normalize()` sont appelés.
* La valeur de `Node.ownerDocument` pour les noeuds de doctype est désormais le document sur lequel `createDocumentType()` (en-US) a été appelé pour créer le noeud, au lieu de `null`.
* `window.navigator.taintEnabled` a été retiré, il n'est plus supporté depuis plusieurs années.
### Workers

* Les workers implémentés dans les URLs blob étaient cassés sous Firefox 8, et sont de nouveaux disponibles à partir de Firefox 9.
### WebGL

* Dans le cadre de WebGL les attributs `drawingBufferWidth` et `drawingBufferHeight` sont à présent supportés.
### MathML

* La valeur non-standard `restyle` pour les attributs `actiontype` des éléments `<maction>` a été retirée.
* Alors qu'il n'était pas encore supporté, l'utilisation de l'élément `<mlabeledtr>` ne casse plus complètement le rendu. Voir le bug 689641 pour l'avancement du support de cet élément.
### Réseau

* Vous pouvez désormais envoyer le contenu de tableaux JavaScript typés (en-US) (c'est, le contenu d'un objet `ArrayBuffer` (en-US)) en utilisant XMLHttpRequest (en-US).
* Les connexions WebSocket permettent désormais des non-caractères autres que UTF-8 des trames de données devant être reçues, au lieu d'échouer.
* L'en-tête HTTP `Accept` pour les réquêtes XSLT a été changée pour "\*/\*" pour simplifier. Puisque l'extraction d'XSLT est toujours retombée à "\* / \*", il était logique de faire la simplification.
* Les tentatives faites par un serveur pour utiliser les codes de réponses `301 Moved Permanently` ou `307 Temporary Redirect` pour rediriger l'utilisateur vers une URI `javascript:` donne désormais lieu à l'erreur "connexion incorrecte" au lieu de vraiment rediriger. Cela évite certaines attaques de type cross-site scripting.
* Le contenu servi par `Content-Disposition` vide avait déjà été traité comme si `Content-Disposition` était attachment", ce qui ne fonctionnait pas toujours comme prévu. C'est désormais traité comme si `Content-Disposition` était "inline".
* La taille maximale par défaut d'un élément dans le cache disque a été augmentée à 50 Mo, auparavant, seuls les éléments jusqu'à 5 Mo étaient mis en cache.
### Outils de développement

* La console Web supporte désormais les chaînes de substitutions basiques dans ses méthodes d'exploitation.
* Vous pouvez désormais créer des blocs imbriqués pour la sortie dans la console web, pour faciliter la lecture.
Changements pour les développeurs de Mozilla et de modules complémentaires
--------------------------------------------------------------------------

Voir Updating add-ons for Firefox 9 pour un aperçu des modifications que vous devriez apporter pour rendre vos extensions compatibles avec Firefox 9.

### XUL

* L'élément `tab` dispose à présent d'un attribut `pending`, dont la valeur est `true`, lorsque l'onglet est en train d'être rétabli par le service de sauvegarde de session. Il peut être utilisé pour le style de l'onglet dans les thèmes. L'attribut n'est pas présent sur les onglets qui ne sont pas en attente.
* L'élément `tab` dispose à présent d'un attribut `unread`, dont la valeur est `true`, lorsque l'onglet a changé depuis la dernière fois qu'il était actif ou si il n'a pas été sélectionné depuis que la session en cours a commencé. L'attribut n'est pas présent sur les onglets qui ne sont pas lus.
* Vous pouvez désormais utiliser `panel` comme une image glissée pour les opérations DOM de glisser-déposer. Cela vous permet d'utiliser l'API standard drag & drop pour glisser et déposer du contenu XUL (en-US).
* La méthode `appendNotification` de l'élément `notificationbox` vous permet désormais de spécifier un rappel qui est appelé pour des événements intéressants liés à la zone de notification. Actuellement, le seul événement est "removed", qui vous indique la zone qui a été retirée de sa fenêtre.
### Changements dans le module de code JavaScript

* `FileUtils.jsm` dispose désormais du constructeur `File` qui renvoie l'objet `nsIFile` représentant un fichier spécifié par son chemin d'accès.
### Changement dans le service

* Le service de préférence du contenu gère désormais le mode de navigation privée (voir bug 679784).
### NSPR

* NSPR dispose désormais d'un module "append", qui vous permet d'ajouter de nouvelles données à la fin d'un journal existant.
### Changements dans les interfaces

#### Interface supprimée

* `nsIGlobalHistory3` a été enlevée lors de la réduction de Places et du code DocShell.

#### Divers changements dans les interfaces

* L'interface `nsISound` a une nouvelle constante `EVENT_EDITOR_MAX_LEN`. Elle permet de lire le son du système quand plus de caractères que le maximum autorisé sont entrés dans un champ de texte. Actuellement, ce n'est utilisé que sous Windows.
* L'interface `nsIScriptError2` a de nouvelles propriétés, `timeStamp` et `innerWindowID` ; en plus, la méthode `initWithWindowID()` prend désormais un ID de fenêtre intérieure au lieu d'un ID de fenêtre extérieure.
* L'attribut `nsIBidiKeyboard.haveBidiKeyboards` a été ajouté, il vous permet de vérifier que le système a au moins un clavier installé dans chaque sens : de gauche à droite ou de droite à gauche.
* Le nouvel attribut `nsIEditor.isSelectionEditable` vous permet de déterminer si l'ancre de sélection en cours est modifiable. Cela permet de supporter les cas où seules certaines parties du document sont modifiables, en vous permettant de voir si la sélection actuelle est dans une partie modifiable.
* Les méthodes `nsIBrowserHistory.registerOpenPage()` et `nsIBrowserHistory.unregisterOpenPage()` ont été supprimées dans le cadre d'une refonte des performances dans le système Places. A la place, vous pouvez utiliser les méthodes correspondantes de `mozIPlacesAutoComplete`.
* La méthode `nsIDOMWindowUtils.wrapDOMFile()` a été ajoutée, elle retourne un objet DOM `File` pour un `nsIFile` donné.
* La méthode `nsIChromeFrameMessageManager.removeDelayedFrameScript()` a été ajouté pour supporter la suppression des scripts de chargement différé. Les extensions amorcées doivent l'utilisée, lors de l'arrêt, pour éliminer tous les scripts chargés à l'aide de `nsIChromeFrameMessageManager.loadFrameScript()` avec l'indicateur de charge différé. Cela expose des extensions comme `browser.messageManager.removeDelayedFrameScript()`.
* L'interface `nsIAppStartup` a un nouvel attribut `interrupted`, qui vous permet de savoir si la procédure de démarrage a été interrompue à tout moment par une commande interactive invitée. Cela peut être utile, par exemple, lors de la synchronisation du démarrage pendant l'évaluation des performances, pour être en mesure de déposer le nombre de sessions qui ont été interrompues.
* L'interface `nsIEditorSpellCheck` a été revue pour supporter le choix des sites de dictionnaires pour la vérification orthographique.
### Parseur IDL

Le parseur IDL ne supporte plus la notion de pointeurs unique qui n'a jamais été entièrement implémentée.

### Changements dans le système de compilation

* L'option `--enable-application=standalone` pour la compilation autonome d'XPConnect a été retirée, elle n'a pas été utilisée depuis 2007.
* Le support de la compilation autonome de Necko et Transformiix XSLT a été retiré, vous ne pouvez plus utilisez `--enable-application=network` ou `--enable-application=content/xslt`.
* Le système de compilation cherche désormais `.mozconfig` à `$topsrcdir/.mozconfig` ou `$topsrcdir/mozconfig`, et pas ailleurs, sauf si vous remplacez le chemin `.mozconfig` en utilisant la variable d'environnement `MOZCONFIG`.
* L'utilitaire `xpidl` a été remplacé dans le SDK avec pyxpidl.
### Autres changements

* Le correcteur orthographique n'a plus la limite de 130 caractères sur la longueur des mots à vérifier. Cette limite était précédemment en place pour éviter les plantages qui sont survenus dans le correcteur orthographique, mais les bogues sous-jacents ont depuis été corrigés.
* Vous pouvez désormais enregistrer des composants pour ajouter des fonctionnalités à l'objet [`window.navigator`](/fr/docs/Web/API/Window/navigator "Renvoie une référence à l'objet
 navigator
 , qui peut être interrogé pour obtenir des informations concernant l'application exécutant le script.") à l'aide de la catégorie "JavaScript-navigator-property". Voir Ajout des APIs de l'objet navigator pour plus de détails et des exemples.
Voir aussi
----------

* Firefox 8 pour les développeurs
* Firefox 7 pour les développeurs
* 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