From 57e4d4978b66fc7547e2aeafb2ddd1b708d19580 Mon Sep 17 00:00:00 2001 From: Iordanis Grigoriou Date: Thu, 6 Jul 2017 11:59:02 +0200 Subject: [PATCH] Use page title only for whitelisted extensions --- qutebrowser/browser/commands.py | 12 +++++++++++- .../data/downloads/download with no title.html | 8 ++++++++ tests/end2end/data/downloads/qutebrowser.png | Bin 0 -> 4278 bytes tests/end2end/features/downloads.feature | 14 ++++++++++++++ 4 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 tests/end2end/data/downloads/download with no title.html create mode 100644 tests/end2end/data/downloads/qutebrowser.png diff --git a/qutebrowser/browser/commands.py b/qutebrowser/browser/commands.py index fbf3fe914..88499c412 100644 --- a/qutebrowser/browser/commands.py +++ b/qutebrowser/browser/commands.py @@ -1443,12 +1443,22 @@ class CommandDispatcher: download_manager.get_mhtml(tab, target) else: qnam = tab.networkaccessmanager() + + # Downloads of URLs with file extensions in the whitelist will use + # the page title as the filename. + ext_whitelist = [".html", ".htm", ".php", ""] + _, ext = os.path.splitext(self._current_url().path()) + if ext.lower() in ext_whitelist and tab.title(): + suggested_fn = utils.sanitize_filename(tab.title()) + ext + else: + suggested_fn = None + download_manager.get( self._current_url(), user_agent=user_agent, qnam=qnam, target=target, - suggested_fn=utils.sanitize_filename(tab.title() + ".html") + suggested_fn=suggested_fn ) @cmdutils.register(instance='command-dispatcher', scope='window') diff --git a/tests/end2end/data/downloads/download with no title.html b/tests/end2end/data/downloads/download with no title.html new file mode 100644 index 000000000..da4352e59 --- /dev/null +++ b/tests/end2end/data/downloads/download with no title.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/tests/end2end/data/downloads/qutebrowser.png b/tests/end2end/data/downloads/qutebrowser.png new file mode 100644 index 0000000000000000000000000000000000000000..e8bbb6b5649a4300bbb55a60e79a84c3468d3ea8 GIT binary patch literal 4278 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 YKhMHKf literal 0 HcmV?d00001 diff --git a/tests/end2end/features/downloads.feature b/tests/end2end/features/downloads.feature index 8a9e8c134..40333aee6 100644 --- a/tests/end2end/features/downloads.feature +++ b/tests/end2end/features/downloads.feature @@ -29,6 +29,20 @@ Feature: Downloading things from a website. And I wait until the download is finished Then the downloaded file Simple downloads.html should exist + Scenario: Using :download with no URL on an image + When I set storage -> prompt-download-directory to false + And I open data/downloads/qutebrowser.png + And I run :download + And I wait until the download is finished + Then the downloaded file qutebrowser.png should exist + + Scenario: Using :download with no URL and no page title + When I set storage -> prompt-download-directory to false + And I open data/downloads/download with no title.html + And I run :download + And I wait until the download is finished + Then the downloaded file download with no title.html should exist + Scenario: Using hints When I set storage -> prompt-download-directory to false And I open data/downloads/downloads.html