2012-03-01 51 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