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

Firefox附加组件安装过程的详细信息,firefox,firefox-addon,Firefox,Firefox Addon,我很好奇Firefox插件安装过程的内部工作原理。我注意到,当用户从addons.mozilla.org安装加载项时,会执行以下步骤: 加载项已下载(可能在临时文件夹中) 弹出一个安装确认对话框(“安装来自您信任的作者的附加组件”) 单击“安装”后,该加载项将存储在/extensions/staged文件夹中。除了这个插件,还有一个类似这样的JSON文件:addon_id.JSON Firefox提示用户重新启动浏览器 重新启动后,/extensions/staged/文件夹中的内容将移动到/e

我很好奇Firefox插件安装过程的内部工作原理。我注意到,当用户从addons.mozilla.org安装加载项时,会执行以下步骤:

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

    • Firefox源代码中的哪个代码部分负责第5步?我假设一些C++或JS代码或一些XPCcom模块负责确定在一个阶段/文件夹中安装一个附加程序,并执行必要的步骤(移动文件,注册附加程序等)。有人能告诉我那个模块/代码吗
    • 加载项在下载时临时存储在何处(步骤1)

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

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

    插件管理器都是从Firefox4开始的JavaScript。重要的文件是(从web处理加载项安装的组件),(通用加载项管理API)和(XPI打包扩展的提供者)

  • extWebInstallListener.onWebInstallRequested()
    通过一组
    AddonInstall
    实例(在
    XPIInstall.jsm
    中定义)调用,并为每个安装创建一个
    Installer
    实例,该实例调用
    AddonInstall.install()
    。下载进入由
    XPIProvider.jsm
    中的
    getTemporaryFile()
    确定的临时文件(操作系统特定临时目录中的
    tmp foo.xpi
  • Installer.checkAllDownloaded()
    确定所有下载都已完成,并显示一个模式确认对话框(
    URI\u XPINSTALL\u dialog
  • AddonInstall.startInstall()
    将加载项移动到临时目录中。之后将立即安装引导加载项。对于其他附加组件,继续执行步骤4
  • oninstalled
    侦听器被触发-其中一个侦听器显示需要重新启动浏览器的消息
  • 浏览器重新启动后,
    XPIProvider.startup()
    调用
    XPIProvider.checkForChanges()
    调用
    XPIProvider.processPendingFileChanges()

  • 谢谢!这会让我忙上一段时间!