Під час роботи Firefox користується каталогом налаштувань або профілем для зберігання всіх налаштувань користувача, таких як закладки, історія та розширення. Під час запуску Firefox вибирає цей каталог на основі кількох критеріїв, включно з аргументами командного рядка, змінними середовища та файлом з переліком відомих та типових профілів.
Мета Firefox 67 — дозволити користувачам одночасно використовувати різні встановлені Firefox, без потреби налаштовувати аргументи командного рядка та запобігати поведінці використання профілів зі старішими ніж поточна версія Firefox, оскільки ця поведінка не підтримується та, як відомо, спричиняє проблеми, які важко визначити та виправити, а в деяких випадках є досить серйозними, щоб зробити Firefox повністю непридатним для користування. З цією метою були внесені зміни до вибору профілю.
У цій статті докладно описується, як раніше працював вибір профілю, як він працює зараз у Firefox 67 та як ми переносимо користувачів із попередніх версій.
Зміст
Попередня поведінка
Під час запуску Firefox завантажує список відомих профілів із файлу profile.ini, який знаходиться в певному місці в домашньому каталозі користувача. Він включає кілька налаштувань та перелік відомих профілів та їх розташування на диску. Один із них буде позначений типовим профілем. Типово застосовується до будь-якої версії або копії Firefox, яку запускає користувач.
Потім Firefox перевіряє ряд змінних середовища та аргументів командного рядка, які можуть замінити типовий профіль. Деталі тут не висвітлюються, оскільки ця поведінка не змінилася. Досить сказати, що після завершення цих перевірок Firefox або обрав профіль для запуску, або його взагалі не знайшов
Якщо жодного профілю не знайдено, і в профілі profile.ini є перелічені профілі (це означатиме або неправильний аргумент командного рядка, або жоден із профілів не позначено типовим), тоді з'явиться менеджер профілів, що дозволяє користувачеві вибрати або створити новий типовий профіль.
Якщо жодного профілю не знайдено, а profile.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 все ще завантажує profile.ini, він містить ті ж дані, що й раніше. Один із відомих профілів типово може бути позначений старим. Крім того, profile.ini тепер включає список відомих встановлень Firefox. Кожен новий розділ називається на основі хешу каталогу встановлення Firefox. Кожен розділ встановлення включає розташування на диску спеціального профілю для цього встановлення, а також маркер того, чи профіль заблокований для цієї встановлення.
Як і раніше Firefox все ще перевіряє аргументи командного рядка та змінні середовища, які можуть перевизначити типовий вибір профілів. Минулий, якщо вже існує спеціальний типовий для цього встановлення, то використовується типовим профілем і запуск продовжується.
Поведінка відрізняється в разі якщо для цього встановлення немає спеціального типового профілю (це включає випадок, коли Firefox запускається в результаті перезапуску, а попередній запуск використовував старий типовий профіль, це зазвичай відбувається під час автоматичного перезапуску, щоб застосувати оновлення до версії 67 або новішої).
Якщо розділ встановлення існує у профілі profile.ini, але не посилався на жоден наявний профіль (з того часу він був видалений), тоді створюється та використовується новий спеціальний типовий профіль.
Якщо в профілі.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 Release є типовим браузером ОС, тоді відкриття посилання в іншій програмі відкриє його у Firefox Release, тоді як раніше воно могло б відкритися в будь-якому відкритому на той момент Firefox.
За допомогою цієї функції прапори -no-remote та -new-instance більше не потрібні для одночасного запуску різних екземплярів Firefox, але вони не спричинять помилок, якщо їх вживати.
Блокування зниження версії
Ще однією зміною у Firefox 67 є виявлення попередньої версії профілю. Під час запуску Firefox переглядає профіль, щоб дізнатись, чи востаннє він застосовувався в новішій версії Firefox, ніж та, яку користувач намагається запустити. Відомо, що це спричиняє багато проблем, іноді очевидніших, часом не явних. Тепер Firefox зупинить користувача від цих дій, натомість пропонуючи йому можливість створити новий профіль для використання.
Вимкнення змін
Зміни у виборі профілю можна скасувати, встановивши змінну середовища MOZ_LEGACY_PROFILES. Однак це не поверне зміни до запуску кількох екземплярів. Блокування зниження версії можна обійти, встановивши змінну середовища MOZ_ALLOW_DOWNGRADE або застосувавши аргумент командного рядка --allow-downgrade під час запуску Firefox.