Como instalar extensões no Linux

As extensões hospedadas fora da Chrome Web Store só podem ser instaladas por usuários do Linux. Este artigo descreve como empacotar, hospedar e atualizar arquivos .crx usando um servidor pessoal. Se você estiver distribuindo uma extensão ou tema apenas pela Chrome Web Store, consulte Hospedagem e atualização da Webstore.

Apresentação

Extensões e temas são veiculados como arquivos .crx. Ao fazer o upload pelo Painel de controle do desenvolvedor do Google Chrome , o painel cria o arquivo .crx automaticamente. Se publicado em um servidor pessoal, o arquivo .crx precisará ser criado localmente ou transferido por download da Chrome Web Store.

Fazer o download do arquivo .crx na Chrome Web Store

Se uma extensão estiver hospedada na Chrome Web Store, o arquivo .crx poderá ser transferido por download no Painel do desenvolvedor. Localize a extensão em "Suas listagens" e clique em "Mais informações". Na janela pop-up, clique no link azul main.crx para fazer o download.

Fazer o download de .crx no Painel de controle do desenvolvedor

O arquivo transferido por download pode ser hospedado em um servidor pessoal. Essa é a maneira mais segura de hospedar uma extensão localmente, já que o conteúdo da extensão será assinado pela Chrome Web Store. Isso ajuda a detectar possíveis ataques e adulterações.

Criar um arquivo .crx localmente

Os diretórios de extensões são convertidos em arquivos .crx na página de gerenciamento de extensões. Navegue até chrome://extensions/ no ominibox ou clique no menu do Google Chrome, passe o cursor sobre "Mais ferramentas" e selecione "Extensões".

Na página "Gerenciamento de extensões", ative o modo de desenvolvedor clicando no botão de ativação ao lado de Modo de desenvolvedor. Em seguida, selecione o botão PACOTE EXTENSÃO.

"Modo de desenvolvedor" está marcado, e depois clique em "Compactar extensão"

Especifique o caminho para a pasta da extensão no campo do diretório raiz da extensão e clique no botão PACOTE EXTENSÃO. Ignore o campo Private key para um pacote novo.

Especifique o caminho da extensão e clique em "Compactar extensão"

O Chrome criará dois arquivos, um .crx e um .pem, que contém a chave privada da extensão.

Arquivos de extensão empacotados

Não perca a chave privada. Mantenha o arquivo .pem em um local secreto e seguro. Ele será necessário para atualizar a extensão.

Atualizar um pacote .crx

Atualize o arquivo .crx de uma extensão aumentando o número da versão em manifest.json.

{
  ...
  "version": "1.5",
  ...
  }
}
{
  ...
  "version": "1.6",
  ...
  }
}

Volte para a Página de gerenciamento de extensões e clique no botão PACOTE EXTENSÃO. Especifique o caminho para o diretório de extensões e o local da chave privada.

Como atualizar arquivos de extensão

A página vai informar o caminho para a extensão empacotada atualizada.

Como atualizar arquivos de extensão

Empacotar pela linha de comando

Empacote extensões na linha de comando invocando chrome.exe. Use a sinalização --pack-extension para especificar o local da pasta da extensão e a sinalização --pack-extension-key para especificar o local do arquivo de chave privada da extensão.

chrome.exe --pack-extension=C:\myext --pack-extension-key=C:\myext.pem

Hosting

Um servidor que hospeda arquivos .crx precisa usar cabeçalhos HTTP apropriados para permitir que os usuários instalem a extensão clicando em um link.

O Google Chrome considera um arquivo instalável se uma das seguintes condições é verdadeira:

  • O arquivo tem o tipo de conteúdo application/x-chrome-extension
  • O sufixo do arquivo é .crx, e as duas condições a seguir são verdadeiras:
    • O arquivo não é exibido com o cabeçalho HTTP X-Content-Type-Options: nosniff
    • O arquivo é exibido com um dos seguintes tipos de conteúdo:
    • String vazia
    • "text/plain"
    • "application/octet-stream"
    • “desconhecido/desconhecido”
    • "aplicativo/desconhecido"
    • "*/*"

O motivo mais comum para não reconhecer um arquivo instalável é que o servidor envia o cabeçalho X-Content-Type-Options: nosniff. O segundo motivo mais comum é que o servidor envia um tipo de conteúdo desconhecido, que não está na lista anterior. Para corrigir um problema de cabeçalho HTTP, mude a configuração do servidor ou tente hospedar o arquivo .crx em outro servidor.

Atualizando

Em intervalos de algumas horas, o navegador verifica se há um URL de atualização nas extensões instaladas. Para cada uma, ele faz uma solicitação para o URL em busca de um arquivo XML de manifesto de atualização.

  • O conteúdo retornado por uma verificação de atualização é um documento XML de manifesto de atualização que lista a versão mais recente de uma extensão.

Se o manifesto de atualização mencionar uma versão mais recente do que a instalada, o navegador vai fazer o download e instalar a nova versão. Assim como acontece com as atualizações manuais, o novo arquivo .crx precisa ser assinado com a mesma chave privada da versão instalada atualmente.

