summaryrefslogtreecommitdiff
path: root/qutebrowser/browser/webengine/webenginedownloads.py
diff options
context:
space:
mode:
Diffstat (limited to 'qutebrowser/browser/webengine/webenginedownloads.py')
-rw-r--r--qutebrowser/browser/webengine/webenginedownloads.py29
1 files changed, 20 insertions, 9 deletions
diff --git a/qutebrowser/browser/webengine/webenginedownloads.py b/qutebrowser/browser/webengine/webenginedownloads.py
index 206f7b9ad..8814a34b9 100644
--- a/qutebrowser/browser/webengine/webenginedownloads.py
+++ b/qutebrowser/browser/webengine/webenginedownloads.py
@@ -201,7 +201,7 @@ class DownloadItem(downloads.AbstractDownloadItem):
return None
-def _get_suggested_filename(path):
+def _strip_suffix(filename):
"""Convert a path we got from chromium to a suggested filename.
Chromium thinks we want to download stuff to ~/Download, so even if we
@@ -211,8 +211,6 @@ def _get_suggested_filename(path):
See https://bugreports.qt.io/browse/QTBUG-56978
"""
- filename = os.path.basename(path)
-
suffix_re = re.compile(r"""
\ ? # Optional space between filename and suffix
(
@@ -249,15 +247,28 @@ class DownloadManager(downloads.AbstractDownloadManager):
@pyqtSlot(QWebEngineDownloadItem)
def handle_download(self, qt_item):
"""Start a download coming from a QWebEngineProfile."""
- if qt_item.url().scheme().lower() == 'data':
- # WORKAROUND for an unknown QtWebEngine bug (?) which gives us base64 data
- # as filename.
+ qt_filename = os.path.basename(qt_item.path()) # FIXME use 5.14 API
+ mime_type = qt_item.mimeType()
+ url = qt_item.url()
+
+ # WORKAROUND for https://bugreports.qt.io/browse/QTBUG-90355
+ if url.scheme().lower() == 'data':
+ if '/' in url.path().split(',')[-1]: # e.g. a slash in base64
+ wrong_filename = url.path().split('/')[-1]
+ else:
+ wrong_filename = mime_type.split('/')[1]
+
+ needs_workaround = qt_filename == wrong_filename
+ else:
+ needs_workaround = False
+
+ if needs_workaround:
suggested_filename = urlutils.filename_from_url(
- qt_item.url(), fallback='qutebrowser-download')
+ url, fallback='qutebrowser-download')
else:
- suggested_filename = _get_suggested_filename(qt_item.path())
+ suggested_filename = _strip_suffix(qt_filename)
- use_pdfjs = pdfjs.should_use_pdfjs(qt_item.mimeType(), qt_item.url())
+ use_pdfjs = pdfjs.should_use_pdfjs(mime_type, url)
download = DownloadItem(qt_item, manager=self)
self._init_item(download, auto_remove=use_pdfjs,