From 1fdd5637a524017aa43f35e771ba22f71fed0a54 Mon Sep 17 00:00:00 2001 From: Philipp Hancke Date: Mon, 13 Jun 2022 07:45:48 +0200 Subject: [PATCH 1/2] prefer navigator.userAgentData for browser detection fixes #764,#1017 --- src/js/utils.js | 10 ++++++++++ test/unit/detectBrowser.test.js | 12 ++++++++++++ 2 files changed, 22 insertions(+) diff --git a/src/js/utils.js b/src/js/utils.js index c03f0fa9..17bd38b6 100644 --- a/src/js/utils.js +++ b/src/js/utils.js @@ -161,6 +161,16 @@ export function detectBrowser(window) { const {navigator} = window; + // Prefer navigator.userAgentData. + if (navigator.userAgentData && navigator.userAgentData.brands) { + const chromium = navigator.userAgentData.brands.find((brand) => { + return brand.brand === 'Chromium'; + }); + if (chromium) { + return {browser: 'chrome', version: chromium.version}; + } + } + if (navigator.mozGetUserMedia) { // Firefox. result.browser = 'firefox'; result.version = extractVersion(navigator.userAgent, diff --git a/test/unit/detectBrowser.test.js b/test/unit/detectBrowser.test.js index 0c237691..8f14ce19 100644 --- a/test/unit/detectBrowser.test.js +++ b/test/unit/detectBrowser.test.js @@ -49,6 +49,18 @@ describe('detectBrowser', () => { expect(browserDetails.version).toEqual(95); }); + it('detects Chrome if navigator.userAgentData exist', () => { + navigator.userAgentData = {brands: [{brand: 'Chromium', version: 102}]}; + // Use the wrong UA string for Firefox. + navigator.userAgent = 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; ' + + 'rv:44.0) Gecko/20100101 Firefox/44.0'; + navigator.mozGetUserMedia = function() {}; + + const browserDetails = detectBrowser(window); + expect(browserDetails.browser).to.equal('chrome'); + expect(browserDetails.version).to.equal(102); + }); + it('detects Safari if window.RTCPeerConnection exists', () => { navigator.userAgent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) ' + 'AppleWebKit/604.1.6 (KHTML, like Gecko) Version/10.2 Safari/604.1.6'; From 921dfe2e0517ec4e4b0fb2983fc8152500c15819 Mon Sep 17 00:00:00 2001 From: Philipp Hancke Date: Thu, 7 Mar 2024 19:44:36 +0100 Subject: [PATCH 2/2] update unit test --- test/unit/detectBrowser.test.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/unit/detectBrowser.test.js b/test/unit/detectBrowser.test.js index 8f14ce19..eb67a2b8 100644 --- a/test/unit/detectBrowser.test.js +++ b/test/unit/detectBrowser.test.js @@ -49,7 +49,7 @@ describe('detectBrowser', () => { expect(browserDetails.version).toEqual(95); }); - it('detects Chrome if navigator.userAgentData exist', () => { + it('detects Chrome if navigator.userAgentData exists', () => { navigator.userAgentData = {brands: [{brand: 'Chromium', version: 102}]}; // Use the wrong UA string for Firefox. navigator.userAgent = 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; ' + @@ -57,8 +57,8 @@ describe('detectBrowser', () => { navigator.mozGetUserMedia = function() {}; const browserDetails = detectBrowser(window); - expect(browserDetails.browser).to.equal('chrome'); - expect(browserDetails.version).to.equal(102); + expect(browserDetails.browser).toEqual('chrome'); + expect(browserDetails.version).toEqual(102); }); it('detects Safari if window.RTCPeerConnection exists', () => {