编译Google浏览器

 

        Google一直传言要做自己的浏览器,上周三终于出了Windows环境下的Beta版。Google总是提供免费的午餐,这次也不例外,不是指免费使用google浏览器,而是指代码完全开源。

 

本来还没开始编译,先Copy在这:http://sites.google.com/a/chromium.org/dev/developers/how-tos/getting-started

Getting Started

If you're serious about learning how Chromium works, this is the page for you. You'll get the Chromium code and build it. Then you'll use the Visual Studio 2005 debugger to see how the browser works — in particular, how it responds to common user actions.


Note: This page is aimed at developers and testers who have Windows and want to inspect running code. If you're not ready to set up a build environment, you can read the documentation . If you don't have Windows, check out the build instructions for Mac and Linux .

Get the software you need

This section tells you how to set up your Windows build environment. If you have problems or want further details, see Build Instructions (Windows) .

Prerequisite software

First, your computer must have the following software installed:
  • Windows XP (SP2 or later) or Windows Vista
  • Microsoft Visual Studio 2005 (8.0)

Additional (free) downloads

Once Visual Studio is installed, you need to download and install some more software.

  1. Download and install Microsoft Visual Studio 2005 Service Pack 1 .
    Depending on your computer, installation can take about an hour, and you might need to reboot.

  2. Download and install the Microsoft Windows SDK .
    You might need to reboot. You can save space by not installing the documentation and code samples.

    Note:
    Although the SDK says it's for Vista, it works on both XP and Vista. If you already have the Microsoft 2008 SDK, you don't need to install a new one.

  3. Integrate the SDK with Visual Studio:

    Start > All Programs > Microsoft Windows SDK > Visual Studio Registration > Integrate Windows SDK with Visual Studio 2005


  4. Get the Chromium depot_tools :
    1. Download depot_tools.zip .

    2. Unzip the file.
      Note: If you have Cygwin installed, don't use its unzip tool; it will mess up the permissions.

    3. Add the depot tools directory to your PATH. Example: C:\bin\depot_tools
      Note: By default, the depot_tools will automatically update to the latest version every time you run gclient . See the depot_tools page if you want to disable this behavior.


Chromium code

The Chromium codebase consists of hundreds of thousands of files, which means that a checkout straight from the Subversion (SVN) repository can take a long time. To speed up the process, we have provided a tarball that you can use to bootstrap the download. Alternatively, you can skip the tarball and download straight from SVN (not recommended).

Note: There is no advantage to checking out straight from SVN. The tarball includes SVN directories so that after you unpack the tarball, you can get up to the latest revision by using gclient sync .

If you only want to look at the source code, you'll need at least 1.6 GB of hard drive space available. If you want to build it, you will need just under 10 GB of space, including all the object files and executables.

