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 ne devrait 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, ce qui constitue une élévation de privilèges puissante pour une attaque de 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.

Document.defaultCharset est supprimé

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

Intent to Remove | Chromestatus Tracker | CRBug Issue

document.defaultCharset, obsolète dans Chrome 49, est une propriété en lecture seule qui renvoie l'encodage de caractères par défaut du système de l'utilisateur en fonction de ses paramètres régionaux. Il n'a pas été jugé 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.

Intent to Remove | Chromestatus Tracker | 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écharger des ressources telles que d'autres pages afin que, lorsqu'elles sont demandées par les utilisateurs, elles puissent 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 faible priorité. 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 permettant de forcer 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 sorte que les navigateurs devaient utiliser des points de terminaison non sécurisés en remplacement. 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 le logiciel de leur 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 pour 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.

Intent to Remove | Chromestatus Tracker | 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
        }
      }

Suppression des extensions multimédias chiffrées avec préfixe

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 les spécifications.

Intent to Remove | Chromestatus Tracker | 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.

Cela fait presque 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.

Intent to Remove | Chromestatus Tracker | 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().