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

Em quase todas as versões do Chrome, há 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: de 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.

Texto longo, leia o resumo: para dificultar o uso de scripts entre sites, descontinuamos o AppCache em origens não seguras. Esperamos que, no Chrome 52, ele só funcione em origens que servem conteúdo por HTTPS.

Intenção de remover | Rastreador Chromestatus | Bug do Chromium

O AppCache é um recurso que permite acesso off-line e persistente a uma origem, o que é uma escala de privilégios avançada para um ataque de scripting em vários 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-o apenas por HTTPS. Estamos descontinuando o suporte a HTTP no Chrome 50 e esperamos removê-lo totalmente no Chrome 52.

Document.defaultCharset foi removido

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

Intent de remoção | Rastreador Chromestatus | Problema do CRBug

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 é útil manter esse valor devido à maneira como os navegadores usam as informações de codificação de caracteres na resposta HTTP ou na metatag incorporada na 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.

Intenção de remover | Rastreador Chromestatus | Bug do Chromium

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 baixados 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, incluindo preconnect, prefetch, preload, prerender. Algumas dessas opções são experimentais e podem não ter suporte amplo.

Remover substituto não seguro 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

O Transport Layer Security (TLS) oferece suporte a um mecanismo para negociar versões, permitindo a introdução de novas versões do TLS sem quebra de compatibilidade. Alguns servidores implementaram isso de modo que os navegadores exigiam o uso de 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 precisam verificar se o software servidor está 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 distinguam entre as duas teclas Enter em um teclado estendido.

Gerenciadores de erro e sucesso 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 liberação do caminho para a introdução de promessas nesses métodos, conforme exigido pela especificação 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);
    }

Tanto setLocalDescription() quanto 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 aos três foi descontinuado no Mozilla 22, e a funcionalidade foi substituída por ProgressEvent há muito tempo.

     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

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

Intenção de remover | Rastreador Chromestatus | Bug do Chromium

No Chrome 42, enviamos uma versão baseada em especificação e não prefixada 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.

Remoção do suporte às propriedades SVGElement.offset

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ó oferecem suporte a elas no HTMLElement. Para melhorar a consistência entre os navegadores, essas propriedades foram descontinuadas no Chrome 48 e serão removidas.

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