From dbd24a579f85e02f000baa9a88953ed4e39086d2 Mon Sep 17 00:00:00 2001 From: Faisal Salman Date: Sat, 30 Nov 2024 13:09:02 +0700 Subject: [PATCH] Browser naming adjustments for Client Hints: - `Google Chrome` => `Chrome` - `Microsoft Edge` => `Edge` - `Android WebView` => `Chrome WebView` - `HeadlessChrome` => `Chrome Headless` --- src/main/ua-parser.js | 8 +++++++- test/unit/ua-ch.js | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 test/unit/ua-ch.js diff --git a/src/main/ua-parser.js b/src/main/ua-parser.js index 00884b1..468e456 100755 --- a/src/main/ua-parser.js +++ b/src/main/ua-parser.js @@ -1167,9 +1167,15 @@ var brands = uaCH[FULLVERLIST] || uaCH[BRANDS], prevName; if (brands) { for (var i in brands) { - var brandName = strip(/(Google|Microsoft) /, brands[i].brand || brands[i]), + var brandName = brands[i].brand || brands[i], brandVersion = brands[i].version; if (this.itemType == UA_BROWSER && !/not.a.brand/i.test(brandName) && (!prevName || (/chrom/i.test(prevName) && brandName != CHROMIUM))) { + brandName = strMapper(brandName, { + 'Chrome' : 'Google Chrome', + 'Edge' : 'Microsoft Edge', + 'Chrome WebView' : 'Android WebView', + 'Chrome Headless' : 'HeadlessChrome' + }); this.set(NAME, brandName) .set(VERSION, brandVersion) .set(MAJOR, majorize(brandVersion)); diff --git a/test/unit/ua-ch.js b/test/unit/ua-ch.js new file mode 100644 index 0000000..83722de --- /dev/null +++ b/test/unit/ua-ch.js @@ -0,0 +1,37 @@ +const assert = require('assert'); +const { UAParser } = require('../../src/main/ua-parser'); + +describe('Browser naming adjustments', () => { + + it('Google Chrome => Chrome', () => { + const headers = { + 'sec-ch-ua' : '"Google Chrome";v="111", "Not(A:Brand";v="8", "Chromium";v="111"', + }; + const { browser } = UAParser(headers).withClientHints(); + assert.strictEqual(browser.name, 'Chrome'); + }); + + it('Microsoft Edge => Edge', () => { + const headers = { + 'sec-ch-ua' : '"Not_A Brand";v="8", "Chromium";v="120", "Microsoft Edge";v="120"', + }; + const { browser } = UAParser(headers).withClientHints(); + assert.strictEqual(browser.name, 'Edge'); + }); + + it('Android WebView => Chrome WebView', () => { + const headers = { + 'sec-ch-ua' : '"Android WebView";v="123", "Not:A-Brand";v="8", "Chromium";v="123"', + }; + const { browser } = UAParser(headers).withClientHints(); + assert.strictEqual(browser.name, 'Chrome WebView'); + }); + + it('HeadlessChrome => Chrome Headless', () => { + const headers = { + 'sec-ch-ua' : '"Chromium";v="124", "HeadlessChrome";v="124", "Not-A.Brand";v="99"', + }; + const { browser } = UAParser(headers).withClientHints(); + assert.strictEqual(browser.name, 'Chrome Headless'); + }); +}); \ No newline at end of file