Nell'ultimo anno, abbiamo partecipato attivamente a discussioni con i fornitori di diverse estensioni di blocco dei contenuti su come migliorare la piattaforma di estensioni MV3. Sulla base di queste discussioni, molte delle quali si sono svolte nel gruppo della community WebExtensions (WECG) in collaborazione con altri browser, siamo riusciti a implementare miglioramenti significativi.
Più set di regole statiche
I set di regole di filtro sono in genere raggruppati in elenchi. Ad esempio, un elenco più generico potrebbe contenere regole applicabili a tutti gli utenti, mentre un elenco più specifico potrebbe nascondere contenuti specifici per località che solo alcuni utenti vogliono bloccare. Fino a poco tempo fa, consentivamo a ogni estensione di offrire agli utenti una scelta di 50 elenchi (o "regole statiche") e di attivarne 10 contemporaneamente. Durante le discussioni con la community, gli sviluppatori di estensioni hanno fornito prove convincenti che dimostrano che questo valore era troppo basso per determinati casi d'uso. Dopo aver esaminato il rendimento dell'API in Chrome tenendo conto di queste discussioni, ora consentiamo di attivarne fino a 50 contemporaneamente. Si tratta di un numero notevolmente superiore al limite di 20 richiesto nel WECG. Sono consentiti anche 100 set di regole in totale. Questa funzionalità è disponibile in Chrome 120 e l'aumento dei limiti è supportato sia da Firefox sia da Safari, che hanno entrambi fornito un feedback iniziale su questa proposta.
Altre regole dinamiche
La maggior parte delle regole è "statica" e viene fornita con ogni aggiornamento di un'estensione. Tuttavia, per supportare aggiornamenti più frequenti e regole definite dall'utente, le estensioni possono aggiungere regole anche in modo dinamico, senza che gli sviluppatori debbano caricare una nuova versione dell'estensione nel Chrome Web Store.
Quando un'estensione può modificare dinamicamente le richieste in modi che non sono stati controllati durante la revisione del Chrome Web Store, gli utenti sono esposti a rischi di phishing o furto di dati. Ad esempio, una regola di reindirizzamento potrebbe essere usata in modo improprio per inserire link di affiliazione senza consenso.
Di conseguenza, abbiamo consentito alle estensioni di aggiungere fino a 5000 regole,il che ha incoraggiato l'utilizzo parsimonioso di questa funzionalità e ci ha consentito di rilevare più facilmente gli abusi.
Tuttavia, gli sviluppatori di estensioni come AdGuard e Adblock Plus hanno eseguito la propria analisi e condiviso dati che indicano che un limite più elevato consentirebbe regole più aggiornate e la migrazione a Manifest V3 per gli utenti con un numero maggiore di elenchi personalizzati. Infatti, AdGuard ha registrato che ogni settimana vengono apportate più di 2600 modifiche agli elenchi più utilizzati e che, tra il 5% degli utenti che utilizzano elenchi di filtri personalizzati, uno su quattro ha un totale combinato di oltre 5000 regole dinamiche (fonte). AdGuard ha notato che si tratta di una sfida significativa per la migrazione della propria estensione a Manifest V3 e abbiamo ricevuto feedback simili da altri bloccanti dei contenuti.
Abbiamo stabilito che alcune regole di filtro, ad esempio quelle con un'azione di block
o allow
, sono molto più sicure e hanno meno probabilità di essere utilizzate in modo improprio. Inoltre, costituiscono la maggior parte delle regole dei filtri di blocco degli annunci. In base a queste considerazioni, ho redatto e condiviso una proposta nel gruppo della community delle estensioni web per definire un insieme di regole che riteniamo meno rischiose e consentire fino a 30.000 di queste. Manteniamo comunque un limite massimo per evitare regressioni del rendimento.
Poiché questa proposta è stata supportata nel gruppo della community delle estensioni web, l'abbiamo implementata. A partire da Chrome 121, il limite più elevato di 30.000 regole si applica alle regole DNR sicure, che definiamo come regole con un'azione block
, allow
, allowAllRequests
o upgradeScheme
.
In base ai dati condivisi da AdGuard, tra il 98 e il 99 percento delle sue regole dovrebbe trarre vantaggio da questo limite più elevato. Le regole rimanenti sono ancora supportate e possono essere aggiunte entro il limite esistente.
In Chrome è disponibile come costante MAX_NUMBER_OF_DYNAMIC_RULES. Il limite di regole per tutte le altre regole di richiesta di rete dinamica rimane a 5000.
Dimensioni ridotte del set di regole
In Chrome 118 abbiamo modificato il valore predefinito del campo isUrlFilterCaseSensitive
in false
in base al feedback della community. Questo campo controlla se una regola che filtra in base all'URL è sensibile alle maiuscole e abbiamo appreso che la maggior parte degli sviluppatori aveva un valore predefinito diverso nella propria estensione. Di conseguenza, il valore doveva essere impostato più volte. Grazie a questa modifica, gli sviluppatori possono ottenere riduzioni significative delle dimensioni dei set di regole.
Passaggi successivi
Ci impegniamo a continuare a investire nell'API declarativeNetRequest per supportare il maggior numero possibile di casi d'uso e non vediamo l'ora di continuare a collaborare con la community. In particolare, vogliamo ringraziare i membri del WECG per il loro impegno, tra cui AdGuard per aver condiviso una quantità significativa di dati alla base di questo lavoro, e tutti i fornitori di browser che hanno contribuito in modo significativo alla progettazione di questa API.
Continueremo a rivedere i limiti in vigore per apportare le modifiche necessarie. A tal fine, prevediamo di condividere alcuni dei dati raccolti nell'ambito di questo lavoro nel prossimo futuro. Inoltre, stiamo lavorando per aggiungere funzionalità aggiuntive, come la possibilità di eseguire la corrispondenza con le intestazioni di risposta, una richiesta comune che abbiamo ricevuto dalle estensioni dei visualizzatori di PDF. In ogni caso, continueremo a comunicare il nostro lavoro e a utilizzare regolarmente il gruppo della community per le estensioni web come luogo per discutere di idee e allinearci su cosa esaminare in seguito.