2012-03-01 209 views
2

我对Firefox附加组件安装过程的内部工作感到好奇。我注意到当用户从addons.mozilla.org安装插件时,会发生以下步骤:Firefox附加安装程序的详细信息

  1. 下载附件(可能位于临时文件夹中)。
  2. 弹出安装确认对话框(“安装来自您信任的作者的附件”)。
  3. 单击安装后,加载项存储在/ extensions/staged文件夹中。除了插件之外,还有一个像这样的JSON文件:addon_id.json。
  4. Firefox提示用户重新启动浏览器。
  5. 重新启动后,来自/ extensions/staged /文件夹的内容将被移至/ extensions /文件夹。

我想知道的是:

  • 这部分代码在Firefox的源代码是负责第5步?我假定一些C++或js代码或某个xpcom模块负责确定插件正在等待安装在staged /文件夹中,并执行必要的步骤(移动文件,注册插件等)。 )。任何人都可以请我指向该模块/代码?
  • 加载项临时存储在何处,何时下载(步骤1)?

基本上,我想在第1步下载加载项之后,但在它成为浏览器的一部分(第5步)之前,更改一些文件。我想在Firefox源代码中添加此功能。

+0

@WladimirPalant,oops,我是一个n00b到stackoverflow,感谢指出,:) – Anton 2012-03-01 18:31:31

回答

2

你的分析大部分是正确的,它只是遗漏了引导扩展。自引导扩展不需要浏览器重新启动,它们将被移出staged目录并立即激活。

的加载项管理器中所有的JavaScript与Firefox 4起重要的文件是amWebInstallListener.js(组件处理插件从网络安装),AddonManager.jsm(一般附加的管理API)和XPIProvider.jsm(供应商对于XPI打包的扩展)。

  1. extWebInstallListener.onWebInstallRequested()获取与一堆AddonInstall实例(在XPIInstall.jsm定义)的所谓的并创建一个Installer实例调用AddonInstall.install()为每个安装的。下载文件将进入临时文件,该文件由(操作系统特定的临时目录中的tmp-foo.xpi)中的getTemporaryFile()确定。
  2. Installer.checkAllDownloaded()确定所有下载完成并显示模式确认对话框(URI_XPINSTALL_DIALOG)。
  3. AddonInstall.startInstall()将加载项移动到登台目录中。在此之后,自引导附加组件将立即安装。对于其他插件,它继续执行步骤4.
  4. onInstallEnded侦听器被触发 - 其中一个显示浏览器需要重新启动的消息。
  5. 浏览器重新启动后XPIProvider.startup()调用XPIProvider.checkForChanges()调用XPIProvider.processPendingFileChanges()
+0

非常感谢!这会让我一阵忙碌! – Anton 2012-03-02 17:08:04