Firefox附加组件安装过程的详细信息

时间:2012-03-01 18:07:33

标签: firefox firefox-addon

我很好奇Firefox附加安装程序的内部工作原理。我注意到当用户从addons.mozilla.org安装加载项时会发生以下步骤:

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

    • Firefox源代码中的哪个代码部分负责第5步?我假设一些c ++或js代码或某些xpcom模块负责确定一个加载项等待安装在staged /文件夹中,并执行必要的步骤(移动文件,注册附加组件等。 )。谁能指点我那个模块/代码?
    • 下载时(步骤1)临时存储的附加组件在哪里?

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

1 个答案:

答案 0 :(得分:2)

您的分析大多是正确的,它只是省略了自举扩展。 Bootstrapped扩展不需要重新启动浏览器,它们将被移出staged目录并立即激活。

Add-on Manager是从Firefox 4开始的所有JavaScript。重要文件是amWebInstallListener.js(处理来自Web的附加安装的组件),AddonManager.jsm(通用附加组件管理) API)和XPIProvider.jsm(XPI打包扩展的提供程序)。

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