From ef4eeadcd85af64fa613434f96c366a99e5ac377 Mon Sep 17 00:00:00 2001 From: Faisal Salman Date: Thu, 25 Mar 2021 00:00:30 +0700 Subject: [PATCH] Refine some OS detection --- src/ua-parser.js | 24 +++---- test/cpu-test.json | 8 +++ test/os-test.json | 155 +++++++++++++++++++++++++++++++++++++-------- 3 files changed, 148 insertions(+), 39 deletions(-) diff --git a/src/ua-parser.js b/src/ua-parser.js index 6b6f73a..0dd59e6 100755 --- a/src/ua-parser.js +++ b/src/ua-parser.js @@ -676,14 +676,16 @@ /(blackberry)\w*\/?([\w\.]*)/i, // Blackberry /(tizen|kaios)[\/\s]([\w\.]+)/i // Tizen/KaiOS ], [NAME, VERSION], [ - /\((bb)(10);/i // BlackBerry 10 - ], [[NAME, 'BlackBerry'], VERSION], [ - /(symbian\s?os|symbos|s60(?=;))[\/\s-]?([\w\.]*)/i // Symbian - ], [[NAME, 'Symbian'], VERSION], [ + /\(bb(10);/i // BlackBerry 10 + ], [VERSION, [NAME, 'BlackBerry']], [ + /(?:symbian\s?os|symbos|s60(?=;))[\/\s-]?([\w\.]*)/i // Symbian + ], [VERSION, [NAME, 'Symbian']], [ /\((series40);/i // Series 40 ], [NAME], [ /mozilla.+\(mobile;.+gecko.+firefox/i // Firefox OS - ], [[NAME, 'Firefox OS'], VERSION], [ + ], [[NAME, 'Firefox OS']], [ + /\bhpwos\/([\w\.]+)/i // WebOS + ], [VERSION, [NAME, 'WebOS']], [ // Google Chromecast /crkey\/([\d\.]+)/i // Google Chromecast @@ -694,9 +696,9 @@ /(xbox);\s+xbox\s([^\);]+)/i, // Microsoft Xbox (360, One, X, S, Series X, Series S) // GNU/Linux based - /(mint)[\/\s\(]?(\w*)/i, // Mint + /(mint)[\/\s\(\)]?(\w*)/i, // Mint /(mageia|vectorlinux)[;\s]/i, // Mageia/VectorLinux - /(joli|[kxln]?ubuntu|debian|suse|opensuse|gentoo|(?=\s)arch|slackware|fedora|mandriva|centos|pclinuxos|redhat|zenwalk|linpus)[\/\s-]?(?!chrom)([\w\.-]*)/i, + /(joli|[kxln]?ubuntu|debian|suse|opensuse|gentoo|arch(?=\slinux)|slackware|fedora|mandriva|centos|pclinuxos|redhat|zenwalk|linpus)(?:\sgnu\/linux)?(?:\slinux)?[\/\s-]?(?!chrom|package)([\w\.-]*)/i, // Joli/Ubuntu/Debian/SUSE/Gentoo/Arch/Slackware // Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus /(hurd|linux)\s?([\w\.]*)/i, // Hurd/Linux @@ -711,7 +713,7 @@ ], [[NAME, 'Solaris'], VERSION], [ // BSD based - /\s([frentopc-]{0,4}bsd|dragonfly)\s?([\w\.]*)/i // FreeBSD/NetBSD/OpenBSD/PC-BSD/DragonFly + /\s([frentopc-]{0,4}bsd|dragonfly)\s?(?!amd|[ix346]{1,2}86)([\w\.]*)/i // FreeBSD/NetBSD/OpenBSD/PC-BSD/DragonFly ], [NAME, VERSION],[ /(haiku)\s(\w+)/i // Haiku @@ -742,9 +744,9 @@ return new UAParser(ua, extensions).getResult(); } - var _ua; + var _ua = ua || ((typeof window !== 'undefined' && window.navigator && window.navigator.userAgent) ? window.navigator.userAgent : EMPTY); var _rgxmap = extensions ? util.extend(regexes, extensions) : regexes; - + this.getBrowser = function () { var _browser = { name: undefined, version: undefined }; mapper.rgx.call(_browser, _ua, _rgxmap.browser); @@ -788,7 +790,7 @@ _ua = ua.length > UA_MAX_LENGTH ? util.trim(ua, UA_MAX_LENGTH) : ua; return this; }; - this.setUA(ua || ((typeof window !== 'undefined' && window.navigator && window.navigator.userAgent) ? window.navigator.userAgent : EMPTY)); + this.setUA(_ua); return this; }; diff --git a/test/cpu-test.json b/test/cpu-test.json index a495ad1..b92cf52 100644 --- a/test/cpu-test.json +++ b/test/cpu-test.json @@ -135,6 +135,14 @@ "architecture" : "sparc" } }, + { + "desc" : "sparc64", + "ua" : "ELinks (0.4.3; NetBSD 3.0.2PATCH sparc64; 141x19)", + "expect" : + { + "architecture" : "sparc64" + } + }, { "desc" : "QuickTime", "ua" : "QuickTime/7.5.6 (qtver=7.5.6;cpu=IA32;os=Mac 10.5.8)", diff --git a/test/os-test.json b/test/os-test.json index ce6ec52..3c324a8 100644 --- a/test/os-test.json +++ b/test/os-test.json @@ -181,11 +181,11 @@ }, { "desc" : "WebOS", - "ua" : "", + "ua" : "Mozilla/5.0 (hp-tablet; Linux; hpwOS/3.0.5; U; en-US) AppleWebKit/534.6 (KHTML, like Gecko) wOSBrowser/234.83 Safari/534.6 TouchPad/1.0", "expect" : { - "name" : "", - "version" : "" + "name" : "WebOS", + "version" : "3.0.5" } }, { @@ -325,11 +325,29 @@ }, { "desc" : "Mint", - "ua" : "", + "ua" : "Opera/9.80 (X11; Linux x86_64; Edition Linux Mint) Presto/2.12.388 Version/12.16", "expect" : { - "name" : "", - "version" : "" + "name" : "Mint", + "version" : "undefined" + } + }, + { + "desc" : "Mint", + "ua" : "Opera/9.64 (X11; Linux i686; U; Linux Mint; nb) Presto/2.1.1", + "expect" : + { + "name" : "Mint", + "version" : "undefined" + } + }, + { + "desc" : "Mint", + "ua" : "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.5) Gecko/2008121622 Linux Mint/6 (Felicia) Firefox/3.0.4", + "expect" : + { + "name" : "Mint", + "version" : "6" } }, { @@ -360,21 +378,75 @@ } }, { - "desc" : "Debian", - "ua" : "", + "desc" : "Kubuntu", + "ua" : "Mozilla/5.0 (compatible; Konqueror/4.4; Linux 2.6.32-22-generic; X11; en_US) KHTML/4.4.3 (like Gecko) Kubuntu", "expect" : { - "name" : "", - "version" : "" + "name" : "Kubuntu", + "version" : "undefined" + } + }, + { + "desc" : "Debian", + "ua" : "Mozilla/5.0 (compatible; Konqueror/3.5; Linux) KHTML/3.5.7 (like Gecko) (Debian)", + "expect" : + { + "name" : "Debian", + "version" : "undefined" + } + }, + { + "desc" : "Debian", + "ua" : "Mozilla/5.0 (X11; Linux x86_64; Debian GNU/Linux 8.1 (jessie)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.0 Maxthon/1.0.5.3 Safari/537.36", + "expect" : + { + "name" : "Debian", + "version" : "8.1" + } + }, + { + "desc" : "Debian", + "ua" : "ELinks/0.12~pre5-4 (textmode; Debian; Linux 3.2.0-4-amd64 x86_64 192x47-2)", + "expect" : + { + "name" : "Debian", + "version" : "undefined" + } + }, + { + "desc" : "Debian", + "ua" : "w3m/0.5.3+debian-19", + "expect" : + { + "name" : "debian", + "version" : "19" + } + }, + { + "desc" : "Debian", + "ua" : "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.3) Gecko/2008092814 (Debian-3.0.1-1)", + "expect" : + { + "name" : "Debian", + "version" : "3.0.1-1" + } + }, + { + "desc" : "Debian", + "ua" : "Mozilla/5.0 (compatible; Konqueror/3.5; Linux 2.6.24.4; X11) KHTML/3.5.9 (like Gecko) (Debian package 4:3.5.9.dfsg.1-2+b1)", + "expect" : + { + "name" : "Debian", + "version" : "undefined" } }, { "desc" : "OpenSUSE", - "ua" : "", + "ua" : "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.17) Gecko/20110420 SUSE/3.6.17-0.2.1 Firefox/3.6.17", "expect" : { - "name" : "", - "version" : "" + "name" : "SUSE", + "version" : "3.6.17-0.2.1" } }, { @@ -388,11 +460,11 @@ }, { "desc" : "Arch", - "ua" : "", + "ua" : "Uzbl (Webkit 1.1.10) (Arch Linux)", "expect" : { - "name" : "", - "version" : "" + "name" : "Arch", + "version" : "undefined" } }, { @@ -406,11 +478,29 @@ }, { "desc" : "Fedora", - "ua" : "", + "ua" : "Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:40.0) Gecko/20100101 Firefox/40.0", "expect" : { - "name" : "", - "version" : "" + "name" : "Fedora", + "version" : "undefined" + } + }, + { + "desc" : "Fedora", + "ua" : "Mozilla/5.0 (X11; U; Linux i686; en-GB; rv:2.0) Gecko/20110404 Fedora/16-dev Firefox/4.0", + "expect" : + { + "name" : "Fedora", + "version" : "16-dev" + } + }, + { + "desc" : "Fedora", + "ua" : "Mozilla/5.0 (X11; U; Linux i686; sk; rv:1.9.0.4) Gecko/2008111217 Fedora/3.0.4-1.fc10 Firefox/3.0.4", + "expect" : + { + "name" : "Fedora", + "version" : "3.0.4-1.fc10" } }, { @@ -514,29 +604,29 @@ }, { "desc" : "FreeBSD", - "ua" : "", + "ua" : "Mozilla/5.0 (X11; U; FreeBSD x86_64; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16", "expect" : { - "name" : "", - "version" : "" + "name" : "FreeBSD", + "version" : "undefined" } }, { "desc" : "OpenBSD", - "ua" : "", + "ua" : "Mozilla/5.0 (X11; U; OpenBSD i386; en-US; rv:1.9.1) Gecko/20090702 Firefox/3.5", "expect" : { - "name" : "", - "version" : "" + "name" : "OpenBSD", + "version" : "undefined" } }, { "desc" : "NetBSD", - "ua" : "", + "ua" : "ELinks (0.4.3; NetBSD 3.0.2PATCH sparc64; 141x19)", "expect" : { - "name" : "", - "version" : "" + "name" : "NetBSD", + "version" : "3.0.2PATCH" } }, { @@ -709,5 +799,14 @@ "name" : "Android", "version" : "4.2.1" } + }, + { + "desc" : "Solaris", + "ua" : "NCSA Mosaic/1.0 (X11;SunOS 4.1.4 sun4m)", + "expect" : + { + "name" : "Solaris", + "version" : "4.1.4" + } } ]