WebBrowser/Network/NetworkUrlInterceptor.py

branch
QtWebEngine
changeset 4825
b5fb58f3830b
child 4826
aa752e6e9eba
equal deleted inserted replaced
4824:08153ef89fc1 4825:b5fb58f3830b
1 # -*- coding: utf-8 -*-
2
3 # Copyright (c) 2016 Detlev Offenbach <detlev@die-offenbachs.de>
4 #
5
6 """
7 Module implementing a class to handle URL requests before they get processed
8 by QtWebEngine.
9 """
10
11 from __future__ import unicode_literals
12
13 from PyQt5.QtWebEngineWidgets import QWebEngineUrlRequestInterceptor
14
15 import Preferences
16
17
18 class NetworkUrlInterceptor(QWebEngineUrlRequestInterceptor):
19 """
20 Class implementing an URL request handler.
21 """
22 def __init__(self, parent=None):
23 """
24 Constructor
25
26 @param parent reference to the parent object
27 @type QObject
28 """
29 super(NetworkUrlInterceptor, self).__init__(parent)
30
31 self.__interceptors = []
32
33 self.__loadSettings()
34
35 def interceptRequest(self, info):
36 """
37 Public method handling an URL request.
38
39 @param info URL request information
40 @type QWebEngineUrlRequestInfo
41 """
42 # Do Not Track feature
43 if self.__doNotTrack:
44 info.setHttpHeader(b"DNT", b"1")
45 info.setHttpHeader(b"X-Do-Not-Track", b"1")
46
47 # Send referer header?
48 if not self.__sendReferer and \
49 info.requestUrl().host() not in \
50 Preferences.getWebBrowser("SendRefererWhitelist"):
51 info.setHttpHeader(b"Referer", b"")
52
53 for interceptor in self.__interceptors:
54 interceptor.interceptRequest(info)
55
56 def installUrlInterceptor(self, interceptor):
57 """
58 Public method to install an URL interceptor.
59
60 @param interceptor URL interceptor to be installed
61 @type UrlInterceptor
62 """
63 if interceptor not in self.__interceptors:
64 self.__interceptors.append(interceptor)
65
66 def removeUrlInterceptor(self, interceptor):
67 """
68 Public method to remove an URL interceptor.
69
70 @param interceptor URL interceptor to be removed
71 @type UrlInterceptor
72 """
73 if interceptor in self.__interceptors:
74 self.__interceptors.remove(interceptor)
75
76 def __loadSettings(self):
77 """
78 Private method to load the Network Manager settings.
79 """
80 self.__doNotTrack = Preferences.getWebBrowser("DoNotTrack")
81 self.__sendReferer = Preferences.getWebBrowser("SendReferer")
82
83 def preferencesChanged(self):
84 """
85 Public slot to handle a change of preferences.
86 """
87 self.__loadSettings()

eric ide

mercurial