sábado, 6 de septiembre de 2008

Brincando com o fonte de Google chrome (Português)



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


Se você esta seriamente interessado sobre o aprendizado de como Chromium funciona, esta página é para você. Poderá obter o código de Chromium e compila-lo. Então usará o debugger (ou depurador) do Visual Studio 2005 para ver como o browser funciona — em especial, como responde às ações comuns do usuário.

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:
  • 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.

  1. 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.

  2. 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.

  3. Integrar o SDK com Visual Studio:

    Inicio > Todos os Programas > Microsoft Windows SDK > Visual Studio Registration > Integrate Windows SDK with Visual Studio 2005


  4. Obter as ferramentas Chromium depot_tools:

    1. Descarregue depot_tools.zip.

    2. Descompacte o arquivo.
      Nota: Se já tem o Cygwin instalado, não use a ferramenta unzip; isto desconfigurará as permissões.

    3. 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:
  1. 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.

  2. Descargue o fonte tarball.

  3. 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.

  4. 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


  5. Opcionalmente, sincronize à última revisão do Chromium:

    1. 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.

    2. 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.
Para revisar diretamente desde o SVN:

Usará a ferramenta gclient depot para descarregar o código Chromium desde seu repositorio SVN.
  1. 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.

  2. 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.

  3. 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.
  1. Inicie Visual Studio. (Vamos assumir que você possui a versão em inglês)

  2. 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.

  3. 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.

  4. Configure o perfil do Usuário usado pela sua compilação de Chromium:

    1. Faça clic direito em chrome_exe, e escolha Properties.

    2. Na coluna esquerda, escolha Configuration Properties > Debugging.

    3. 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.

  5. 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.

  6. 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.
  1. Abrir(Ctrl+O) el archivo src\chrome\browser\autocomplete\autocomplete_edit.cc.

  2. Coloque um breakpoint no método AutocompleteEdit::AcceptInput .
    O metodo AcceptInput é chamado cada vez que o usuário entra uma URL.

  3. 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.

  4. 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.

  5. 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 .

  6. 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.

  7. 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.

  8. 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.

  9. Quando esteja pronto, pressione F5 para continuar executando o browser.

  10. 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 .
Para mais informação, veja a seção Navegando desde a barra de URL de Revisando o código fonte de Chromium. (em inglês)

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.
  1. Abra (Ctrl+O) o arquivo src\chrome\browser\browser.cc.

  2. Coloque um breakpoint no método Browser::NavigationStateChanged .

  3. Clique um link em qualquer página. Chegará até o breakpoint.

  4. 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).

  5. 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.
  1. Abra (Ctrl+O) o arquivo src\chrome\browser\browser_commands.cc.

  2. Coloque um breakpoint no método Browser::ExecuteCommand.

  3. No browser, pressione o botão da estrela à esquerda da barra de endereços. Ai alcanzará o breakpoint.

  4. 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.

  5. Na aba de Locais, olhe o valor do id. Éste identifica a operação que o usuário tem solicitado.

  6. 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.

  7. Selecione IDC_STAR, clic direito, e selecione Go To Definition. Verá sua definição (e muitos outros destes comandos) em chrome_dll_resource.h.

  8. Pressione F5 para continuar executando o browser.

  9. Pressione Ctrl+D, o teclado alternativo para a estrela. Estará alcanzando o breakpoint de novo.

  10. 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.

  11. 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.

  12. 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.

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.

Jugando con el fuente de Google chrome (Español)



Quedé muy impresionado, con la manera tan fácil, que logré compilar Google Chrome, siguiendo los pasos que se encuentran publicados en http://dev.chromium.org/developers/how-tos/getting-started. (A esto le llamo, una verdadera intención de compartir el código)

Yo soy fan número uno de Mozilla FireFox y de las herramientas Open Source, de los sistemas operativos abiertos (y sus diferentes distribuciones) a pesar que, para ganarme la vida deba moverme entre herramientas de Microsoft, Sun, de la comunidad abierta y a veces de una que otra pasada de moda, que aun me parecen válidas. Pero tengo que admitir, que para lograr compilar el FireFox, o el Minimo (versión mobile para Pocket PC y Windows Mobile) la cantidad de pasos, pre- requisitos, son muchos y en algunos casos, dificiles de conseguir.

A continuación voy a compartir una traducción al español de esos pasos, para deleite de los gomosos (entusiastas) que comparten conmigo, la opinión que Google Chrome es un excelente navegador, muy liviano, muy rápido y demasiado estable, todas estas características, para ser un navegador versión Beta.

