Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Unified Diff: include.preload.js

Issue 8678083: Topic 11337: Image placeholders aren`t always hidden (Closed)
Patch Set: Created Oct. 28, 2012, 4:48 p.m.
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: include.preload.js
===================================================================
--- a/include.preload.js
+++ b/include.preload.js
@@ -48,42 +48,74 @@ function setElemhideCSSRules(selectors)
{
var selector = selectors.slice(i, i + SELECTOR_GROUP_SIZE).join(", ");
elt.sheet.insertRule(selector + " { display: none !important; }", j);
}
}
setRules();
}
+function removeElements(tagName, urls)
+{
+ var remove = [];
+ var elements = document.getElementsByTagName(tagName);
+ for (var i = 0, l = elements.length; i < l; i++)
+ if (elements[i].src in urls)
+ remove.push(elements[i]);
+
+ for (var i = 0, l = remove.length; i < l; i++)
+ if (remove[i].parentNode)
+ remove[i].parentNode.removeChild(remove[i]);
+
+ return remove.length > 0;
+}
+
+var removeMap =
+{
+ IMAGE: {
+ tag: "img",
+ remove: {},
+ loadHandler: false
+ },
+ SUBDOCUMENT: {
+ tag: "iframe",
+ remove: {},
+ loadHandler: false
+ }
+};
+removeMap.IMAGE.handler = removeElements.bind(null, removeMap.IMAGE.tag, removeMap.IMAGE.remove);
+removeMap.SUBDOCUMENT.handler = removeElements.bind(null, removeMap.SUBDOCUMENT.tag, removeMap.SUBDOCUMENT.remove);
+
function sendRequests()
{
// Make sure this is really an HTML page, as Chrome runs these scripts on just about everything
if (!(document.documentElement instanceof HTMLElement))
return;
chrome.extension.onMessage.addListener(function(request, sender, sendResponse)
{
switch (request.reqtype)
{
case "hide-element":
if (request.documentUrl != document.URL)
return;
// We have little way of knowing which element was blocked - see
// http://code.google.com/p/chromium/issues/detail?id=97392. Have to
- // look through all of them and try to find the right one.
- var remove = [];
- var elements = (request.type == "IMAGE" ? document.images : document.getElementsByTagName("iframe"));
- for (var i = 0, l = elements.length; i < l; i++)
- if (elements[i].src == request.url)
- remove.push(elements[i]);
-
- for (var i = 0, l = remove.length; i < l; i++)
- if (remove[i].parentNode)
- remove[i].parentNode.removeChild(remove[i]);
+ // look through all of them and try to find the right one. And if we
+ // don't find it then maybe it just wasn't added yet.
+ var info = removeMap[request.type];
+ info.remove[request.url] = true;
+ if (info.handler())
+ delete info.remove[request.url];
+ else if (!info.onLoadHandler)
+ {
+ window.addEventListener("DOMContentLoaded", info.handler, false);
+ info.onLoadHandler = true;
+ }
}
});
chrome.extension.sendRequest({reqtype: "get-settings", selectors: true, frameUrl: window.location.href}, function(response)
{
setElemhideCSSRules(response.selectors);
});
}
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld