WebBrowser/Network/NetworkUrlInterceptor.py

changeset 6277
e22952cec018
parent 6131
1ecd0c53e117
child 6281
9f7bbfd6545d
diff -r 629b1ff9ab90 -r e22952cec018 WebBrowser/Network/NetworkUrlInterceptor.py
--- a/WebBrowser/Network/NetworkUrlInterceptor.py	Fri May 04 18:34:48 2018 +0200
+++ b/WebBrowser/Network/NetworkUrlInterceptor.py	Sun May 06 15:23:02 2018 +0200
@@ -50,10 +50,10 @@
             info.setHttpHeader(b"DNT", b"1")
             info.setHttpHeader(b"X-Do-Not-Track", b"1")
         
-        # Send referer header?
-        if not self.__sendReferer and info.requestUrl().host() not in \
+        # Send referrer header?
+        if info.requestUrl().host() not in \
                 Preferences.getWebBrowser("SendRefererWhitelist"):
-            info.setHttpHeader(b"Referer", b"")
+            self.__setRefererHeader(info)
         
         # User Agents header
         userAgent = WebBrowserPage.userAgentForUrl(info.requestUrl())
@@ -62,6 +62,35 @@
         for interceptor in self.__interceptors:
             interceptor.interceptRequest(info)
     
+    def __setRefererHeader(self, info):
+        """
+        Private method to set the 'Referer' header depending on the configured
+        rule set.
+        
+        @param info URL request information
+        @type QWebEngineUrlRequestInfo
+        """
+        # TODO: extend referrer handling like that:
+        # 1. SendReferer:
+        #       0 = never
+        #       1 = only on click (NavigationTypeLink)
+        #       2 = always (default)
+        # 2. RefererTrimmingPolicy: 
+        #       0 = send full URL (no trimming) (default)
+        #       1 = send the URL without its query string
+        #       2 = only send the origin (ensure trailing /)
+        # 3. RefererDefaultPolicy:
+        #   set the default referrer policy (which can be overriden by
+        #   the site)
+        #       0 = no-referrer
+        #       1 = same-origin
+        #       2 = strict-origin-when-cross-origin
+        #       3 = no-referrer-when-downgrade (default)
+        # see: https://wiki.mozilla.org/Security/Referrer
+        # see: https://www.w3.org/TR/referrer-policy/
+        if not self.__sendReferer:
+            info.setHttpHeader(b"Referer", b"")
+    
     def installUrlInterceptor(self, interceptor):
         """
         Public method to install an URL interceptor.

eric ide

mercurial