Breves comentarios de Google Chrome antes de comenzar.

La mayor parte del código esta desarrollada en C (curiosamente las extensiones de los archivos son .cc y h, no cpp). Tiene muchos modulos que incluyen Java script, para complementar su funcionalidad, pero una de las cosas mas curiosas, es que aun no soporta Objetos de Microsoft Active X.

En las pruebas preliminares ingresé a YouTube, asi que comprobé que es compatible con los formatos de video FLV. El Java Script es super rápido, su ejecución se basa en un motor llamado V8. Aqui podemos ver un video en inglés con subtitulos en español, que describe buena parte de las ideas en las que se basaron para justificar la creación de este browser. http://tools.google.com/chrome/intl/es-419/features.html, llamado por algunos, el MS IE Killer (vaya uno a saber)

A continuación, la traducción de la página que comenté anteriormente. Podria haber pasado el traductor disponible por la propia Google, pero quedé tan impresionado, que me animé a hacer la traducción, ya que segui los pasos, y de una manera simple, sin rodeos, ni secretos propios de Geeks o genios de la computación, lo logré. La mayor demora fue, la descarga del código. Eso si que me dió trabajo. Imagino que deben existir alrededor del mundo una mano (gran cantidad) de gomosos (entusiastas) con la misma curiosidad que yo, lo cual dificultó dicha descarga. Tuve que intentarlo, sin mentirles, 5 veces. Me perdonarán los errores al español, traté de ser lo mas parco y correcto posible, pero con seguridad, habrá una que otra palabra, que no fue fielmente traducida, y colocada, mas pensando en el lenguaje tipico, con el que me comunicaría con alguno de mis compañeros de oficina. Por ejemplo, Build ( a pesar de significar construcción del código, nosotros le llamamos compilación, a sabiendas, que este paso es solo uno, de los necesarios para llegar al ejecutable, binario u objeto)


Comenzando


Si usted esta seriamente interesado sobre el aprendizaje de como Chromium funciona, esta página es para usted. Podrá obtener el código de Chromium y compilarlo. Entonces usará el debugger (o depurador) de Visual Studio 2005 para ver como el navegador funciona — en particular, como responde a acciones comunes de usuario.

Nota: Esta página es para desarrolladores y testers que tienen Windows y quieren revisar el código en ejecución. Si usted no se siente preparado para compilar el ambiente, puede leer la documentación. Si no tiene Windows, dele una ojeada a las instrucciones de compilación para Mac y Linux.

Obteniendo el software que necesita

Esta sección le explica como configurar su ambiente de Construcción en Windows. Si tiene problemas o necesita detalles mas precisos, vea las Instrucciones (Windows).

Software prerrequisito

Primero, su computador debe tener el siguiente software instalado:
  • Windows XP (SP2 o superior) o Windows Vista
  • Microsoft Visual Studio 2005 (8.0)

Descargas Adicionales (libres)

Una vez que Visual Studio esté instalado, necesitará descargar e instalar algunos otros programas.

  1. Descargue e instale Microsoft Visual Studio 2005 Service Pack 1.
    Dependendiendo de su computador, la instalación puede llevar una hora, y pueda ser que necesite reiniciar.

  2. Descargue e instale el Microsoft Windows SDK.
    Pueda que sea necesario reiniciar. Puede ahorrar espacio eligiendo no instalar la documentación y los códigos de ejemplo.

    Nota:
    Aunque el SDK dice que es para Vista, funciona en ambos sistemas, XP y Vista. Si ya tiene instalado Microsoft 2008 SDK, no necesita instalar uno mas reciente.

  3. Integrar el SDK con Visual Studio:

    Inicio > Todos los Programas > Microsoft Windows SDK > Visual Studio Registration > Integrate Windows SDK with Visual Studio 2005


  4. Obtener las herramientas Chromium depot_tools:

    1. Descargue depot_tools.zip.

    2. Descomprima el archivo.
      Nota: Si ya tiene el Cygwin instalado, no use su herramienta unzip; esto desconfigurará los permisos.

    3. Agregue el directorio depot tools a su PATH. Ejemplo: C:\bin\depot_tools
      Nota: Por omisión, depot_tools se actualizarán automaticamente a la última version cada vez que ejecute gclient. Vea la página de depot_tools si desea deshabilitar esta opción.

Código Chromium

