API de geolocalização removida de origens não seguras no Chrome 50

O Chrome tem intenção pública de suspender o uso de recursos avançados, como a geolocalização em origens não seguras, e esperamos que outras pessoas façam isso.

A partir do Chrome 50, não é mais possível acessar o local do usuário usando a API HTML5 Geolocation de páginas entregues por conexões não seguras. Isso significa que a página que está fazendo a chamada da API Geolocation precisa ser mostrada de um contexto seguro, como HTTPS.

Essa é uma questão importante, porque vai afetar diretamente qualquer site que exija o uso da API de geolocalização e não seja exibido por https, mas acreditamos que essa mudança é benéfica para todos os usuários na Web. Esta postagem vai ajudar você a entender o raciocínio e como proceder.

Quando a mudança acontecerá?

Essa alteração entrou em vigor a partir do Chrome 50 (12h PST de 20 de abril de 2016).

O console de ferramentas para desenvolvedores do Chrome exibe avisos desde a versão 44 (lançada em 21 de julho de 2015).
Fizemos vários avisos públicos que descrevem a lógica (e a discussão) sobre por que estamos fazendo essa mudança:

Várias outras fontes destacaram isso: Mobiforge (26 de janeiro de 2016), Wired (17 de março de 2016), VentureBeat (13 de abril de 2016).

Por que fizemos essa mudança?

A localização é um dado sensível. A exigência de HTTPS é necessária para proteger a privacidade dos dados de local dos seus usuários. Se a localização do usuário estiver disponível em um contexto não seguro, os invasores na rede poderão saber onde ele está, comprometendo seriamente a privacidade do usuário.

Quem será afetado com isso?

Isso afeta todas as páginas que atualmente usam a API Geolocation de páginas exibidas por HTTP (não seguras). Ela também afeta iframes HTTPS que usam a API Geolocation se estiverem incorporados em páginas HTTP. Não é possível fazer o polyfill usando um frame enviado por HTTPS compartilhado.

Todo o meu app da Web precisa de HTTPS?

Não é necessário que todo o app seja disponibilizado via HTTPS para usar a Geolocalização. Apenas páginas que usam geolocalização precisam ser veiculadas em um contexto seguro. Atualmente, um contexto seguro é qualquer conteúdo hospedado no nível superior em HTTPS ou localhost. Por exemplo, um iframe que aponta para uma origem segura, mas está hospedado em origem não segura (http ://paul.kinlan.me/) não pode chamar a API Geolocation.

Recomendamos que você migre para HTTPS, já que os recursos de navegador novos e já existentes exigem origens seguras.

Isso afeta o desenvolvimento local?

Isso não deve acontecer, porque o localhost foi declarado como "potencialmente seguro" na especificação e, no nosso caso, as solicitações de geolocalização exibidas no nível superior pelo localhost ainda funcionarão.

Posso detectar no momento da execução se a geolocalização foi bloqueada por não estar em um contexto seguro

Sim. A especificação de geolocalização define um objeto PositionError que é transmitido para o callback de falha das APIs Geolocation. O objeto define as propriedades code e message.

Os erros causados por esse contexto seguro retornarão um code de 1, que é um "Erro de permissão negada". Você pode receber esse erro quando um usuário nega o acesso ou o sistema nega acesso aos locais dele. Isso significa que você terá que verificar a mensagem para saber o motivo exato.

Isso pode ser bastante frágil, já que pode mudar no futuro, mas um forte sinal de que se tratava de um problema de conteúdo não seguro é procurar a string "Somente origens seguras são permitidas".

navigator.geolocation.getCurrentPosition(success => {
    /* Do some magic. */
}, failure => {
    if (failure.message.startsWith("Only secure origins are allowed")) {
    // Secure Origin issue.
    }
});

Lembre-se de que não é possível verificar a origem da página porque ela pode estar em https, mas dentro de um iframe hospedado em um contexto não seguro.

Eu realmente preciso usar a geolocalização. O que devo fazer?

Se você quiser usar a API Geolocation ou se o site já usa essa API, migre as páginas que fazem chamadas da API Geolocation para HTTPS, garantindo que elas sejam usadas em um contexto seguro.

Há várias opções de fallback disponíveis para receber a localização de um usuário que não são afetadas por essa mudança, como a API Google Maps Geolocation, o GeoIP (por exemplo, há outras soluções com base em dados geográficos) e um CEP inserido pelo usuário. No entanto, recomendamos que o melhor caminho para garantir o acesso contínuo à geolocalização seja HTTPS.