JumuFENG
小狐狸
小狐狸
  • UID37810
  • 注册日期2011-11-18
  • 最后登录2014-06-30
  • 发帖数28
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
阅读:4379回复:3

转:mozilla的目录结构

楼主#
更多 发布于:2011-11-24 00:18
今天看到一篇文章,我感觉对学习、研究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~~
I would appreciate it if you could leave a comment.
本人研究firefox源代码,目的是编写一个基于firefox内核的应用程序。希望与大家交流,交流群:81424441欢迎加入交流。我的email:zhcbfly@qq.com
The only thing that never changes is change!
JumuFENG
小狐狸
小狐狸
  • UID37810
  • 注册日期2011-11-18
  • 最后登录2014-06-30
  • 发帖数28
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
1楼#
发布于: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. 或许可以修改这个渲染图像的代码,并且尝试参照图像解码进行流媒体的解码的工作。

   感觉还是没怎么抓住重点,若有高人指点当事半功倍!
I would appreciate it if you could leave a comment.
本人研究firefox源代码,目的是编写一个基于firefox内核的应用程序。希望与大家交流,交流群:81424441欢迎加入交流。我的email:zhcbfly@qq.com
The only thing that never changes is change!
fang5566
管理员
管理员
  • UID3719
  • 注册日期2005-03-07
  • 最后登录2019-11-15
  • 发帖数18368
  • 经验4720枚
  • 威望5点
  • 贡献值4292点
  • 好评度1062点
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 终身成就
2楼#
发布于:2011-11-24 00:18
xpcom和xulrunner是你要应用程序界面重点研究对象。js是执行核心代码的这个肯定要看了。
我对开发不怎么了解,但我很愿意看到国人能开发出基于Gecko的应用程序,国外的songbird程序就做的很好,楼主可以研究一下。
Firefox More than meets your experience
JumuFENG
小狐狸
小狐狸
  • UID37810
  • 注册日期2011-11-18
  • 最后登录2014-06-30
  • 发帖数28
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
3楼#
发布于:2011-11-24 00:18
fang5566:xpcom和xulrunner是你要应用程序界面重点研究对象。js是执行核心代码的这个肯定要看了。
我对开发不怎么了解,但我很愿意看到国人能开发出基于Gecko的应用程序,国外的songbird程序就做的很好,楼主可以研究一下。
回到原帖

yeah~~我就是要用gecko来开发一个程序。现在还在起步阶段,还在看源代码。谢谢宝贵建议!
I would appreciate it if you could leave a comment.
本人研究firefox源代码,目的是编写一个基于firefox内核的应用程序。希望与大家交流,交流群:81424441欢迎加入交流。我的email:zhcbfly@qq.com
The only thing that never changes is change!
游客

返回顶部