Auto-hospedagem para Linux

O Linux é a única plataforma na qual os usuários do Chrome podem instalar extensões hospedadas fora do Chrome Web Store. Este artigo descreve como empacotar, hospedar e atualizar o crx arquivos de um servidor da Web de uso geral. Se você estiver distribuindo apenas uma extensão ou um tema pela Chrome Web Store, consulte Hospedagem na Web Store e atualizando.

Pacote

Extensões e temas são disponibilizados como arquivos .crx. Ao fazer o upload pelo Chrome Developer Dashboard, o painel cria o arquivo crx automaticamente. Se publicado em um servidor pessoal, o arquivo crx precisará ser criado localmente ou baixado do Chrome na Chrome Web Store.

Fazer o download do .crx na Chrome Web Store

Se uma extensão estiver hospedada na Chrome Web Store, é possível fazer o download do arquivo .crx do Painel de controle 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.

Baixar o arquivo .crx no Painel de controle do desenvolvedor

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

Criar .crx localmente

Os diretórios de extensão são convertidos em arquivos .crx na página de gerenciamento de extensões. Acessar chrome://extensions/ na omnibox, ou clique no menu do Google Chrome, mantenha o ponteiro sobre "Mais ferramentas" então selecione "Extensões".

Na página "Extensions Management", ative o modo de desenvolvedor clicando no botão ativar ao lado de Modo de desenvolvedor. Em seguida, selecione o botão EXTENSÃO DO PACOTE.

O modo de desenvolvedor está marcado e depois clique em "Compactar extensão"

Especifique o caminho para a pasta da extensão no campo Diretório raiz da extensão e clique no Botão PACK EXTENSION. Ignore o campo Private key para um pacote inicial.

Especifique o caminho da extensão e, em seguida, clique na extensão do pacote

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

Arquivos de extensão empacotados

Não perca a chave privada. Mantenha o arquivo .pem em um local secreto e seguro. 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 Compactar EXTENSÃO. Especifique o para o diretório de extensões e o local da chave privada.

Como atualizar arquivos de extensão

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

Como atualizar arquivos de extensão

Pacote pela linha de comando

Empacotar extensões na linha de comando invocando chrome.exe. Usar a --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

Host

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

O Google Chrome considera um arquivo instalável se uma das seguintes condições for 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 é veiculado 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"
    • "unknown/unknown"
    • "application/unknown"
    • "\*/\*"

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

Atualizar

Em intervalos de algumas horas, o navegador verifica se há um URL de atualização nas extensões instaladas. Para cada um, há solicitação a esse URL à procura 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ções listando 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 faz o download e instala a nova versão. 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 cookies com solicitações de manifesto de atualização automática e ignora todos os cabeçalhos Set-Cookie nas respostas a essas solicitações.

URL de atualização

As extensões hospedadas em servidores fora da Chrome Web Store precisam incluir o campo update_url no o 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 o usado pela Omaha, a infraestrutura de atualização do Google. A o sistema de extensões usa os seguintes atributos para os elementos <app> e <updatecheck> do atualizar manifesto:

appid
O 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 de gerenciamento de extensões.
codebase
Um URL HTTPS para o arquivo .crx.
version
Usado pelo cliente para determinar se ele deve fazer o download do arquivo .crx especificado por codebase. Ele deve 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árias Elementos <app>.

Teste

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

Atualizar extensões agora

Isso 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 tornar o trabalho do lado do servidor tão fácil quanto apenas descartar uma arquivo XML estático em qualquer servidor da Web simples, como Apache, e atualizando esse arquivo XML como novo e várias versões da 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 da extensão e versão na solicitação de atualização. A inclusão desses parâmetros permite que as extensões sejam atualizadas a partir do mesmo URL que executa o código dinâmico do lado do servidor, em vez de um arquivo XML estático.

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

?x=EXTENSION_DATA

Em que EXTENSION_DATA é uma string codificada para URL no formato:

id=EXTENSION_ID&v=EXTENSION_VERSION

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

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

A solicitação para atualizar cada extensão individual 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. Para a Por exemplo, se um usuário tiver as duas extensões instaladas, as duas solicitações serão mescladas em uma solicitação única:

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 uma solicitação GET URL for muito longo (mais de 2.000 caracteres aproximadamente), a verificação de atualização emitirá solicitações GET adicionais conforme necessários.

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

Conforme mais APIs são adicionadas ao sistema de extensões, uma versão atualizada de uma extensão que funcionará somente com versões mais recentes do navegador podem ser lançadas. 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 apenas às versões do Google Chrome de uma determinada adicione a tag "prodversionmin", atributo ao elemento <app> na resposta de 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 só vão atualizar automaticamente para a versão 2 se estiverem executando o Google Chrome. 3.0.193.0 ou superior.