From 8f545f9e3fd99ca2890bc1f7d6b92260eca35c0f Mon Sep 17 00:00:00 2001 From: Faisal Salman Date: Sat, 8 Mar 2025 16:18:31 +0700 Subject: [PATCH] Add new browser: Dooble, Ecosia, Otter, qutebrowser, Surf --- src/enums/ua-parser-enums.d.ts | 5 +++ src/enums/ua-parser-enums.js | 5 +++ src/main/ua-parser.js | 8 ++-- test/data/ua/browser/browser-all.json | 60 +++++++++++++++++++++++++++ 4 files changed, 74 insertions(+), 4 deletions(-) diff --git a/src/enums/ua-parser-enums.d.ts b/src/enums/ua-parser-enums.d.ts index 5f7a734..9ea1ffe 100644 --- a/src/enums/ua-parser-enums.d.ts +++ b/src/enums/ua-parser-enums.d.ts @@ -32,9 +32,11 @@ export const Browser: Readonly<{ DAUM: "Daum"; DILLO: "Dillo"; DOLPHIN: "Dolphin"; + DOOBLE: 'Dooble', DORIS: "Doris"; DRAGON: "Dragon"; DUCKDUCKGO: "DuckDuckGo"; + ECOSIA: "Ecosia"; EDGE: "Edge"; EPIPHANY: "Epiphany"; FACEBOOK: "Facebook"; @@ -103,6 +105,7 @@ export const Browser: Readonly<{ OPERA_MOBI: "Opera Mobi"; OPERA_TABLET: "Opera Tablet"; OPERA_TOUCH: "Opera Touch"; + OTTER: "Otter"; OVI: "OviBrowser"; PALEMOON: "PaleMoon"; PHANTOMJS: "PhantomJS"; @@ -114,6 +117,7 @@ export const Browser: Readonly<{ QQ_LITE: "QQBrowserLite"; QUARK: "Quark"; QUPZILLA: "QupZilla"; + QUTEBROWSER: "qutebrowser"; REKONQ: "rekonq"; ROCKMELT: "Rockmelt"; SAFARI: "Safari"; @@ -130,6 +134,7 @@ export const Browser: Readonly<{ SNAPCHAT: "Snapchat"; SOGOU_EXPLORER: "Sogou Explorer"; SOGOU_MOBILE: "Sogou Mobile"; + SURF: "Surf"; SWIFTFOX: "Swiftfox"; TESLA: "Tesla"; TIKTOK: "TikTok"; diff --git a/src/enums/ua-parser-enums.js b/src/enums/ua-parser-enums.js index d5cdc42..0900357 100644 --- a/src/enums/ua-parser-enums.js +++ b/src/enums/ua-parser-enums.js @@ -37,9 +37,11 @@ const Browser = Object.freeze({ DAUM: 'Daum', DILLO: 'Dillo', DOLPHIN: 'Dolphin', + DOOBLE: 'Dooble', DORIS: 'Doris', DRAGON: 'Dragon', DUCKDUCKGO: 'DuckDuckGo', + ECOSIA: 'Ecosia', EDGE: 'Edge', EPIPHANY: 'Epiphany', FACEBOOK: 'Facebook', @@ -108,6 +110,7 @@ const Browser = Object.freeze({ OPERA_MOBI: 'Opera Mobi', OPERA_TABLET: 'Opera Tablet', OPERA_TOUCH: 'Opera Touch', + OTTER: 'Otter', OVI: 'OviBrowser', PALEMOON: 'PaleMoon', PHANTOMJS: 'PhantomJS', @@ -119,6 +122,7 @@ const Browser = Object.freeze({ QQ_LITE: 'QQBrowserLite', QUARK: 'Quark', QUPZILLA: 'QupZilla', + QUTEBROWSER: 'qutebrowser', REKONQ: 'rekonq', ROCKMELT: 'Rockmelt', SAFARI: 'Safari', @@ -135,6 +139,7 @@ const Browser = Object.freeze({ SNAPCHAT: 'Snapchat', SOGOU_EXPLORER: 'Sogou Explorer', SOGOU_MOBILE: 'Sogou Mobile', + SURF: 'Surf', SWIFTFOX: 'Swiftfox', TESLA: 'Tesla', TIKTOK: 'TikTok', diff --git a/src/main/ua-parser.js b/src/main/ua-parser.js index 1b22b7e..4966699 100755 --- a/src/main/ua-parser.js +++ b/src/main/ua-parser.js @@ -353,11 +353,11 @@ /(avant|iemobile|slim(?:browser|boat|jet))[\/ ]?([\d\.]*)/i, // Avant/IEMobile/SlimBrowser/SlimBoat/Slimjet /(?:ms|\()(ie) ([\w\.]+)/i, // Internet Explorer - // Blink/Webkit/KHTML based // Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon/LG Browser - /(flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|qupzilla|falkon|rekonq|puffin|brave|whale(?!.+naver)|qqbrowserlite|duckduckgo|klar|helio|(?=comodo_)?dragon|lg browser)\/([-\w\.]+)/i, + // Blink/Webkit/KHTML based // Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon/LG Browser/Otter/qutebrowser/Dooble + /(flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|qupzilla|falkon|rekonq|puffin|brave|whale(?!.+naver)|qqbrowserlite|duckduckgo|klar|helio|(?=comodo_)?dragon|otter|dooble|(?:lg |qute)browser)\/([-\w\.]+)/i, // Rekonq/Puffin/Brave/Whale/QQBrowserLite/QQ//Vivaldi/DuckDuckGo/Klar/Helio/Dragon - /(heytap|ovi|115)browser\/([\d\.]+)/i, // HeyTap/Ovi/115 - /(weibo)__([\d\.]+)/i // Weibo + /(heytap|ovi|115|surf)browser\/([\d\.]+)/i, // HeyTap/Ovi/115/Surf + /(ecosia|weibo)(?:__| \w+@)([\d\.]+)/i // Ecosia/Weibo ], [NAME, VERSION], [ /quark(?:pc)?\/([-\w\.]+)/i // Quark ], [VERSION, [NAME, 'Quark']], [ diff --git a/test/data/ua/browser/browser-all.json b/test/data/ua/browser/browser-all.json index 9d0344b..3fc0e5e 100644 --- a/test/data/ua/browser/browser-all.json +++ b/test/data/ua/browser/browser-all.json @@ -511,6 +511,16 @@ "major" : "2" } }, + { + "desc" : "Dooble", + "ua" : "Mozilla/5.0 (X11; Haiku BePC) AppleWebKit/537.36 (KHTML, like Gecko) QtWebEngine/5.15.17 Chrome/87.0.4280.144 Safari/537.36 Dooble/2023.12.25 Dooble/2023.12.25", + "expect" : + { + "name" : "Dooble", + "version" : "2023.12.25", + "major" : "2023" + } + }, { "desc" : "Doris", "ua" : "Doris/1.15 [en] (Symbian)", @@ -541,6 +551,26 @@ "major" : "5" } }, + { + "desc" : "Ecosia on Android", + "ua" : "Mozilla/5.0 (Linux; Android 10; SM-G975U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.127 Mobile Safari/537.36 (Ecosia android@85.0.4183.127)", + "expect" : + { + "name" : "Ecosia", + "version" : "85.0.4183.127", + "major" : "85" + } + }, + { + "desc" : "Ecosia on iOS", + "ua" : "Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_3 like Mac OS X) AppleWebKit/603.3.8 (KHTML, like Gecko) Mobile/14G60 (Ecosia ios@3.0.1.533)", + "expect" : + { + "name" : "Ecosia", + "version" : "3.0.1.533", + "major" : "3" + } + }, { "desc" : "Epiphany", "ua" : "Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.7) Gecko/20040628 Epiphany/1.2.6", @@ -1006,6 +1036,16 @@ "major" : "5" } }, + { + "desc" : "Otter", + "ua" : "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/602.1 (KHTML, like Gecko) Otter/1.0.81", + "expect" : + { + "name" : "Otter", + "version" : "1.0.81", + "major" : "1" + } + }, { "desc" : "PicoBrowser", "ua" : "Mozilla/5.0 (X11; Linux x86_64; Pico Neo3 Link OS5.8.4.0 like Quest) AppleWebKit/537.36 (KHTML, like Gecko) PicoBrowser/3.3.22 Chrome/105.0.5195.68 VR Safari/537.36", @@ -1066,6 +1106,16 @@ "major" : "9" } }, + { + "desc" : "Surf Browser", + "ua" : "Mozilla/5.0 (Android 6.0; HUAWEI ALE-L21) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36 SurfBrowser/3.0", + "expect" : + { + "name" : "Surf", + "version" : "3.0", + "major" : "3" + } + }, { "desc" : "LG Browser", "ua" : "Mozilla/5.0 (Unknown; Linux armv7l) AppleWebKit/537.1+ (KHTML, like Gecko) Safari/537.1+ LG Browser/6.00.00(+mouse+3D+SCREEN+TUNER; LGE; 47LA621V-ZD; 04.28.17; 0x00000001;); LG NetCast.TV-2013 /04.28.17 (LG, 47LA621V-ZD, wired)", @@ -1628,6 +1678,16 @@ "major" : "1" } }, + { + "desc" : "qutebrowser", + "ua" : "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) qutebrowser/2.4.0 QtWebEngine/5.15.6 Chrome/95.0.4628.2 Safari/537.36", + "expect" : + { + "name" : "qutebrowser", + "version" : "2.4.0", + "major" : "2" + } + }, { "desc" : "Rekonq 2", "ua" : "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.21 (KHTML, like Gecko) rekonq/2.2.1 Safari/537.21",