Abandon et suppression d'API dans Chrome 50

Dans presque toutes les versions de Chrome, nous constatons un nombre important de mises à jour et d'améliorations du produit, de ses performances et des fonctionnalités de la plate-forme Web.

Chrome 50 (date de sortie estimée de la version bêta: du 10 au 17 mars) apporte plusieurs modifications. Cette liste est susceptible d'être modifiée à tout moment.

Abandon d'AppCache dans les contextes non sécurisés

Résumé: Pour limiter les scripts intersites, nous abandonnons AppCache sur les origines non sécurisées. Dans Chrome 52, il devrait ne fonctionner que sur les origines diffusant du contenu via HTTPS.

Intent to Remove | Chromestatus Tracker | Bug Chromium

AppCache est une fonctionnalité qui permet un accès hors connexion et persistant à une origine. Il s'agit d'une puissante élévation de privilèges en cas d'attaque par script intersites. Dans le cadre d'un effort plus vaste visant à supprimer les fonctionnalités puissantes sur les origines non sécurisées.

Chrome supprime ce vecteur d'attaque en ne l'autorisant que via HTTPS. Nous allons abandonner la prise en charge d'HTTP dans Chrome 50 et prévoyons de la supprimer complètement dans Chrome 52.

Suppression de Document.defaultCharset

Résumé: document.defaultCharset a été supprimé pour améliorer la conformité aux spécifications.

Intention de suppression | Chromestatus Tracker | Problème CRBug

document.defaultCharset, obsolète dans Chrome 49, est une propriété en lecture seule qui renvoie l'encodage des caractères par défaut du système de l'utilisateur en fonction de ses paramètres régionaux. Il n'a pas été utile de conserver cette valeur en raison de la façon dont les navigateurs utilisent les informations d'encodage de caractères dans la réponse HTTP ou dans la balise meta intégrée à la page.

Utilisez plutôt document.characterSet pour obtenir la première valeur spécifiée dans l'en-tête HTTP. Si ce n'est pas le cas, vous obtiendrez la valeur spécifiée dans l'attribut charset de l'élément <meta> (par exemple, <meta charset="utf-8">). Enfin, si aucun de ces éléments n'est disponible, document.characterSet correspondra au paramètre système de l'utilisateur.

Pour en savoir plus sur le raisonnement qui nous a conduits à ne pas spécifier cela, consultez ce problème GitHub.

Résumé: Suppression de la prise en charge de la valeur subresource pour l'attribut rel de HTMLLinkElement.

Projet de suppression | Outil de suivi de l'état de Chrome | Bug Chromium

L'objectif de l'attribut subresource sur <link> était de précharger une ressource pendant le temps d'inactivité d'un navigateur. Une fois qu'un navigateur a téléchargé une page, il peut prétélécharger des ressources telles que d'autres pages. Ainsi, lorsqu'elles sont demandées par les utilisateurs, elles peuvent simplement être récupérées à partir du cache du navigateur.

L'attribut subresource présentait plusieurs problèmes. Tout d'abord, elle n'a jamais fonctionné comme prévu. Les ressources référencées ont été téléchargées avec une priorité faible. L'attribut n'a jamais été implémenté dans un autre navigateur que Chrome. L'implémentation de Chrome comportait un bug qui entraînait le téléchargement de ressources deux fois.

Les développeurs qui souhaitent améliorer l'expérience utilisateur en préchargeant du contenu ont plusieurs options, la plus personnalisable étant de créer un nœud de calcul de service pour profiter du préchargement et de l'API Caches. D'autres solutions incluent d'autres valeurs pour l'attribut rel, y compris preconnect, prefetch, preload et prerender. Certaines de ces options sont expérimentales et ne sont pas forcément compatibles avec tous les appareils.

Suppression du remplacement de la version TLS non sécurisée

Résumé: suppression d'un mécanisme forçant les serveurs à renvoyer des données à l'aide de versions moins sécurisées ou non sécurisées de TLS.

Intent to Remove | Chromestatus Tracker | Bug Chromium

Transport Layer Security (TLS) est compatible avec un mécanisme de négociation des versions, ce qui permet d'introduire de nouvelles versions de TLS sans endommager la compatibilité. Certains serveurs l'ont implémenté de telle sorte que les navigateurs ont été obligés d'utiliser des points de terminaison non sécurisés comme solution de secours. Par conséquent, les pirates informatiques peuvent forcer n'importe quel site Web, et pas seulement ceux qui sont mal configurés, à négocier des versions plus faibles de TLS.

Les sites concernés ne pourront pas se connecter à ERR_SSL_FALLBACK_BEYOND_MINIMUM_VERSION. Les administrateurs doivent s'assurer que leur logiciel serveur est à jour. Si le problème persiste, contactez le fournisseur du logiciel de serveur pour savoir si une solution est disponible.

