From 210c3795f92e4c76f24a6fa43d885275accfdb5d Mon Sep 17 00:00:00 2001 From: Luke Wilde Date: Fri, 10 Jun 2022 11:53:43 +0100 Subject: [PATCH] LibWeb: Apply content filter to DNS prefetch and pre-connect Performing DNS prefetch or pre-connect on filtered URLs is wasteful, as we would block any actual use further down the line. A bunch of websites perform DNS prefetch and/or pre-connect to trackers as well, for example: ``` prefetch DNS for 'https://adserver-us.adtech.advertising.com/' prefetch DNS for 'https://secure.adnxs.com/' prefetch DNS for 'https://bidder.criteo.com/' prefetch DNS for 'https://static.criteo.net/' prefetch DNS for 'https://cdn.krxd.net/' prefetch DNS for 'https://widgets.outbrain.com/' prefetch DNS for 'https://images.outbrain.com/' prefetch DNS for 'https://log.outbrain.com/ prefetch DNS for 'https://amplifypixel.outbrain.com/' prefetch DNS for 'https://odb.outbrain.com/' prefetch DNS for 'https://js-sec.indexww.com/' prefetch DNS for 'https://as-sec.casalemedia.com/' prefetch DNS for 'https://as.casalemedia.com/' prefetch DNS for 'https://sofia.trustx.org/' prefetch DNS for 'https://c.amazon-adsystem.com/' prefetch DNS for 'https://s.amazon-adsystem.com/' prefetch DNS for 'https://aax.amazon-adsystem.com/' prefetch DNS for 'https://t.teads.tv/' prefetch DNS for 'https://beacon.krxd.net/' pre-connect to 'https://www.google-analytics.com/' pre-connect to 'https://www.googletagmanager.com/' ``` --- Userland/Libraries/LibWeb/Loader/ResourceLoader.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Userland/Libraries/LibWeb/Loader/ResourceLoader.cpp b/Userland/Libraries/LibWeb/Loader/ResourceLoader.cpp index 498286e3bd..b7bc502001 100644 --- a/Userland/Libraries/LibWeb/Loader/ResourceLoader.cpp +++ b/Userland/Libraries/LibWeb/Loader/ResourceLoader.cpp @@ -61,11 +61,21 @@ ResourceLoader::ResourceLoader(NonnullRefPtr connector) void ResourceLoader::prefetch_dns(AK::URL const& url) { + if (ContentFilter::the().is_filtered(url)) { + dbgln("ResourceLoader: Refusing to prefetch DNS for '{}': \033[31;1mURL was filtered\033[0m", url); + return; + } + m_connector->prefetch_dns(url); } void ResourceLoader::preconnect(AK::URL const& url) { + if (ContentFilter::the().is_filtered(url)) { + dbgln("ResourceLoader: Refusing to pre-connect to '{}': \033[31;1mURL was filtered\033[0m", url); + return; + } + m_connector->preconnect(url); }