阅读:5481回复:3
转:mozilla的目录结构
今天看到一篇文章,我感觉对学习、研究firefox源代码,非常有用。转过来与大家分享!
出处:Mozilla研究—mozilla的目录结构 mozilla是一个以浏览器为中心的软件平台,它在我们平台中占有重要地位。我们用它来实现WEB浏览器、WAP浏览器、邮件系统、电子书和帮助阅读器等应用程序。为此,我最近花了不少时间去阅读mozilla的代码和文档,我将写一系列的BLOG作为笔记,供有需要的朋友参考。本文介绍mozilla的目录结构。 Accessible 对辅助功能的支持。这些功能主要为残障人士提供的,比如放大镜和屏幕阅读器等。Mozilla是基于GNOME的ATK实现的,要注意的是,它只是提供对辅助功能的支持,并没有实现这些功能,这些功能是由专门的应用程序实现的。 Caps 提供了一些根据安全设置等信息决定系统能力的接口,比如是否允许执行脚本,是否接受cookie,是否记住密码等等。 Chrome 一种本地资源访问协议,它提供了抽象的URL到物理文件之间的映射。这样,应用程序可按访问普通URL的方式去访问资源,而不必关心资源的物理位置。不过mozilla似乎没有用它,而用的是RDF下面那个实现。 Config Makefile的编译规则、configure生成的配置和其它一些用于编译的脚本。其中autoconf.mk是configure生成的配置,如果发现编译选项不对,可以看看这个文件。 Content 文档对象模型(DOM)的主要代码,各种负责标记语言的语法树的构建和表示。其中xxxContentSinkxxx负责语法树的构建,而xxxDocumentxxx和xxxElementxxx负责语法树的表示。 Db/dbm 数据库实现,估计主要是给邮件系统用的,minimo好像没有用到。 Docshell/Webshell 浏览器的总控模块,负责把各个模块协调起来。 Dom 文档对象模型的界面部分,负责比如窗口、焦点和事件处理等等。 Editor 编辑器的实现,支持text/textmail/html/htmlmail四种编辑类型。 Embedding 浏览器控件的实现,有基于不同GUI的封装。在Win32下实现成了activex控件,接口与IE Control类似吧。应用程序可以把浏览器控件嵌入到自己的窗口中,minimo就是按这种方式实现的。 Extensions 各种扩展的实现,像帮助系统和javascript调试器等等。 Gfx 对图形/图像处理的封装库,有基于GTK、QT和Win32等GUI的实现。 Widget 对窗口系统的抽象,有基于GTK、QT和Win32等的实现。 Intl 对国际化的支持,包括编码转换和字符串处理等等。 Ipc 一套进程间通信机制,在minimo里没有用到,所以没有仔细看。 Jpeg JPG图像编解码库。 Js javascript解释器和XPConnect的实现。 Minimo minimo应用程序。 Modules 压缩/解压、图像、注册表和plugin等等。其中libpr0n是对各种图像文件格式的包装,提供了mozilla框架需要的接口,如果图像处理不正常,不防从这里入手。 Netwerk 网络协议、mime、cookie、cache和格式转换。 Nsprpub 可移植的运行库。 Parser解析器,负责各种XML文件和HTML文件的解析,基于builder模式实现,调用content中的xxxContentSinkxxx去构建语法树。 Plugin 插件。 Profile 主要功能是管理各种配置文件的路径,它实现了nsIDirectoryServiceProvider,如果发现获取配置文件位置失败,可以看看nsProfileDirServiceProvider::GetFile。 Rdf 资源描述框架(RDF)的解析器等。这里面也实现了Chrome协议。 Security 安全相关的库如SSL等实现。 Storage 数据存储,可能是基于前面的数据库实现了mozilla需要的接口。 Toolkit 一些工具,如安装程序(installer)、扩展管理器和下载管理器等,主要是界面部分。 Xpfe 据说是一套应用程序框架,称为FrontEnd。里面有很多功能和toolkit提供的类似,不知是不是用来取代toolkit的。 Xpinstall 安装程序的实现。 Mail 邮件系统,各种邮件协议和邮件内容的解析器等。 Layout 界面排版布局,相当于mozilla实现的一套GUI系统。每个控件称为一个Frame,要实现Paint和HandleEvent等接口函数。如果显示或者事件处理不正常,可以看看对应Frame的这些函数。 View 视图和视图管理器。 Xpcom XPCOM的实现。 Uriloader 对协议的包装,并提供了一些附加功能:定义nsIWebProgressListener2接口用显示下载状态,调用StreamConv转换文件格式,起动外部分应用程序打开mozilla无法处理的文件等。 ~~end~~ |
|
|
1楼#
发布于:2011-11-24 00:18
|
|
|
2楼#
发布于:2011-11-24 00:18
xpcom和xulrunner是你要应用程序界面重点研究对象。js是执行核心代码的这个肯定要看了。
我对开发不怎么了解,但我很愿意看到国人能开发出基于Gecko的应用程序,国外的songbird程序就做的很好,楼主可以研究一下。 |
|
|
3楼#
发布于:2011-11-24 00:18
mozilla源代码目录结构
Mozilla Source Code Directory Structure一篇英文文章介绍源代码目录结构的,我参照firefox8.0的源代码来看这篇文章,感觉需要注意的地方有: intl 国际化、本地化支持,我开发出来的东西最好能够支持中文吧! js/src/xpconnect C++与javascript互相调用代码,使用XPCOM 接口 js/src/liveconnect Liveconnect, the bridge between JavaScript and Java. layout/base Code that deals with the rendering tree。 我觉得layout里面的都值得研究 parser/expat 解析XML 的. parser/htmlparser 解析html的,解析html代码并调用合适的方法来处理 uriloader/prefetch 为加快缓存、加载而进行文档预取。感觉对我有用,但不一定 xpcom 、xulrunner 这两个我必然要研究。 modules/libpr0n Image rendering library. Contains decoders for the image formats mozilla supports. 或许可以修改这个渲染图像的代码,并且尝试参照图像解码进行流媒体的解码的工作。 感觉还是没怎么抓住重点,若有高人指点当事半功倍! |
|
|