From 5345d534189175a986ae287b3d4a49ecebf7103a Mon Sep 17 00:00:00 2001 From: toofar Date: Sat, 23 Sep 2023 14:40:22 +1200 Subject: 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 --- qutebrowser/browser/webengine/webview.py | 11 ++++++++++- tests/unit/browser/webengine/test_webview.py | 18 ++++++++++++++---- 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"}), ] -- cgit v1.2.3-54-g00ecf