Basic cookie handling

This commit is contained in:
Florian Bruhin 2014-05-05 16:28:43 +02:00
parent a4d80ddcac
commit ae95b5ea3b
9 changed files with 44 additions and 6 deletions

1
TODO
View File

@ -26,7 +26,6 @@ Bookmarks
Internationalization
more completions (URLs, ...)
SSL handling
cookie handling
history
Minor features

View File

@ -28,6 +28,8 @@ from argparse import ArgumentParser
from base64 import b64encode
import qutebrowser.config.websettings as websettings
import qutebrowser.network.networkmanager as networkmanager
import qutebrowser.browser.cookies as cookies
# Print a nice traceback on segfault -- only available on Python 3.3+, but if
# it's unavailable, it doesn't matter much.
@ -126,6 +128,8 @@ class QuteBrowser(QApplication):
sys.exit(1)
self.config = config.instance
websettings.init(self._dirs.user_cache_dir)
cookies.init(self._dirs.user_data_dir)
networkmanager.init(cookies.cookiejar)
self.commandmanager = CommandManager()
self.searchmanager = SearchManager()
@ -478,6 +482,10 @@ class QuteBrowser(QApplication):
config.state.save()
except AttributeError:
logging.exception("Could not save window geometry.")
try:
cookies.cookiejar.save()
except AttributeError:
logging.exception("Could not save cookies.")
try:
if do_quit:
self.mainwindow.tabs.shutdown_complete.connect(

View File

@ -23,7 +23,7 @@ from PyQt5.QtWebKitWidgets import QWebPage
import qutebrowser.utils.url as urlutils
import qutebrowser.config.config as config
from qutebrowser.network.networkmanager import NetworkManager
import qutebrowser.network.networkmanager as networkmanager
from qutebrowser.utils.misc import read_file
@ -41,8 +41,7 @@ class BrowserPage(QWebPage):
self._extension_handlers = {
QWebPage.ErrorPageExtension: self._handle_errorpage,
}
self.network_access_manager = NetworkManager(self)
self.setNetworkAccessManager(self.network_access_manager)
self.setNetworkAccessManager(networkmanager.networkmanager)
def _handle_errorpage(self, opt, out):
"""Display an error page if needed.

View File

@ -742,6 +742,14 @@ class LastClose(String):
('quit', "Quit qutebrowser."))
class AcceptCookies(String):
"""Whether to accept a cookie."""
valid_values = ValidValues(('default', "Default QtWebKit behaviour"),
('never', "Don't accept cookies at all."))
class KeyBinding(Command):
"""The command of a keybinding."""

View File

@ -43,7 +43,7 @@ import qutebrowser.utils.message as message
from qutebrowser.config._conftypes import ValidationError
from qutebrowser.config._iniparsers import (ReadConfigParser,
ReadWriteConfigParser)
from qutebrowser.config._lineparser import LineConfigParser
from qutebrowser.config.lineparser import LineConfigParser
instance = None
state = None

View File

@ -209,6 +209,14 @@ DATA = OrderedDict([
('user-agent',
SettingValue(types.String(), ''),
"User agent to send. Empty to send the default."),
('accept-cookies',
SettingValue(types.AcceptCookies(), 'default'),
"Whether to accept cookies."),
('store-cookies',
SettingValue(types.Bool(), 'false'),
"Whether to store cookies."),
)),
('completion', sect.KeyValue(

View File

@ -23,6 +23,21 @@ import qutebrowser.config.config as config
from qutebrowser.network.qutescheme import QuteSchemeHandler
networkmanager = None
def init(cookiejar):
"""Initialize the global NetworkManager.
Args:
cookiejar: The QCookieJar to use.
"""
global networkmanager
networkmanager = NetworkManager()
networkmanager.setCookieJar(cookiejar)
cookiejar.setParent(None)
class NetworkManager(QNetworkAccessManager):
"""Our own QNetworkAccessManager.

View File

@ -30,6 +30,7 @@ import qutebrowser.config.config as config
import qutebrowser.keyinput.modeman as modeman
import qutebrowser.utils.message as message
import qutebrowser.utils.webelem as webelem
import qutebrowser.network.networkmanager as networkmanager
from qutebrowser.browser.webpage import BrowserPage
from qutebrowser.browser.hints import HintManager
from qutebrowser.utils.signals import SignalCache
@ -209,7 +210,7 @@ class WebView(QWebView):
self.destroyed.connect(functools.partial(self._on_destroyed, self))
self.deleteLater()
netman = self.page_.network_access_manager
netman = networkmanager.networkmanager
self._destroyed[netman] = False
netman.abort_requests()
netman.destroyed.connect(functools.partial(self._on_destroyed, netman))