Descontinuações e remoções de APIs no Chrome 50

Em quase todas as versões do Chrome, notamos um número significativo de atualizações e melhorias no produto, no desempenho e nos recursos da plataforma da Web.

No Chrome 50 (data estimada da versão Beta: 10 a 17 de março), há várias mudanças no Chrome. Essa lista está sujeita a mudanças a qualquer momento.

O AppCache foi descontinuado em contextos não seguros.

RESUMO: para impedir o scripting em vários sites, estamos descontinuando o AppCache em origens não seguras. Esperamos que, no Chrome 52, ele só funcione em origens que servem conteúdo por HTTPS.

Intent to remove | Chromestatus Tracker | Chromium Bug

O AppCache é um recurso que permite o acesso off-line e persistente a uma origem, o que é uma elevação de privilégios poderosa para um ataque de script entre sites. Como parte de um esforço maior para remover recursos poderosos em origens não seguras.

O Chrome está removendo esse vetor de ataque, permitindo apenas o acesso por HTTPS. Estamos descontinuando o suporte a HTTP no Chrome 50 e planejamos removê-lo totalmente no Chrome 52.

Document.defaultCharset foi removido

TL;DR: document.defaultCharset foi removida para melhorar a conformidade com as especificações.

Intent to Remove | Chromestatus Tracker | CRBug Issue

O document.defaultCharset, descontinuado no Chrome 49, é uma propriedade somente leitura que retorna a codificação de caracteres padrão do sistema do usuário com base nas configurações regionais. Não foi útil manter esse valor porque os navegadores usam as informações de codificação de caracteres na resposta HTTP ou na metatag incorporada à página.

Em vez disso, use document.characterSet para receber o primeiro valor especificado no cabeçalho HTTP. Se ele não estiver presente, você vai receber o valor especificado no atributo charset do elemento <meta> (por exemplo, <meta charset="utf-8">). Por fim, se nenhum deles estiver disponível, o document.characterSet será a configuração do sistema do usuário.

Leia mais sobre o raciocínio para não especificar isso neste problema do GitHub.

Resumo: removemos o suporte para o valor subresource do atributo rel de HTMLLinkElement.

Intent to remove | Chromestatus Tracker | Chromium Bug

A intenção do atributo subresource em <link> era pré-carregar um recurso durante o tempo de inatividade de um navegador. Depois que um navegador faz o download de uma página, ele pode pré-transferir recursos, como outras páginas, para que, quando solicitadas pelos usuários, elas sejam simplesmente recuperadas do cache do navegador.

O atributo subresource teve vários problemas. Primeiro, ele nunca funcionou como esperado. Os recursos referenciados foram transferidos por download com baixa prioridade. O atributo nunca foi implementado em nenhum navegador além do Chrome. A implementação do Chrome tinha um bug que fazia com que os recursos fossem transferidos por download duas vezes.

Os desenvolvedores que querem melhorar a experiência do usuário com o pré-carregamento de conteúdo têm várias opções, sendo que a mais personalizável é criar um worker de serviço para aproveitar o pré-cache e a API Caches. Outras soluções incluem outros valores para o atributo rel, como preconnect, prefetch, preload e prerender. Algumas dessas opções são experimentais e podem não ter suporte amplo.

Remover o substituto inseguro da versão do TLS

Resumo: removemos um mecanismo para forçar os servidores a retornar dados usando versões de TLS menos ou não seguras.

Intent to remove | Chromestatus Tracker | Chromium Bug

A camada de segurança de transporte (TLS) oferece suporte a um mecanismo para negociar versões, permitindo a introdução de novas versões do TLS sem comprometer a compatibilidade. Alguns servidores implementaram isso de forma que os navegadores precisavam usar endpoints não seguros como substituto. Por isso, os invasores poderiam forçar qualquer site, não apenas aqueles que estão configurados incorretamente, a negociar versões mais fracas de TLS.

