Controles do usuário para permissões do host: guia de transição

Resumo

O que muda?

A partir do Chrome 70, os usuários poderão restringir o acesso de hosts de extensão a uma lista personalizada de sites ou configurar extensões para exigir um clique para acessar a página atual.

Quais APIs são afetadas?

Essa alteração afeta todas as APIs afetadas pelas permissões de host especificadas no arquivo e scripts de conteúdo. As APIs que exigem permissões de host incluem webRequest, cookies, tabs.executeScript() e tabs.insertCSS(), além de serviços de origem cruzada solicitações, como por meio de um XMLHTTPRequest ou da API fetch().

Como restringir o acesso

Como o usuário pode restringir o acesso?

Os usuários podem optar por permitir que sua extensão seja executada com um clique, em um conjunto específico de sites ou em todos sites solicitados. Essas opções são apresentadas aos usuários na página do chrome://extensions e também no menu de contexto da extensão.

Uma captura de tela dos controles do menu de contexto para permissões de host de tempo de execução,
            incluindo opções para executar a extensão ao clicar, em um site específico ou em todos os sites.

O que acontece se um usuário optar por executar minha extensão "ao clicar"?

Basicamente, a extensão se comporta como se usasse a permissão activeTab. A extensão é concedeu acesso temporário a qualquer host em que o usuário clicar na extensão, se esse host tiver sido solicitado pelo pela extensão (e não é um site restrito, como chrome://settings). Quando definida para executar com um clique, O Chrome identifica sua extensão com um círculo e uma sombra projetada (veja abaixo) para indicar que é solicitar acesso em um site específico.

Uma captura de tela dos selos que o Chrome adiciona ao ícone da extensão na barra de ferramentas

O que acontecerá se um usuário optar por executar minha extensão em sites específicos?

Sua extensão pode ser executada automaticamente em qualquer site escolhido pelo usuário e pode acessar a o site sem ações adicionais do usuário. Em outros sites que sua extensão solicitou, mas o usuário não conceder permissão, o comportamento será o mesmo que se o usuário tivesse definido a extensão para ser executada com um clique.

O que acontecerá se um usuário optar por executar minha extensão em todos os sites?

A extensão pode acessar automaticamente qualquer site solicitado no manifesto.

Comportamentos da API

API Web Request

A extensão ainda poderá interceptar, modificar e bloquear solicitações de sites a que tem acesso. Para sites aos quais a extensão não tem acesso, o Chrome identifica a extensão para indicar que solicita acesso à página. O usuário pode conceder acesso à extensão. Chrome, então solicita que o usuário atualize a página para permitir que sua extensão intercepte as solicitações de rede.

Scripts de conteúdo, tabs.executeScript(), tabs.insertCSS()

A extensão ainda pode injetar scripts e folhas de estilo automaticamente para todos os sites aos quais tem acesso Para sites aos quais a extensão não tem acesso, o Chrome identifica a extensão para indicar que a extensão solicita acesso à página. O usuário pode conceder acesso à extensão. Se o script de conteúdo foi definido para injetar em document_idle, o script será injetado imediatamente. Caso contrário, O Chrome solicita que o usuário atualize a página para permitir que a extensão injete scripts mais cedo. carregamento da página (em document_start ou document_end). Os callbacks para os métodos tabs.executeScript() e Os métodos tabs.insertCSS() só serão invocados se o usuário conceder acesso ao site.

Cookies e XHR da página de plano de fundo

A extensão ainda pode ler e modificar cookies e realizar um XHR de origem cruzada para os sites da extensão tem acesso. Como não há nenhuma guia associada a uma página de extensão que acesse a outra origem cookies ou XHRing para outro host, o Chrome não identifica a extensão para indicar ao usuário que a extensão está solicitando acesso a um site. Tentar acessar um cookie de outro site ou fazer um O XHR de origem cruzada falhará com um erro como se o manifesto da extensão não incluísse o host permissão. Nesses casos, recomendamos que você use permissões opcionais para conceder ao usuário para conceder acesso de tempo de execução a diferentes sites.

O exemplo abaixo ilustra como isso pode funcionar para a API de cookies.

Antes:

{
  ...
  "permissions": ["cookies", "https://example.com"]
}
chrome.cookies.get({url: 'https://example.com', name: 'mycookie'},
                    function(cookie) {
                      // Use the cookie.
                    });

Depois:

{
  ...
  "permissions": ["cookies"],
  "optional_permissions": ["https://example.com"]
}
// Note: permissions.request() requires a user gesture, so this
// may only be done in response to a user action.
chrome.permissions.request(
    {origins: ['https://example.com']},
    function(granted) {
      if (granted) {
        chrome.cookies.get({url: 'https://example.com', name: 'mycookie'},
                            function(cookie) {
                              // Use the cookie.
                            });
      } else {
        // Handle grant failure
      }
    });

Migração

Quais são as práticas recomendadas para evitar ser impactado negativamente?

As extensões podem usar as APIs de permissões opcionais, activeTab e declarativeContent e siga as práticas recomendadas. Permissões opcionais são concedidas no tempo de execução e permitem que a extensão solicitar acesso específico a um site. A permissão activeTab não é afetada, e as extensões de usá-lo continuam a funcionar normalmente. A API declarativeContent substitui muitas necessidades para injetar scripts em cada página.

O que acontecerá com as configurações?

Essa alteração não afetará imediatamente as permissões atuais concedidas à sua extensão. Ou seja, ele continuará funcionando como antes, a menos que o usuário tome medidas para restringir os sites tem permissão de acesso. Em versões futuras, o Chrome fornecerá mais controles para que os usuários se ajustem configurações.

Como posso verificar se minha extensão tem permissão para ser executada em um site?

Você pode usar a API permissions.contains() para verificar se sua extensão foi que receberam acesso a uma determinada origem.