Разработчики блокировщика рекламы AdGuard подготовили экспериментальную версию своего расширения, совместимую с печально известным Manifest v3, который определяет возможности и ограничения для расширений в Chrome. В этой версии манифеста API webRequest изменено таким образом, чтобы запретить расширениям изменять данные до того, как они будут показаны пользователю, а это делает блокировщики рекламы практически бесполезными.
Manifest v3
Напомню, что впервые о Manifest V3 заговорили еще в 2018 году. Тогда разработчики Google сообщили, что намерены ограничить работу webRequest API, вместо которого блокировщики контента и другие расширения станут использовать declarativeNetRequest. Разумеется, сообщалось, что эти улучшения призваны повысить безопасность и производительность, а также дать пользователям больший контроль над тем, что расширения делают и с какими сайтами взаимодействуют.
Проблема заключалась в том, что разработчики расширений быстро обнаружили, что переход на другой API, сильно отличающийся от webRequest и во многом ему уступающий, в сущности, станет «смертью» их продуктов. В частности это касалось блокировщиков рекламы, антивирусов, решений для родительского контроля и различных продуктов, повышающих конфиденциальность.
Дело в том, что webRequest API позволяет расширениям не просто блокировать рекламный контент на страницах, но и перехватывать сетевые запросы, чтобы иметь возможность блокировать, модифицировать и перенаправлять их. Но, по мнению разработчиков Google, это слишком сильно сказывалось на скорости загрузки страниц, поэтому планировались, что в будущем webRequest API будет разрешено только читать запросы, но не вмешиваться.
В свою очередь, declarativeNetRequest позволяет Chrome (но не самому расширению) решать, как поступать с сетевыми запросами, устраняя при этом «узкое место» и повышая безопасность. Разработчики Google были уверены, что использование declarativeNetRequest API будет лучше для приватности пользователей, ведь так расширения более не смогут читать сетевые запросы, сделанные от лица пользователя.
Как уже было сказано выше, замысел Google подвергся жесткой критике. Одним из первых свою точку зрения высказал разработчик популярных блокировщиков uBlock Origin и uMatrix Реймонд Хил (Raymond Hill). К примеру, он объяснял, что declarativeNetRequest предлагает разработчикам единственную имплементацию фильтровочного движка, к тому же ограниченную всего 30 000 фильтров, что не выдерживало сравнения даже с EasyList.
Хилл предупредил, что отказ от webRequest станет «смертью» для его продуктов, а также выразил опасение, что переход на API declarativeNetRequest может пагубно сказаться на работе других решений, и эту точку зрения поддержали множество других разработчиков.
В итоге, под давлением общественности разработчики Google были вынуждены отказаться от некоторых обновлений из числа Manifest V3, а затем пересмотрели свои планы еще больше, отменив еще ряд изменений вовсе.
С тех пор изменения Manifest V3 уже начали внедрять в Chrome, и недовольство постепенно утихло, хотя некоторые разработчики блокировщиков, похоже, просто смирились тем, что их продукты не смогут надежно блокировать рекламу, как только изменения достигнут стабильных версий Chrome.
Осенью 2021 года инженеры Google рассказали, как именно в итоге будет происходить внедрение Manifest V3. Так, с января 2022 года в Chrome Web Store был прекращен прием новых расширений с поддержкой Manifest V2, хотя разработчики по-прежнему могли обновлять существующие расширения.
Совсем скоро, с января 2023 года, браузер Chrome перестанет использовать расширения Manifest V2 вообще. Разработчики более не смогут обновлять существующие расширения и будут вынуждены перейти на Manifest V3.
До января 2023 года разработчики Google обещают продолжать доработку нового манифеста, чтобы учесть все пожелания и критику разработчиков расширений, а также внедрить в него все желаемые функции. К примеру, еще в прошлом году сообщалось, что в Google добавили дополнительные механизмы в новый Scripting API и расширили возможности Declarative Net Request API для поддержки нескольких статических наборов правил, правил сеанса и фильтрации на основе tab ID.
Новый AdGuard
Так как 2023 год все ближе, разработчики расширений вынуждены все плотнее работать над переходом на Manifest V3. Фактически им нужно подстроиться под следующие изменения:
- ограничить доступ расширения к сетевым запросам пользователей;
- включить все функции в само расширение, что знаменует собой конец практики удаленного размещения кода;
- перенести модификацию сетевых запросов из расширений в браузер;
- фоновые страницы будут заменены выделенными сервис-воркерами ради повышения производительности.
Экспериментальная версия блокировщика рекламы от AdGuard была создана, чтобы выявить возможности для улучшений и устранения ограничений. Пока же новинка лишь подчеркивает все «узкие места» и ограниченность Manifest V3. В блоге разработчики описывают все ухищрения, на которые им пришлось пойти, чтобы соответствовать новым требованиям, а также существующие проблемы нового манифеста.
Разработчики признают, что новое расширение AdGuard получилось намного слабее своего предшественника, причем единственной причиной для этого стало соответствие новым правилам. К примеру, новое расширение должно соблюдать ограничение на 30 000 правил фильтрации и 5 000 динамических правил, установленных самими пользователями. При этом если пользователь установил в браузере несколько блокировщиков, срабатывает глобальное ограничение (не более 330 000 правил фильтрации), и AdGuard может иметь даже меньшую свободу действий.
Еще одна большая проблема, это невозможность загружать правила фильтрации с сервера самого расширения. Теперь AdGuard лишь определяет набор декларативных правил и позволяет Chrome заниматься процессом фильтрации сетевых запросов. Поскольку новый синтаксис декларативных правил весьма ограничен, далеко не все существующие правила могут быть преобразованы в новую форму, включая правила для файлов cookie, которые блокируют определенные следящие трекеры.
«Часто в фильтрах используется
negative lookahead
. Быстрый поиск показал, что на данный момент в фильтрах AdGuard есть 43 правила, использующих это выражение. На первый взгляд, это немного, но имейте в виду, что большинство этих правил должны работать на множестве разных доменов, поэтому я бы сказал, что одно лишь это ограничение мешает блокировке рекламы более чем на 1000 сайтах», — пишут разработчики.
Отмечается, что невозможность обновить правила непосредственно с сервера также приведет к задержкам в их обновлении и реагировании на новые требования блокировок. По оценкам AdGuard, обновления правил теперь будут проходить с задержкой в «несколько дней».
Третья проблема, с которой разработчики столкнулись из-за Manifest V3, заключается в том, что пользователи больше не могут просматривать логи фильтрации (присутствующие Manifest V2), потому как теперь рекламу блокирует браузер. Единственный обходной путь в данном случае — распаковать и установить расширение в режиме разработчика, что даст ему доступ к дебаггингу, необходимому для приема статистических данных из браузера.
И самое забавное: оказалось, что замена привычной фоновой страницы, где расширения сохраняют свое состояние и взаимодействуют с API-интерфейсами браузера, на сервис-воркеры вызывает проблемы с производительностью, хотя должна была ее повышать. Дело в том, что сервис-воркеры бездействуют, когда в браузере нет активности. После загрузки новой страницы воркеру требуется до 2 секунд, чтобы «проснуться». Хотя декларативные правила по-прежнему будут блокировать рекламу, применение косметического фильтра для рекламы происходит с задержкой.
«Хотя экспериментальное расширение не так эффективно, как его предшественник, большинство пользователей не почувствуют разницы, — уверяют AdGuard. — Единственное, что вы можете заметить — это мелькнувшую рекламу из-за задержки в применении косметических правил».
Протестировать экспериментальную версию AdGuard можно уже сейчас, установив ее из Chrome Web Store или получив исходный код с GitHub, где разработчики ждут отзывов пользователей.
Источник: xakep