Os sites afetados não vão conseguir se conectar com ERR_SSL_FALLBACK_BEYOND_MINIMUM_VERSION. Os administradores devem garantir que o software do servidor esteja atualizado. Se o problema ainda não tiver sido resolvido, entre em contato com o fornecedor do software do servidor para saber se há uma correção disponível.

Remover KeyboardEvent.prototype.keyLocation

Resumo: remova um alias desnecessário para o atributo Keyboard.prototype.location.

Intent to remove | Chromestatus Tracker | Chromium Bug

Esse atributo é simplesmente um alias do atributo Keyboard.prototype.location, que permite a desambiguação entre teclas localizadas em vários lugares em um teclado. Por exemplo, ambos os atributos permitem que os desenvolvedores distingam as duas teclas Enter em um teclado estendido.

Os manipuladores de erros e sucesso são necessários nos métodos RTCPeerConnection.

Resumo: os métodos WebRTC RTCPeerConnection createOffer() e createAnswer() agora exigem um manipulador de erros e um manipulador de sucesso. Antes, era possível chamar esses métodos com apenas um manipulador de sucesso. Esse uso foi descontinuado.

Intent to remove | Chromestatus Tracker | Chromium Bug

No Chrome 49, adicionamos um aviso se você chamar setLocalDescription() ou setRemoteDescription() sem fornecer um gerenciador de erros. O argumento do gerenciador de erros é obrigatório no Chrome 50.

Isso faz parte da abertura do caminho para a introdução de promessas nesses métodos, conforme exigido pela especificação do WebRTC.

Confira um exemplo da demonstração de RTCPeerConnection do WebRTC (main.js, linha 126):

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

setLocalDescription() e setRemoteDescription() têm um gerenciador de erros. Os navegadores mais antigos que esperam apenas um gerenciador de sucesso simplesmente ignoram o argumento do gerenciador de erros, se ele estiver presente. Chamar esse código em um navegador mais antigo não causa uma exceção.

Em geral, para aplicativos WebRTC de produção, recomendamos o uso de adapter.js, um paliativo mantido pelo projeto WebRTC, para isolar os apps de mudanças de especificação e diferenças de prefixo.

O XMLHttpRequestProgressEvent não é mais compatível

Resumo: a interface XMLHttpRequestProgressEvent será removida, junto com os atributos position e totalSize.

Intent to remove | Chromestatus Tracker | Chromium Bug

Esse evento existia para oferecer suporte às propriedades de compatibilidade do Gecko position e totalSize. O suporte para os três foi descontinuado no Mozilla 22, e a funcionalidade foi substituída há muito tempo pelo 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
        }
      }

Remover extensões de mídia criptografada com prefixo

RESUMO: as extensões de mídia criptografadas com prefixo foram removidas em favor de uma substituição sem prefixo baseada em especificações.

Intent to remove | Chromestatus Tracker | Chromium Bug

No Chrome 42, lançamos uma versão com base na especificação sem prefixo de extensões de mídia criptografadas. Essa API é usada para descobrir, selecionar e interagir com sistemas de gerenciamento de direitos digitais para uso com HTMLMediaElement.

Isso foi há quase um ano. Como a versão não prefixada tem mais recursos do que a versão prefixada, é hora de remover a versão prefixada da API.

O suporte às propriedades SVGElement.offset foi removido.

Resumo: as propriedades de deslocamento para SVGElement foram descartadas em favor das propriedades mais amplamente compatíveis em HTMLElement.

Intent to remove | Chromestatus Tracker | Chromium Bug

As propriedades de deslocamento têm suporte de HTMLElement e SVGElement há muito tempo. No entanto, o Gecko e o Edge só têm suporte para elas no HTMLElement. Para melhorar a consistência entre os navegadores, essas propriedades foram descontinuadas no Chrome 48 e agora estão sendo removidas.

Embora as propriedades equivalentes façam parte de HTMLElement, os desenvolvedores que procuram uma alternativa também podem usar getBoundingClientRect().