diff --git a/qutebrowser/config/qtargs.py b/qutebrowser/config/qtargs.py
index cafc6ff38..c35e3fbf6 100644
--- a/qutebrowser/config/qtargs.py
+++ b/qutebrowser/config/qtargs.py
@@ -154,6 +154,11 @@ def _qtwebengine_features(
# WORKAROUND for https://bugreports.qt.io/browse/QTBUG-89740
disabled_features.append('InstalledApp')
+ if versions.webengine >= utils.VersionNumber(6, 7):
+ # WORKAROUND for https://bugreports.qt.io/browse/QTBUG-132681
+ # TODO adjust if fixed in Qt 6.8.2/.3 or 6.9.0/.1
+ disabled_features.append('DocumentPictureInPictureAPI')
+
if not config.val.input.media_keys:
disabled_features.append('HardwareMediaKeyHandling')
diff --git a/tests/end2end/data/crashers/document_picture_in_picture.html b/tests/end2end/data/crashers/document_picture_in_picture.html
new file mode 100644
index 000000000..94362e991
--- /dev/null
+++ b/tests/end2end/data/crashers/document_picture_in_picture.html
@@ -0,0 +1,21 @@
+
+
+
+
+ Document Picture-in-Picture API Crasher
+
+
+
+
+
+
+
+
diff --git a/tests/end2end/features/misc.feature b/tests/end2end/features/misc.feature
index 8f5453adc..6825621ea 100644
--- a/tests/end2end/features/misc.feature
+++ b/tests/end2end/features/misc.feature
@@ -644,3 +644,10 @@ Feature: Various utility commands.
And I open data/scroll/simple.html
And I run :fake-key ""
Then the page should be scrolled vertically
+
+ @qtwebkit_skip
+ Scenario: Using DocumentPictureInPicture API
+ When I set content.javascript.can_open_tabs_automatically to true
+ And I open data/crashers/document_picture_in_picture.html
+ And I run :click-element id toggle
+ Then the javascript message "documentPictureInPicture support disabled!" should be logged
diff --git a/tests/unit/config/test_qtargs.py b/tests/unit/config/test_qtargs.py
index d7a95aad1..ab06aeb76 100644
--- a/tests/unit/config/test_qtargs.py
+++ b/tests/unit/config/test_qtargs.py
@@ -448,6 +448,39 @@ class TestWebEngineArgs:
expected = ['--disable-features=InstalledApp'] if has_workaround else []
assert disable_features_args == expected
+ @pytest.mark.parametrize('qt_version, has_workaround', [
+ # Qt 6.6
+ ('6.6.3', False),
+ # Qt 6.7
+ ('6.7.0', True),
+ ('6.7.1', True),
+ ('6.7.2', True),
+ ('6.7.3', True),
+ # Qt 6.8
+ ('6.8.0', True),
+ ('6.8.1', True),
+ ('6.8.2', True), # tbd
+ ('6.8.3', True), # tbd
+ # Qt 6.9
+ ('6.9.0', True), # tbd
+ ('6.9.1', True), # tbd
+ ])
+ def test_document_pip_workaround(
+ self, parser, version_patcher, qt_version, has_workaround
+ ):
+ version_patcher(qt_version)
+
+ parsed = parser.parse_args([])
+ args = qtargs.qt_args(parsed)
+ disable_features_args = [
+ arg for arg in args
+ if arg.startswith(qtargs._DISABLE_FEATURES)
+ ]
+
+ flag = "--disable-features=DocumentPictureInPictureAPI"
+ expected = [flag] if has_workaround else []
+ assert disable_features_args == expected
+
@pytest.mark.parametrize('enabled', [True, False])
def test_media_keys(self, config_stub, parser, enabled):
config_stub.val.input.media_keys = enabled