Observação:para manter a privacidade do usuário, o Google Chrome não envia cabeçalhos de cookie com solicitações de manifesto de atualização automática e ignora todos os cabeçalhos Set-Cookie nas respostas a essas solicitações.

Atualizar URL

As extensões hospedadas em servidores fora da Chrome Webstore precisam incluir o campo update_url no arquivo manifest.json.

{
  "name": "My extension",
  ...
  "update_url": "https://myhost.com/mytestextension/updates.xml",
  ...
}

Atualizar o manifesto

O manifesto de atualização retornado pelo servidor deve ser um documento XML.

<?xml version='1.0' encoding='UTF-8'?>
<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>
  <app appid='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'>
    <updatecheck codebase='https://myhost.com/mytestextension/mte_v2.crx' version='2.0' />
  </app>
</gupdate>

Esse formato XML é emprestado do usado pela Omaha, a infraestrutura de atualização do Google. O sistema de extensões usa os seguintes atributos para os elementos <app> e <updatecheck> do manifesto de atualização:

appidO ID da extensão é gerado com base em um hash da chave pública, conforme descrito em empacotamento. O ID de uma extensão é exibido na página Gerenciamento de extensões.
codebaseUm URL HTTPS para o arquivo .crx.
versionUsado pelo cliente para determinar se ele precisa fazer o download do arquivo .crx especificado por codebase. Ele precisa corresponder ao valor de "version" no arquivo manifest.json do arquivo .crx.

O arquivo XML do manifesto de atualização pode conter informações sobre várias extensões incluindo vários elementos <app>.

Teste

A frequência padrão de verificação de atualização é de várias horas, mas uma atualização pode ser forçada usando o botão Atualizar extensões agora na página de gerenciamento de extensões.

Atualize as extensões agora

Isso vai iniciar as verificações de todas as extensões instaladas.

Uso avançado: parâmetros de solicitação

O mecanismo básico de atualização automática foi projetado para fazer com que o trabalho do lado do servidor seja tão fácil quanto soltar um arquivo XML estático em qualquer servidor da Web simples, como o Apache, e atualizar esse arquivo XML à medida que novas versões de extensão são lançadas.

Os desenvolvedores que hospedam várias extensões podem verificar os parâmetros de solicitação, que indicam o ID e a versão da extensão na solicitação de atualização. A inclusão desses parâmetros permite que as extensões atualizem o mesmo URL executando o código dinâmico do lado do servidor em vez de um arquivo XML estático.

O formato dos parâmetros de solicitação é:

?x=EXTENSION_DATA

Em que EXTENSION_DATA é uma string codificada por URL do formato:

id=EXTENSION\_ID&v=EXTENSION\_VERSION

Por exemplo, duas extensões apontam para o mesmo URL de atualização (https://test.com/extension_updates.php):

  • Extensão 1
    • Código: "aaaaaaaaaaaaaaaaaaaaaaaaaaaa"
    • Versão: "1.1"
  • Extensão 2
    • ID: "bbbbbbbbbbbbbbbbbbbbbbbbbbbb"
    • Versão: "0.4"

O pedido para atualizar cada extensão seria:

https://test.com/extension_updates.php?x=id%3Daaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa%26v%3D1.1

e

https://test.com/extension_updates.php?x=id%3Dbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb%26v%3D0.4

Várias extensões podem ser listadas em uma única solicitação para cada URL de atualização exclusivo. No exemplo acima, se um usuário tiver as duas extensões instaladas, as duas solicitações serão mescladas em uma única solicitação:

https://test.com/extension_updates.php?x=id%3Daaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa%26v%3D1.1&x=id%3Dbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb%26v%3D0.4

Se o número de extensões instaladas que usam o mesmo URL de atualização for grande o suficiente para que um URL de solicitação GET seja muito longo (mais de 2.000 caracteres), a verificação de atualização emitirá outras solicitações GET conforme necessário.

Uso avançado: versão mínima do navegador

À medida que mais APIs são adicionadas ao sistema de extensões, uma versão atualizada de uma extensão que funcionará apenas com versões mais recentes do navegador pode ser lançada. Embora o próprio Google Chrome seja atualizado automaticamente, pode levar alguns dias até que a maior parte da base de usuários seja atualizada para uma nova versão. Para garantir que uma determinada atualização seja aplicada somente a versões do Google Chrome iguais ou posteriores a uma determinada versão, adicione o atributo "prodversionmin" ao elemento na resposta da atualização.

<?xml version='1.0' encoding='UTF-8'?>
<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>
  <app appid='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'>
    <updatecheck codebase='http://myhost.com/mytestextension/mte_v2.crx' version='2.0' prodversionmin='3.0.193.0'/>
  </app>
</gupdate>

Isso garante que os usuários façam a atualização automática para a versão 2 somente se estiverem executando o Google Chrome 3.0.193.0 ou mais recente.