O que é Chrome?
Chrome é o conjunto de elementos da interface de usuário na janela do aplicativo localizado fora da área da janela de conteúdo. Barras de ferramentas, barras de menu, barras de progresso e barras do título da janela são todos os exemplos de elementos que normalmente fazem parte do chrome.
Fornecedores Chrome
Um fornecedor de chrome para um determinado tipo de janela (e.g., para a janela do navegador) é chamado de fornecedor chrome. Os fornecedores trabalham juntos para fornecer um kit completo de chrome para uma janela particular, das imagens dos botões na barra de ferramentas aos arquivos que descrevem o texto, conteúdo e aparência da própria janela.
Existem três tipos básicos de fornecedores chrome:
Content (conteúdo)
O arquivo fonte principal para a descrição de uma janela vem do forneceder content (conteúdo), e ele pode ser qualquer tipo de arquivo visível com o Mozilla. Normalmente será um arquivo XUL, desde que o XUL seja desenhado para descrever os conteúdos das janelas e diálogos. Os arquivos javascript que definem a interface de usuário são também contidas com o pacote content (conteúdo), assim como a maioria dos arquivos XBL binding.
Locale (local)
Aplicativos localizáveis mantêm toda a informação localizada em fornecedores locale (local). Isto permite a tradutores ligá-lo em um diferente pacote chrome para traduzir um aplicativo sem alterar o resto do código fonte. Os dois tipos principais de arquivos localizáveis são arquivos DTD e arquivos de propriedade java-style.
Skin (pele)
Um fornecedor skin (pele) é responsável por proporcionar um kit completo de arquivos que descrevem a aparência visual do chrome. Normalmente um fornecedor skin (pele) proporcionará arquivos CSS e imagens.
O registro Chrome
O gecko runtime mantém um serviço sabido como o registro chrome que proporciona mapeamentos de nomes de pacotes chrome à localização física do pacote chrome no disco.
Este registro chorme é configurável e persistente, e assim um usuário pode instalar diferentes fornecedores chrome, e selecionar um preferido skin (pele) e locale (local). Isto é realizado através do xpinstall e do gerenciador de extensões.
Em ordem para informar o registro chrome do chrome disponível, um manifesto texto é usado: este manifesto é "chrome.manifest" na raiz de uma extensão, ou tema, e chrome/*manifest em um aplicativo XULRunner.
O texto simples do manifesto chrome tem um formato simples baseado em linhas. Cada linha é analizada gramaticalmente e individualmente; se a linha estiver correta o registro chrome pega a ação identificada por aquela linha; caso contrário o registro chrome ignora aquela linha (e imprime uma mensagem de aviso no console de runtime error).
locale packagename localename path/to/files skin packagename skinname path/to/files
Instruções do Manifesto
Comentários
Uma linha é um comentário se ela iniciar com o caractere '#'; qualquer outro caractere na linha é ignorado.
# esta linha é um comentário — você pode colocar o que quiser aqui
content (conteúdo)
Um pacote content (conteúdo) é registrado com a linha:
content packagename uri/to/files/ [flags]
Isto irá registrar a localização para usar quando for resolvida a URL chrome://packagename/content/...
. A URL pode ser absoluta ou relativa à localização do arquivo de manifesto. Note que é necessário acabar com uma '/'.
locale (local)
Um pacote locale (local) é registrado com a linha
locale packagename localename uri/to/files/ [flags]
Isto irá registrar o pacote locale (local) quando for resolvida a URL chrome://packagename/locale/... . O localename (nome local) é normalmente um simples idenficador de língua "en" ou um identificador língua-país "en-US". Se mais de um local for registrado para um pacote, o registro chrome irá selecionar o melhor local usando as preferências do usuário.
skin (pele)
Um pacote skin (pele) é registrado com a linha
skin packagename skinname uri/to/files/ [flags]
Isto irá registrar um pacote skin (pele) quando for resolvida a URL chrome://packagename/skin/... . O skinname (nome da pele) é uma sring opaca identificando uma skin (pele) instalada. Se mais de uma pele for registrada para um pacote, o registro chrome irá selecionar a melhor pele usando as preferências do usuário.
overlay (sobreposição)
XUL overlays (sobreposições XUL) são registradas com a seguinte sintaxe:
overlay chrome://URI-to-be-overlayed chrome://overlay-URI [flags]
style (estilo)
Style overlays (sobreposições de estilo) (CSS customizado que será aplicado à página chrome) é registrado com a seguinte sintaxe:
style chrome://URI-to-style chrome://stylesheet-URI [flags]
override (substituição)
Em alguns casos uma extensão ou encaixe pode desejar substituir um arquivo chrome providenciado pela aplicação ou XULRunner. A fim de permitir isto, o manifesto de registro chrome permite instruções para "substituição":
override chrome://package/type/original-uri.whatever new-resolved-URI [flags]
Marcadores do Manifesto
Linhas do manifesto podem ter múltiplos espaços delimitados por marcadores adicionados no final da linha de registro. Estes marcadores marcam atributos especiais do chrome no pacote, ou limitam as condições sob qual linha é usada.
application (aplicativo)
Extensões podem instalar múltiplos aplicativos. Existem algumas linhas com registro chrome que somente se aplicam a um aplicativo particular. O marcador
application=app-ID
indica que a instrução deve ser aplicada somente se a extensão instalada no aplicativo identificado por app-ID estiver rodando. Múltiplos marcadores de aplicativos podem ser incluídos em uma única linha, neste caso a linha é aplicada se qualquer um dos marcadores rodar.
appversion (versão do aplicativo)
Extensões podem instalar em múltiplas versões de um aplicativo. Existem algumas extensões que podem instalar múltiplas versões de um aplicativo. O marcador
appversion=version appversion<version appversion<=version appversion>version appversion>=version
indica que a instrução deve somente ser aplicada se a extensão instalada no aplicativo tiver versão identificada. Múltiplos marcadores appversion
podem ser incluídos em uma única linha. neste caso a linha é aplicada se qualquer um dos marcadores rodar. A versão da string precisa estar conforme o Toolkit version format.
platform (plataforma)(Pacotes específicos da plataforma)
Alguns pacotes são marcados com um marcador especial indicando que ele tem uma plataforma específica. Algumas partes do content (conteúdo), skin (pele), locales (locais) podem ser diferentemente baseados para a plataforma que rodam. Estes pacotes contém três diferentes grupos de arquivos, para windows/os2, macintosh, e plataformas como o unix. Por exemplo, a ordem dos botões "OK" e "cancelar" em um diálogo é diferente, assim como o nome de alguns itens.
O modificador de "plataforma" é somente analizado gramaticamente para o registro de conteúdo, não é reconhecido pelo registro de local e pele. Entretanto isto se aplica às partes conteúdo, local, e pele do pacote, quando especificado.
Para indicar se um pacote tem plataforma específica, adicione o modificador "plataform" à linha do "content" após o trajeto, por exemplo:
content global-platform jar:toolkit.jar!/toolkit/content/global-platform/ platform
Uma vez especificado isto em seu manifesto você assegura-se então que abaixo do diretório da plataforma global existem sub-diretórios win
(Windows/OS2), mac
(OS9/OSX), ou unix
(Todos os outros). Alguma coisa residindo do lado de fora destes sub-diretórios será ignorado.
xpcnativewrappers
Pacotes chrome podem decidir se para usar o mecanismo de segurança xpcnativewrappers para proteger seu código contra conteúdos maliciosos que possam ter acesso. Veja en:Safely accessing content DOM from chrome para detalhes.
Com o Firefox 1.5 lançamento alpha (Deer Park alphas), este marcador está *desligado* por padrão, e precisa ser explicitamente ativado especificando-se xpcnavitewrappers=yes.
Com o Firefox 1.5 lançamento beta, este marcador será ativado por padrão, e extensões que tiverem um acesso inseguro aos objetos de conteúdo serão requeridas para especificar xpcnavitewrappers=no.
O marcador xpcnativewrappers aplica somente ao pacote content (conteúdo): ele não é reconhecido pelo registro locale (local) ou skin (pele).
Exemplo de Manifesto Chrome
content necko jar:comm.jar!/content/necko/ xpcnativewrappers=yes locale necko en-US jar:en-US.jar!/locale/en-US/necko/ content xbl-marquee jar:comm.jar!/content/xbl-marquee/ content pipnss jar:pipnss.jar!/content/pipnss/ locale pipnss en-US jar:en-US.jar!/locale/en-US/pipnss/ # Firefox-only overlay chrome://browser/content/pageInfo.xul chrome://pippki/content/PageInfoOverlay.xul application={ec8030f7-c20a-464f-9b0e-13a3a9e97384} overlay chrome://communicator/content/pref/preftree.xul chrome://pippki/content/PrefOverlay.xul overlay chrome://navigator/content/pageInfo.xul chrome://pippki/content/PageInfoOverlay.xul [email protected] content pippki jar:pippki.jar!/content/pippki/ xpcnativewrappers=yes locale pippki en-US jar:en-US.jar!/locale/en-US/pippki/ content global-platform jar:toolkit.jar!/content/global-platform/ platform skin global classic/1.0 jar:classic.jar!/skin/classic/global/ override chrome://global/content/netError.xhtml jar:embedder.jar!/global/content/netError.xhtml content inspector jar:inspector.jar!/content/inspector/ xpcnativewrappers=no
Manifestos contents.rdf com estilo antigo
Antes do manifesto de texto simples foram introduzidos (os quais funcionam no Firefox 1.5, Toolkit 1.8), manifestos RDF chamados "contents.rdf" que foram usados para registrar o chrome. Este formato é desaprovado; todavia, a Suíte Mozilla (SeaMonkey) não suporta o formato do manifesto de texto simples ainda, então o manifesto contents.rdf é requerido para extensões que desejam deixar para trás o mantimento da compatibilidade com o Firefox 1.0 ou à suíte.