Россия, Звенигород |
Система распространения и установки - XPInstall
17.2.2. Что делает пользователь
Пользователь выбирает, откуда установить приложение. На следующей серии рисунков отображен процесс установки с точки зрения пользователя. Первое в этой цепочке - документ, еще не являющийся частью устанавливаемого приложения, см. рисунок 17.2.
Это HTML-страница, но это мог бы быть и XUL-документ. В таком случае триггер-скрипт был бы несколько сложнее простой кнопки. В данном примере триггер-скрипт реализует установку приложения из трех комплектов XPI. На следующем шаге пользователь видит диалог, изображенный на рисунке 17.3
Этот диалог сообщает пользователю, что, собственно, устанавливается. Если пользователь выберет Cancel, процесс будет остановлен. Если пользователь соглашается, установка начинается и может идти до конца, не предоставляя пользователю новой возможности прекратить процесс. На следующем шаге пользователь видит индикатор прогресса, см. рисунок 17.4.
Перечисленные комплекты загружаются по очереди. Файл install.js, который содержится в каждом комплекте, начинает выполняться сразу после окончания загрузки. Если скрипт не содержит специального кода, он выполняет свою работу без вмешательства пользователя. Если в нем содержатся подсказки или вопросы пользователя, они выглядят как обычные приглашения JavaScript, как показано на рисунке 17.5
Результатом выполнения скрипта install.js может быть либо прерванная, либо неудавшаяся загрузка, либо полная установка XPI-комплекта. Затем пользователь видит сообщение об итогах процесса, см. рисунок 17.6.
Если процесс установки требует, чтобы приложение после установки было запущено заново, пользователь также получит сообщение об этом.
17.2.3. Что делает платформа
Во время удаленной установки платформа управляет всем процессом, получая инструкции из скрипта install.js, выполняет все указанные действия, и сохраняет записи о них. Выполняются следующие шаги:
- Система XPInstall стартует при вызове InstallTrigger.install() или InstallTrigger.installChrome(). Она порождает окна, которые видит пользователь, и управляет ими.
- Выполняется процесс загрузки XPI-архивов в место, предназначенное для хранения временных файлов операционной системы. Кеш Mozilla не используется.
- Если первый файл в архиве является цифровой подписью (это определяется по его полному имени), данная подпись проверяется. Отказ возникает только в том случае, если верификация по требуемому сертификату возможна и не проходит. В этом случае загрузка прекращается. В противном случае процесс продолжается.
- Запускаются по очереди все файлы install.js. Между различными файлами install.js нет координации, они запускаются в порядке их получения. Если какой-либо из XPI-файлов должен удостовериться, что некий другой файл был загружен успешно, это должно быть явно прописано в коде. Этот код может использовать специальный "сигнальный" файл (touch file) или ключ регистра Microsoft Windows, чтобы сообщить о результате.
- Во время выполнения файла install.js записывается информация о шагах с 6 по 11.
- Логи процесса плюс некоторые автоматически создаваемые сообщения записываются в файл chrome/install.log.
- В регистр Mozilla записывается вся информация, которая может понадобиться при удалении приложения.
- В регистр Mozilla записывается информация о том, что данное приложение с данным номером версии отныне существует в системе.
- В файл chrome/installed-chrome.txt записываются результаты всех вызовов registerChrome().
- Записывается, требуется ли заново прочитать chrome или его компоненты.
- Записывается, требуется ли перезагрузка.
- Затем система переходит к выполнению полученных инструкций.
- Распаковываются все требуемые файлы. Если имена файлов или их пути в комплекте XPI не совпадают с прописанными в скрипте, ничего не происходит, и система переходит к выполнению следующей инструкции.
- Выполняются все требуемые операционной системой манипуляции. Если инструкция невыполнима или бессмысленна, генерируется сообщение об ошибке и выполняется следующая инструкция.
- Когда пользователь перезапускает платформу, система проходит через обычную процедуру послеустановочной инициализации: пересчитываются оверлеи chrome, компоненты XPCOM, доступные локали и скины.
Таков в целом процесс удаленной установки. Проверка соответствия версий ложится на плечи прикладного программиста, т.е. на код в на файле install.js.
Иногда система XPInstall задействует оставшуюся часть платформы для выполнения своей работы. Например, использует диалоговое окно предупреждения. Если это необходимо, скрипт, выполняющий свою работу где-то в другом месте платформы, будет блокирован до тех пор, пока XPInstall не закончит работу с внешним ресурсом. Обычно каждая подобная блокировка кратковременна и не имеет заметных последствий.