| Index: include.preload.js | 
| =================================================================== | 
| --- a/include.preload.js | 
| +++ b/include.preload.js | 
| @@ -152,6 +152,53 @@ | 
| observer.observe(style.parentNode, {childList: true}); | 
| } | 
| +function traceHiddenElements(document, selectors) | 
| +{ | 
| + function check(element) | 
| + { | 
| + var matchedSelectors = []; | 
| + | 
| + for (var i = 0; i < selectors.length; i++) | 
| + { | 
| + var selector = selectors[i]; | 
| + var elements = document.querySelectorAll(selector); | 
| + | 
| + for (var j = 0; j < elements.length; j++) | 
| + { | 
| + if (getComputedStyle(elements[j]).display == "none") | 
| + { | 
| + matchedSelectors.push(selector); | 
| + break; | 
| + } | 
| + } | 
| + } | 
| + | 
| + if (matchedSelectors.length > 0) | 
| + ext.backgroundPage.sendMessage({type: "trace-elemhide", selectors: matchedSelectors}); | 
| + } | 
| + | 
| + function trace() | 
| + { | 
| + check(); | 
| + | 
| + var MutationObserver = window.MutationObserver || window.WebKitMutationObserver; | 
| + if (MutationObserver) | 
| + { | 
| + new MutationObserver(check).observe(document, | 
| + { | 
| + childList: true, | 
| + attributes: true, | 
| + subtree: true | 
| + }); | 
| + } | 
| + } | 
| + | 
| + if (document.readyState == "loading") | 
| + document.addEventListener("DOMContentLoaded", trace); | 
| + else | 
| + trace(); | 
| +} | 
| + | 
| function init(document) | 
| { | 
| // use Shadow DOM if available to don't mess with web pages that | 
| @@ -166,11 +213,12 @@ | 
| } | 
| // Sets the currently used CSS rules for elemhide filters | 
| - var setElemhideCSSRules = function(selectors) | 
| + var setElemhideCSSRules = function(response) | 
| { | 
| - if (selectors.length == 0) | 
| + if (response.selectors.length == 0) | 
| return; | 
| + var selectors = response.selectors.slice(0); | 
| var style = document.createElement("style"); | 
| style.setAttribute("type", "text/css"); | 
| @@ -206,6 +254,9 @@ | 
| var selector = selectors.splice(0, SELECTOR_GROUP_SIZE).join(", "); | 
| style.sheet.insertRule(selector + " { display: none !important; }", i); | 
| } | 
| + | 
| + if (response.trace) | 
| + traceHiddenElements(document, response.selectors); | 
| }; | 
| setRules(); |