netmanager: fix crash when asking with no tab_id

Issue 1413

This happens when the networkmanager is used by something that has no
tab_id, like the generic DownloadManager. In this case, we should just
skip the webview connection (as it makes no sense) instead of crashing
(which is the last thing we want to do).
This commit is contained in:
Daniel Schadt 2016-05-05 00:04:58 +02:00
parent d2be8a28ca
commit dcac832f5e
3 changed files with 22 additions and 4 deletions

View File

@ -226,9 +226,13 @@ class NetworkManager(QNetworkAccessManager):
self.shutting_down.connect(q.abort) self.shutting_down.connect(q.abort)
if owner is not None: if owner is not None:
owner.destroyed.connect(q.abort) owner.destroyed.connect(q.abort)
webview = objreg.get('webview', scope='tab', window=self._win_id,
tab=self._tab_id) # This might be a generic network manager, e.g. one belonging to a
webview.loadStarted.connect(q.abort) # DownloadManager. In this case, just skip the webview thing.
if self._tab_id is not None:
webview = objreg.get('webview', scope='tab', window=self._win_id,
tab=self._tab_id)
webview.loadStarted.connect(q.abort)
bridge = objreg.get('message-bridge', scope='window', bridge = objreg.get('message-bridge', scope='window',
window=self._win_id) window=self._win_id)
bridge.ask(q, blocking=True) bridge.ask(q, blocking=True)

View File

@ -44,6 +44,14 @@ Feature: Downloading things from a website.
And I run :leave-mode And I run :leave-mode
Then no crash should happen Then no crash should happen
Scenario: Downloading with SSL errors (issue 1413)
When I run :debug-clear-ssl-errors
And I set network -> ssl-strict to ask
And I download a SSL page
And I wait for "Entering mode KeyMode.* (reason: question asked)" in the log
And I run :prompt-accept
Then the error "Download error: SSL handshake failed" should be shown
Scenario: Retrying a failed download Scenario: Retrying a failed download
When I run :download http://localhost:(port)/does-not-exist When I run :download http://localhost:(port)/does-not-exist
And I wait for the error "Download error: * - server replied: NOT FOUND" And I wait for the error "Download error: * - server replied: NOT FOUND"
@ -162,7 +170,7 @@ Feature: Downloading things from a website.
When I run :download http://localhost:(port)/drip?numbytes=128&duration=5 When I run :download http://localhost:(port)/drip?numbytes=128&duration=5
And I run :download-open with count 1 And I run :download-open with count 1
Then the error "Download 1 is not done!" should be shown Then the error "Download 1 is not done!" should be shown
## completion -> download-path-suggestion ## completion -> download-path-suggestion
Scenario: completion -> download-path-suggestion = path Scenario: completion -> download-path-suggestion = path

View File

@ -41,6 +41,12 @@ def wait_for_download_finished(quteproc):
quteproc.wait_for(category='downloads', message='Download finished') quteproc.wait_for(category='downloads', message='Download finished')
@bdd.when("I download a SSL page")
def download_ssl_page(quteproc, ssl_server):
quteproc.send_cmd(':download https://localhost:{}/'
.format(ssl_server.port))
@bdd.then(bdd.parsers.parse("The downloaded file {filename} should not exist")) @bdd.then(bdd.parsers.parse("The downloaded file {filename} should not exist"))
def download_should_not_exist(filename, tmpdir): def download_should_not_exist(filename, tmpdir):
path = tmpdir / filename path = tmpdir / filename