Suppression de KeyboardEvent.prototype.keyLocation

Résumé: supprimez un alias inutile de l'attribut Keyboard.prototype.location.

Intent to Remove | Chromestatus Tracker | Bug Chromium

Cet attribut est simplement un alias de l'attribut Keyboard.prototype.location, qui permet de distinguer les touches situées à plusieurs endroits sur un clavier. Par exemple, les deux attributs permettent aux développeurs de distinguer les deux touches Enter sur un clavier étendu.

Gestionnaires d'erreur et de réussite requis dans les méthodes RTCPeerConnection

Résumé: Les méthodes RTCPeerConnection createOffer() et createAnswer() de WebRTC nécessitent désormais un gestionnaire d'erreurs ainsi qu'un gestionnaire de réussite. Auparavant, il était possible d'appeler ces méthodes avec un seul gestionnaire de réussite. Cette utilisation est obsolète.

Intent to Remove | Chromestatus Tracker | Bug Chromium

Dans Chrome 49, nous avons ajouté un avertissement si vous appelez setLocalDescription() ou setRemoteDescription() sans fournir de gestionnaire d'erreurs. L'argument du gestionnaire d'erreurs est obligatoire à partir de Chrome 50.

Cela permet de préparer l'introduction de promesses sur ces méthodes, comme l'exige la spécification WebRTC.

Voici un exemple tiré de la démo RTCPeerConnection WebRTC (main.js, ligne 126):

    function onCreateOfferSuccess(desc) {
      pc1.setLocalDescription(desc, function() {
         onSetLocalSuccess(pc1);
      }, onSetSessionDescriptionError);
      pc2.setRemoteDescription(desc, function() {
        onSetRemoteSuccess(pc2);
      }, onSetSessionDescriptionError);
      pc2.createAnswer(onCreateAnswerSuccess, onCreateSessionDescriptionError);
    }

Notez que setLocalDescription() et setRemoteDescription() disposent d'un gestionnaire d'erreurs. Les anciens navigateurs qui n'attendent qu'un gestionnaire de réussite ignorent simplement l'argument du gestionnaire d'erreur s'il est présent. L'appel de ce code dans un ancien navigateur ne génère pas d'exception.

En général, pour les applications WebRTC de production, nous vous recommandons d'utiliser adapter.js, un shim géré par le projet WebRTC, pour protéger les applications des modifications de spécifications et des différences de préfixe.

XMLHttpRequestProgressEvent n'est plus pris en charge

Résumé: L'interface XMLHttpRequestProgressEvent sera supprimée, ainsi que les attributs position et totalSize.

Projet de suppression | Outil de suivi de l'état de Chrome | Bug Chromium

Cet événement existait pour prendre en charge les propriétés de compatibilité Gecko position et totalSize. La prise en charge des trois a été abandonnée dans Mozilla 22, et la fonctionnalité a été remplacée depuis longtemps par ProgressEvent.

     var progressBar = document.getElementById("p"),
          client = new XMLHttpRequest()
      client.open("GET", "magical-unicorns")
      client.onprogress = function(pe) {
        if(pe.lengthComputable) {
          progressBar.max = pe.total
          progressBar.value = pe.loaded
        }
      }

Supprimer les extensions multimédias chiffrées préfixées

Résumé: les extensions multimédias chiffrées avec préfixe ont été supprimées au profit d'un remplacement sans préfixe basé sur des spécifications.

Projet de suppression | Outil de suivi de l'état de Chrome | Bug Chromium

Dans Chrome 42, nous avons publié une version non préfixée des extensions multimédias chiffrées basée sur les spécifications. Cette API permet de découvrir, de sélectionner et d'interagir avec des systèmes de gestion des droits numériques à utiliser avec HTMLMediaElement.

C'était il y a près d'un an. Et comme la version sans préfixe offre plus de fonctionnalités que la version avec préfixe, il est temps de supprimer la version avec préfixe de l'API.

Suppression de la prise en charge des propriétés SVGElement.offset

Résumé: Les propriétés de décalage pour SVGElement ont été abandonnées au profit des propriétés les plus largement compatibles sur HTMLElement.

Projet de suppression | Outil de suivi de l'état de Chrome | Bug Chromium

Les propriétés de décalage sont depuis longtemps compatibles avec HTMLElement et SVGElement. Toutefois, Gecko et Edge ne les acceptent que sur HTMLElement. Pour améliorer la cohérence entre les navigateurs, ces propriétés ont été abandonnées dans Chrome 48 et sont maintenant supprimées.

Bien que des propriétés équivalentes fassent partie de HTMLElement, les développeurs à la recherche d'une alternative peuvent également utiliser getBoundingClientRect().