summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Bruhin <me@the-compiler.org>2021-07-20 08:06:48 +0200
committerFlorian Bruhin <me@the-compiler.org>2021-07-20 08:06:48 +0200
commit6c26f2a16100bc51498b6c7b50de42b7c0a39f5f (patch)
tree24114206e6ee127d571ab6f0f8581631b0773817
parente1d164d81385e75c1e1194b433d76f9d310783da (diff)
parent036be4e410ef9faa951ef63bc868f43834dcc97b (diff)
downloadqutebrowser-6c26f2a16100bc51498b6c7b50de42b7c0a39f5f.tar.gz
qutebrowser-6c26f2a16100bc51498b6c7b50de42b7c0a39f5f.zip
Merge remote-tracking branch 'origin/pr/6610'
-rw-r--r--doc/help/settings.asciidoc9
-rw-r--r--qutebrowser/components/hostblock.py14
-rw-r--r--qutebrowser/config/configdata.yml5
-rw-r--r--tests/unit/components/test_hostblock.py8
4 files changed, 30 insertions, 6 deletions
diff --git a/doc/help/settings.asciidoc b/doc/help/settings.asciidoc
index c5206e52e..57bcdd8e0 100644
--- a/doc/help/settings.asciidoc
+++ b/doc/help/settings.asciidoc
@@ -142,6 +142,7 @@
|<<content.autoplay,content.autoplay>>|Automatically start playing `<video>` elements.
|<<content.blocking.adblock.lists,content.blocking.adblock.lists>>|List of URLs to ABP-style adblocking rulesets.
|<<content.blocking.enabled,content.blocking.enabled>>|Enable the ad/host blocker
+|<<content.blocking.hosts.block_subdomains,content.blocking.hosts.block_subdomains>>|Block subdomains of blocked hosts.
|<<content.blocking.hosts.lists,content.blocking.hosts.lists>>|List of URLs to host blocklists for the host blocker.
|<<content.blocking.method,content.blocking.method>>|Which method of blocking ads should be used.
|<<content.blocking.whitelist,content.blocking.whitelist>>|A list of patterns that should always be loaded, despite being blocked by the ad-/host-blocker.
@@ -1994,6 +1995,14 @@ Type: <<types,Bool>>
Default: +pass:[true]+
+[[content.blocking.hosts.block_subdomains]]
+=== content.blocking.hosts.block_subdomains
+Block subdomains of blocked hosts.
+
+Type: <<types,Bool>>
+
+Default: +pass:[true]+
+
[[content.blocking.hosts.lists]]
=== content.blocking.hosts.lists
List of URLs to host blocklists for the host blocker.
diff --git a/qutebrowser/components/hostblock.py b/qutebrowser/components/hostblock.py
index 2d6086245..1860b734c 100644
--- a/qutebrowser/components/hostblock.py
+++ b/qutebrowser/components/hostblock.py
@@ -132,10 +132,16 @@ class HostBlocker:
host = request_url.host()
- return any(
- hostname in self._blocked_hosts or hostname in self._config_blocked_hosts
- for hostname in urlutils.widened_hostnames(host)
- )
+ if config.get("content.blocking.hosts.block_subdomains"):
+ return any(
+ hostname in self._blocked_hosts
+ or hostname in self._config_blocked_hosts
+ for hostname in urlutils.widened_hostnames(host)
+ )
+ else:
+ return (
+ host in self._blocked_hosts or host in self._config_blocked_hosts
+ )
def filter_request(self, info: interceptor.Request) -> None:
"""Block the given request if necessary."""
diff --git a/qutebrowser/config/configdata.yml b/qutebrowser/config/configdata.yml
index 76c4ce369..2f090cc06 100644
--- a/qutebrowser/config/configdata.yml
+++ b/qutebrowser/config/configdata.yml
@@ -747,6 +747,11 @@ content.blocking.hosts.lists:
The file `~/.config/qutebrowser/blocked-hosts` is always read if it exists.
+content.blocking.hosts.block_subdomains:
+ default: true
+ type: Bool
+ desc: Block subdomains of blocked hosts.
+
content.blocking.method:
default: auto
type:
diff --git a/tests/unit/components/test_hostblock.py b/tests/unit/components/test_hostblock.py
index 00a7a5f8f..6a71058ea 100644
--- a/tests/unit/components/test_hostblock.py
+++ b/tests/unit/components/test_hostblock.py
@@ -565,9 +565,13 @@ def test_adblock_benchmark(data_tmpdir, benchmark, host_blocker_factory):
benchmark(lambda: blocker._is_blocked(url))
-def test_subdomain_blocking(config_stub, host_blocker_factory):
+@pytest.mark.parametrize("block_subdomains", [True, False])
+def test_subdomain_blocking(config_stub, host_blocker_factory, block_subdomains):
config_stub.val.content.blocking.method = "hosts"
config_stub.val.content.blocking.hosts.lists = None
+ config_stub.val.content.blocking.hosts.block_subdomains = block_subdomains
host_blocker = host_blocker_factory()
host_blocker._blocked_hosts.add("example.com")
- assert host_blocker._is_blocked(QUrl("https://subdomain.example.com"))
+ is_blocked = host_blocker._is_blocked(QUrl("https://subdomain.example.com"))
+ # block_subdomains is also expected result of is_blocked
+ assert is_blocked == block_subdomains