spider_network_blocker/
scripts.rs

1use crate::trie::Trie;
2
3lazy_static::lazy_static! {
4    /// Ignore list of scripts.
5    pub static ref URL_IGNORE_TRIE: Trie = {
6        let mut trie = Trie::new();
7        let patterns = [
8            "https://www.googletagservices.com/tag/",
9            "https://js.hs-analytics.net/analytics/",
10            "https://js.usemessages.com/conversations-embed.js",
11            "https://www.googletagmanager.com/",
12            "https://googletagmanager.com/",
13            "https://cm.g.doubleclick.net/",
14            "https://www.googleoptimize.com/optimize.js?id=GTM",
15            "https://ads.pubmatic.com/AdServer/",
16            "https://js.hsadspixel.net",
17            "https://www.google.com/adsense/",
18            "https://www.googleadservices.com",
19            "https://static.cloudflareinsights.com/",
20            "https://cdn.curalate.com/sites/",
21            "https://adservice.google.com",
22            "https://www.gstatic.com/cv/js/sender/",
23            "https://googleads.g.doubleclick.net",
24            "https://www.google-analytics.com",
25            "https://www.googleanalytics.com",
26            "https://cdn-cookieyes.com/client_data/",
27            "https://iabusprivacy.pmc.com/geo-info.js",
28            "https://support.webtasy.com/scripts/track_visit.php",
29            "https://cookie-cdn.cookiepro.com/consent",
30            "https://a.omappapi.com/app/js/api.min.js",
31            "https://static.hotjar.com/",
32            "https://cdn.eu.amplitude.com/script/",
33            "https://js.hscta.net/cta/current.js",
34            "https://cdn.refersion.com/refersion.js",
35            "https://web.cmp.usercentrics.eu/ui/loader.js",
36            "https://pixeltrack.clientgear.com",
37            "https://events.framer.com/script?v=2",
38            "https://load.sumome.com/",
39            "https://websdk.appsflyer.com/",
40            "https://cdn.mediago.io/js/pixel.js",
41            "https://s.pinimg.com/ct/core.js",
42            "https://www.mongoosemetrics.com/",
43            "https://geolocation-recommendations.shopifyapps.com/",
44            "https://consent.cookiebot.com/uc.js",
45            "https://w.usabilla.com/",
46            "https://consentcdn.cookiebot.com/",
47            "https://plausible.io/api/event",
48            "https://sentry.io/api/",
49            "https://cdn.onesignal.com/",
50            "https://cdn.cookielaw.org/",
51            "https://static.doubleclick.net",
52            "https://tools.luckyorange.com/",
53            "https://cdn.piano.io",
54            "https://px.ads.linkedin.com",
55            "https://cdn.sift.com/s.js",
56            "https://connect.facebook.net",
57            "https://tags.tiqcdn.com",
58            "https://tr.snapchat.com",
59            "https://ads.twitter.com",
60            "https://cdn.segment.com",
61            "https://stats.wp.com",
62            "https://analytics.",
63            "http://analytics.",
64            "https://cdn.cxense.com",
65            "https://cdn.tinypass.com",
66            "https://cd.connatix.com",
67            "https://js.chargebee.com/v2/chargebee.js",
68            "https://consent.cookiebot.com/",
69            "https://platform-api.sharethis.com/js/sharethis.js",
70            "https://js.hsforms.net/forms/embed/v2.js",
71            "https://static.parastorage.com/services/wix-thunderbolt/dist/",
72            "https://static.parastorage.com/services/tag-manager-client/",
73            "https://cdn.consentmanager.net/",
74            "https://static.parastorage.com/services/form-app/",
75            "https://www.datadoghq-browser-agent.com/",
76            "https://b.delivery.consentmanager.net/delivery/",
77            "https://tvem.cdn.turner.com/v2/",
78            "https://image6.pubmatic.com/AdServer/",
79            "https://www.digistore24.com/track/AFFILIATE/",
80            "https://i.cdn.turner.com/ads/adfuel/",
81            "https://featureassets.org",
82            "https://cdn.rudderlabs.com",
83            "https://script.hotjar.com/",
84            "https://cdn.branch.io/branch-latest.min.js",
85            "https://cdn.brcdn.com/v1/",
86            "https://cdn.scarabresearch.com/js/",
87            "https://cdn.insurads.com/",
88            "https://cdn.segment.com/",
89            "https://analytics.tiktok.com/",
90            "https://cdn-ukwest.onetrust.com",
91            "https://cdn.onetrust.com",
92            "https://services.insurads.com/",
93            "https://platform.iteratehq.com/loader.js",
94            "https://s.amazon-adsystem.com/",
95            "https://ts.amazon-adsystem.com/",
96            "https://tracking.g2crowd.com/attribution_tracking/conversions/",
97            "https://static.criteo.net/",
98            "https://dynamic.criteo.com/",
99            "https://tags.creativecdn.com/",
100            "https://static.ads-twitter.com/uwt.js",
101            "https://amplify.outbrain.com/cp/obtp.js",
102            "https://js.hsadspixel.net/fb.js",
103            "https://js.hs-banner.com/v2/",
104            "https://www.dwin1.com/2134.js",
105            "https://browser.sentry-cdn.com/",
106            "https://www.dianomi.com/js/contextfeed.js",
107            "https://a.pub.network/",
108            "https://cdn.quantummetric.com/qscripts/",
109            "https://wix-engage-visitors-prod-13.firebaseio.com/",
110            "https://c.amazon-adsystem.com/aax2/apstag.js",
111            "https://www.clarity.ms/tag/",
112            "https://cdn.callrail.com/companies/",
113            "https://tru.am/scripts/custom/",
114            "https://js.zi-scripts.com/zi-tag.js",
115            "https://tag.getamigo.io/js/",
116            "https://s.go-mpulse.net/boomerang/",
117            "https://tag.aticdn.net/piano-analytics.js",
118            "https://cdn.trustcommander.net/privacy/",
119            "https://img1.wsimg.com/traffic-assets/js/tccl-tti.min.js",
120            "https://img1.wsimg.com/signals/js/clients/scc-c2/scc-c2.min.js",
121            "https://beacon.riskified.com/",
122            "https://connect.facebook.net/en_US/fbevents.js",
123            "https://cdn.shopify.com/shopifycloud/boomerang/shopify-boomerang-1.0.0.min.js",
124            "https://cdn-ukwest.onetrust.com/scripttemplates/otSDKStub.js",
125            "https://tag.marinsm.com/serve/",
126            "https://acdn.adnxs.com/ast/ast.js",
127            "https://log.medietall.no/analytics.v2.js",
128            "https://adsdk.microsoft.com/ast/ast.js",
129            "https://schibsted-cdn.relevant-digital.com/static/tags/",
130            "https://sdk.privacy-center.org/",
131            "https://bat.bing.net",
132            "https://tpc.googlesyndication.com/",
133            "https://cdn.petametrics.com/",
134            "https://cdn.doubleverify.com/",
135            "https://assets.poool.fr/engage.min.js",
136            "https://www.facebook.com/v17.0/plugins/like.php?",
137            "https://gum.criteo.com",
138            "https://js-sec.indexww.com",
139            "https://eus.rubiconproject.com/",
140            "https://eb2.3lift.com/",
141            "https://acdn.adnxs.com/",
142            "https://ssc-cms.33across.com/",
143            "https://static.addtoany.com/menu/",
144            "https://www.gstatic.com/cast/sdk/libs/sender/1.0/cast_framework.js",
145            "https://www.gstatic.com/eureka/clank/131/cast_sender.js",
146            "https://static.adsafeprotected.com/",
147            "https://ssum-sec.casalemedia.com/usermatch",
148            "https://cdn.brandmetrics.com/scripts/",
149            "https://cdn.confiant-integrations.net/",
150            "https://www.b2i.us/b2i/",
151            "https://acsbapp.com/apps/app/dist/js/app.js",
152            "https://cdn.doofinder.com/livelayer/",
153            "https://load.sumo.com/",
154            "https://cdn11.bigcommerce.com/",
155            "https://na.shgcdn3.com/collector.js",
156            "https://microapps.bigcommerce.com/bodl-events/index.js",
157            "https://checkout-sdk.bigcommerce.com/v1/loader.js",
158            "https://cdn.callrail.com/companies/",
159            "https://www.webtraxs.com/trxscript.php",
160            "https://diffuser-cdn.app-us1.com/diffuser/diffuser.js",
161            "https://imasdk.googleapis.com/js/sdkloader/ima3.js",
162            "https://cdn.registerdisney.go.com/v4/responder.js",
163            "https://cdn.registerdisney.go.com/v4/OneID.js",
164            "https://u5.investingchannel.com/static/uat.js",
165            "https://diffuser-cdn.app-us1.com/diffuser/diffuser.js",
166            "https://www.clarity.ms/tag/",
167            "https://js-agent.newrelic.com/",
168            "https://bat.bing.com/bat.js",
169            "https://p.yotpo.com/i?",
170            "https://shopify-init.blackcrow.ai/",
171            "https://js.adsrvr.org/up_loader.1.1.0.js",
172            "https://t.cfjump.com/tag/",
173            "https://tag.wknd.ai/",
174            "https://bpi.zip.co/trx/3.3.0.js",
175            "https://s1.hdslb.com/bfs/cm/cm-sdk/static/js/track-collect.js",
176            "https://consent.trustarc.com/",
177            "https://cdn-sitegainer.com/",
178            "https://yob9p0yb4y.kameleoon.eu/",
179            "https://j.6sc.co/6si.min.js",
180            "https://x.clearbitjs.com/v2/",
181            "https://api.clerk.io/v2/log/",
182            "https://cdn.noibu.com/",
183            "https://us1.discourse-cdn.com/cursor1/assets/plugins/discourse-adplugin",
184            "https://static.cloudflareinsights.com/beacon.min.js/",
185            "https://hm.baidu.com/",
186            "https://storage.googleapis.com/lr-marketing-js/lr-web-analytics/",
187            "https://unpkg.zhimg.com/@efe/zhad-tracker",
188            "https://tracking.g2crowd.com/attribution_tracking/",
189            "https://snap.licdn.com/",
190            "https://m.servedby-buysellads.com/monetization.it.js",
191            "https://cdn.metadata.io/site-insights.js",
192            "https://www.ist-track.com/",
193            "https://www.redditstatic.com/ads/",
194            "https://verifi.podscribe.com/",
195            "https://script.crazyegg.com/",
196            "https://cdn.iubenda.com/",
197            "https://bundle.5gtb.com/",
198            "https://d34r8q7sht0t9k.cloudfront.net/tag.js",
199            "https://pagead2.googlesyndication.com/",
200            "https://a.klaviyo.com/onsite/track-analytics",
201            "https://apps.bazaarvoice.com/analytics/bv-analytics.js",
202            "https://mab.chartbeat.com/mab_strategy/",
203            "https://c.amazon-adsystem.com/",
204            "https://rumcdn.geoedge.be/",
205            "https://assets.adobedtm.com/",
206            "https://macro.adnami.io/macro/spec/adsm.macro.",
207            "https://log.medietall.no/analytics.js",
208            "https://cl-eu2.k5a.io/",
209            "https://cdn.siftscience.com/s.js",
210            "https://cdn.segment.com/analytics.js",
211            "https://lwadm.com/lw/pbjs?",
212            "https://cl.k5a.io/",
213            "https://cdn-cookieyes.com/",
214            "https://s.kk-resources.com/leadtag.js",
215            "https://app.optibase.io/script.js",
216            "https://nexus.ensighten.com/",
217            "https://c.oracleinfinity.io/acs/account/fp3kyrmvtg/js/prod/odc.js",
218            "https://static-tracking.klaviyo.com/",
219            "https://cdn-widgetsrepository.yotpo.com/",
220            "https://a.klaviyo.com/onsite/track-analytics?",
221            "https://klaviyo.com/onsite/track-analytics?",
222            "https://cdn.cookielaw.org/scripttemplates/",
223            "https://s2.go-mpulse.net/",
224            "https://pbs.yahoo.com/",
225            "https://img1.wsimg.com/",
226            "https://invitejs.trustpilot.com/tp.min.js",
227            "https://ads.pubmatic.com/AdServer/js/",
228            "https://widgets.outbrain.com/nanoWidget/externals/obPixelFrame/obPixelFrame.js",
229            "https://widgets.outbrain.com/external/externals/intentiq.js",
230            "https://applets.ebxcdn.com/ebx.js",
231            "https://cdn.yektanet.com/superscript/",
232            "https://cdn.fuseplatform.net/publift/tags/",
233            "https://tag.rmp.rakuten.com/",
234            "https://analytics-api.",
235            "https://cdn.corvidae.ai/pixel.min.js",
236            "https://app.popt.in/pixel.js",
237            "https://js-agent.newrelic.com",
238            "https://js-eu1.hs-analytics.net/analytics/",
239            "https://js-eu1.hs-banner.com/v2/",
240            "https://static.doubleclick.net/instream/ad_status.js",
241            "ssl.cf1.rackcdn.com/stf.js",
242            "https://code.etracker.com/code/e.js",
243            "https://geo.privacymanager.io/",
244            "https://script.dotmetrics.net/",
245            "https://delivery.consentmanager.net/delivery/",
246            "https://mc.yandex.ru/metrika/tag.js",
247            "https://cdn.debugbear.com/",
248            "https://stats.wp.com/e-",
249            "https://public.servenobid.com/partner/",
250            "https://sb.scorecardresearch.com/beacon.js",
251            "https://cdn.pdst.fm/ping.min.js",
252            "https://www.clarity.ms/tag/shopify/",
253            "https://static.klaviyo.com/onsite/js/",
254            "https://a.klaviyo.com/media/js/",
255            "https://cdn.intelligems.io/esm/",
256            "https://cdn.privacy-mgmt.com/unified/wrapperMessagingWithoutDetection.js",
257            "https://client.aps.amazon-adsystem.com/publisher.js",
258            "https://s.go-mpulse.net/",
259            "https://assets.trendii.com/pixel/main.js",
260            "https://tag.wknd.ai/",
261            "https://try.abtasty.com/",
262            "https://tags.tiqcdn.com/utag/",
263            "https://assets.squarespace.com/universal/scripts-compressed/performance-",
264            "https://assets.squarespace.com/universal/scripts-compressed/async-gdpr-cookie-banner-",
265            "https://cdnjs.cloudflare.com/ajax/libs/cookieconsent2/3.0.3/cookieconsent.min.js",
266            "https://libs.coremetrics.com/eluminate.js",
267            "https://c.webtrends-optimize.com/acs/accounts/",
268            "https://cmp.inmobi.com/choice/",
269            "https://p11.techlab-cdn.com/",
270            "/scripts/matomo/",
271            "/js/exponea.min.js",
272            "/eBootsStorefrontAssetStore/javascript/Analytics.js",
273            "/eu_cookie_compliance/js/eu_cookie_compliance.min.js",
274            "/privacy-banner/storefront-banner.js",
275            "/consent-tracking-api/v0.1/consent-tracking-api.js",
276            "go-mpulse.net/boomerang",
277            ".siteintercept.qualtrics.com",
278            ".sharethis.com",
279            ".cdn4.forter.com",
280            ".newrelic.com",
281            ".googlesyndication.com",
282            ".amazon-adsystem.com",
283            ".onetrust.com",
284            "sc.omtrdc.net",
285            "doubleclick.net",
286            "hotjar.com",
287            "datadome.com",
288            "datadog-logs-us.js",
289            "tinypass.min.js",
290            "tracker.js",
291            "tracker.min.js",
292            "matomo.js",
293            ".airship.com",
294            ".adlightning.com",
295            ".lab.amplitude.",
296            // explicit ignore tracking.js and ad files
297            "privacy-notice.js",
298            "cookie_consent.js",
299            "tracking.js",
300            "accept-cookie.js",
301            "privacy_cookie.js",
302            // google cast not required
303            "cast_sender.js",
304            "eu_cookie_compliance.js",
305            "eu_cookie_compliance.min.js",
306            "plugins/cookie-law-info/legacy/",
307            "ads.js",
308            "ads.min.js",
309            "insight.min.js",
310            "assets/TrackingPixel",
311            "cookieconsent.min.js",
312            "cookieconsent.js",
313            "adsbygoogle.js",
314            "otBannerSdk.js",
315            "otBannerSdk.min.js",
316            "tracking.min.js",
317            "trackings-min.",
318            "analytics.min.js",
319            "analytics.js", // we may want this optional as some views may be called analytics.js
320            "https://ads.",
321            "http://ads.",
322            ".pubmatic.com/AdServer/",
323            "https://tracking.",
324            "http://tracking.",
325            "https://static-tracking.",
326            // exp testin
327            // used for possible location outside
328            // "https://www.recaptcha.net/recaptcha/",
329            // "https://www.google.com/recaptcha/",
330            // "https://www.gstatic.com/recaptcha/",
331        ];
332        for pattern in &patterns {
333            trie.insert(pattern);
334        }
335        trie
336    };
337
338    /// Ignore list of scripts embedded or font extra.
339    pub static ref URL_IGNORE_EMBEDED_TRIE: Trie = {
340        let mut trie = Trie::new();
341        let patterns = [
342            "https://www.youtube.com/embed/",      // YouTube video embeds
343            "https://www.google.com/maps/embed?",  // Google Maps embeds
344            "https://maps.google.com", // Google maps iframe.
345            "https://player.vimeo.com/video/",     // Vimeo video embeds
346            "https://player.vimeo.com/api/player.js", // Vimeo video embeds
347            "https://open.spotify.com/embed/",     // Spotify music embeds
348            "https://w.soundcloud.com/player/",    // SoundCloud embeds
349            "https://platform.twitter.com/embed/", // Twitter embedded tweets
350            "https://www.instagram.com/embed.js",  // Instagram embeds
351            "https://www.facebook.com/plugins/",   // Facebook embeds (like posts and videos)
352            "https://cdn.embedly.com/widgets/",    // Embedly embeds
353            "https://player.twitch.tv/",           // Twitch video player embeds
354            "https://maps.googleapis.com/maps/", // Google map embeds
355            "https://www.youtube.com/player_api", // Youtube player.
356            "https://consentcdn.cookiebot.com", // Cookie bot
357            "https://www.youtube.com/iframe_api", // Youtube iframes.
358            "https://f.vimeocdn.com", // Vimeo EMBEDDINGS
359            "https://i.vimeocdn.com/",
360            "https://image2.pubmatic.com/AdServer/",
361            "https://ads.pubmatic.com/AdServer/js/",
362            "https://cdn.taboola.com/libtrc/static/topics/",
363            "https://pm-widget.taboola.com/",
364            "https://p.cquotient.com/pebble",
365            "https://globale-analytics-sdk.global-e.com/PROD/bundle.js",
366            "https://gum.criteo.com/syncframe",
367            "https://cdn.heapanalytics.com/js/",
368            "https://cdn.intellimize.co/",
369            "https://td.doubleclick.net/td/",
370            "https://gum.criteo.com/syncframe?",
371            "https://js.datadome.co/",
372            "https://www.googletagmanager.com/",
373            "setup-intercom-monitoring.js",
374            "setup-sentry.js",
375            "cast_sender.js",
376            // "https://www.youtube.com/s/player/", // Youtube player not needed usually since iframe_api is used mainly
377            // vercel live
378            "https://vercel.live/api/",
379
380            // Shop app pay analytics iframe.
381            "https://shop.app/pay/hop?analytics_trace_id",
382            // extra CDN scripts
383            "https://cdn.readme.io/public/",
384            // font awesome
385            "https://use.fontawesome.com/",
386            // insight tracker
387            "https://insight.adsrvr.org/track/",
388            "http://www.google-analytics.com/ga.js",
389
390            ".optimizely.com/client_storage/",
391            "cxense.com/",
392            // snapchat tracker
393            "https://tr.snapchat.com/",
394            "https://buy.tinypass.com",
395            "https://nimbleplot.com/",
396            "https://my.actiondata.co/js/tracker.php",
397            "https://ajax.googleapis.com/ajax/libs/webfont/",
398            "http://cdn2.editmysite.com/",
399            "https://cmp.osano.com/",
400            "https://api.exponea.com/js/service-worker.min.js",
401            // ignore font extras
402            "https://kit.fontawesome.com/",
403            "https://perf-na1.hsforms.com/embed/",
404            "https://use.typekit.net",
405            ".amplitude.com",
406            ".rudderstack.com",
407            // ignore tailwind cdn
408            "https://cdn.tailwindcss.com",
409            // ignore extra ads
410            ".sharethis.com",
411            "amazon-adsystem.com",
412            ".vimeocdn.com",
413            "g.doubleclick.net",
414            "https://securepubads.g.doubleclick.net",
415            "googlesyndication.com",
416            "adsafeprotected.com",
417            "analytics.min.js",
418            // more google tracking
419            ".googlesyndication.com/safeframe/",
420            // repeat consent js
421            "/ccpa/user-consent.min.js",
422            "consent-manager",
423            "/cookiebanner/js/",
424            "cookielaw.org",
425            "bugsnag.min.js",
426            // privacy
427            "otBannerSdk.js",
428            "privacy-notice.js",
429            ".ingest.sentry.io/api",
430            // ignore amazon scripts for media
431            ".ssl-images-amazon.com/images/",
432        ];
433        for pattern in &patterns {
434            trie.insert(pattern);
435        }
436        trie
437    };
438
439    /// Ignore list of path scripts to ignore for tracking and analytics.
440    pub static ref URL_IGNORE_SCRIPT_BASE_PATHS: Trie = {
441        let mut trie = Trie::new();
442        let patterns = [
443            "wp-content/plugins/cookie-law-info",
444            "wp-content/plugins/borlabs-cookie/",
445            "wp-content/js/rlt-proxy.js",
446            "wp-admin/rest-proxy/",
447            "wp-content/mu-plugins/a8c-analytics/",
448            "analytics/",
449            "cookie-tracking",
450        ];
451        for pattern in &patterns {
452            trie.insert(pattern);
453        }
454        trie
455    };
456
457    /// Ignore list of path scripts to ignore for themes.
458    pub static ref URL_IGNORE_SCRIPT_STYLES_PATHS: Trie = {
459        let mut trie = Trie::new();
460        let patterns = [
461            "wp-content/themes/",
462            "wp-content/plugins/dizo-image-hover/",
463            "wp-content/plugins/supreme-modules-pro-for-divi/",
464            "wp-content/plugins/page-builder-pmc/",
465            "wp-content/plugins/contact-form-7/",
466            "wp-content/plugins/responsive-lightbox/",
467            "wp-content/cache/breeze-minification/",
468            "wp-includes/js/mediaelement",
469            "wp-content/plugins/gravityforms/",
470            "wp-content/plugins/wp-rocket/assets/js/lazyload/",
471            "wp-content/plugins/w3-total-cache/",
472            "wp-content/js/bilmur.min.js",
473            "npm/bootstrap@"
474        ];
475        for pattern in &patterns {
476            trie.insert(pattern);
477        }
478        trie
479    };
480
481    /// Ignore list of scripts paths.
482    pub static ref URL_IGNORE_TRIE_PATHS: Trie = {
483        let mut trie = Trie::new();
484        let patterns = [
485            // explicit ignore tracking.js and ad files
486            "privacy-notice.js",
487            "tracking.js",
488            "track.js",
489            "ads.js",
490            "analytics.js",
491
492            // minified variants (min.js handling)
493            "privacy-notice.min.js",
494            "tracking.min.js",
495            "track.min.js",
496            "ads.min.js",
497            "analytics.min.js",
498
499            "otSDKStub.js",
500            "otBannerSdk.js",
501            "_vercel/insights/script.js",
502            "analytics.", // keep this if you rely on prefix-y analytics.* patterns
503        ];
504        for pattern in &patterns {
505            trie.insert(pattern);
506        }
507        trie
508    };
509
510}
511
512#[cfg(test)]
513mod tests {
514    use super::*;
515
516    #[test]
517    fn test_url_ignore_trie_contains() {
518        // Positive tests - these URLs should be contained in the trie
519        let positive_cases = vec![
520            "https://www.googletagservices.com/tag/",
521            "https://www.google-analytics.com",
522            "https://www.googleanalytics.com",
523            ".newrelic.com",
524            "privacy-notice.js",
525        ];
526
527        // Negative tests - these URLs should not be contained in the trie
528        let negative_cases = vec![
529            "https://not-a-tracked-url.com/script.js",
530            "https://google.com",
531        ];
532
533        for case in positive_cases {
534            assert!(
535                URL_IGNORE_TRIE.contains_prefix(case),
536                "Trie should contain: {}",
537                case
538            );
539        }
540
541        for case in negative_cases {
542            assert!(
543                !URL_IGNORE_TRIE.contains_prefix(case),
544                "Trie should not contain: {}",
545                case
546            );
547        }
548    }
549
550    #[test]
551    fn test_url_ignore_embedded_trie_contains() {
552        // Positive tests - these URLs should be contained in the trie
553        let positive_cases = vec![
554            "https://www.youtube.com/embed/",
555            "https://www.google.com/maps/embed?",
556            ".amplitude.com",
557        ];
558
559        // Negative tests - these URLs should not be contained in the trie
560        let negative_cases = vec![
561            "https://secure-site.com/resource.js",
562            "https://example.com/embed.js",
563        ];
564
565        for case in positive_cases {
566            assert!(
567                URL_IGNORE_EMBEDED_TRIE.contains_prefix(case),
568                "Trie should contain: {}",
569                case
570            );
571        }
572
573        for case in negative_cases {
574            assert!(
575                !URL_IGNORE_EMBEDED_TRIE.contains_prefix(case),
576                "Trie should not contain: {}",
577                case
578            );
579        }
580    }
581
582    #[test]
583    fn test_url_ignore_script_base_paths_contains() {
584        // Positive tests - these paths should be contained in the trie
585        let positive_cases = vec!["wp-content/plugins/cookie-law-info", "analytics/"];
586
587        // Negative tests - these paths should not be contained in the trie
588        let negative_cases = vec![
589            "wp-content/some-untracked-plugin/",
590            "random/path/analytics.js",
591        ];
592
593        for case in positive_cases {
594            assert!(
595                URL_IGNORE_SCRIPT_BASE_PATHS.contains_prefix(case),
596                "Trie should contain: {}",
597                case
598            );
599        }
600
601        for case in negative_cases {
602            assert!(
603                !URL_IGNORE_SCRIPT_BASE_PATHS.contains_prefix(case),
604                "Trie should not contain: {}",
605                case
606            );
607        }
608    }
609
610    #[test]
611    fn test_url_ignore_script_style_paths_contains() {
612        // Positive tests - these paths should be contained in the trie
613        let positive_cases = vec!["wp-content/themes/", "npm/bootstrap@"];
614
615        // Negative tests - these paths should not be contained in the trie
616        let negative_cases = vec![
617            "wp-content/some-other-theme/",
618            "wp-content/plugins/untracked-plugin/",
619        ];
620
621        for case in positive_cases {
622            assert!(
623                URL_IGNORE_SCRIPT_STYLES_PATHS.contains_prefix(case),
624                "Trie should contain: {}",
625                case
626            );
627        }
628
629        for case in negative_cases {
630            assert!(
631                !URL_IGNORE_SCRIPT_STYLES_PATHS.contains_prefix(case),
632                "Trie should not contain: {}",
633                case
634            );
635        }
636    }
637
638    #[test]
639    fn test_url_ignore_trie_paths_contains() {
640        // Positive tests - these paths should be contained in the trie
641        let positive_cases = vec!["privacy-notice.js", "tracking.js"];
642
643        // Negative tests - these paths should not be contained in the trie
644        let negative_cases = vec!["non-ignored.js", "non-related/tracking.js"];
645
646        for case in positive_cases {
647            assert!(
648                URL_IGNORE_TRIE_PATHS.contains_prefix(case),
649                "Trie should contain: {}",
650                case
651            );
652        }
653
654        for case in negative_cases {
655            assert!(
656                !URL_IGNORE_TRIE_PATHS.contains_prefix(case),
657                "Trie should not contain: {}",
658                case
659            );
660        }
661    }
662}