To bootstrap using the tarball:
  1. Make sure that you have a program that can untar .tar.gz files. Examples include the open-source 7-Zip archiver, the free BsdTar utility (part of LibArchive ), and WinZip.

  2. Download the source tarball .

  3. Choose a directory to hold your source code. Example: c:\chromiumtrunk

    Important:
    Make sure the directory path has no spaces .

  4. Untar the source tarball into the directory you've chosen. Example: If you're using LibArchive, issue the following command:

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


  5. Optionally, sync to the latest revision of Chromium:

    1. Visit the Chromium Buildbot waterfall to see the state of the tree. [Note: If this part of the infrastructure is not yet working, please check the topic of the #chromium IRC channel on irc.freenode.net instead.] If the top of the waterfall says:

      OPEN
      - The tree is in a good state and you should be able to compile the code. Go to the next step.

      CLOSED
      - There might be compile or test failures. You can download the code, but you'll get those same failures when you try to compile or run tests. Best to check back later.

    2. In a shell window, execute the following commands:

      cd c:\chromiumtrunk
      gclient sync

      The gclient tool is included in the depot tools described above. The first time you execute gclient, there will be a delay (a minute or so) while it updates the depot tools.
To check out directly from SVN:

You'll use the gclient depot tool to download the Chromium code from its SVN repository.
  1. Create a directory to hold your source code. Example: c:\chromiumtrunk

    Important:
    Make sure the directory path has no spaces .

  2. Visit the Chromium Buildbot waterfall to see the state of the tree. [Note: If this part of the infrastructure is not yet working, please check the topic of the #chromium IRC channel on irc.freenode.net instead.] If the top of the waterfall says:

    OPEN
    - The tree is in a good state and you should be able to compile the code. Go to the next step.

    CLOSED
    - There might be compile or test failures. You can download the code, but you'll get those same failures when you try to compile or run tests. Best to check back later.

  3. In a shell window, execute the following commands:

    cd c:\chromiumtrunk

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

    The first time you execute gclient , there will be a delay (a minute or so) while it updates the depot tools. Downloading the Chromium code takes about an hour.

Build and launch Chromium

Once you have all the software and code, you can build Chromium and launch it in debug mode.
  1. Launch Visual Studio.

  2. Choose File > Open Project/Solution... , go to the src\chrome directory (under c:\chromiumtrunk or wherever you put the Chromium files), and open the file chrome.sln .

  3. In the Solution Explorer, go to the App directory, right-click chrome_exe , and choose Set as StartUp Project .

  4. Set the user profile used by your build of Chromium:

    1. Right-click chrome_exe , and choose Properties .

    2. In the left column, choose Configuration Properties > Debugging .

    3. In the right column, change the value of Command Arguments to something like this:

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


      Click Ok . Chromium creates the specified profile directory (c:\tmp\DebugProfile in the previous example) if the directory doesn't already exist.

      Note:
      If you don't set the profile, then if you try to launch Chromium when Google Chrome or Chromium is already running, a new window comes up in the already running browser . This behavior ensures exclusive access to the user profile, but it means that you can't debug your version of Chromium!

      Warning: If the latest build of Chromium has a new profile format, Google Chrome and older versions of Chromium might not be able to read that format. Unless you set the profile, you could lose your Google Chrome profile data.

  5. Press F5 , which builds the chrome_exe solution and launches Chromium in debug mode. When you're asked whether to build out-of-date projects, choose Yes .

  6. Building takes 15-40 minutes. When the build completes, a browser window appears on your desktop.

    If the build fails or a new browser window does not appear, go to Build Instructions (Windows) for help.

Take the tour

The easiest way to start getting familiar with Chromium is to follow what it does in response to user actions.

User action: Entering URLs

You can easily find the code that's executed when the user enters a URL at the address bar.

  1. Open (Ctrl+O ) the file src\chrome\browser\autocomplete\autocomplete_edit.cc .

  2. Place a breakpoint at the AutocompleteEdit::AcceptInput method.
    The AcceptInput method is called whenever the user enters a URL.

  3. Go to your Chromium browser window, type in a web address such as google.com , and press Return. The UI should freeze when the breakpoint is hit.

    Note: If the UI doesn't freeze, then you probably didn't set the profile used by your build of Chromium. Please do so (see Step 4 of Build and launch Chromium ) or close all Google Chrome and Chromium windows on your desktop. Then go back to Visual Studio and press F5 again to run the browser within the debugger.

  4. Take a look at the call stack (Debug > Windows > Call Stack ). It shows you the path that the event took from the window system to the Chromium code that starts processing the user-entered URL.

  5. Step through the code (F10 ), looking at the Locals tab to see the values of variables such as url , until you reach the line that invokes the OpenURL method.

  6. Look at the code and the Locals tab to see the values of the arguments to OpenURL . You can see that the URL has been fleshed out (from "google.com" to "http://google.com/", for example), the transition is set to 1 (PageTransition::LINK ), and so on. Because you entered the URL by typing, rather than clicking an item in the drop-down, the next-to-last variable is set to AutocompletePopup::kNoMatch .

  7. To find out more about page transitions, select the word PageTransition , right-click, and choose Go To Definition . You'll see the definition of PageTransition in src\chrome\common\page_transition_types.h . As the source code and comments show, page transitions describe what triggered the page visit. Transitions include clicks on links, typed-in URLs (like the one in this case), form submissions, reloads, and more.

  8. Go back to the autocomplete_edit.cc tab, and step into the OpenURL method (F11 ). When you find yourself looking at code that's too low level, step out (Shift-F11 ) and step again (F11 ). Continue stepping through the code to follow what happens as the page is loaded.

  9. When you're ready to go on, press F5 to continue executing the browser.

  10. Optional: Try other ways of entering a URL. For example:
  • Start typing in a URL, but instead of pressing Enter, use the mouse to click a URL from the drop-down. Compare the call stack and variable values to the ones that you saw previously.

  • Enter one character or word -- one you haven't used before, such as x -- into the URL field. Note that the variable alternative_nav_url soon has a value, such as http://x/ . Also note that the transition is 5, indicating that the URL has been generated (PageTransition::GENERATED ).

  • Drag a URL into the browser. Note that the call stack is different, since AcceptInput is called by a drop event handler.

For more information, see the Navigating from the URL bar section of Getting Around the Chromium Source Code .

User action: Clicking links

The browser's response to clicks on links is a bit complicated, due to Chromium's multi-process, multi-threaded architecture.

  1. Open (Ctrl+O) the file src\chrome\browser\browser.cc .

  2. Place a breakpoint at the Browser::NavigationStateChanged method.

  3. Click a link in any page. You'll hit the breakpoint.

  4. Look at the call stack. You'll see method calls related to message passing between threads in the same process (such as MessageLoop::QueueOrRunTask ; see Threading ) and between processes (such as RenderViewHost::OnMessageReceived ; see Multi-process Architecture and Inter-process Communication ).

  5. Press F5 to start executing again. You'll immediately hit another breakpoint, as the tab redraws itself.

Feature: Browser commands

Often, the user can request an operation in more than one way. For example, the user can reload a page by pressing the Reload button or by pressing F5. To avoid duplicating code, many operations are handled by common code, in the form of commands .

  1. Open (Ctrl+O) the file src\chrome\browser\browser_commands.cc .

  2. Place a breakpoint at the Browser::ExecuteCommand method.

  3. In the browser, press the star button to the left of the address bar. You'll hit the breakpoint.

  4. Look at the call stack. It includes a chain of mouse-release event handlers, including BaseButton::OnMouseReleased .

  5. In the Locals tab, look at the value of id . It identifies the operation that the user requested.

  6. Step into the case statement (IDC_STAR ) that handles this operation. Note that the action is being recorded into user metrics, and then the code to perform the action is called.

  7. Select IDC_STAR , right-click, and choose Go To Definition. You'll see its definition (and those of many other commands) in chrome_dll_resource.h .

  8. Press F5 to continue executing the browser.

  9. Press Ctrl+D , the keyboard alternative for star. You'll hit the breakpoint again.

  10. Look at the call stack. This time, it contains mostly calls related to inter-process and thread-to-thread communication. The only keyboard event handler that's visible in the call stack is WebContents::HandleKeyboardEvent .

  11. Note that the value of id is the same as before, so the same code will be executed as when you used the star button.

  12. Optional: Look at other browser commands, including some menu commands. For example:
  • Ctrl+T and the New tab menu item
  • Reload button and F5

What next?

Now that you've built Chromium and stepped through some of its code, here are some suggestions for what you might want to do now.

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值