Компания Mozilla опубликовала план реализации в Firefox третьей версии манифеста Chrome, определяющем предоставляемые дополнениям возможности и ресурсы. Третья версия манифеста стала объектом критики из-за нарушения работы многих дополнений для блокирования нежелательного контента и обеспечения безопасности.
В Firefox намерены реализовать почти все возможности и ограничения нового манифеста, в том числе декларативный API для фильтрации контента (declarativeNetRequest), но в отличие от Chrome в Firefox не будет прекращена поддержка старого блокирующего режима работы API webRequest, по крайней мере до тех пор, пока новый API не станет полностью отвечать потребностям разработчиков дополнений, использующих API webRequest. Такой подход позволит обеспечить совместимость с дополнениями Chrome без нарушения совместимости с дополнениями, завязанными на API webRequest.
Напомним, что основное недовольство новым манифестом связано с переводом в режим только для чтения API webRequest, позволявшего подключать собственные обработчики, имеющие полный доступ к сетевым запросам и способные на лету модифицировать трафик. Указанный API применяется в uBlock Origin и многих других дополнениях для блокирования нежелательного контента и обеспечения безопасности. Вместо API webRequest предложен ограниченный по своим возможностям API declarativeNetRequest, предоставляющий доступ к встроенному движку для фильтрации, самостоятельно обрабатывающему правила блокировки, не разрешающему использовать собственные алгоритмы фильтрации и не позволяющему задавать сложные правила, перекрывающие друг друга в зависимости от условий.
В Firefox поддержку третьей версии манифеста Chrome планируется предоставить для тестирования в конце 2021 года, а внедрение нового манифеста намечено на начало 2022 года. Из особенностей реализации нового манифеста в Firefox выделяется:
- Предоставление API declarativeNetRequest, но с сохранением возможности использования старого API webRequest.
- Изменение обработки Cross-origin запросов – в соответствии с новым манифестом на скрипты обработки контента будут распространяться те же ограничения полномочий, что и для основной страницы, в которую эти скрипты внедряются (например, если страница не имеет доступа к API определению местоположения, то и скрипт дополнения также не получит этот доступ). Часть связанных с ограничениями сross-origin запросов изменений уже доступна для тестирования в ночных сборках Firefox (развивается, как часть проекта Fission, который можно включить в about:preferences#experimental) и планируется для повсеместного внедрения в третьем квартале 2021 года.
- Фоновые страницы будут заменены на Service workers, работающие в форме фоновых процессов. Изменение пока не готово для начала тестирования.
- API на основе Promise. Firefox уже поддерживает данный тип API в пространстве имён “browser.*” и для третьей версии манифеста перенесёт его в пространство имён “chrome.*”.
- Новая гранулированная модель запроса полномочий – дополнение не сможет активироваться сразу для всех страниц (убрано полномочие “all_urls”), а будет работать только в контексте активной вкладки, т.е. пользователю потребуется подтверждать работу дополнения для каждого сайта. Компания Mozilla работает над усилением контроля доступа, но намерена предоставить пользователям возможность самим принимать решения, позволять ли дополнениям работать с разными вкладками.
- Запрет выполнения кода, загруженного с внешних серверов (речь про ситуации, когда дополнение подгружает и выполняет внешний код). В Firefox уже применяется блокировка внешнего кода и разработчики Mozilla готовы добавить дополнительные техники отслеживания загрузок кода, предлагаемые в третьей версии манифеста. Для скриптов обработки контента будет представлена отдельная политика ограничения доступа к контенту (CSP, Content Security Policy), а существующие API userScripts и contentScripts будут переработаны для поддержки расширений на базе Service worker.