diff --git a/qutebrowser/browser/network/pac.py b/qutebrowser/browser/network/pac.py index 8f729c9d2..03fc47350 100644 --- a/qutebrowser/browser/network/pac.py +++ b/qutebrowser/browser/network/pac.py @@ -247,8 +247,6 @@ class PACFetcher(QObject): self._pac_url = url self._manager = QNetworkAccessManager() self._manager.setProxy(QNetworkProxy(QNetworkProxy.NoProxy)) - self._reply = self._manager.get(QNetworkRequest(url)) - self._reply.finished.connect(self._finish) self._pac = None self._error_message = None @@ -259,6 +257,11 @@ class PACFetcher(QObject): def __repr__(self): return utils.get_repr(self, url=self._pac_url, constructor=True) + def fetch(self): + """Fetch the proxy from the remote URL.""" + self._reply = self._manager.get(QNetworkRequest(self._pac_url)) + self._reply.finished.connect(self._finish) + @pyqtSlot() def _finish(self): if self._reply.error() != QNetworkReply.NoError: diff --git a/qutebrowser/utils/urlutils.py b/qutebrowser/utils/urlutils.py index 37d36ec21..1008f6c0b 100644 --- a/qutebrowser/utils/urlutils.py +++ b/qutebrowser/utils/urlutils.py @@ -637,7 +637,9 @@ def proxy_from_url(url): scheme = url.scheme() if scheme in ['pac+http', 'pac+https', 'pac+file']: - return pac.PACFetcher(url) + fetcher = pac.PACFetcher(url) + fetcher.fetch() + return fetcher types = { 'http': QNetworkProxy.HttpProxy, diff --git a/tests/unit/browser/webkit/network/test_pac.py b/tests/unit/browser/webkit/network/test_pac.py index 9adc65087..1520ff13c 100644 --- a/tests/unit/browser/webkit/network/test_pac.py +++ b/tests/unit/browser/webkit/network/test_pac.py @@ -236,11 +236,12 @@ def fetcher_test(test_str): serve_thread.start() try: ready_event.wait() - res = pac.PACFetcher(QUrl("pac+http://127.0.0.1:8081")) - assert res.fetch_error() is None + fetcher = pac.PACFetcher(QUrl("pac+http://127.0.0.1:8081")) + fetcher.fetch() + assert fetcher.fetch_error() is None finally: serve_thread.join() - return res + return fetcher @pytest.mark.skipif(QT_VERSION_STR.startswith('5.7') and