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

Unified Diff: include.preload.js

Issue 29404613: Issue 5117 - Identify ElemHideEmulationFilters based on the filter text in the devtools panel (Closed)
Patch Set: Created April 6, 2017, 2:53 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 | lib/devtools.js » ('j') | 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
@@ -187,11 +187,8 @@
function ElementHidingTracer()
{
this.selectors = [];
- this.filters = [];
-
this.changedNodes = [];
this.timeout = null;
-
this.observer = new MutationObserver(this.observe.bind(this));
this.trace = this.trace.bind(this);
@@ -203,49 +200,58 @@
ElementHidingTracer.prototype = {
addSelectors(selectors, filters)
{
+ let pairs = selectors.map((sel, i) => [sel, filters && filters[i]]);
+
if (document.readyState != "loading")
- this.checkNodes([document], selectors, filters);
+ this.checkNodes([document], pairs);
- this.selectors.push(...selectors);
- this.filters.push(...filters);
+ this.selectors.push(...pairs);
},
- checkNodes(nodes, selectors, filters)
+ checkNodes(nodes, pairs)
{
- let matchedSelectors = [];
+ let selectors = [];
+ let filters = [];
- for (let i = 0; i < selectors.length; i++)
+ for (let [selector, filter] of pairs)
{
nodes: for (let node of nodes)
{
- let elements = node.querySelectorAll(selectors[i]);
-
- for (let element of elements)
+ for (let element of node.querySelectorAll(selector))
{
// Only consider selectors that actually have an effect on the
// computed styles, and aren't overridden by rules with higher
// priority, or haven't been circumvented in a different way.
if (getComputedStyle(element).display == "none")
{
- matchedSelectors.push(filters[i].replace(/^.*?##/, ""));
+ // For regular element hiding, we don't know the exact filter,
+ // but the background page can find it with the given selector.
+ // In case of element hiding emulation, the generated selector
+ // we got here is different from the selector part of the filter,
+ // but in this case we can send the whole filter text instead.
+ if (filter)
+ filters.push(filter);
+ else
+ selectors.push(selector);
+
break nodes;
}
}
}
}
- if (matchedSelectors.length > 0)
+ if (selectors.length > 0 || filters.length > 0)
{
ext.backgroundPage.sendMessage({
type: "devtools.traceElemHide",
- selectors: matchedSelectors
+ selectors, filters
});
}
},
onTimeout()
{
- this.checkNodes(this.changedNodes, this.selectors, this.filters);
+ this.checkNodes(this.changedNodes, this.selectors);
this.changedNodes = [];
this.timeout = null;
},
@@ -307,7 +313,7 @@
trace()
{
- this.checkNodes([document], this.selectors, this.filters);
+ this.checkNodes([document], this.selectors);
this.observer.observe(
document,
@@ -538,7 +544,7 @@
}
if (this.tracer)
- this.tracer.addSelectors(selectors, filters || selectors);
+ this.tracer.addSelectors(selectors, filters);
},
apply()
« no previous file with comments | « no previous file | lib/devtools.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld