Use `CSS.supports()` to detect support of native `:has()`

Related issue:
https://github.com/uBlockOrigin/uBlock-issues/issues/2480#issuecomment-1868595930
This commit is contained in:
Raymond Hill 2023-12-25 09:06:42 -05:00
parent abbff2dea9
commit 38bde79146
No known key found for this signature in database
GPG Key ID: 25E1490B761470C2
1 changed files with 15 additions and 29 deletions

View File

@ -178,38 +178,24 @@ vAPI.webextFlavor = {
soup.add('mobile'); soup.add('mobile');
} }
// Asynchronous if ( CSS.supports('selector(a:has(b))') ) {
if (
browser instanceof Object &&
typeof browser.runtime.getBrowserInfo === 'function'
) {
browser.runtime.getBrowserInfo().then(info => {
flavor.major = parseInt(info.version, 10) || flavor.major;
soup.add(info.vendor.toLowerCase())
.add(info.name.toLowerCase());
if ( flavor.major >= 121 && soup.has('mobile') === false ) {
soup.add('native_css_has'); soup.add('native_css_has');
} }
dispatch();
}); // Order of tests is important
if ( browser.runtime.getURL('').startsWith('moz-extension://') ) { if ( browser.runtime.getURL('').startsWith('moz-extension://') ) {
soup.add('firefox') soup.add('firefox')
.add('user_stylesheet') .add('user_stylesheet')
.add('html_filtering'); .add('html_filtering');
flavor.major = 115; const match = /Firefox\/(\d+)/.exec(ua);
} flavor.major = match && parseInt(match[1], 10) || 115;
return; } else {
} const match = /\bChrom(?:e|ium)\/(\d+)/.exec(ua);
// Synchronous -- order of tests is important
const match = /\bChrom(?:e|ium)\/([\d.]+)/.exec(ua);
if ( match !== null ) { if ( match !== null ) {
soup.add('chromium') soup.add('chromium')
.add('user_stylesheet'); .add('user_stylesheet');
flavor.major = parseInt(match[1], 10) || 0;
if ( flavor.major >= 105 ) {
soup.add('native_css_has');
} }
flavor.major = match && parseInt(match[1], 10) || 120;
} }
// Don't starve potential listeners // Don't starve potential listeners