Google Chrome
Расширения для браузеров
Браузеры
2 июня

Полноценная блокировка рекламы в Chrome будет доступна только корпоративным пользователям

Ещё в январе Google предложила изменить API браузера Chromium, которые не совместимы с большинством сторонних блокировщиков рекламы и некоторыми другими расширениями. Речь о новых программных интерфейсах declarativeNetRequest API (часть документа Manifest V3). Они лишают возможности полноценно использовать webRequest API. Сейчас расширения вроде uBlock Origin и Ghostery используют webRequest API для блокировки контента на лету во время загрузки страницы. В новой системе блокировщики не cмогут блокировать события, а только просматривать их. Вместо этого расширениям предлагают перейти на declarativeNetRequest API из Manifest V3 — и сообщать браузеру о тех событиях, которые они хотят заблокировать. Это якобы должно ускорить загрузку страниц (потому что расширения больше не будут тормозить основной поток), а также защитит приватность пользователей, по мнению Google.

Разработчики расширений выступили категорически против предлагаемых изменений. Google пошла на попятную и отложила внедрение изменений, когда были опубликованы результаты исследования, насколько разные блокировщики рекламы замедляют работу Chromium (см. выше). Оказалось, что эти задержки настолько мизерные, что их вряд ли можно считать причиной для введения нового API. Через несколько часов после появления этого один из разработчиков Chromium официально огласил решение отложить новые API.

Но сейчас Google немного cкорректировала позицию. Она всё-таки внедрит Manifest V3, а нынешнюю функциональность declarativeNetRequest API оставит только для платных корпоративных пользователей.

К разработчикам расширений обратился Симеон Винсент (Simeon Vincent), который отвечает за коммуникации с разработчиками сторонних расширений Chrome, занимая должность Developer Advocate for Chrome Extensions. Он должен лоббировать интересы сторонних разработчиков в компании Google.

Симеон Винсент объяснил, какова нынешняя ситуация с внедрением Manifest V3. Вот фрагмент его письма, который привлёк наибольшее внимание аудитории, и который сейчас широко обсуждается в сообществе:

Chrome is deprecating the blocking capabilities of the webRequest API in Manifest V3, not the entire webRequest API (though blocking will still be available to enterprise deployments)

Итак, сообществу удалось частично отстоять webRequest API, так что Google не будет полностью закрывать эти интерфейсы. Однако функция блокировки рекламы через webRequest API в Manifest V3 не будет доступна (она останется только для корпоративных пользователей).

Google по существу говорит, что в Chrome по-прежнему останется возможность блокировать нежелательный контент, но только для платных корпоративных пользователей Chrome. Вероятно, корпоративные клиенты могут разрабатывать и устанавливать собственные расширения Chrome, поэтому и сторонние блокировщики рекламы у них тоже будут работать.

Для остальных пользователей позиция Google остаётся неизменной в отношении блокировщиков контента, так что обычным пользователям придётся переключиться на менее эффективную, основанную на правилах систему declarativeNetRequest API.

Реймонд Хилл, автор uBlock Origin и uMatrix, ранее объяснял, что его расширения для блокировки рекламы «не смогут существовать», если будут приняты изменения. Позже пессимизм высказали разработчики других расширений, в том числе F-Secure, NoScript и Ermes Cyber Security. Например, NoScript для Firefox никак не получится перенести на Chrome.

Реймонд Хилл обратил внимание, что declarativeNetRequest API — не больше чем реализация одного конкретного движка фильтрации AdBlock Plus, а владелец этого расширения, компания eyeo GmbH, является коммерческим партнёром Google, взимая деньги с рекламодателей за включение их в «белый список» разрешённой рекламы.

Кроме того, у declarativeNetRequest API довольно ограниченная реализация: лимита в 30 000 ограничений недостаточно для отработки одних только известных списков EasyList. В новом API не поддерживаются некоторые другие возможности, включая блокировку мультимедийных элементов больше указанного размера, отключение выполнения JavaScript путём введения директив Content-Security-Policy и удаление исходящих заголовков куков.

Chrome налагает ограничение в 30 000 правил, в то время как популярные списки правил блокировки рекламы, такие как EasyList, используют более 75 000 правил. Как разъяснил пользователь snp со ссылкой на документацию declarativeNetRequest, ограничение 30 000 правил действует для статичного .json файла, идущего с расширением (и который нельзя редактировать).

