Index: chrome/ext/background.js |
=================================================================== |
--- a/chrome/ext/background.js |
+++ b/chrome/ext/background.js |
@@ -326,9 +326,35 @@ |
return (framesOfTabs[tabId] || {})[frameId]; |
}; |
+ var handlerBehaviorChangedQuota = chrome.webRequest.MAX_HANDLER_BEHAVIOR_CHANGED_CALLS_PER_10_MINUTES; |
+ |
+ function propagateHandlerBehaviorChange() |
+ { |
+ // Make sure to not call handlerBehaviorChanged() more often than allowed |
+ // by chrome.webRequest.MAX_HANDLER_BEHAVIOR_CHANGED_CALLS_PER_10_MINUTES. |
+ // Otherwise Chrome notifies the user that this extension is causing issues. |
+ if (handlerBehaviorChangedQuota > 0) |
+ { |
+ chrome.webNavigation.onBeforeNavigate.removeListener(propagateHandlerBehaviorChange); |
+ chrome.webRequest.handlerBehaviorChanged(); |
+ |
+ handlerBehaviorChangedQuota--; |
+ setTimeout(function() { handlerBehaviorChangedQuota++; }, 600000); |
+ } |
+ } |
+ |
ext.webRequest = { |
onBeforeRequest: new ext._EventTarget(), |
- handlerBehaviorChanged: chrome.webRequest.handlerBehaviorChanged |
+ handlerBehaviorChanged: function() |
+ { |
+ // Defer handlerBehaviorChanged() until navigation occurs. |
+ // There wouldn't be any visible effect when calling it earlier, |
+ // but it's an expensive operation and that way we avoid to call |
+ // it multiple times, if multiple filters are added/removed. |
+ var onBeforeNavigate = chrome.webNavigation.onBeforeNavigate; |
+ if (!onBeforeNavigate.hasListener(propagateHandlerBehaviorChange)) |
+ onBeforeNavigate.addListener(propagateHandlerBehaviorChange); |
+ } |
}; |
// Since Chrome 38 requests of type 'object' (e.g. requests |