我对深入研究的建议是查看源代码http://code.google.com/p/chromiumembedded/ http://code.google.com/p/chromiumembedded/.
它是 Chrome 的精简版本,如果你查看它具体使用的文件,要么包含在其源代码树中,要么包含来自 Chromium 存储库的文件。 Chromium 代码库包含大量内容,其中大部分实际上并不在浏览器中。有大量从第三方存储库中提取的代码,然后在构建过程中进行归结,或者 Chromium 的实现位于树中的其他位置,有很多副项目(虽然很有趣,并且是广泛的很棒的资源)东西)将阻止您实现专门磨练浏览器实现及其如何组合在一起的目标。
CEF 很棒,因为您可以看到有人已经完成了将所有这些内容整合在一起以构建一个非常专门针对浏览器视图的项目的过程,而没有其他任何事情。您可以轻松地看到哪些部分主要源自 webkit,您可以看到与 Google 的实现交叉的地方,并且您可以很容易地看到 V8 是如何融入其中的。
我确实是相对而言说“容易”,因为我们仍然在讨论大量的代码。 CEF 会将您置于需求的中心,但是这些东西仍然从树的其余部分中引入大量各种东西。在一台拥有 12 GB 内存和 8 个内核的非常好的计算机上编译它大约需要一个小时,生成的文件大约需要 6-10 GB,具体取决于情况。
至少,不会有任何快速跳入浅水区来零碎地挑选一些东西。浏览器必然是极其复杂的工程,因为它们必须包含如此大量的单独功能,然后将它们组合到共享上下文中。您可能会找到您正在寻找的东西,但您会发现它是类库的一部分,该类库可能由数十或数百个文件组成,而这些文件又依赖于一百多个此类库来处理每项任务,所以要真正拿走一些东西,你必须花时间去吸收比任何给定的信息更多的东西。
编辑:哦,也是你的具体例子。
src 是根目录http://src.chromium.org/viewvc/chrome/trunk/src http://src.chromium.org/viewvc/chrome/trunk/src
/chrome http://src.chromium.org/viewvc/chrome/trunk/src/chrome http://src.chromium.org/viewvc/chrome/trunk/src/chrome
“chrome”树主要包含直接实现(虽然很多东西不在那里,甚至大部分,但这是起点)。这与 chromeos 重叠(chromeos 是一种极端的 chromium 浏览器)
/chrome/浏览器http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/ http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/
让您接近您想去的地方。您开始看到对可以与浏览器匹配的事物的具体引用,例如选项卡和诸如此类的东西(忽略实际浏览器实现本身的巨大大象,这占据了所有这些东西的大部分思维空间)
/chrome/浏览器/uihttp://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/ui/ http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/ui/
带您到浏览器的大部分 ui 代码所在的位置。当存在交叉或内容迁移时,可能会令人困惑,例如根 src 目录中有一个“ui”,它有一些交叉。
最后http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/ui/omnibox/ http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/ui/omnibox/
其中的代码量惊人地少。但这就是你发现的很多东西。这里的代码是在其他地方构建的许多类的实现。对于非 webview gui 组件,您会发现它们主要指向根“ui”和本地小部件,如果我没记错的话,这就是大部分实际事件处理代码所在的位置。