Fiquei muito impressionado, com a maneira tão fácil, que consegui compilar Google Chrome, seguindo os passos que se encontram publicados no http://dev.chromium.org/developers/how-tos/getting-started. (Eu chamo isto, de uma verdadeira intenção de compartilhar o código)
Eu sou fã número um de Mozilla FireFox e das ferramentas Open Source, dos sistemas operativos abertos (e das suas diferentes distribuições) a pesar que, para me ganhar o sustento precise de me meixer entre ferramentas da Microsoft, Sun, da comunidade aberta e as vezes de uma que outra passada de moda, que ainda acho válidas. Mas tenho que admitir, que para conseguir compilar o FireFox, ou o Mínimo (versão mobile para Pocket PC e Windows Mobile) a quantidade de passos, pre-requisitos, são muitos e em alguns casos, difíceis de conseguir.
A seguir vou compartilhar uma tradução ao português destes passos, para deleitação dos amadores (empolgados) que compartilham comigo, a opinião que o Google Chrome é um excelente browser, muito leve, muito rápido e demasiado estável, todas estas características, para ser um browser versão Beta.
A maior parte do código esta desenvolvida em C (curiosamente as extensões dos arquivos são .cc e h, não cpp). Tem muitos módulos que incluem Java script, para complementar sua funcionalidade, mas uma das coisas mais curiosas, é que ainda não suporta Objetos de Microsoft Active X.
Nos testes preliminares ingressei ao YouTube, assim que comprovei que é compatível com os formatos de vídeo FLV. O Java Script é super rápido, sua execução se baseia em um motor chamado V8. Aqui podemos ver um vídeo em inglês com legendas em português, que descreve boa parte das idéias nas que se basearam para justificar a criação deste browser.http://mx.youtube.com/watch?v=FV2eh220fZQ&feature=related, chamado por alguns, o MS IE Killer (vai ter idéia)
A seguir, a tradução da página que comentei anteriormente. Poderia ter passado pelo tradutor disponível pela própria Google, mas fiquei tão impressionado, que me animei a fazer a tradução, já que segui os passos, e de uma maneira simples, sem rodeios, nem segredos próprios de Geeks ou gênios da computação, o consegui. A maior demora foi, o download do código. Isso se que me deu trabalho. Imagino que devem existir ao redor do mundo um monte (grande quantidade) de amadores(empolgados) com a mesma curiosidade que eu, o qual dificultou dito download. Teve que fazer, sem menti-lhes, 5 tentativas. Me vão perdoar os erros do português, tentei ser o mais parco e direto possível, mas com certeza, terá uma que outra palavra, que não foi fielmente traduzida, e colocada, mais pensando na linguagem típica, com aquela que me comunicaria com os meus colegas do escritório. Por exemplo, Build ( a pesar de significar construção do código, nos lhe chamamos compilação, sabendo, que este passo é só um, dos necessários para chegar ao executável, binário ou objeto)
Começando
Nota: Esta página é para desenvolvedores e testers que tem Windows e querem revisar o código em execução. Se você não se sente preparado para compilar o ambiente, pode ler a documentação. Se não tem o Windows, dé uma olhada às instruções de compilação para Mac e Linux.
Obtendo o software que precisa
Esta seção lhe explica como configurar seu ambiente de Construção em Windows. Se tiver problemas ou necessita detalhes mas precisos, veja as Instruções (Windows).
Software pre-requisito
Primeiro, seu computador deve possuir o seguinte software instalado:
Software pre-requisito
Primeiro, seu computador deve possuir o seguinte software instalado:- Windows XP (SP2 ou superior) ou Windows Vista
- Microsoft Visual Studio 2005 (8.0)
Downloads Adicionais (livres)
Uma vez que o Visual Studio esteja instalado, necessitará descarregar e instalar alguns outros programas.
- Descarregue e instale Microsoft Visual Studio 2005 Service Pack 1.
Dependendo do seu computador, a instalação pode levar uma hora, e poderia ser que precise reiniciar. - Descarregue e instale o Microsoft Windows SDK.
Possa que seja necessário reiniciar. Pode poupar espaço escolhendo não instalar a documentação e os códigos de exemplo.
Nota: Ainda que o SDK diz que é para Vista, funciona em ambos sistemas, XP e Vista. Se já tem instalado Microsoft 2008 SDK, não precisa instalar um mais recente. - Integrar o SDK com Visual Studio:
Inicio > Todos os Programas > Microsoft Windows SDK > Visual Studio Registration > Integrate Windows SDK with Visual Studio 2005 - Obter as ferramentas Chromium depot_tools:
- Descarregue depot_tools.zip.
- Descompacte o arquivo.
Nota: Se já tem o Cygwin instalado, não use a ferramenta unzip; isto desconfigurará as permissões. - Agregue o diretorio depot tools ao seu PATH. Exemplo: C:\bin\depot_tools
Nota: Por omissão, depot_tools se atualizarão automaticamente à última versão cada vez que execute gclient. Veja a página de depot_tools se deseja desabilitar esta opção.
Código Chromium
O código base de Chromium consiste de centenas de milhares de arquivos, o qual significa que uma revisão correta do repositório da Subversão (SVN) pode tomar um bom tempo. Para acelerar o processo, temos fornecido um "tarball" que pode usar para viabilizar o download. Alternativamente, pode se saltar este passo do tarball e realizar o download direto desde o SVN (não é recomendado).
Nota: Aqui não existe vantagem revisando diretamente desde o SVN. O tarball inclui os diretorios SVN assim que depois de descompactar o tarball, pode conseguir a última revisão usando o gclient sync.
Si só deseja olhar o código fonte, precisará ao menos 1.6 GB de espaço disponível no seu disco rígido. Se deseja compila-lo e construir o binário, necessitará algo menos de 10 GB de espaço, incluindo todos os arquivos objeto e executáveis.
Para viabilizar o uso do tarball:
- Tenha certeza que você tem o programa que pode descompactar os arquivos .tar.gz. Exemplos destes programas incluem o manejador de arquivos de código aberto 7-Zip, a utilidade livre BsdTar (a qual forma parte do LibArchive e a qual usei), e WinZip.
- Descargue o fonte tarball.
- Escolha um diretorio para manter seu código fonte. Exemplo: c:\chromiumtrunk
Importante: Assegure-se que a rota do diretório criado não contenha espaços. - Descompacte o tarball fonte em um dos diretórios que tenha escolhido. Exemplo: Se esta usando LibArchive, execute o seguinte comando:
"C:\Program Files\GnuWin32\bin\bsdtar.exe" -xzf chromium.tgz - Opcionalmente, sincronize à última revisão do Chromium:
- Visite o Chromium Buildbot waterfall para ver o estado dos árvores. [Nota: Se esta parte da infraestrutura ainda não esta funcionando, por favor revise o topico do canal IRC #chromium IRC no irc.freenode.net.] Se a raíz do waterfall diz:
OPEN - O árvore está em um estado bom e você deveria estar em condição de compilar o código. Vai para o seguinte passo.
CLOSED - Podem ter falhas de testes ou compilação. Pode descarregar o código, mas obterá as mesmas falhas quando tente executar o resto dos testes ou de compilar. O melhor será voltar depois para revisar. - Em uma janela de DOS, execute os seguintes comandos:
cd c:\chromiumtrunk
gclient sync
A ferramenta gclient esta incluída nos depot tools descritos acima. A primeira vez que execute gclient, terá um retardo (um minuto ou mais) enquanto se atualizam as depot tools.
- Visite o Chromium Buildbot waterfall para ver o estado dos árvores. [Nota: Se esta parte da infraestrutura ainda não esta funcionando, por favor revise o topico do canal IRC #chromium IRC no irc.freenode.net.] Se a raíz do waterfall diz:
Usará a ferramenta gclient depot para descarregar o código Chromium desde seu repositorio SVN.
- Crie um diretorio para manter seu código fonte. Exemplo: c:\chromiumtrunk
Importante: Comprove que a rota do diretório não contenha espaços. - Visite o Chromium Buildbot waterfall para ver o estado do árvore [Nota: Se esta parte da infraestrutura não esta funcionando ainda, por favor revise o tópico do canal IRC #chromium no irc.freenode.net.] Se a raíz do waterfall diz:
OPEN - O árvore está em um estado bom e você deveria estar em condição de compilar o código. Vai para o seguinte passo.
CLOSED - Podem houver falhas de testes ou compilação. Pode descarregar o código, más obterá as mesmas falhas quando tente executar o resto dos testes ou de compilar. O melhor será voltar depois para revisar. - Em uma janela de DOS, execute os seguintes comandos:
cd c:\chromiumtrunk
gclient config http://src.chromium.org/svn/trunk/src
gclient sync
A primeira vez que execute gclient, terá um retardo (um minuto ou mais) emquanto atualizam as depot tools. Descarregar o código Chromium pode tomar uma hora.
Compilar e executar Chromium
Uma vez tenha todo o código e o software, pode compilar Chromium e executa-lo em modo de debug.
- Inicie Visual Studio. (Vamos assumir que você possui a versão em inglês)
- Selecione File > Open Project/Solution..., e vai ao diretorio src\chrome (baixo c:\chromiumtrunk ou onde tenha colocado os arquivos do Chromium), e abra o arquivo chrome.sln.
- No Solution Explorer, vai pro diretorio App , faça clic direito com o mouse chrome_exe, e escolha a opção Set as StartUp Project.
- Configure o perfil do Usuário usado pela sua compilação de Chromium:
- Faça clic direito em chrome_exe, e escolha Properties.
- Na coluna esquerda, escolha Configuration Properties > Debugging.
- Na coluna direita, troque o valor dos Command Arguments para algo como isto:
--user-data-dir=c:\tmp\DebugProfile
Pressione Ok. Chromium cria o diretório especificado (c:\tmp\DebugProfile no exemplo anterior) se o diretório ainda não existe.
Nota: Se decidir não configurar o perfil, então se tenta executar Chromium quando Google Chrome ou Chromium esta ainda executándo-se, uma nova janela virá no browser atual. Este comportamento garante acesso exclusivo ao perfil de usuário, mas signfica que não pode debugar sua versão de Chromium!
Advertência: Se a última compilação do Chromium tem um novo formato de perfil, Google Chrome e antigas versões do Chromium poderiam não ser capazes de ler este formato. Ao menos que configure o perfil, poderia perder seus dados do perfil de Google Chrome.
- Faça clic direito em chrome_exe, e escolha Properties.
- Pressione F5, el cual creará la solución chrome_exe e iniciará Chromium en modo Debug. Quando lhe seja perguntado se reconstruir projetos de outras datas (out-of-date) , escolha Yes.
- A compilação e construção toma entre 15-40 minutos. (Eu tomei uma hora e meia com um Centrino de 1.8 e 1.5 GB de RAM). Quando a compilação seja completada, uma janela do browser aparecerá no seu desktop.
Se a compilação falha ou uma nova janela do browser não aparece, vai para Instruções de Compilação (Windows) para conseguir ajuda.
Tome o tour
A forma mais fácil de se familiarizar com Chromium é seguir o que ele faz em resposta às ações do usuario.
Ação do usuario: Ingressando URLs
Se pode facilmente encontrar o codigo que esta sendo executado quando o usuário entra uma URL na barra de endereços.- Abrir(Ctrl+O) el archivo src\chrome\browser\autocomplete\autocomplete_edit.cc.
- Coloque um breakpoint no método AutocompleteEdit::AcceptInput .
O metodo AcceptInput é chamado cada vez que o usuário entra uma URL. - Vai para a sua janela do browser Chromium, escreva na barra de endereços algo assim como google.com, e pressione Enter. O UI deveriía se deter quando o breakpoint é alcanzado.
Nota: Se o UI não se congela, então probavelmente não se configurou o perfil usado pela sua compilação de Chromium. Por favor realize (olhe o Paso 4 de Compile e inicie Chromium) ou feche todas as janelas de Google Chrome e Chromium no seu desktop. Então regrese ao Visual Studio e pressione F5 de novo para executar o browser com o debugger. - Dê uma olhada à pilha de chamadas (call stack) (Debug > Windows > Call Stack). Este lhe mostrará a rota que o evento tomou da janela do sistema de código de Chromium que inicia o processamento do URL entrado pelo Usuário.
- Vai paso a paso no código (F10), olhando as abas Locais para ver os valores das variáveis tais como as url, até que chegar à linha que invoca o método OpenURL .
- Olhe o código e as abas Locais para ver os valores dos argumentos para OpenURL. Pode ver que a URL tem sido colorida (desde "google.com" até "http://google.com/", por exemplo), a transição é colocada em 1 (PageTransition::LINK), e assim. Porque a URL foi ingressada digitando, em vez de fazer clic para o item e deslocando-o, da seguinte à última variável chegarção AutocompletePopup::kNoMatch.
- Para encontrar mais sobre transições da página, selecione a palavra PageTransition, com clic direito, e escolha a opção Go To Definition. Verá a definição de PageTransition en src\chrome\common\page_transition_types.h. Assim como o código fonte e os comentários se amostram, as transições de páginas descrevem que disparou a pagina visitada. As transições incluem clics nos links, digitados nas URLs (como o único neste caso), envíos de formularios, recargas, e muito mais.
- Volte à aba de autocomplete_edit.cc, e percorra paso a paso no método OpenURL (F11). Quando se encontre vendo ao código que esta tambem em baixo nível, saia-se (Shift-F11) e entre de novo (F11). Continue pasando através do código que segue e veja que acontece quando a página é carregada.
- Quando esteja pronto, pressione F5 para continuar executando o browser.
- Opcional: Tente outras formas de entrar uma URL. Por exemplo:
- Comece digitando em uma URL, mas em vez de pressionar Enter, use o rato para clicar na URL deslocada. Compare a pilha de chamados (call stack) e os valores das variáveis com respeito às que viu previamente.
- Entre um carater ou palavra -- uma que não tenha usado antes, tais como x -- dentro do campo da URL. Note que a variável alternative_nav_url logo terá um valor, tal como http://x/. Note tambem que a transição é 5, indicando que o URL tem sido gerado (PageTransition::GENERATED).
- Desloque uma URL no browser. Note que a pilha de chamados (call stack) é diferente, desde que AcceptInput é chamado por um handler do evento drop .
Ação do Usuário : Clicando links
A resposta do browser aos clics nos links é um pouquinho complicado, pelos multi-processos do Chromium, a a arquitetura multi-thread.- Abra (Ctrl+O) o arquivo src\chrome\browser\browser.cc.
- Coloque um breakpoint no método Browser::NavigationStateChanged .
- Clique um link em qualquer página. Chegará até o breakpoint.
- Olhe para a pilha de chamados (call stack). Verá o método chamar à mensagem relacionada quando pasar entre threads no mesmo processo (assim como MessageLoop::QueueOrRunTask; veja Threads (em inglês)) e entre processos (assim como RenderViewHost::OnMessageReceived; veja Arquitetura Multi-processo e Comunicação Inter-processo em inglês).
- Pressione F5 para iniciar a execução de novo. Imediatemente chegará até outro breakpoint, assim como a aba se redisenha assim mesma.
Característica: Comandos do browser
Com freqüência, o usuário pode solicitar uma operação de diferentes maneiras. Por exemplo, o usuário pode recarregar uma página pressionando o botão de Recarregar ou pressionando F5. Para evitar o código duplicado, muitas operações são manejadas por um código comúm, no formulario de comandos.- Abra (Ctrl+O) o arquivo src\chrome\browser\browser_commands.cc.
- Coloque um breakpoint no método Browser::ExecuteCommand.
- No browser, pressione o botão da estrela à esquerda da barra de endereços. Ai alcanzará o breakpoint.
- Veja a pilha de chamados (call stack). Isto inclui uma cadeia de eventos de liberação do botão do rato mouse-release, incluindo BaseButton::OnMouseReleased.
- Na aba de Locais, olhe o valor do id. Éste identifica a operação que o usuário tem solicitado.
- Percorra na sentença de caso (IDC_STAR) que usa esta operação. Note que a ação esta sendo gravada dentro das métricas do usuário, e então o código para executar a ação é invocada.
- Selecione IDC_STAR, clic direito, e selecione Go To Definition. Verá sua definição (e muitos outros destes comandos) em chrome_dll_resource.h.
- Pressione F5 para continuar executando o browser.
- Pressione Ctrl+D, o teclado alternativo para a estrela. Estará alcanzando o breakpoint de novo.
- Olhe a pilha de chamados (call stack). Esta vez, contém a maioría de chamados relacionados aos inter-processos e comunicações thread-ao-thread. O único handler de evento que é visível na pihla de chamados (call stack) é WebContents::HandleKeyboardEvent.
- Note que o valor de id é o mesmo que antes, assim que o mesmo código será executado quando tem usado o botão de estrela.
- Opcional: Olhe os outros comandos do browser, incluindo alguns comandos de menu. Por exemplo:
- Ctrl+T e a Nova Aba do item de menu.
- Botón Recarregar e F5
O que segue?
Agora que tem compilado Chromium e percorrido entre algumas linhas do seu código, aqui tem algumas sugestões do que podería fazer agora.- Ler Revisando o Código Fonte de Chromium
- Ler os documentos de design
- Visite o blog Chromium e suscreva-se ao seu canal RSS
- Visite os grupos de discusão de desenvolvedores
- Pense sobre como você gostaria envolve-se
Espero que tenham gostado, lhes tenha servido de algo e ... os tenha motivado e façam conseguido, como eu, compilar e brincar paso a paso com o código fonte dol novo browser de Google.
Em uma próxima entrega, gostaria comentar como se poderia compilar em Linux, mas pelo que tenho lido, ainda esta em testes unitarios. Estou otimista, que, por lo que sei Google tem escolhido uma distribuição, baseada em Linux Ubuntu 8.04, Hardy Heron, o qual me facilitará muito, realizar esta experiência.