Abandon et suppression d'API dans Chrome 50

Dans presque chaque version de Chrome, un grand nombre de mises à jour et d'améliorations ont été apportées au produit, à ses performances et aux fonctionnalités de la plate-forme Web.

Un certain nombre de modifications ont été apportées à Chrome 50 (date de la version bêta estimée: du 10 au 17 mars). Cette liste est susceptible d'être modifiée à tout moment.

AppCache obsolète sur les contextes non sécurisés

Résumé: Pour entraver 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.

Intention de suppression | Outil de suivi Chromestatus | 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 des privilèges en cas d'attaque par script intersites. Dans le cadre d'un effort plus important 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 abandonnons le protocole HTTP dans Chrome 50 et prévoyons de le 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 | Outil de suivi de l'état Chrome | Problème CRBug

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 s'avère qu'il n'est pas utile de conserver cette valeur, car les navigateurs utilisent les informations de codage des 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 aucune de ces options n'est disponible, document.characterSet sera le paramètre système de l'utilisateur.

Pour en savoir plus sur les raisons pour lesquelles il ne faut pas spécifier cette information, consultez ce problème GitHub.

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

Intention de suppression | Outil de suivi Chromestatus | 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 étaient demandées par les utilisateurs, elles pouvaient simplement être récupérées à partir du cache du navigateur.

L'attribut subresource a subi un certain nombre de problèmes. Premièrement, cela n'a jamais fonctionné comme prévu. Les ressources référencées ont été téléchargées avec une priorité faible. Il n'a jamais été implémenté sur un navigateur autre que Chrome. La mise en œuvre de Chrome présentait un bug qui a entraîné le téléchargement deux fois des ressources.

Les développeurs qui souhaitent améliorer l'expérience utilisateur via le préchargement de contenu disposent de plusieurs options, dont la plus personnalisable consiste à créer un service worker afin de tirer parti de la mise en cache préalable 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 peuvent ne pas être largement prises en charge.

Supprimer la version de remplacement de TLS non sécurisée

Résumé: Supprimez un mécanisme permettant de forcer les serveurs à renvoyer des données en utilisant des versions moins ou non sécurisées de TLS.

Intention de suppression | Outil de suivi Chromestatus | Bug Chromium

Le protocole TLS (Transport Layer Security) est compatible avec un mécanisme de négociation des versions, qui permet d'introduire de nouvelles versions sans rompre la compatibilité. Certains serveurs ont implémenté cela de telle sorte que les navigateurs étaient tenus d'utiliser des points de terminaison non sécurisés en remplacement. De ce fait, les pirates informatiques pourraient forcer n'importe quel site Web, et pas seulement ceux 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 serveur pour voir si un correctif est disponible.

Suppression de KeyboardEvent.prototype.keyLocation

Résumé: Supprimez un alias inutile pour l'attribut Keyboard.prototype.location.

Intention de suppression | Outil de suivi Chromestatus | Bug Chromium

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

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

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

Intention de suppression | Outil de suivi Chromestatus | 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 fait partie de la démarche visant à introduire des promesses sur ces méthodes, comme l'exige la spécification WebRTC.

Voici un exemple tiré de la démonstration RTCCPeerConnection 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 tous deux d'un gestionnaire d'erreurs. Les navigateurs plus anciens ne s'attendant qu'à un gestionnaire de réussite ignorent simplement l'argument de gestionnaire d'erreurs s'il est présent. L'appel de ce code dans un navigateur plus ancien ne génère pas d'exception.

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

XMLHttpRequestProgressEvent n'est plus pris en charge

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

Intention de suppression | Outil de suivi Chromestatus | Bug Chromium

Cet événement existait pour prendre en charge les propriétés de compatibilité Gecko position et totalSize. Ces trois fonctionnalités ont été abandonnées dans Mozilla 22 et ces fonctionnalités ont été remplacées 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 API Encrypted Media Extensions préfixées

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

Intention de suppression | Outil de suivi Chromestatus | Bug Chromium

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

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

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

TL;DR: les propriétés de décalage de SVGElement ont été remplacées par des propriétés plus largement prises en charge sur HTMLElement.

Intention de suppression | Outil de suivi Chromestatus | Bug Chromium

Les propriétés de décalage sont depuis longtemps compatibles avec HTMLElement et SVGElement. Toutefois, Gecko et Edge ne les prennent en charge 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 désormais supprimées.

Bien que les propriétés équivalentes fassent partie de HTMLElement, les développeurs qui recherchent une alternative peuvent également utiliser getBoundingClientRect().