From 38bde79146be8f697693dc0eb16b5b9c168f9dd4 Mon Sep 17 00:00:00 2001 From: Raymond Hill Date: Mon, 25 Dec 2023 09:06:42 -0500 Subject: [PATCH] Use `CSS.supports()` to detect support of native `:has()` Related issue: https://github.com/uBlockOrigin/uBlock-issues/issues/2480#issuecomment-1868595930 --- platform/common/vapi-common.js | 44 ++++++++++++---------------------- 1 file changed, 15 insertions(+), 29 deletions(-) diff --git a/platform/common/vapi-common.js b/platform/common/vapi-common.js index 4296f8563..3b7482074 100644 --- a/platform/common/vapi-common.js +++ b/platform/common/vapi-common.js @@ -178,38 +178,24 @@ vAPI.webextFlavor = { soup.add('mobile'); } - // Asynchronous - 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'); - } - dispatch(); - }); - if ( browser.runtime.getURL('').startsWith('moz-extension://') ) { - soup.add('firefox') - .add('user_stylesheet') - .add('html_filtering'); - flavor.major = 115; - } - return; + if ( CSS.supports('selector(a:has(b))') ) { + soup.add('native_css_has'); } - // Synchronous -- order of tests is important - const match = /\bChrom(?:e|ium)\/([\d.]+)/.exec(ua); - if ( match !== null ) { - soup.add('chromium') - .add('user_stylesheet'); - flavor.major = parseInt(match[1], 10) || 0; - if ( flavor.major >= 105 ) { - soup.add('native_css_has'); + // Order of tests is important + if ( browser.runtime.getURL('').startsWith('moz-extension://') ) { + soup.add('firefox') + .add('user_stylesheet') + .add('html_filtering'); + const match = /Firefox\/(\d+)/.exec(ua); + flavor.major = match && parseInt(match[1], 10) || 115; + } else { + const match = /\bChrom(?:e|ium)\/(\d+)/.exec(ua); + if ( match !== null ) { + soup.add('chromium') + .add('user_stylesheet'); } + flavor.major = match && parseInt(match[1], 10) || 120; } // Don't starve potential listeners