| 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 |