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

Unified Diff: include.preload.js

Issue 29370970: [adblockpluschrome] Issue 3596 - Added support for CSS property filters to devtools panel (Closed)
Patch Set: Created Jan. 10, 2017, 10:54 a.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 | lib/devtools.js » ('j') | lib/devtools.js » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: include.preload.js
diff --git a/include.preload.js b/include.preload.js
index 86e52c32afceb894f6591a84b0eca3b1842383ce..27b1229c07904935599647e23179bf5b931cc52c 100644
--- a/include.preload.js
+++ b/include.preload.js
@@ -194,7 +194,7 @@ function getContentDocument(element)
function ElementHidingTracer(selectors)
{
- this.selectors = selectors;
+ this.selectors = selectors || [];
Sebastian Noack 2017/01/11 16:20:40 It seems you removed the only code that initialize
wspee 2017/01/12 13:39:58 No longer relevant.
wspee 2017/01/19 16:20:14 Done.
this.changedNodes = [];
this.timeout = null;
@@ -219,7 +219,7 @@ ElementHidingTracer.prototype = {
for (var j = 0; j < nodes.length; j++)
{
- var elements = nodes[j].querySelectorAll(selector);
+ var elements = nodes[j].querySelectorAll(selector.selector);
var matched = false;
for (var k = 0; k < elements.length; k++)
@@ -229,7 +229,10 @@ ElementHidingTracer.prototype = {
// priority, or haven't been circumvented in a different way.
if (getComputedStyle(elements[k]).display == "none")
{
- matchedSelectors.push(selector);
+ if (selector.filter)
+ matchedSelectors.push(selector.filter.replace(/^.*?##/, ""));
+ else
+ matchedSelectors.push(selector.selector);
matched = true;
break;
}
@@ -490,11 +493,31 @@ ElemHide.prototype = {
return shadow;
},
- addSelectors: function(selectors)
+ addSelectors: function(selectors, filters)
{
if (selectors.length == 0)
return;
+ if (this.tracer != null)
+ {
+ // The selector is beeing used to identify the filter that is responsible
+ // for hiding a particular element in the devtools panel. The
+ // ElementHidingTracer uses the selector to figure out if a filter is
+ // used on the current document. In case of an ElemHideEmulationFilter
+ // the selector doesn't match the selector of the filter
+ // ([-abp-properties=...] vs actual css selector depending on the sites
+ // css). The To still allow the devtools panel to find the correct filter
+ // we pass both the selector and the filter string to the
+ // ElementHidingTracer.
+ for (var i = 0; i < selectors.length; i++)
+ {
+ this.tracer.selectors.push({
Sebastian Noack 2017/01/11 16:20:40 Is it guaranteed that the order of selectors match
Sebastian Noack 2017/01/11 16:20:40 Creating a new object for each selector might pote
wspee 2017/01/12 13:39:58 Indeed ... if you look at findSelectors there can
wspee 2017/01/12 13:39:58 No longer relevant.
wspee 2017/01/19 16:20:14 According to the chrome profiler an array with 100
wspee 2017/01/19 16:20:14 Done.
+ selector: selectors[i],
+ filter: filters ? filters[i] : null
+ });
+ }
+ }
+
if (!this.style)
{
// Create <style> element lazily, only if we add styles. Add it to
@@ -544,38 +567,32 @@ ElemHide.prototype = {
apply: function()
{
var selectors = null;
- var elemHideEmulationLoaded = false;
var checkLoaded = function()
{
- if (!selectors || !elemHideEmulationLoaded)
- return;
-
if (this.tracer)
this.tracer.disconnect();
this.tracer = null;
+ if (selectors.trace)
+ this.tracer = new ElementHidingTracer();
+
if (this.style && this.style.parentElement)
this.style.parentElement.removeChild(this.style);
this.style = null;
- this.addSelectors(selectors.selectors);
+ if (selectors.selectors)
+ this.addSelectors(selectors.selectors);
this.elemHideEmulation.apply();
- if (selectors.trace)
- this.tracer = new ElementHidingTracer(selectors.selectors);
+ if (this.tracer && this.tracer.selectors.length)
Sebastian Noack 2017/01/11 16:20:40 Any particular reason (except for a hypothetical m
wspee 2017/01/12 13:39:58 No longer relevant.
wspee 2017/01/19 16:20:15 Done.
+ this.tracer.checkNodes([document]);
}.bind(this);
- ext.backgroundPage.sendMessage({type: "get-selectors"}, function(response)
+ ext.backgroundPage.sendMessage({type: "get-selectors"}, (response) =>
Sebastian Noack 2017/01/11 16:20:40 The parentheses around the "response" argument are
wspee 2017/01/12 13:39:58 No longer relevant.
wspee 2017/01/19 16:20:14 Done.
{
selectors = response;
- checkLoaded();
- });
-
- this.elemHideEmulation.load(function()
- {
- elemHideEmulationLoaded = true;
- checkLoaded();
+ this.elemHideEmulation.load(() => { checkLoaded(); });
Sebastian Noack 2017/01/11 16:20:40 The arrow function seems redundant. Why not just p
wspee 2017/01/12 13:39:58 No longer relevant.
wspee 2017/01/19 16:20:14 Done.
});
}
};
« no previous file with comments | « no previous file | lib/devtools.js » ('j') | lib/devtools.js » ('J')

Powered by Google App Engine
This is Rietveld