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

Unified Diff: chrome/content/elemHideEmulation.js

Issue 29493648: Issue 5436 - Allow relative selectors in :-abp-has() (Closed) Base URL: https://hg.adblockplus.org/adblockpluscore/
Patch Set: Updated with review feedback Created Aug. 16, 2017, 3:30 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 | test/browser/elemHideEmulation.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/content/elemHideEmulation.js
===================================================================
--- a/chrome/content/elemHideEmulation.js
+++ b/chrome/content/elemHideEmulation.js
@@ -184,16 +184,17 @@
*/
*getSelectors(prefix, subtree, styles)
{
yield [prefix + this._selector, subtree];
}
};
const incompletePrefixRegexp = /[\s>+~]$/;
+const relativeSelectorRegexp = /^[>+~]/;
function HasSelector(selectors)
{
this._innerSelectors = selectors;
}
HasSelector.prototype = {
requiresHiding: true,
@@ -219,18 +220,29 @@
{
let actualPrefix = (!prefix || incompletePrefixRegexp.test(prefix)) ?
prefix + "*" : prefix;
let elements = subtree.querySelectorAll(actualPrefix);
for (let element of elements)
{
let iter = evaluate(this._innerSelectors, 0, "", element, styles);
for (let selector of iter)
- if (element.querySelector(selector))
- yield element;
+ {
+ if (relativeSelectorRegexp.test(selector))
+ selector = ":scope" + selector;
+ try
+ {
+ if (element.querySelector(selector))
+ yield element;
+ }
+ catch (e)
+ {
+ // :scope isn't supported on Edge, ignore error caused by it.
+ }
+ }
}
}
};
function ContainsSelector(textContent)
{
this._text = textContent;
}
« no previous file with comments | « no previous file | test/browser/elemHideEmulation.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld