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.