25 ноября 2017

Как я StickyNotes на Firefox обновлял.



Mozilla убирает XUL из Firefox.
Известно было это давно, последствия были ясны сразу, оставалось только "переломной"  версии дойти до релиза. Примерно недели за две до выхода 57 версии начали выходить обновления для существующих расширений в формате Web extension. Проблема была в том, что новый формат расширений не имел доступа к данным старого. Её решали гибридные варианты расширений. Гибридность заключалась в том, что внутри классического расширения было webext-расширение. О таком переходе я и хочу рассказать.


Расширение StickyNotes делает ровно то, что и предмет, давший ему название. Оно позволяет создавать мелкие заметки прямо на странице. Заметка привязывается к конкретному адресу. Их так же можно синхронизировать.

Синхронизацию я выключил уже давно, потому что из-за большого количества заметок (а у меня их больше 8000) браузер банально падал.

И вот где-то в середине ноября расширение обновилось и попутно потеряло все мои заметки. База "stickynotes.sqlite" из профиля никуда не делась, но доступа к ней у расширения уже не было.

Я пошел смотреть старые версии на предмет переходного варианта. Ссылка на версию 0.11.1 была, но вела она на ошибку 404. Да еще и автор написал, что файл не подписан, так что толку от него тоже много не будет из-за требования обязательной подписи.

Первым делом я написал автору на почту о найденной ошибке и попутно начал искать способ подписи расширения самостоятельно. Способ подписи я всё же нашел. И даже пробовал его воплотить в жизнь, скачав нужный срез исходников. Но AMO посылал меня в Шервуд с моим "старым" расширением.

Вторым вариантом было использование небрендированной версии Firefox 56.0.2, которая позволяет отключить обязательное требование подписи расширений. И я даже нашел страницу, с которой её можно скачать, но версия там была уже 57. Гуглинг всё же вывел меня на нужную ссылку.

Тем временем автор мне ответил на почту, дав ссылку на файл, который я уже практически сам изготовил.

Я распаковал установщик Nightly 56.0.2, с помощью указания каталога профиля из командной строки запустил и на странице "about:config" изменил параметр "xpinstall.signatures.required".

И вроде бы победа, но нет. При установке гибридной версии перенос заметок запустился автоматически, и браузер опять падал.

Я снова написал автору расширения и на корявом английском рассказал про своё горе. Он ответил, что попробует починить. А я в безопасном режиме откатил версию до 0.10.24.

На следующий день пришло письмо со ссылкой на исправленную версию. Импорт на этот раз выполнялся пачками по 1000 заметок с отображением прогресса в виде всплывающей подсказки в углу экрана. Переезд занял около 15 минут. Потом я даже синхронизацию включил, потому что падения прекратились.

Подобным образом я мигрировал базу и на домашнем браузере. А позже я увидел другой способ запуска не подписанных расширений без поиска особой сборки браузера.

На этом всё и закончилось.

Подпись расширения с удалённым ID в манифесте всё равно ничего не дала бы, потому что новая подписанная версия имеет совершенной другой ID и доступа к сконвертированным данным не получит, да ещё и не заменит "поддельную"  версию, а поставится рядом.

Установщик и используемые версии расширений я выложил на Я.Диск. https://yadi.sk/d/rVcRzZC23Q3PEL