summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortoofar <toofar@spalge.com>2023-09-23 14:40:22 +1200
committertoofar <toofar@spalge.com>2023-09-27 08:51:23 +1300
commit5345d534189175a986ae287b3d4a49ecebf7103a (patch)
tree26102735fe4681a3028858dbf30b49bd0624e5d0
parentc0be28ebee3e1837aaf3f30ec534ccd6d038f129 (diff)
downloadqutebrowser-5345d534189175a986ae287b3d4a49ecebf7103a.tar.gz
qutebrowser-5345d534189175a986ae287b3d4a49ecebf7103a.zip
Support wildcard mimes in filepicker workaround too
We've seen it in the wild, so it could happen, and it wasn't hard to add in the end. ref: #7866
-rw-r--r--qutebrowser/browser/webengine/webview.py11
-rw-r--r--tests/unit/browser/webengine/test_webview.py18
2 files changed, 24 insertions, 5 deletions
diff --git a/qutebrowser/browser/webengine/webview.py b/qutebrowser/browser/webengine/webview.py
index 4fb48c060..61f64724d 100644
--- a/qutebrowser/browser/webengine/webview.py
+++ b/qutebrowser/browser/webengine/webview.py
@@ -276,7 +276,16 @@ class WebEnginePage(QWebEnginePage):
mimes = {entry for entry in upstream_mimetypes if "/" in entry}
python_suffixes = set()
for mime in mimes:
- python_suffixes.update(mimetypes.guess_all_extensions(mime))
+ if mime.endswith("/*"):
+ python_suffixes.update(
+ [
+ suffix
+ for suffix, mimetype in mimetypes.types_map.items()
+ if mimetype.startswith(mime[:-1])
+ ]
+ )
+ else:
+ python_suffixes.update(mimetypes.guess_all_extensions(mime))
return python_suffixes - suffixes
def chooseFiles(
diff --git a/tests/unit/browser/webengine/test_webview.py b/tests/unit/browser/webengine/test_webview.py
index b213713e2..2789dcc9f 100644
--- a/tests/unit/browser/webengine/test_webview.py
+++ b/tests/unit/browser/webengine/test_webview.py
@@ -65,14 +65,22 @@ def test_enum_mappings(enum_type, naming, mapping):
@pytest.fixture
def suffix_mocks(monkeypatch):
+ types_map = {
+ ".jpg": "image/jpeg",
+ ".jpe": "image/jpeg",
+ ".png": "image/png",
+ ".m4v": "video/mp4",
+ ".mpg4": "video/mp4",
+ }
+ mimetypes_map = {} # mimetype -> [suffixes] map
+ for suffix, mime in types_map.items():
+ mimetypes_map[mime] = mimetypes_map.get(mime, []) + [suffix]
+
def guess(mime):
- mimetypes_map = {
- "image/jpeg": [".jpg", ".jpe"],
- "video/mp4": [".m4v", ".mpg4"],
- }
return mimetypes_map.get(mime, [])
monkeypatch.setattr(mimetypes, "guess_all_extensions", guess)
+ monkeypatch.setattr(mimetypes, "types_map", types_map)
def version(string):
if string == "6.2.3":
@@ -95,6 +103,8 @@ EXTRA_SUFFIXES_PARAMS = [
set(),
), # not sure why black reformats this one and not the others
(["image/jpeg", "video/mp4"], {".jpg", ".jpe", ".m4v", ".mpg4"}),
+ (["image/*"], {".jpg", ".jpe", ".png"}),
+ (["image/*", ".jpg"], {".jpe", ".png"}),
]