diff options
author | Florian Bruhin <me@the-compiler.org> | 2021-07-20 08:06:48 +0200 |
---|---|---|
committer | Florian Bruhin <me@the-compiler.org> | 2021-07-20 08:06:48 +0200 |
commit | 6c26f2a16100bc51498b6c7b50de42b7c0a39f5f (patch) | |
tree | 24114206e6ee127d571ab6f0f8581631b0773817 | |
parent | e1d164d81385e75c1e1194b433d76f9d310783da (diff) | |
parent | 036be4e410ef9faa951ef63bc868f43834dcc97b (diff) | |
download | qutebrowser-6c26f2a16100bc51498b6c7b50de42b7c0a39f5f.tar.gz qutebrowser-6c26f2a16100bc51498b6c7b50de42b7c0a39f5f.zip |
Merge remote-tracking branch 'origin/pr/6610'
-rw-r--r-- | doc/help/settings.asciidoc | 9 | ||||
-rw-r--r-- | qutebrowser/components/hostblock.py | 14 | ||||
-rw-r--r-- | qutebrowser/config/configdata.yml | 5 | ||||
-rw-r--r-- | tests/unit/components/test_hostblock.py | 8 |
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 |