From 4d40b9c971fecfd270491e00e0f40c4e41fb1c82 Mon Sep 17 00:00:00 2001 From: Einar Egilsson Date: Wed, 23 Sep 2015 12:34:44 +0000 Subject: Redirect loop protection --- js/background.js | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) (limited to 'js') diff --git a/js/background.js b/js/background.js index 16c052f..f65b10b 100644 --- a/js/background.js +++ b/js/background.js @@ -9,7 +9,6 @@ function log(msg) { log.enabled = false; -//TODO: Better browser detection... var isFirefox = false; if (typeof chrome == 'undefined') { @@ -37,6 +36,12 @@ var ignoreNextRequest = { }; +//url => { timestamp:ms, count:1...n}; +var justRedirected = { + +}; +var redirectThreshold = 3; + function setIcon(image) { var data = { path: { @@ -84,12 +89,30 @@ function checkRedirects(details) { return {}; } + for (var i = 0; i < list.length; i++) { var r = list[i]; var result = r.getMatch(details.url); if (result.isMatch) { + //Check if we're stuck in a loop where we keep redirecting this, in that + //case ignore! + var data = justRedirected[details.url]; + + var threshold = 3000; + if(!data || ((new Date().getTime()-data.timestamp) > threshold)) { //Obsolete after 3 seconds + justRedirected[details.url] = { timestamp : new Date().getTime(), count: 1}; + } else { + data.count++; + justRedirected[details.url] = data; + if (data.count >= redirectThreshold) { + log('Ignoring ' + details.url + ' because we have redirected it ' + data.count + ' times in the last ' + threshold + 'ms'); + return {}; + } + } + + log('Redirecting ' + details.url + ' ===> ' + result.redirectTo + ', type: ' + details.type + ', pattern: ' + r.includePattern); ignoreNextRequest[result.redirectTo] = new Date().getTime(); -- cgit v1.2.3