Melhorias na filtragem de conteúdo no Manifesto V3

No ano passado, participamos ativamente de discussões com os fornecedores responsáveis por várias extensões de bloqueio de conteúdo relacionadas a maneiras de melhorar a plataforma de extensões do MV3. Com base nessas discussões, muitas delas realizadas no WebExtensions Community Group (WECG) em colaboração com outros navegadores, conseguimos implementar melhorias significativas.

Mais conjuntos de regras estáticos

Os conjuntos de regras de filtro geralmente são agrupados em listas. Por exemplo, uma lista mais genérica pode conter regras aplicáveis a todos os usuários, enquanto uma lista mais específica pode ocultar conteúdo específico do local que apenas alguns usuários querem bloquear. Até pouco tempo atrás, permitíamos que cada extensão oferecesse aos usuários a opção de 50 listas (ou "conjuntos de regras estáticos") e que 10 delas fossem ativadas simultaneamente. Em discussões com a comunidade, os desenvolvedores de extensões forneceram evidências convincentes mostrando que esse valor era muito baixo para certos casos de uso. Depois de analisar o desempenho da API no Chrome com essas discussões em mente, agora permitimos até 50 APIs ativadas simultaneamente. Em especial, esse número é significativamente maior do que o limite de 20 solicitado no WECG. Também permitimos 100 conjuntos de regras no total. Isso será lançado no Chrome 120, e o aumento dos limites pode ser feito pelo Firefox e pelo Safari, que forneceram informações iniciais sobre a proposta.

Regras mais dinâmicas

A maioria das regras é "estática" e vem com cada atualização de uma extensão. No entanto, para oferecer suporte a atualizações mais frequentes e regras definidas pelo usuário, as extensões também podem adicionar regras de forma dinâmica, sem que os desenvolvedores precisem fazer upload de uma nova versão da extensão na Chrome Web Store.

Quando uma extensão pode modificar solicitações dinamicamente de maneiras que não foram verificadas durante a análise da Chrome Web Store, isso expõe os usuários a riscos de phishing ou roubo de dados. Por exemplo, uma regra de redirecionamento pode ser usada indevidamente para injetar links de afiliados sem consentimento.

Consequentemente, só permitimos que as extensões adicionassem até 5.000 regras,o que incentivava o uso dessa funcionalidade com moderação e facilitava a detecção de abusos.

No entanto, desenvolvedores de extensões, como o AdGuard e o Adblock Plus, fizeram as próprias análises e compartilharam dados que, com um limite maior, permitiriam a migração de regras mais atualizadas e a migração de usuários com um número maior de listas personalizadas para o Manifesto V3. Na verdade, o AdGuard relatou que mais de 2.600 alterações são feitas nas listas mais usadas a cada semana, e dos 5% dos usuários que usam listas de filtros personalizados, um em cada quatro usuários tem um total combinado de mais de 5.000 regras dinâmicas entre elas (fonte). O AdGuard considerou isso como um desafio significativo para migrar a extensão para o Manifest V3, e recebemos feedback semelhante de outros bloqueadores de conteúdo.

Determinamos que algumas regras de filtro, como as com uma ação block ou allow, são muito mais seguras e têm menos chances de serem abusadas. Além disso, elas compõem a grande maioria das regras de filtro de bloqueio de anúncios. Com base nisso, elaborei e compartilhava uma proposta no Web Extensions Community Group para definir um conjunto de regras que consideramos de menor risco e permitem até 30.000 regras. Ainda mantemos um limite superior para evitar regressões de performance.

Essa proposta foi aceita no grupo da comunidade de extensões da Web e, por isso, foi implementada. A partir do Chrome 121, o limite máximo de 30.000 regras se aplica às regras DNR seguras, que estamos definindo como regras com uma ação block, allow, allowAllRequests ou upgradeScheme.

Com base nos dados compartilhados pelo AdGuard, entre 98 e 99% das regras devem se beneficiar desse limite maior. Todas as regras restantes ainda são compatíveis e podem ser adicionadas dentro do limite atual.

Essa opção está disponível no Chrome como a constante MAX_NUMBER_OF_DYNAMIC_RULES. O limite de regras para todas as outras regras de solicitação de rede dinâmica permanece em 5.000.

Tamanho reduzido do conjunto de regras

No Chrome 118, mudamos o valor padrão do campo isUrlFilterCaseSensitive para false com base no feedback da comunidade. Esse campo controla se uma regra que filtra por URL diferencia maiúsculas de minúsculas. Além disso, aprendemos que a maioria dos desenvolvedores tem um padrão diferente na extensão. Consequentemente, o valor precisava ser definido muitas vezes. Ao fazer essa mudança, os desenvolvedores podem obter reduções de tamanho significativas em seus conjuntos de regras.

E agora?

Temos o compromisso de continuar investindo na API declarativeNetRequest para oferecer suporte ao maior número possível de casos de uso. Além disso, queremos continuar trabalhando com a comunidade. Em particular, gostaríamos de agradecer aos membros do WECG pelo engajamento, incluindo ao AdGuard por compartilhar uma quantidade significativa dos dados que impulsionaram esse trabalho, e a todos os fornecedores de navegador que foram uma parte importante do design dessa API.

Vamos continuar analisando os limites que temos para fazer ajustes quando necessário. Por isso, vamos compartilhar em breve alguns dos dados que coletamos como parte desse trabalho. Além disso, estamos trabalhando para adicionar outros recursos, como a possibilidade de comparar com os cabeçalhos de resposta, que é uma solicitação comum para as extensões de visualizador de PDF. Em todos os casos, continuaremos divulgando nosso trabalho, e vamos usar o grupo da comunidade de extensões da Web regularmente para discutir ideias e nos alinhar ao que queremos ver a seguir.