Детали процедуры установки дополнения Firefox - PullRequest
3 голосов
/ 01 марта 2012

Мне любопытно узнать о внутренней работе процедуры установки дополнения Firefox. Я заметил, что следующие шаги имеют место, когда пользователь устанавливает надстройку с addons.mozilla.org:

  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.

1 Ответ

2 голосов
/ 02 марта 2012

Ваш анализ в основном корректен, он просто не включает загрузочные расширения.Загрузочные расширения не требуют перезапуска браузера, они будут перемещены из каталога staged и активированы немедленно.

Менеджер надстроек - это все JavaScript, начиная с Firefox 4. Важные файлы amWebInstallListener.js (компонент, выполняющий установку надстроек из Интернета), AddonManager.jsm (универсальный API управления надстройками) и XPIProvider.jsm (поставщик расширений, упакованных в XPI.

  1. extWebInstallListener.onWebInstallRequested() вызывается с набором AddonInstall экземпляров (определенных в XPIInstall.jsm) и создает экземпляр Installer, который вызывает AddonInstall.install() длякаждый из устанавливает.Загрузки помещаются во временный файл, определяемый getTemporaryFile() в XPIProvider.jsm (tmp-foo.xpi в временном каталоге для ОС).
  2. Installer.checkAllDownloaded() определяет, что все загрузки завершены, и отображает диалоговое окно подтверждения режима (URI_XPINSTALL_DIALOG).
  3. AddonInstall.startInstall() перемещает надстройку в промежуточный каталог.Загрузочные дополнения будут немедленно установлены после этого.Для других надстроек он переходит к шагу 4.
  4. onInstallEnded Слушатели запускаются - один из них показывает сообщение о том, что браузер необходимо перезапустить.
  5. После перезапуска браузера XPIProvider.startup() звонки XPIProvider.checkForChanges() звонки XPIProvider.processPendingFileChanges().
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...