El código base de Chromium consiste de cientos de miles de archivos, lo cual significa que una revisión correcta del repositorio de la Subversion (SVN) puede tomar un buen tiempo. Para acelerar el proceso, hemos suministrado un "tarball" que puede usar para viabilizar la descarga. Alternativamente, puede saltarse este paso del tarball y realizar la descarga directa desde el SVN (no es recomendado).

Nota: Aqui no existe ventaja revisando directamente desde el SVN. El tarball incluye los directorios SVN asi que despues de descomprimir el tarball, puede conseguir la última revision usando el gclient sync.

Si solo desea mirar el código fuente, necesitará al menos 1.6 GB de espacio disponible en su disco duro. Si desea compilarlo y construir el binario, necesitará algo menos de 10 GB de espacio, incluyendo todos los archivos objeto y ejecutables.

Para viabilizar el uso del tarball:
  1. Asegurese que usted tiene el programa que puede descomprimir los archivos .tar.gz. Ejemplos de estos programas incluyen el manejador de archivos de código abierto 7-Zip, la utilidad libre BsdTar (la cual forma parte de LibArchive y que fue la que usé), y WinZip.

  2. Descargue el fuente tarball.

  3. Escoja un directorio para mantener su codigo fuente. Ejemplo: c:\chromiumtrunk

    Importante:
    Asegúrese que la ruta del directorio creado no contenga espacios.

  4. Descomprima el tarball fuente en uno de los directorios que haya elegido. Ejemplo: Si esta usando LibArchive, ejecute el siguiente comando:

    "C:\Program Files\GnuWin32\bin\bsdtar.exe" -xzf chromium.tgz


  5. Opcionalmente, sincronice a la última revision de Chromium:

    1. Visite el Chromium Buildbot waterfall para ver el estado de los árboles. [Nota: Si esta parte de la infraestructura aun no esta funcionando, por favor revise el topico del canal IRC #chromium IRC en el irc.freenode.net.] Si la raíz del waterfall dice:

      OPEN
      - El árbol está en un buen estado y usted deberia estar en condición de compilar el código. Vaya al siguiente paso.

      CLOSED
      - Pueden haber fallas de pruebas o compilación. Puede descargar el código, pero obtendrá las mismas fallas cuando intente ejecutar el resto de las pruebas o de compilar. Lo mejor será volver después a revisar.

    2. En una ventana de DOS, ejecute los siguientes comandos:

      cd c:\chromiumtrunk
      gclient sync

      La herramienta gclient esta incluida en los depot tools descritos arriba. La primera vez que ejecute gclient, habrá un retardo (un minuto o más) mientras actualizan las depot tools.
Para revisar directamente desde el SVN:

Usará la herramienta gclient depot para descargar el código Chromium desde su repositorio SVN.
  1. Cree un directorio para mantener su código fuente. Ejemplo: c:\chromiumtrunk

    Importante:
    Asegúrese que la ruta del directorio no contenga espacios.

  2. Visite el Chromium Buildbot waterfall para ver el estado del árbol [Nota: Si esta parte de la infraestructura no esta funcionando todavía, por favor revise el topico del canal IRC #chromium en irc.freenode.net.] Si la raíz del waterfall dice:


    OPEN
    - El árbol está en un buen estado y usted deberia estar en condición de compilar el código. Vaya al siguiente paso.

    CLOSED
    - Pueden haber fallas de pruebas o compilación. Puede descargar el código, pero obtendrá las mismas fallas cuando intente de ejecutar el resto de las pruebas o de compilar. Lo mejor será volver después a revisar.

  3. En una ventana de DOS, ejecute los siguientes comandos:

    cd c:\chromiumtrunk

    gclient config http://src.chromium.org/svn/trunk/src
    gclient sync

    La primera vez que ejecute gclient, habrá un retardo (un minuto o más) mientras actualiza las depot tools. Descargar el código Chromium puede tomar una hora.

Compilar y ejecutar Chromium

Una vez tenga todo el código y el software, puede compilar Chromium y ejecutarlo en modo de depuración (debug).
  1. Inicie Visual Studio. (Vamos a asumir que usted posee la versión en inglés)

  2. Seleccione File > Open Project/Solution..., y vaya al directorio src\chrome (bajo c:\chromiumtrunk o donde haya colocado los archivos del Chromium), y abra el archivo chrome.sln.

  3. En el Solution Explorer, vaya al directorio App , haga clic derecho con el mouse chrome_exe, y elija la opción Set as StartUp Project.

  4. Configure el perfil de Usuario usado por su compilación de Chromium:

    1. Haga clic derecho en chrome_exe, y elija Properties.

    2. En la columna izquierda, escoja Configuration Properties > Debugging.

    3. En la columna derecha, cambie el valor de los Command Arguments a algo como esto:

      --user-data-dir=c:\tmp\DebugProfile


      Presione Ok. Chromium crea el directorio especificado (c:\tmp\DebugProfile en el ejemplo anterior) si el directorio no existe aún.

      Nota:
      Si decide no configurar el perfil, entonces si intenta ejecutar Chromium cuando Google Chrome o Chromium esta aun ejecutándose, una nueva ventana vendrá en el navegador actual. Este comportamiento garantiza acceso exclusivo al perfil de usuario, pero signfica que no puede depurar su version de Chromium!

      Advertencia: Si la última compilación de Chromium tiene un nuevo formato de
      perfil, Google Chrome y antiguas versiones de Chromium podrian no ser capaces de leer este formato. A menos que configure el perfil, podría perder sus datos del perfil de Google Chrome.

  5. Presione F5, el cual creará la solución chrome_exe e iniciará Chromium en modo Debug. Cuando le sea preguntado si reconstruir proyectos de otras fechas (out-of-date) , escoja Yes.

  6. La compilación y construcción toma entre 15-40 minutos. (A mi me tomó una hora y media con un Centrino de 1.8 y 1.5 GB de RAM). Cuando la compilación se complete, una ventana del navegador aparecerá en su escritorio.

    Si la compilación falla o una nueva ventana del navegador no aparece, vaya a Instrucciones de Compilación (Windows) para conseguir ayuda.

Tome el tour

La forma mas fácil de familiarizarse con Chromium es seguir que hace en respuesta a las acciones del usuario.

Acción del usuario: Ingresando URLs

Se puede facilmente encontrar el codigo que esta siendo ejecutado cuando el usuario ingresa una URL en la barra de direcciones.
  1. Abrir(Ctrl+O) el archivo src\chrome\browser\autocomplete\autocomplete_edit.cc.

  2. Coloque un punto de ruptura (breakpoint) en el método AutocompleteEdit::AcceptInput .
    El metodo AcceptInput es invocado cada vez que el usuario ingresa una URL.

  3. Vaya a su ventana del navegador Chromium, escriba en la barra de direcciones algo asi como google.com, y presione Enter. El UI debería detenerse cuando el punto de ruptura (breakpoint) es alcanzado.

    Nota: Si el UI no se congela, entonces probablemente no se configuró el perfil usado por su compilación de Chromium. Por favor realice (mire el Paso 4 de Compile e inicie Chromium) o cierre todas las ventanas de Google Chrome y Chromium en su escritorio. Entonces regrese a Visual Studio y presione F5 de nuevo para ejecutar el navegador con el depurador (debugger).

  4. Dele una mirada a la pila de llamadas (call stack) (Debug > Windows > Call Stack). Este le mostrará la ruta que el evento tomó de la ventana del sistema de código de Chromium que inicia el procesamiento del URL ingresado por el Usuario.

  5. Vaya paso a paso en el código (F10), mirando las pestañas Locales para ver los valores de las variables tales como las url, hasta que llegue a la linea que invoca el metodo OpenURL .

  6. Mire el código y las pestañas Locals para ver los valores de los argumentos para OpenURL. Puede ver que la URL ha sido coloreada (desde "google.com" hasta "http://google.com/", por ejemplo), la transición es colocada en 1 (PageTransition::LINK), y asi. Porque la URL fue ingresada digitando, en vez de hacerle clic a un item y arrastrándolo, de la siguiente a la última variable llegarán AutocompletePopup::kNoMatch.

  7. Para encontrar mas sobre transiciones de página, seleccione la palabra PageTransition, con clic derecho, y elija la opción Go To Definition. Verá la definición de PageTransition en src\chrome\common\page_transition_types.h. Asi como el código fuente y los comentariosse muestran, las transiciones de páginas describen que disparó la pagina visitada. Las transiciones incluyen clics en los enlaces, digitados en las URLs (como el único en este caso), envíos de formularios, recargas, y mucho mas.

  8. Vuelva a la pestaña de autocomplete_edit.cc, y vaya paso a paso en el método OpenURL (F11). Cuando se encuentre viendo al código que esta también en bajo nivel, sálgase (Shift-F11) y entre de nuevo (F11). Continue pasando a través del código que sigue y ver que pasa cuando la página es cargada.

  9. Cuando este listo, presione F5 para continuar ejecutando el navegador.

  10. Opcional: Intente otras formas de introducir una URL. Por ejemplo:
  • Comience digitando en una URL, pero en vez de presionar Enter, use el ratón para hacer clic en la URL arrastrada. Compare la pila de llamados (call stack) y los valores de las variables con respecto a las que vió previamente.

  • Ingrese un caracter o palabra -- una que no haya usado antes, tales como x -- dentro del campo de URL. Note que la variable alternative_nav_url pronto tendrá un valor, tal como http://x/. Note también que la transición es 5, indicando que el URL ha sido generado (PageTransition::GENERATED).

  • Arrastre una URL en el navegador. Note que la pila de llamados (call stack) es diferente, desde que AcceptInput es llamado por un handler del evento drop .
Para más información, vea la sección Navegando desde la barra de URL de Revisando el código fuente de Chromium. (en inglés)

Acción del Usuario : Clicando enlaces

La respuesta del navegador a los clics en los enlaces es un tris complicado, debido a los multi-procesos del Chromium, y la arquitectura multi-hilo.
  1. Abra (Ctrl+O) el archivo src\chrome\browser\browser.cc.

  2. Coloque un punto de ruptura (breakpoint) en el método Browser::NavigationStateChanged .

  3. Clique un enlace en cualquier página. Llegará hasta el punto de ruptura(breakpoint).

  4. Mire la pila de llamados (call stack). Verá el método llamar al mensaje relacionado al pasar entre hilos en el mismo proceso (asi como MessageLoop::QueueOrRunTask; vea Hilos (en inglés)) y entre procesos (asi como RenderViewHost::OnMessageReceived; vea Arquitectura Multi-proceso y Comunicación Inter-proceso en inglés).

  5. Presione F5 para iniciar la ejecución de nuevo. Inmediatemente llegará hasta otro punto de ruptura (breakpoint), asi como la pestaña se redibuja asi misma.

Característica: Comandos del navegador

A menudo, el usuario puede solicitar una operación de diferentes maneras. Por ejemplo, el usuario puede recargar una página presionando el botón de Recargar o presionando F5. Para evitar el código duplicado, muchas operaciones son manejadas por un código común, en el formulario de comandos.
  1. Abra (Ctrl+O) el archivo src\chrome\browser\browser_commands.cc.

  2. Coloque un breakpoint en el método Browser::ExecuteCommand.

  3. En el navegador, presione el botón de la estrella a la izquierda de la barra de direcciones. Ahi alcanzará el breakpoint.

  4. Vea la pila de llamados (call stack). Esto incluye una cadena de eventos de liberación del botón del ratón mouse-release, incluyendo BaseButton::OnMouseReleased.

  5. En la pestaña de Locals, mire el valor de id. Éste identifica la operación que el usuario ha solicitado.

  6. Vaya paso a paso en la sentencia de caso (IDC_STAR) que maneja esta operación. Note que la acción esta siendo grabada dentro de las métricas del usuario, y entonces el código para ejecutar la acción es invocada.

  7. Seleccione IDC_STAR, clic derecho, y seleccione Go To Definition. Verá su definición (y muchos otros de estos comandos) en chrome_dll_resource.h.

  8. Presione F5 para continuar ejecutando el navegador.

  9. Presione Ctrl+D, el teclado alternativo para la estrella. Estará alcanzando el breakpoint de nuevo.

  10. Mire la pila de llamados (call stack). Esta vez, contiene la mayoría de llamados relacionados a los inter-procesos y comunicaciones hilo-a-hilo. El único handler de evento que es visible en la pila de llamados (call stack) es WebContents::HandleKeyboardEvent.

  11. Note que el valor de id es el mismo que antes, asi que el mismo código será ejecutado cuando ha usado el botón de estrella.

  12. Opcional: Mire los otros comandos del navegador, incluyendo algunos comandos de menu. Por ejemplo:
  • Ctrl+T y la Nueva Pestaña del item de menu.
  • Botón Recargar y F5

Que sigue?

Ahora que ha compilado Chromium e ido paso a paso entre algunas lineas de su código, aqui hay algunas sugerencias de lo que podría hacer ahora.

Espero les haya gustado, les haya servido de algo y ... los haya motivado y hayan conseguido, como yo, compilar y jugar paso a paso con el código fuente del nuevo navegador de Google.

En una próxima entrega, me gustaría comentar como se podría compilar en Linux, pero por lo que he leido, aun esta en pruebas unitarias. Estoy optimista, que, por lo que sé Google ha escogido una distribución, basada en Linux Ubuntu 8.04, Hardy Heron, lo cual me facilitará mucho, realizar esta experiencia.