Модификация нативных js-библиетек в Thunderbird/FireFox (omni.ja)?
Всем доброго времени суток,
Мне необходимо солидно кастомизировать почтовый клиент Thunderbird, и казалось он как никто другой замечательно подходил на эту роль, в каталоге с программой в JAR-пакете omni.ja расположены исходные коды практически всего базового функционала, и логики его работы. Код был быстро прочитан разобран, модифицирован по необходимости (для начала совсем чуть-чуть изменения буквально в пару строк в одном из js файлов) после чего коды пересобраны в JAR-пакет (при помощи jar.exe из JAVA JDK).
Thunderbird успешно запустился, даже в его JavaScript Debugger отобразился код с внесенными изменениями.
И тут меня ждало саое большое разочарование — добавленный код просто не выполняется !
Ни ошибок, ничего, он просто не выполняется, интуиция подсказывает что работает какая-то хитрая система защиты от модификации этих самых исходных кодов (XPCSafeJSObject — вот такую штуку я затрейсил, не она ли?).
Но предварительное гугление привело меня к тому, что это работает и люд таки модифицирует omni.ja.
Прошу помощи у хабраразума, возможно уже наступавшего на подобные грабли.
Проблема оказалась не в защите файлов кода, а в специальной опции кеширования nglayout.debug.disable_xul_cache по умолчанию установленной в true (кеширует XUL и JavaScript код, как раз то что мы меняем), причем мысли мои уже шли в этом направлении, но я наивно предполагал что опция очистки кэша из интерфейса клиента сбрасывает кэш в принципе, ан нет, таким образом сбрасывается только «пользовательский кэш», а «служебный кэш» — это сущность отдельная.
Прочел о XPCSafeJSObject на SO и судя по ответу, эта штука не сам код защищает от изменений, а защищает данные, находящиеся в объектах и переменных от изменений со стороны пользовательского кода. Изменять можно через XPCSafeJSObject, но не в обход него.