mirror of https://github.com/gorhill/uBlock.git
Code review of reworked generic cosmetic filtering code
Related commit:
- 26594fb902
This commit is contained in:
parent
d7c18fd7db
commit
1bda7e0085
|
@ -1041,7 +1041,7 @@ vAPI.DOMFilterer = class {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const getSurveyResults = hashes => {
|
const getSurveyResults = (hashes, safeOnly) => {
|
||||||
if ( self.vAPI.messaging instanceof Object === false ) {
|
if ( self.vAPI.messaging instanceof Object === false ) {
|
||||||
stop(); return;
|
stop(); return;
|
||||||
}
|
}
|
||||||
|
@ -1052,6 +1052,7 @@ vAPI.DOMFilterer = class {
|
||||||
hostname,
|
hostname,
|
||||||
hashes,
|
hashes,
|
||||||
exceptions: domFilterer.exceptions,
|
exceptions: domFilterer.exceptions,
|
||||||
|
safeOnly,
|
||||||
});
|
});
|
||||||
promise.then(response => {
|
promise.then(response => {
|
||||||
processSurveyResults(response);
|
processSurveyResults(response);
|
||||||
|
@ -1152,6 +1153,7 @@ vAPI.DOMFilterer = class {
|
||||||
idFromNode(document.body, hashes);
|
idFromNode(document.body, hashes);
|
||||||
classesFromNode(document.body, hashes);
|
classesFromNode(document.body, hashes);
|
||||||
}
|
}
|
||||||
|
getSurveyResults(hashes, true);
|
||||||
addPendingList(document.querySelectorAll(
|
addPendingList(document.querySelectorAll(
|
||||||
'[id]:not(html):not(body),[class]:not(html):not(body)'
|
'[id]:not(html):not(body),[class]:not(html):not(body)'
|
||||||
));
|
));
|
||||||
|
|
|
@ -170,13 +170,15 @@ const hashFromStr = (type, s) => {
|
||||||
// It's an uncommon case, so it's best to unescape only when needed.
|
// It's an uncommon case, so it's best to unescape only when needed.
|
||||||
|
|
||||||
const keyFromSelector = selector => {
|
const keyFromSelector = selector => {
|
||||||
|
let key = '';
|
||||||
let matches = rePlainSelector.exec(selector);
|
let matches = rePlainSelector.exec(selector);
|
||||||
if ( matches === null ) {
|
if ( matches !== null ) {
|
||||||
|
key = matches[0];
|
||||||
|
} else {
|
||||||
matches = rePlainSelectorEx.exec(selector);
|
matches = rePlainSelectorEx.exec(selector);
|
||||||
if ( matches !== null ) { return matches[1] || matches[2]; }
|
if ( matches === null ) { return; }
|
||||||
return;
|
key = matches[1] || matches[2];
|
||||||
}
|
}
|
||||||
let key = matches[0];
|
|
||||||
if ( key.includes('\\') === false ) { return key; }
|
if ( key.includes('\\') === false ) { return key; }
|
||||||
matches = rePlainSelectorEscaped.exec(selector);
|
matches = rePlainSelectorEscaped.exec(selector);
|
||||||
if ( matches === null ) { return; }
|
if ( matches === null ) { return; }
|
||||||
|
@ -744,10 +746,17 @@ FilterContainer.prototype.retrieveGenericSelectors = function(request) {
|
||||||
hashes.push(hash);
|
hashes.push(hash);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( request.safeOnly ) {
|
||||||
|
for ( const selector of selectorsSet ) {
|
||||||
|
if ( selector !== keyFromSelector(selector) ) { continue; }
|
||||||
|
selectorsSet.delete(selector);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Apply exceptions: it is the responsibility of the caller to provide
|
// Apply exceptions: it is the responsibility of the caller to provide
|
||||||
// the exceptions to be applied.
|
// the exceptions to be applied.
|
||||||
const excepted = [];
|
const excepted = [];
|
||||||
if ( Array.isArray(request.exceptions) ) {
|
if ( selectorsSet.size !== 0 && Array.isArray(request.exceptions) ) {
|
||||||
for ( const exception of request.exceptions ) {
|
for ( const exception of request.exceptions ) {
|
||||||
if ( selectorsSet.delete(exception) ) {
|
if ( selectorsSet.delete(exception) ) {
|
||||||
excepted.push(exception);
|
excepted.push(exception);
|
||||||
|
|
Loading…
Reference in New Issue