diff --git a/qutebrowser/browser/browsertab.py b/qutebrowser/browser/browsertab.py index 0eb9b6493..72c289eca 100644 --- a/qutebrowser/browser/browsertab.py +++ b/qutebrowser/browser/browsertab.py @@ -668,9 +668,10 @@ class AbstractAudio(QObject): muted_changed = pyqtSignal(bool) recently_audible_changed = pyqtSignal(bool) - def __init__(self, parent=None): + def __init__(self, tab, parent=None): super().__init__(parent) self._widget = None + self._tab = tab def set_muted(self, muted: bool): """Set this tab as muted or not.""" diff --git a/qutebrowser/browser/webengine/webenginetab.py b/qutebrowser/browser/webengine/webenginetab.py index 36ac2a99a..e4bac57b5 100644 --- a/qutebrowser/browser/webengine/webenginetab.py +++ b/qutebrowser/browser/webengine/webenginetab.py @@ -643,6 +643,7 @@ class WebEngineAudio(browsertab.AbstractAudio): page = self._widget.page() page.audioMutedChanged.connect(self.muted_changed) page.recentlyAudibleChanged.connect(self.recently_audible_changed) + self._tab.url_changed.connect(self._on_url_changed) def set_muted(self, muted: bool): page = self._widget.page() @@ -656,6 +657,11 @@ class WebEngineAudio(browsertab.AbstractAudio): page = self._widget.page() return page.recentlyAudible() + @pyqtSlot(QUrl) + def _on_url_changed(self, url): + mute = config.instance.get('content.mute', url=url) + self.set_muted(mute) + class _WebEnginePermissions(QObject): @@ -1000,7 +1006,7 @@ class WebEngineTab(browsertab.AbstractTab): self.printing = WebEnginePrinting(tab=self) self.elements = WebEngineElements(tab=self) self.action = WebEngineAction(tab=self) - self.audio = WebEngineAudio(parent=self) + self.audio = WebEngineAudio(tab=self, parent=self) self._permissions = _WebEnginePermissions(tab=self, parent=self) self._scripts = _WebEngineScripts(tab=self, parent=self) # We're assigning settings in _set_widget diff --git a/qutebrowser/browser/webkit/webkittab.py b/qutebrowser/browser/webkit/webkittab.py index 7f0740b65..a2c7ee2a2 100644 --- a/qutebrowser/browser/webkit/webkittab.py +++ b/qutebrowser/browser/webkit/webkittab.py @@ -667,7 +667,7 @@ class WebKitTab(browsertab.AbstractTab): self.printing = WebKitPrinting(tab=self) self.elements = WebKitElements(tab=self) self.action = WebKitAction(tab=self) - self.audio = WebKitAudio(parent=self) + self.audio = WebKitAudio(tab=self, parent=self) # We're assigning settings in _set_widget self.settings = webkitsettings.WebKitSettings(settings=None) self._set_widget(widget) diff --git a/qutebrowser/config/configdata.yml b/qutebrowser/config/configdata.yml index 0a2c1e2c7..8f06814ca 100644 --- a/qutebrowser/config/configdata.yml +++ b/qutebrowser/config/configdata.yml @@ -806,6 +806,12 @@ content.xss_auditing: Suspicious scripts will be blocked and reported in the inspector's JavaScript console. +content.mute: + default: false + type: Bool + supports_pattern: true + desc: Automatically mute tabs. + # emacs: ' ## completion diff --git a/tests/helpers/stubs.py b/tests/helpers/stubs.py index 9af7a6fcc..173135d73 100644 --- a/tests/helpers/stubs.py +++ b/tests/helpers/stubs.py @@ -257,7 +257,7 @@ class FakeWebTab(browsertab.AbstractTab): self.history = FakeWebTabHistory(self, can_go_back=can_go_back, can_go_forward=can_go_forward) self.scroller = FakeWebTabScroller(self, scroll_pos_perc) - self.audio = FakeWebTabAudio() + self.audio = FakeWebTabAudio(self) wrapped = QWidget() self._layout.wrap(self, wrapped)