WebBrowser/Network/NetworkUrlInterceptor.py

Sun, 06 May 2018 15:23:02 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sun, 06 May 2018 15:23:02 +0200
changeset 6277
e22952cec018
parent 6131
1ecd0c53e117
child 6281
9f7bbfd6545d
permissions
-rw-r--r--

Added a TODO marker to improve the Referer header handling in the new web browser.

4825
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
6048
82ad8ec9548c Updated copyright for 2018.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
3 # Copyright (c) 2016 - 2018 Detlev Offenbach <detlev@die-offenbachs.de>
4825
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing a class to handle URL requests before they get processed
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 by QtWebEngine.
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9 """
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
10
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11 from __future__ import unicode_literals
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12
6131
1ecd0c53e117 Changed the URL interceptor to properly lock the mutex.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6048
diff changeset
13 from PyQt5.QtCore import QMutex, QMutexLocker
4826
aa752e6e9eba Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4825
diff changeset
14 from PyQt5.QtWebEngineCore import QWebEngineUrlRequestInterceptor
4825
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
15
4906
939ff20f712d Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4857
diff changeset
16 from ..WebBrowserPage import WebBrowserPage
939ff20f712d Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4857
diff changeset
17
4825
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18 import Preferences
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21 class NetworkUrlInterceptor(QWebEngineUrlRequestInterceptor):
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22 """
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23 Class implementing an URL request handler.
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24 """
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25 def __init__(self, parent=None):
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26 """
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27 Constructor
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29 @param parent reference to the parent object
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30 @type QObject
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31 """
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32 super(NetworkUrlInterceptor, self).__init__(parent)
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34 self.__interceptors = []
6131
1ecd0c53e117 Changed the URL interceptor to properly lock the mutex.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6048
diff changeset
35 self.__mutex = QMutex()
4825
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37 self.__loadSettings()
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39 def interceptRequest(self, info):
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40 """
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 Public method handling an URL request.
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43 @param info URL request information
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44 @type QWebEngineUrlRequestInfo
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45 """
6131
1ecd0c53e117 Changed the URL interceptor to properly lock the mutex.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6048
diff changeset
46 locker = QMutexLocker(self.__mutex) # __IGNORE_WARNING__
1ecd0c53e117 Changed the URL interceptor to properly lock the mutex.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6048
diff changeset
47
4825
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48 # Do Not Track feature
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49 if self.__doNotTrack:
4857
8dba5fb92f12 Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4826
diff changeset
50 info.setHttpHeader(b"DNT", b"1")
8dba5fb92f12 Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4826
diff changeset
51 info.setHttpHeader(b"X-Do-Not-Track", b"1")
4825
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52
6277
e22952cec018 Added a TODO marker to improve the Referer header handling in the new web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6131
diff changeset
53 # Send referrer header?
e22952cec018 Added a TODO marker to improve the Referer header handling in the new web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6131
diff changeset
54 if info.requestUrl().host() not in \
4825
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 Preferences.getWebBrowser("SendRefererWhitelist"):
6277
e22952cec018 Added a TODO marker to improve the Referer header handling in the new web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6131
diff changeset
56 self.__setRefererHeader(info)
4825
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57
4906
939ff20f712d Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4857
diff changeset
58 # User Agents header
939ff20f712d Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4857
diff changeset
59 userAgent = WebBrowserPage.userAgentForUrl(info.requestUrl())
939ff20f712d Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4857
diff changeset
60 info.setHttpHeader(b"User-Agent", userAgent.encode())
939ff20f712d Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4857
diff changeset
61
4825
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62 for interceptor in self.__interceptors:
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63 interceptor.interceptRequest(info)
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64
6277
e22952cec018 Added a TODO marker to improve the Referer header handling in the new web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6131
diff changeset
65 def __setRefererHeader(self, info):
e22952cec018 Added a TODO marker to improve the Referer header handling in the new web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6131
diff changeset
66 """
e22952cec018 Added a TODO marker to improve the Referer header handling in the new web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6131
diff changeset
67 Private method to set the 'Referer' header depending on the configured
e22952cec018 Added a TODO marker to improve the Referer header handling in the new web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6131
diff changeset
68 rule set.
e22952cec018 Added a TODO marker to improve the Referer header handling in the new web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6131
diff changeset
69
e22952cec018 Added a TODO marker to improve the Referer header handling in the new web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6131
diff changeset
70 @param info URL request information
e22952cec018 Added a TODO marker to improve the Referer header handling in the new web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6131
diff changeset
71 @type QWebEngineUrlRequestInfo
e22952cec018 Added a TODO marker to improve the Referer header handling in the new web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6131
diff changeset
72 """
e22952cec018 Added a TODO marker to improve the Referer header handling in the new web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6131
diff changeset
73 # TODO: extend referrer handling like that:
e22952cec018 Added a TODO marker to improve the Referer header handling in the new web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6131
diff changeset
74 # 1. SendReferer:
e22952cec018 Added a TODO marker to improve the Referer header handling in the new web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6131
diff changeset
75 # 0 = never
e22952cec018 Added a TODO marker to improve the Referer header handling in the new web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6131
diff changeset
76 # 1 = only on click (NavigationTypeLink)
e22952cec018 Added a TODO marker to improve the Referer header handling in the new web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6131
diff changeset
77 # 2 = always (default)
e22952cec018 Added a TODO marker to improve the Referer header handling in the new web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6131
diff changeset
78 # 2. RefererTrimmingPolicy:
e22952cec018 Added a TODO marker to improve the Referer header handling in the new web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6131
diff changeset
79 # 0 = send full URL (no trimming) (default)
e22952cec018 Added a TODO marker to improve the Referer header handling in the new web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6131
diff changeset
80 # 1 = send the URL without its query string
e22952cec018 Added a TODO marker to improve the Referer header handling in the new web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6131
diff changeset
81 # 2 = only send the origin (ensure trailing /)
e22952cec018 Added a TODO marker to improve the Referer header handling in the new web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6131
diff changeset
82 # 3. RefererDefaultPolicy:
e22952cec018 Added a TODO marker to improve the Referer header handling in the new web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6131
diff changeset
83 # set the default referrer policy (which can be overriden by
e22952cec018 Added a TODO marker to improve the Referer header handling in the new web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6131
diff changeset
84 # the site)
e22952cec018 Added a TODO marker to improve the Referer header handling in the new web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6131
diff changeset
85 # 0 = no-referrer
e22952cec018 Added a TODO marker to improve the Referer header handling in the new web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6131
diff changeset
86 # 1 = same-origin
e22952cec018 Added a TODO marker to improve the Referer header handling in the new web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6131
diff changeset
87 # 2 = strict-origin-when-cross-origin
e22952cec018 Added a TODO marker to improve the Referer header handling in the new web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6131
diff changeset
88 # 3 = no-referrer-when-downgrade (default)
e22952cec018 Added a TODO marker to improve the Referer header handling in the new web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6131
diff changeset
89 # see: https://wiki.mozilla.org/Security/Referrer
e22952cec018 Added a TODO marker to improve the Referer header handling in the new web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6131
diff changeset
90 # see: https://www.w3.org/TR/referrer-policy/
e22952cec018 Added a TODO marker to improve the Referer header handling in the new web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6131
diff changeset
91 if not self.__sendReferer:
e22952cec018 Added a TODO marker to improve the Referer header handling in the new web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6131
diff changeset
92 info.setHttpHeader(b"Referer", b"")
e22952cec018 Added a TODO marker to improve the Referer header handling in the new web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6131
diff changeset
93
4825
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
94 def installUrlInterceptor(self, interceptor):
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
95 """
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96 Public method to install an URL interceptor.
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
98 @param interceptor URL interceptor to be installed
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99 @type UrlInterceptor
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
100 """
6131
1ecd0c53e117 Changed the URL interceptor to properly lock the mutex.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6048
diff changeset
101 locker = QMutexLocker(self.__mutex) # __IGNORE_WARNING__
1ecd0c53e117 Changed the URL interceptor to properly lock the mutex.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6048
diff changeset
102
4825
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
103 if interceptor not in self.__interceptors:
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
104 self.__interceptors.append(interceptor)
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
105
4917
682750cc7bd5 Corrected some code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4906
diff changeset
106 def removeUrlInterceptor(self, interceptor):
4825
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
107 """
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
108 Public method to remove an URL interceptor.
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
110 @param interceptor URL interceptor to be removed
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
111 @type UrlInterceptor
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
112 """
6131
1ecd0c53e117 Changed the URL interceptor to properly lock the mutex.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6048
diff changeset
113 locker = QMutexLocker(self.__mutex) # __IGNORE_WARNING__
1ecd0c53e117 Changed the URL interceptor to properly lock the mutex.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6048
diff changeset
114
4825
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
115 if interceptor in self.__interceptors:
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
116 self.__interceptors.remove(interceptor)
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
117
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
118 def __loadSettings(self):
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
119 """
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
120 Private method to load the Network Manager settings.
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
121 """
6131
1ecd0c53e117 Changed the URL interceptor to properly lock the mutex.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6048
diff changeset
122 locker = QMutexLocker(self.__mutex) # __IGNORE_WARNING__
1ecd0c53e117 Changed the URL interceptor to properly lock the mutex.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6048
diff changeset
123
4825
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
124 self.__doNotTrack = Preferences.getWebBrowser("DoNotTrack")
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
125 self.__sendReferer = Preferences.getWebBrowser("SendReferer")
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
126
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
127 def preferencesChanged(self):
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
128 """
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
129 Public slot to handle a change of preferences.
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
130 """
b5fb58f3830b Continued porting the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
131 self.__loadSettings()

eric ide

mercurial