@@ -53,6 +53,7 @@ impl Default for NetworkFilterDebugData {
5353struct NetworkFilterListBuilder < ' a , ' f > {
5454 filter_map_builder : FlatMultiMapBuilder < ShortHash , NetworkFilterFlatEntry < ' a > > ,
5555 opt_domains_map_builder : FlatMultiMapBuilder < ShortHash , NetworkFilterFlatEntry < ' a > > ,
56+ opt_to_domains_map_builder : FlatMultiMapBuilder < ShortHash , NetworkFilterFlatEntry < ' a > > ,
5657 token_frequencies : TokenSelector ,
5758 filters_to_optimize : HashMap < ShortHash , Vec < NetworkFilter < ' f > > > ,
5859 tokens_buffer : TokensBuffer ,
@@ -173,6 +174,7 @@ impl<'a, 'f> NetworkFilterListBuilder<'a, 'f> {
173174 Self {
174175 filter_map_builder : FlatMultiMapBuilder :: with_capacity ( 1024 ) ,
175176 opt_domains_map_builder : FlatMultiMapBuilder :: with_capacity ( 256 ) ,
177+ opt_to_domains_map_builder : FlatMultiMapBuilder :: with_capacity ( 256 ) ,
176178 token_frequencies : TokenSelector :: new ( 1024 ) ,
177179 filters_to_optimize : HashMap :: new ( ) ,
178180 tokens_buffer : TokensBuffer :: default ( ) ,
@@ -216,6 +218,12 @@ impl<'a, 'f> NetworkFilterListBuilder<'a, 'f> {
216218 . insert ( to_short_hash ( * token) , NetworkFilterFlatEntry { filter, id } ) ;
217219 }
218220 }
221+ FilterTokens :: OptToDomains => {
222+ for token in & self . tokens_buffer {
223+ self . opt_to_domains_map_builder
224+ . insert ( to_short_hash ( * token) , NetworkFilterFlatEntry { filter, id } ) ;
225+ }
226+ }
219227 }
220228 } else {
221229 // Defer serialization to the optimizer (pattern map only).
@@ -257,11 +265,6 @@ impl<'a, 'f> NetworkRulesBuilder<'a, 'f> {
257265 return ;
258266 }
259267
260- // For now, filters with $to options are parsed but ignored
261- // to preserve existing matching behavior.
262- if filter. has_to_option ( ) {
263- return ;
264- }
265268
266269 // Redirects are independent of blocking behavior.
267270 if filter. is_redirect ( ) {
@@ -354,11 +357,16 @@ impl<'a, 'f> FlatSerialize<'a, EngineFlatBuilder<'a>> for NetworkRulesBuilder<'a
354357 rule_list
355358 . opt_domains_map_builder
356359 . retain_by_value ( |entry| !value. bad_filter_ids . contains ( & entry. id ) ) ;
360+ rule_list
361+ . opt_to_domains_map_builder
362+ . retain_by_value ( |entry| !value. bad_filter_ids . contains ( & entry. id ) ) ;
357363
358364 let flat_filter_map =
359365 FlatMultiMapBuilder :: finish ( rule_list. filter_map_builder , builder) ;
360366 let flat_opt_domains_map =
361367 FlatMultiMapBuilder :: finish ( rule_list. opt_domains_map_builder , builder) ;
368+ let flat_opt_to_domains_map =
369+ FlatMultiMapBuilder :: finish ( rule_list. opt_to_domains_map_builder , builder) ;
362370
363371 serialized_lists. push ( fb:: NetworkFilterList :: create (
364372 builder. raw_builder ( ) ,
@@ -367,6 +375,8 @@ impl<'a, 'f> FlatSerialize<'a, EngineFlatBuilder<'a>> for NetworkRulesBuilder<'a
367375 filter_map_values : Some ( flat_filter_map. values ) ,
368376 opt_domains_map_index : Some ( flat_opt_domains_map. keys ) ,
369377 opt_domains_map_values : Some ( flat_opt_domains_map. values ) ,
378+ opt_to_domains_map_index : Some ( flat_opt_to_domains_map. keys ) ,
379+ opt_to_domains_map_values : Some ( flat_opt_to_domains_map. values ) ,
370380 } ,
371381 ) ) ;
372382 }
0 commit comments