Во время работы Firefox использует папку с параметрами, также называемую профилем, для хранения всех параметров, относящихся к пользователю, таких как закладки, журнал просмотра и расширения. Во время запуска Firefox выбирает эту папку на основе нескольких критериев, включая аргументы командной строки, переменные окружения и файл, в котором перечислены известные профили и профиль по умолчанию.
Целью Firefox 67 было позволить пользователям использовать различные установки Firefox одновременно, без необходимости конфигурировать аргументы командной строки и прекратить использование профилей с более старыми версиями Firefox относительно тех, к которым они относятся, т.к. такое поведение не поддерживается и вызывает известные проблемы, которые сложно диагностировать и исправлять, а в некоторых случаях они настолько серьёзны, что делают Firefox полностью неработоспособным. Для этого были произведены изменения в выборе профилей.
В этой статье подробно описано, как выбор профиля осуществлялся раньше, как это работает сейчас в Firefox 67 и как мы переводим пользователей с предыдущих версий.
Оглавление
Предыдущее поведение
При запуске Firefox загружает список известых профилей из файла profiles.ini, расположенного в специальном месте в домашней папке пользователя. Он включает в себя несколько параметров и список известных профилей и их расположение на диске. Один из них отмечен как профиль по умолчанию. Этот профиль по умолчанию применяется ко всем версиям или установкам Firefox, которые запускает пользователь.
Затем Firefox проверяет некоторое количество переменных окружения и аргументы командной строки, которые могут переопределять профиль по умолчанию. Подробности здесь не освещаются, так как это поведение не изменилось. Достаточно сказать, что когда эти проверки завершены, Firefox либо выберет профиль, с которым будет загружаться, либо не найдёт его вообще.
Если ни один профиль не будет найден и при этом в profiles.ini содержатся профили (это будет отображено или как неправильный аргумент командной строки, или же ни один из профилей не будет отмечен как профиль по умолчанию), то отобразится менеджер профилей, чтобы позволить пользователю выбрать или создать новый профиль для использования в качестве профиля по умолчанию.
Если ни один профиль не будет найден и profiles.ini пуст, то это рассматривается как первый запуск Firefox и создаётся пустой профиль по умолчанию, который выбирается для использования без взаимодействия с пользователем.
Пользователь имеет возможность изменить профиль по умолчанию в любое время через менеджер профилей, это изменит профиль по умолчанию для всех установок и версий Firefox.
Firefox Developer Edition
Одно исключение — это Firefox Developer Edition, который обычно использует отдельный относительно других версий Firefox профиль по умолчанию. Это достигается с помощью игнорирования нормального маркера профиля по умолчанию в profiles.ini, вместо этого по умолчанию используется профиль с именем “dev-edition-default”. Это отличие привело к множеству багов, а также было желание сделать поведение Developer Edition аналогичным остальным версиям.
Несколько экземпляров
Есть ещё одна особенность, которая происходит, когда экземпляр Firefox уже запущен. Перед тем, как начинается выбор профиля, Firefox пытается найти существующий экземпляр Firefox в системе. Если таковой существует, то вместо запуска любые аргументы командной строки отправляются в существующий экземпляр и выполняются в нём.
На Windows можно запустить одновременно только один экземпляр Firefox, что можно обойти аргументом командной строки -no-remote для дополнительных экземпляров. Они будут запускаться независимо от других запущенных экземпляров, но при этом каждый следующий запуск Firefox не может определить эти экземпляры и поэтому будет запускаться так, как будто нормальный экземпляр не найден. Когда запускается несколько экземпляров, каждый из них обязан использовать отдельный профиль. Чтобы гарантировать это, используемый профиль блокируется.
На linux это работает похожим образом, но с некоторыми сложностями. Если передаётся аргумент командной строки, указывающий на профиль, то Firefox только попытается найти и передать его существующему экзмпляру, использующему данный профиль и в случае если он не будет найден, то продолжится загрузка. Также может быть передан аргумент -new-instance, что приведёт к запуску Firefox независимо от наличия уже существующих экземпляров.
Новое поведение
Начиная с Firefox версии 67 и в более поздних вместо профиля по умолчанию для всех установок Firefox каждая установка Firefox (на основе физического расположения на диске после раскрытия всех символических ссылок) имеет собственный профиль по умолчанию.
В этом разделе "старый профиль" относится к профилю, который использовался по умолчанию версиями Firefox до 67, "выделенный профиль" относится к профилю, отмеченному как профиль по умолчанию для установки Firefox.
При загрузке Firefox всё ещё загружает profiles.ini, он содержит такую же информаци, как и раньше. Один из известных профилей может быть отмечен как старый по умолчанию. Дополнительно profiles.ini теперь включает в себя список известных установок Firefox. Каждый новый раздел называется на основе хэша папки установки Firefox. Каждый раздел установки включает в себя расположение на диске выделенного профиля для этой установки, а также маркер, определяющий, не "заблокирован" ли этот профиль для этой установки.
Как и раньше, Firefox всё ещё проверяет аргументы командной строки и переменные окружения, которые могут переопределять выбор профиля по умолчанию. После этого, если для этой установке уже существует выделенный профиль по умолчанию, то он используется в качестве профиля по умолчанию и загрузка продолжается.
Поведение отличается в случае если для этой установки нет выдленного профиля по умолчанию (это включает в себя случай, когда Firefox запускается повторно и при этом предыдущий запуск производился с использованием старого профиля по умолчанию, обычно это происходит в ходе автоматической перезагрузки для применения обновления на версию 67 и выше).
Если в profiles.ini содержится раздел установки, но не относится ни к одному из существующих профилей (он к этому времени мог быть удалён), то создаётся и используется новый выделенный профиль по умолчанию.
Если в profiles.ini отсутствует раздел установки, то это рассматривается как первый запуск этой установки как версии 67 или выше. В этом случае используется эвристик для определения, необходимо ли создать новый выделенный профиль по умолчанию или пометить старый как выделенное умолчание для этой установки:
- Содержит ли старый профиль по умолчанию файл compatibility.ini и можно ли его проинтерпретировать. Если нет, то создаётся новый выделенный профиль по умолчанию и загрузка продолжается. (Только очень-очень старые версии Firefox не создают этот файл, так что его отсутствие может означать, что это либо полностью пустой профиль, либо он настолько старый, что с большой долей вероятности несовместим с современными версиями Firefox).
- Файл compatibility.ini содержит информацию о последней установке Firefox, использовавшей старый профиль по умолчанию Если старый профиль по умолчанию в последний раз использовался другой установкой Firefox, то создаётся новый выделенный профиль по умолчанию и загрузка продолжается.
- Проверка, есть ли другая известная установка Firefox, у которой старый профиль по умолчанию, отмеченный как её выделенное умолчание и профиль отмечен как "заблокированный" для установки. В таком случае создаётся новый выделенный профиль по умолчанию и загрузка продолжается.
- Отметка старого профиля по умолчанию в качестве выделенного профиля по умолчанию для этой установки, удаление его в качестве выделенного профиля по умолчанию для других установок Firefox (производится таким образом, что когда они загружаются в следующий раз, то будут создаваться только новые профили вместо попыток использовать старое умолчание). Продолжение загрузки. Профиль всё ещё отмечен в качестве старого умолчания к этому моменту, так что более старые версии Firefox будут продолжать использовать его в качестве своих умолчаний до тех пор, пока не будут обновлены.
- Позже во время загрузки (это не может быть сделано на раннем этапе загрузки по некоторым причинам) производится проверка, не отмечена ли эта установка Firefox в качестве браузера ОС по умолчанию. Если это так, то выделенный профиль по умолчанию отмечается как "заблокированный" для этой установки.
Пользователь всё ещё имеет возможность изменить выделенный профиль по умолчанию для этой установки Firefox с помощью менеджера профилей, изменения будут применены только к этой установке Firefox. Если производить выбор этим способом, выбранный профиль будет отмечен как "заблокированный".
Firefox Developer Edition
Начиная с Firefox Developer Edition 67 выбор профиля по умолчанию был изменён на более стандартный. Developer Edition теперь использует ту же систему для выбора выделенного умолчания, как и другие версии Firefox 67 и больше не полагаются на особое наименование профилей. Единственное изменение к вышеописанному заключается в том, что "старый профиль" относится к профилю с именем “dev-edition-default” вместо профиля, отмеченного по умолчанию в profiles.ini.
Несколько экземпляров
Запуск нескольких экземпляров Firefox также изменился в Firefox 67. Поведение в Windows и Linux теперь идентичное:
Во время запуска Firefox запускается посредством своего полного выбора профиля для определения того, какой профиль предпочтительный, на основе аргументов командной строки, переменных окружения и информации о профиле по умолчанию. Затем Firefox ищет наличие существующих экземпляров Firefox, которые используют предпочтительный профиль, если такие есть в наличии, то вместо запуска любые аргументы командной строки передаются найденному экземпляру.
Преимуществого этого заключается в том, что вы можете запускать различные установки Firefox вместе без дополнительных аргументов командной строки. У каждой будет свой собственный профиль по умолчанию, запуск одной будет использовать её профиль по умолчанию, запуск другой будет использовать другой профиль по умолчанию. Если у вас запущена бета-версия Firefox, а релиз Firefox установлен в качестве браузера ОС по умолчанию, то открытие ссылки в другом приложении откроет её в релизной версии Firefox, тогда как раньше она бы открылась в том Firefox, который был открыт в последний раз.
Благодаря этой функции флаги -no-remote и -new-instance больше не нужны для одновременного запуска различных экземпляров Firefox, но они не будут вызывать при использовании каких-либо ошибок.
Блокировка даунгрейдов
Ещё одно изменение в Firefox 67 — определение даунгрейда профиля. При загрузке Firefox проверяет профиль на то, что последнее его использование было с более новой версией Firefox, чем пользователь пытается запустить. Известно, что это вызывает множеством проблем, иногда очевидных, иногда не очень. Firefox теперь будет препятствовать пользователям делать так, предлагая им возможность вместо этого создать новый профиль.
Отключение изменений
Изменения в выборе профиля можно откатить с помощью настройки переменной окружения MOZ_LEGACY_PROFILES. Однако это не отменит изменений в запуске нескольких экземпляров. Блокировку даунгрейда можно обойти с помощью установки переменной окружения MOZ_ALLOW_DOWNGRADE или отправкой аргумента командной строки --allow-downgrade при запущенном Firefox.