The JSON file specified as part of «rule_resources» in the manifest contains a list of rules. The number of rules that an extension can specify is bound by the chrome.declarativeNetRequest.MAX_NUMBER_OF_RULES constant

Для динамически создаваемых списков действует в 5000 правил:

The number of dynamic rules that an an extension can add is bounded by the chrome.declarativeNetRequest.MAX_NUMBER_OF_DYNAMIC_RULES constant.

Также в API нет возможности из расширения узнать, какие правила сработали. Т.е. нельзя будет реализовать логгер, такой как в uBlock Origin или uMatrix. Увидеть, что запрос заблокирован, можно только в сетевой консоли. И не факт, что его можно будет сопоставить с конкретным запрещающим правилом, что затрудняет отладку.

Можно указывать редирект вида:

          "id" : 4,
          "priority" : 1,
          "action" : { "type" : "redirect", "redirectUrl" : "/a.jpg" },
          "condition" : { "urlFilter" : "abcd.com", "resourceTypes" : ["main_frame"] }
        }

«Тогда http://abcd.com редиректится в chrome-extension://<extension-id>/a.jpg. В теории, через этот workaround можно получить более гибкое управление процессом, но не очень понятно, насколько быстро такой редирект сработает и можно ли средиректить в JS код расширения или только в статику», — объяснил snp.

Сейчас Google утверждает, что хочет увеличить лимиты 5000 и 30 000. Будут проведены тесты производительности, и если они не покажут деградации производительности, то лимит увеличится. Однако Google не обещает ничего конкретного: «Мы планируем повысить эти значения, но мы не имеем точных данных пока мы не проведем тесты производительности, чтобы найти хорошую верхнюю границу, которая будет работать на всех поддерживаемых устройствах».

Ведущий разработчик uBlock Origin Реймонд Хилл прокомментировал ситуацию в репозитории GitHub uBlock Origin. Он пишет, что разрешение блокировщиков рекламы полностью противоречит бизнес-модели Google.

Реймонд Хилл находит «раздражающими» слова Google о сохранении поддержки WebRequest API, они «всего лишь» не будут поддерживать блокировку рекламы, а так интерфейсы полностью сохраняются. Словно разработчиков беспокоило именно формальное сохранение WebRequest API: «Они как будто хотят утопить реальную проблему в сфабрикованной, которая никому не интересна», — пишет Хилл.

Создатель uBlock Origin ещё раз повторяет, что веб-страницы в современном интернете загружаются медленно из-за раздувания и ожирения веба, а не из-за блокирующей способности WebRequest API, по крайней мере, если расширения грамотно написаны: «Кроме того, если бы проблемы с производительностью из-за блокирующего характера webRequest API были реальным мотивом Google, они просто приняли бы подход Firefox и дали возможность вернуть Promise только по трём методам, которые можно использовать для блокировки».

Лично Реймонд Хилл считает, что заявления Google сделаны для общественного потребления, чтобы изменения благоприятно выглядели для широкой общественности, а на самом деле на закрытых встречах менеджеры Google решают, как оптимизировать бизнес: «Поэтому мы должны судить не по тому, что говорится для общественного потребления, а по тому, что фактически делается или что они планируют делать».

У основных продуктов и платформ Google, таких как Android, Chrome, Gmail, Google Drive, Google Maps, Google Play, Search и YouTube, более миллиарда активных пользователей в месяц. Главный источник дохода Google — реклама. В официальной финансовой отчётности Google указано, что один из основных факторов риска для бизнеса — технологии для блокировки рекламных объявлений: «Такие технологии и инструменты могут отрицательно сказаться на результатах нашей деятельности».

«Чтобы Google Chrome вырос до текущей пользовательской базы, он должен был поддерживать блокировщики контента — это самые популярные расширения для любого браузера, — пишет Хилл. — Стратегия Google заключалась в том, чтобы найти оптимальную точку между двумя целями: увеличить пользовательскую базу Google Chrome и предотвратить блокировку контента, которая наносит вред бизнесу». Теперь, когда Google Chrome стал доминирующим браузером, появилась возможность сдвинуть баланс между двумя целями в сторону основного бизнеса Google, считает разработчик uBlock Origin.

Представители Google ответили, что позиция компании не окончательная, работа на Manifest V3 и консультации с сообществом ещё не закончены.

+47
28,1k 16
Поддержать автора
Комментарии 207