Compare commits

..

5 Commits

Author SHA1 Message Date
Faisal Salman
e9c651dbd6 Merge branch 'master' into gpu-detect-experimental 2019-06-08 22:13:47 +07:00
Faisal Salman
b0cf91aa4f Untested: use at your own risk 2018-12-10 02:51:31 +07:00
Faisal Salman
860189d048 Update readme: mention setRenderer() 2018-12-10 02:46:50 +07:00
Faisal Salman
437d05a653 Update readme to include getGPU() method 2018-12-10 02:35:58 +07:00
Faisal Salman
b29e74d61c Experimental: GPU detection #322 2018-12-09 14:48:11 +07:00
13 changed files with 187 additions and 180 deletions

View File

@@ -1,6 +1,6 @@
{ {
"name": "ua-parser-js", "name": "ua-parser-js",
"version": "0.7.21", "version": "0.7.20",
"authors": [ "authors": [
"Faisal Salman <f@faisalman.com>" "Faisal Salman <f@faisalman.com>"
], ],

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,6 +1,6 @@
Package.describe({ Package.describe({
name: 'faisalman:ua-parser-js', name: 'faisalman:ua-parser-js',
version: '0.7.21', version: '0.7.20',
summary: 'Lightweight JavaScript-based user-agent string parser', summary: 'Lightweight JavaScript-based user-agent string parser',
git: 'https://github.com/faisalman/ua-parser-js.git', git: 'https://github.com/faisalman/ua-parser-js.git',
documentation: 'readme.md' documentation: 'readme.md'

View File

@@ -1,7 +1,7 @@
{ {
"title": "UAParser.js", "title": "UAParser.js",
"name": "ua-parser-js", "name": "ua-parser-js",
"version": "0.7.21", "version": "0.7.20",
"author": "Faisal Salman <f@faisalman.com> (http://faisalman.com)", "author": "Faisal Salman <f@faisalman.com> (http://faisalman.com)",
"description": "Lightweight JavaScript-based user-agent string parser", "description": "Lightweight JavaScript-based user-agent string parser",
"keywords": [ "keywords": [

View File

@@ -18,7 +18,7 @@
* returns new instance * returns new instance
* `UAParser([uastring][,extensions])` * `UAParser([uastring][,extensions])`
* returns result object `{ ua: '', browser: {}, cpu: {}, device: {}, engine: {}, os: {} }` * returns result object `{ ua: '', browser: {}, cpu: {}, device: {}, engine: {}, gpu: {}, os: {} }`
# Methods # Methods
@@ -27,20 +27,19 @@
```sh ```sh
# Possible 'browser.name': # Possible 'browser.name':
2345Explorer, 360 Browser, Amaya, Android Browser, Arora, Avant, Avast, AVG, 2345Explorer, Amaya, Android Browser, Arora, Avant, BIDUBrowser, Baidu,
BIDUBrowser, Baidu, Basilisk, Blazer, Bolt, Brave, Bowser, Camino, Chimera, Basilisk, Blazer, Bolt, Bowser, Camino, Chimera, Chrome Headless,
Chrome Headless, Chrome WebView, Chrome, Chromium, Comodo Dragon, Dillo, Chrome WebView, Chrome, Chromium, Comodo Dragon, Dillo, Dolphin, Doris, Edge,
Dolphin, Doris, Edge, Epiphany, Facebook, Falkon, Fennec, Firebird, Firefox, Epiphany, Facebook, Falkon, Fennec, Firebird, Firefox, Flock, GSA, GoBrowser,
Flock, GSA, GoBrowser, ICE Browser, IE, IEMobile, IceApe, IceCat, IceDragon, ICE Browser, IE, IEMobile, IceApe, IceCat, IceDragon, Iceape, Iceweasel,
Iceape, Iceweasel, Iridium, Iron, Jasmine, K-Meleon, Kindle, Konqueror, Iridium, Iron, Jasmine, K-Meleon, Kindle, Konqueror, LBBROWSER Line, Links,
LBBROWSER Line, Links, Lunascape, Lynx, MIUI Browser, Maemo Browser, Maemo, Lunascape, Lynx, MIUI Browser, Maemo Browser, Maemo, Maxthon, MetaSr Midori,
Maxthon, MetaSr Midori, Minimo, Mobile Safari, Mosaic, Mozilla, NetFront, Minimo, Mobile Safari, Mosaic, Mozilla, NetFront, NetSurf, Netfront, Netscape,
NetSurf, Netfront, Netscape, NokiaBrowser, Oculus Browser, OmniWeb, NokiaBrowser, Oculus Browser, OmniWeb, Opera Coast, Opera Mini, Opera Mobi,
Opera Coast, Opera Mini, Opera Mobi, Opera Tablet, Opera, PaleMoon, PhantomJS, Opera Tablet, Opera, PaleMoon, PhantomJS, Phoenix, Polaris, Puffin, QQ,
Phoenix, Polaris, Puffin, QQ, QQBrowser, QQBrowserLite, Quark, QupZilla, QQBrowser, QQBrowserLite, Quark, QupZilla, RockMelt, Safari, Samsung Browser,
RockMelt, Safari, Sailfish Browser, Samsung Browser, SeaMonkey, Silk, Skyfire, SeaMonkey, Silk, Skyfire, Sleipnir, Slim, SlimBrowser, Swiftfox, Tizen Browser,
Sleipnir, Slim, SlimBrowser, Swiftfox, Tizen Browser, UCBrowser, Vivaldi, UCBrowser, Vivaldi, Waterfox, WeChat, Yandex, baidu, iCab, w3m, ...
Waterfox, WeChat, Yandex, baidu, iCab, w3m, ...
# 'browser.version' determined dynamically # 'browser.version' determined dynamically
``` ```
@@ -66,8 +65,8 @@ RIM, Samsung, Sharp, Siemens, Sony[Ericsson], Sprint, Xbox, Xiaomi, ZTE, ...
```sh ```sh
# Possible 'engine.name' # Possible 'engine.name'
Amaya, Blink, EdgeHTML, Gecko, Goanna, iCab, KHTML, Links, Lynx, NetFront, Amaya, Blink, EdgeHTML, Gecko, Goanna, iCab, KHTML, Links, Lynx, NetFront, NetSurf,
NetSurf, Presto, Tasman, Trident, w3m, WebKit Presto, Tasman, Trident, w3m, WebKit
# 'engine.version' determined dynamically # 'engine.version' determined dynamically
``` ```
@@ -77,13 +76,12 @@ NetSurf, Presto, Tasman, Trident, w3m, WebKit
```sh ```sh
# Possible 'os.name' # Possible 'os.name'
AIX, Amiga OS, Android, Arch, Bada, BeOS, BlackBerry, CentOS, Chromium OS, AIX, Amiga OS, Android, Arch, Bada, BeOS, BlackBerry, CentOS, Chromium OS, Contiki,
Contiki, Fedora, Firefox OS, FreeBSD, Debian, DragonFly, Fuchsia, Gentoo, GNU, Fedora, Firefox OS, FreeBSD, Debian, DragonFly, Fuchsia, Gentoo, GNU, Haiku, Hurd, iOS,
Haiku, Hurd, iOS, Joli, KaiOS, Linpus, Linux, Mac OS, Mageia, Mandriva, MeeGo, Joli, Linpus, Linux, Mac OS, Mageia, Mandriva, MeeGo, Minix, Mint, Morph OS, NetBSD,
Minix, Mint, Morph OS, NetBSD, Nintendo, OpenBSD, OpenVMS, OS/2, Palm, PC-BSD, Nintendo, OpenBSD, OpenVMS, OS/2, Palm, PC-BSD, PCLinuxOS, Plan9, Playstation, QNX, RedHat,
PCLinuxOS, Plan9, Playstation, QNX, RedHat, RIM Tablet OS, RISC OS, Sailfish, RIM Tablet OS, RISC OS, Sailfish, Series40, Slackware, Solaris, SUSE, Symbian, Tizen,
Series40, Slackware, Solaris, SUSE, Symbian, Tizen, Ubuntu, Unix, VectorLinux, Ubuntu, Unix, VectorLinux, WebOS, Windows [Phone/Mobile], Zenwalk, ...
WebOS, Windows [Phone/Mobile], Zenwalk, ...
# 'os.version' determined dynamically # 'os.version' determined dynamically
``` ```
@@ -96,12 +94,26 @@ WebOS, Windows [Phone/Mobile], Zenwalk, ...
68k, amd64, arm[64], avr, ia[32/64], irix[64], mips[64], pa-risc, ppc, sparc[64] 68k, amd64, arm[64], avr, ia[32/64], irix[64], mips[64], pa-risc, ppc, sparc[64]
``` ```
* `getGPU()`
* returns `{ vendor: '', model: '' }`
```sh
# Possible 'gpu.vendor'
ATI, Intel, NVIDIA, Qualcomm, SiS
# 'gpu.model' determined dynamically
```
* `getResult()` * `getResult()`
* returns `{ ua: '', browser: {}, cpu: {}, device: {}, engine: {}, os: {} }` * returns `{ ua: '', browser: {}, cpu: {}, device: {}, engine: {}, os: {} }`
* `getUA()` * `getUA()`
* returns UA string of current instance * returns UA string of current instance
* `setRenderer(rendererstr)`
* set Renderer string to parse
* returns current instance
* `setUA(uastring)` * `setUA(uastring)`
* set UA string to parse * set UA string to parse
* returns current instance * returns current instance
@@ -143,6 +155,10 @@ WebOS, Windows [Phone/Mobile], Zenwalk, ...
}, },
cpu: { cpu: {
architecture: "" architecture: ""
},
gpu: {
vendor: "",
model: ""
} }
} }
*/ */

View File

@@ -1,5 +1,5 @@
/*! /*!
* UAParser.js v0.7.21 * UAParser.js v0.7.20
* Lightweight JavaScript-based User-Agent string parser * Lightweight JavaScript-based User-Agent string parser
* https://github.com/faisalman/ua-parser-js * https://github.com/faisalman/ua-parser-js
* *
@@ -16,7 +16,7 @@
///////////// /////////////
var LIBVERSION = '0.7.21', var LIBVERSION = '0.7.20',
EMPTY = '', EMPTY = '',
UNKNOWN = '?', UNKNOWN = '?',
FUNC_TYPE = 'function', FUNC_TYPE = 'function',
@@ -237,10 +237,10 @@
/(kindle)\/([\w\.]+)/i, // Kindle /(kindle)\/([\w\.]+)/i, // Kindle
/(lunascape|maxthon|netfront|jasmine|blazer)[\/\s]?([\w\.]*)/i, /(lunascape|maxthon|netfront|jasmine|blazer)[\/\s]?([\w\.]*)/i,
// Lunascape/Maxthon/Netfront/Jasmine/Blazer // Lunascape/Maxthon/Netfront/Jasmine/Blazer
// Trident based // Trident based
/(avant\s|iemobile|slim)(?:browser)?[\/\s]?([\w\.]*)/i, /(avant\s|iemobile|slim|baidu)(?:browser)?[\/\s]?([\w\.]*)/i,
// Avant/IEMobile/SlimBrowser // Avant/IEMobile/SlimBrowser/Baidu
/(bidubrowser|baidubrowser)[\/\s]?([\w\.]+)/i, // Baidu Browser
/(?:ms|\()(ie)\s([\w\.]+)/i, // Internet Explorer /(?:ms|\()(ie)\s([\w\.]+)/i, // Internet Explorer
// Webkit/KHTML based // Webkit/KHTML based
@@ -261,12 +261,6 @@
/(yabrowser)\/([\w\.]+)/i // Yandex /(yabrowser)\/([\w\.]+)/i // Yandex
], [[NAME, 'Yandex'], VERSION], [ ], [[NAME, 'Yandex'], VERSION], [
/(Avast)\/([\w\.]+)/i // Avast Secure Browser
], [[NAME, 'Avast Secure Browser'], VERSION], [
/(AVG)\/([\w\.]+)/i // AVG Secure Browser
], [[NAME, 'AVG Secure Browser'], VERSION], [
/(puffin)\/([\w\.]+)/i // Puffin /(puffin)\/([\w\.]+)/i // Puffin
], [[NAME, 'Puffin'], VERSION], [ ], [[NAME, 'Puffin'], VERSION], [
@@ -288,7 +282,7 @@
/(micromessenger)\/([\w\.]+)/i // WeChat /(micromessenger)\/([\w\.]+)/i // WeChat
], [[NAME, 'WeChat'], VERSION], [ ], [[NAME, 'WeChat'], VERSION], [
/(brave)\/([\w\.]+)/i // Brave browser /(brave)\/([\w\.]+)/i // Brave browser
], [[NAME, 'Brave'], VERSION], [ ], [[NAME, 'Brave'], VERSION], [
/(qqbrowserlite)\/([\w\.]+)/i // QQBrowserLite /(qqbrowserlite)\/([\w\.]+)/i // QQBrowserLite
@@ -300,7 +294,7 @@
/m?(qqbrowser)[\/\s]?([\w\.]+)/i // QQBrowser /m?(qqbrowser)[\/\s]?([\w\.]+)/i // QQBrowser
], [NAME, VERSION], [ ], [NAME, VERSION], [
/(baiduboxapp)[\/\s]?([\w\.]+)/i // Baidu App /(BIDUBrowser)[\/\s]?([\w\.]+)/i // Baidu Browser
], [NAME, VERSION], [ ], [NAME, VERSION], [
/(2345Explorer)[\/\s]?([\w\.]+)/i // 2345 Browser /(2345Explorer)[\/\s]?([\w\.]+)/i // 2345 Browser
@@ -309,7 +303,7 @@
/(MetaSr)[\/\s]?([\w\.]+)/i // SouGouBrowser /(MetaSr)[\/\s]?([\w\.]+)/i // SouGouBrowser
], [NAME], [ ], [NAME], [
/(LBBROWSER)/i // LieBao Browser /(LBBROWSER)/i // LieBao Browser
], [NAME], [ ], [NAME], [
/xiaomi\/miuibrowser\/([\w\.]+)/i // MIUI Browser /xiaomi\/miuibrowser\/([\w\.]+)/i // MIUI Browser
@@ -344,9 +338,6 @@
/(dolfin)\/([\w\.]+)/i // Dolphin /(dolfin)\/([\w\.]+)/i // Dolphin
], [[NAME, 'Dolphin'], VERSION], [ ], [[NAME, 'Dolphin'], VERSION], [
/(qihu|qhbrowser|qihoobrowser|360browser)/i // 360
], [[NAME, '360 Browser']], [
/((?:android.+)crmo|crios)\/([\w\.]+)/i // Chrome for Android/iOS /((?:android.+)crmo|crios)\/([\w\.]+)/i // Chrome for Android/iOS
], [[NAME, 'Chrome'], VERSION], [ ], [[NAME, 'Chrome'], VERSION], [
@@ -427,7 +418,7 @@
], [MODEL, [VENDOR, 'Apple'], [TYPE, TABLET]], [ ], [MODEL, [VENDOR, 'Apple'], [TYPE, TABLET]], [
/(apple\s{0,1}tv)/i // Apple TV /(apple\s{0,1}tv)/i // Apple TV
], [[MODEL, 'Apple TV'], [VENDOR, 'Apple'], [TYPE, SMARTTV]], [ ], [[MODEL, 'Apple TV'], [VENDOR, 'Apple']], [
/(archos)\s(gamepad2?)/i, // Archos /(archos)\s(gamepad2?)/i, // Archos
/(hp).+(touchpad)/i, // HP TouchPad /(hp).+(touchpad)/i, // HP TouchPad
@@ -490,12 +481,9 @@
], [MODEL, [VENDOR, 'HTC'], [TYPE, TABLET]], [ ], [MODEL, [VENDOR, 'HTC'], [TYPE, TABLET]], [
/d\/huawei([\w\s-]+)[;\)]/i, /d\/huawei([\w\s-]+)[;\)]/i,
/(nexus\s6p|vog-l29|ane-lx1|eml-l29)/i // Huawei /(nexus\s6p)/i // Huawei
], [MODEL, [VENDOR, 'Huawei'], [TYPE, MOBILE]], [ ], [MODEL, [VENDOR, 'Huawei'], [TYPE, MOBILE]], [
/android.+(bah2?-a?[lw]\d{2})/i // Huawei MediaPad
], [MODEL, [VENDOR, 'Huawei'], [TYPE, TABLET]], [
/(microsoft);\s(lumia[\s\w]+)/i // Microsoft Lumia /(microsoft);\s(lumia[\s\w]+)/i // Microsoft Lumia
], [VENDOR, MODEL, [TYPE, MOBILE]], [ ], [VENDOR, MODEL, [TYPE, MOBILE]], [
@@ -570,7 +558,7 @@
], [VENDOR, MODEL, [TYPE, MOBILE]], [ ], [VENDOR, MODEL, [TYPE, MOBILE]], [
/crkey/i // Google Chromecast /crkey/i // Google Chromecast
], [[MODEL, 'Chromecast'], [VENDOR, 'Google'], [TYPE, SMARTTV]], [ ], [[MODEL, 'Chromecast'], [VENDOR, 'Google']], [
/android.+;\s(glass)\s\d/i // Google Glass /android.+;\s(glass)\s\d/i // Google Glass
], [MODEL, [VENDOR, 'Google'], [TYPE, WEARABLE]], [ ], [MODEL, [VENDOR, 'Google'], [TYPE, WEARABLE]], [
@@ -595,7 +583,7 @@
], [[VENDOR, 'Meizu'], MODEL, [TYPE, MOBILE]], [ ], [[VENDOR, 'Meizu'], MODEL, [TYPE, MOBILE]], [
/android.+a000(1)\s+build/i, // OnePlus /android.+a000(1)\s+build/i, // OnePlus
/android.+oneplus\s(a\d{4})[\s)]/i /android.+oneplus\s(a\d{4})\s+build/i
], [MODEL, [VENDOR, 'OnePlus'], [TYPE, MOBILE]], [ ], [MODEL, [VENDOR, 'OnePlus'], [TYPE, MOBILE]], [
/android.+[;\/]\s*(RCT[\d\w]+)\s+build/i // RCA Tablets /android.+[;\/]\s*(RCT[\d\w]+)\s+build/i // RCA Tablets
@@ -681,8 +669,8 @@
/windows.+\sedge\/([\w\.]+)/i // EdgeHTML /windows.+\sedge\/([\w\.]+)/i // EdgeHTML
], [VERSION, [NAME, 'EdgeHTML']], [ ], [VERSION, [NAME, 'EdgeHTML']], [
/webkit\/537\.36.+chrome\/(?!27)([\w\.]+)/i // Blink /webkit\/537\.36.+chrome\/(?!27)/i // Blink
], [VERSION, [NAME, 'Blink']], [ ], [[NAME, 'Blink']], [
/(presto)\/([\w\.]+)/i, // Presto /(presto)\/([\w\.]+)/i, // Presto
/(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\/([\w\.]+)/i, /(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\/([\w\.]+)/i,
@@ -695,6 +683,20 @@
], [VERSION, NAME] ], [VERSION, NAME]
], ],
gpu : [[
/(intel).*\b(hd\sgraphics\s\d{4}|iris(?:\spro)|gma\s\w+)/i, // Intel
/(nvidia)\s(geforce\s(?:gtx?\s)\d\w+|quadro)/i, // NVIDIA
/(sis)\s(\w+)/i // SiS
], [VENDOR, MODEL], [
/\b(radeon\shd\s\w{4,5})/i // ATI
], [MODEL, [VENDOR, 'ATI']], [
/(adreno\s(?:\(TM\)\s)\w+)/i // Qualcomm
], [[MODEL, /\(TM\)\s/, ''], [VENDOR, 'Qualcomm']]
],
os : [[ os : [[
// Windows based // Windows based
@@ -711,7 +713,7 @@
/\((bb)(10);/i // BlackBerry 10 /\((bb)(10);/i // BlackBerry 10
], [[NAME, 'BlackBerry'], VERSION], [ ], [[NAME, 'BlackBerry'], VERSION], [
/(blackberry)\w*\/?([\w\.]*)/i, // Blackberry /(blackberry)\w*\/?([\w\.]*)/i, // Blackberry
/(tizen|kaios)[\/\s]([\w\.]+)/i, // Tizen/KaiOS /(tizen)[\/\s]([\w\.]+)/i, // Tizen
/(android|webos|palm\sos|qnx|bada|rim\stablet\sos|meego|sailfish|contiki)[\/\s-]?([\w\.]*)/i /(android|webos|palm\sos|qnx|bada|rim\stablet\sos|meego|sailfish|contiki)[\/\s-]?([\w\.]*)/i
// Android/WebOS/Palm/QNX/Bada/RIM/MeeGo/Contiki/Sailfish OS // Android/WebOS/Palm/QNX/Bada/RIM/MeeGo/Contiki/Sailfish OS
], [NAME, VERSION], [ ], [NAME, VERSION], [
@@ -785,6 +787,14 @@
var ua = uastring || ((window && window.navigator && window.navigator.userAgent) ? window.navigator.userAgent : EMPTY); var ua = uastring || ((window && window.navigator && window.navigator.userAgent) ? window.navigator.userAgent : EMPTY);
var rgxmap = extensions ? util.extend(regexes, extensions) : regexes; var rgxmap = extensions ? util.extend(regexes, extensions) : regexes;
var renderer;
// browser only
if (window && window.document) {
var canvas = document.createElement('canvas');
var gl = canvas.getContext ? canvas.getContext('webgl2') || canvas.getContext('webgl') || canvas.getContext('experimental-webgl') : undefined;
renderer = gl && gl.getParameter && gl.getExtension && gl.getExtension('WEBGL_debug_renderer_info') ? gl.getParameter(gl.getExtension('WEBGL_debug_renderer_info').UNMASKED_RENDERER_WEBGL) : undefined;
}
this.getBrowser = function () { this.getBrowser = function () {
var browser = { name: undefined, version: undefined }; var browser = { name: undefined, version: undefined };
mapper.rgx.call(browser, ua, rgxmap.browser); mapper.rgx.call(browser, ua, rgxmap.browser);
@@ -806,6 +816,13 @@
mapper.rgx.call(engine, ua, rgxmap.engine); mapper.rgx.call(engine, ua, rgxmap.engine);
return engine; return engine;
}; };
this.getGPU = function () {
var gpu = { vendor: undefined, model: undefined };
if (renderer) {
mapper.rgx.call(gpu, renderer, rgxmap.gpu);
}
return gpu;
};
this.getOS = function () { this.getOS = function () {
var os = { name: undefined, version: undefined }; var os = { name: undefined, version: undefined };
mapper.rgx.call(os, ua, rgxmap.os); mapper.rgx.call(os, ua, rgxmap.os);
@@ -818,12 +835,17 @@
engine : this.getEngine(), engine : this.getEngine(),
os : this.getOS(), os : this.getOS(),
device : this.getDevice(), device : this.getDevice(),
cpu : this.getCPU() cpu : this.getCPU(),
gpu : this.getGPU()
}; };
}; };
this.getUA = function () { this.getUA = function () {
return ua; return ua;
}; };
this.setRenderer = function (rendererstr) {
renderer = rendererstr;
return this;
};
this.setUA = function (uastring) { this.setUA = function (uastring) {
ua = uastring; ua = uastring;
return this; return this;
@@ -840,6 +862,10 @@
UAParser.CPU = { UAParser.CPU = {
ARCHITECTURE : ARCHITECTURE ARCHITECTURE : ARCHITECTURE
}; };
UAParser.GPU = {
MODEL : MODEL,
VENDOR : VENDOR
};
UAParser.DEVICE = { UAParser.DEVICE = {
MODEL : MODEL, MODEL : MODEL,
VENDOR : VENDOR, VENDOR : VENDOR,
@@ -890,7 +916,7 @@
// jQuery always exports to global scope, unless jQuery.noConflict(true) is used, // jQuery always exports to global scope, unless jQuery.noConflict(true) is used,
// and we should catch that. // and we should catch that.
var $ = window && (window.jQuery || window.Zepto); var $ = window && (window.jQuery || window.Zepto);
if ($ && !$.ua) { if (typeof $ !== UNDEF_TYPE && !$.ua) {
var parser = new UAParser(); var parser = new UAParser();
$.ua = parser.getResult(); $.ua = parser.getResult();
$.ua.get = function () { $.ua.get = function () {

View File

@@ -1,14 +1,4 @@
[ [
{
"desc" : "360 Browser on iOS",
"ua" : "Mozilla/5.0 (iPhone; CPU iPhone OS 12_4_1 like Mac OS X) AppleWebKit/607.3.9 (KHTML, like Gecko) Mobile/16G102 QHBrowser/317 QihooBrowser/4.0.10",
"expect" :
{
"name" : "360 Browser",
"version" : "undefined",
"major" : "undefined"
}
},
{ {
"desc" : "Android Browser on Galaxy Nexus", "desc" : "Android Browser on Galaxy Nexus",
"ua" : "Mozilla/5.0 (Linux; U; Android 4.0.2; en-us; Galaxy Nexus Build/ICL53F) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30", "ua" : "Mozilla/5.0 (Linux; U; Android 4.0.2; en-us; Galaxy Nexus Build/ICL53F) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30",
@@ -99,32 +89,12 @@
"major" : "undefined" "major" : "undefined"
} }
}, },
{
"desc" : "Avast Secure Browser",
"ua" : "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36 Avast/72.0.1174.122",
"expect" :
{
"name" : "Avast Secure Browser",
"version" : "72.0.1174.122",
"major" : "72"
}
},
{
"desc" : "AVG Secure Browser",
"ua" : "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36 AVG/72.0.719.123",
"expect" :
{
"name" : "AVG Secure Browser",
"version" : "72.0.719.123",
"major" : "72"
}
},
{ {
"desc" : "Baidu", "desc" : "Baidu",
"ua" : "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; baidubrowser 1.x)", "ua" : "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; baidubrowser 1.x)",
"expect" : "expect" :
{ {
"name" : "baidubrowser", "name" : "baidu",
"version" : "1.x", "version" : "1.x",
"major" : "1" "major" : "1"
} }
@@ -1138,26 +1108,6 @@
"major" : "6" "major" : "6"
} }
}, },
{
"desc" : "baidu app on iOS",
"ua" : "Mozilla/5.0 (iPhone; CPU iPhone OS 12_1_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/16C101 main%2F1.0 baiduboxapp/11.12.0.18 (Baidu; P2 12.1.2)",
"expect" :
{
"name" : "baiduboxapp",
"version" : "11.12.0.18",
"major" : "11"
}
},
{
"desc" : "baidu app on Android",
"ua" : "Mozilla/5.0 (Linux; Android 8.1.0; BKK-AL10 Build/HONORBKK-AL10; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/63.0.3239.83 Mobile Safari/537.36 T7/11.11 baiduboxapp/11.11.0.0 (Baidu; P1 8.1.0)",
"expect" :
{
"name" : "baiduboxapp",
"version" : "11.11.0.0",
"major" : "11"
}
},
{ {
"desc" : "WeChat Desktop for Windows Built-in Browser", "desc" : "WeChat Desktop for Windows Built-in Browser",
"ua" : "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 MicroMessenger/6.5.2.501 NetType/WIFI WindowsWechat QBCore/3.43.901.400 QQBrowser/9.0.2524.400", "ua" : "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 MicroMessenger/6.5.2.501 NetType/WIFI WindowsWechat QBCore/3.43.901.400 QQBrowser/9.0.2524.400",

View File

@@ -279,24 +279,6 @@
"type": "mobile" "type": "mobile"
} }
}, },
{
"desc": "OnePlus 6",
"ua": "Mozilla/5.0 (Linux; Android 9; ONEPLUS A6003) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.89 Mobile Safari/537.36",
"expect": {
"vendor": "OnePlus",
"model": "A6003",
"type": "mobile"
}
},
{
"desc": "OnePlus 6T",
"ua": "Mozilla/5.0 (Linux; Android 9; ONEPLUS A6010) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.96 Mobile Safari/537.36",
"expect": {
"vendor": "OnePlus",
"model": "A6010",
"type": "mobile"
}
},
{ {
"desc": "OPPO R7s", "desc": "OPPO R7s",
"ua": "Mozilla/5.0 (Linux; U; Android 4.4.4; zh-cn; OPPO R7s Build/KTU84P) AppleWebKit/537.36 (KHTML, like Gecko)Version/4.0 Chrome/37.0.0.0 MQQBrowser/7.1 Mobile Safari/537.36", "ua": "Mozilla/5.0 (Linux; U; Android 4.4.4; zh-cn; OPPO R7s Build/KTU84P) AppleWebKit/537.36 (KHTML, like Gecko)Version/4.0 Chrome/37.0.0.0 MQQBrowser/7.1 Mobile Safari/537.36",
@@ -653,8 +635,7 @@
"ua": "Mozilla/5.0 (X11; Linux armv7l) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.84 Safari/537.36 CrKey/1.22.79313", "ua": "Mozilla/5.0 (X11; Linux armv7l) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.84 Safari/537.36 CrKey/1.22.79313",
"expect": { "expect": {
"vendor": "Google", "vendor": "Google",
"model": "Chromecast", "model": "Chromecast"
"type": "smarttv"
} }
}, },
{ {
@@ -1060,41 +1041,5 @@
"model": "MI PAD 2", "model": "MI PAD 2",
"type": "tablet" "type": "tablet"
} }
}, }
{
"desc": "HUAWEI MediaPad M3 Lite 10",
"ua": "Mozilla/5.0 (Linux; Android 7.0; BAH-L09) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.80 Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "BAH-L09",
"type": "tablet"
}
},
{
"desc": "Huawei P30 Pro",
"ua": "Mozilla/5.0 (Linux; Android 9; VOG-L29) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.143 Mobile Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "VOG-L29",
"type": "mobile"
}
},
{
"desc": "Huawei P20 Lite",
"ua": "Mozilla/5.0 (Linux; Android 8.0.0; ANE-LX1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.143 Mobile Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "ANE-LX1",
"type": "mobile"
}
},
{
"desc": "Huawei P20",
"ua": "Mozilla/5.0 (Linux; Android 8.1.0; EML-L29) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.157 Mobile Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "EML-L29",
"type": "mobile"
}
}
] ]

View File

@@ -5,7 +5,7 @@
"expect" : "expect" :
{ {
"name" : "Blink", "name" : "Blink",
"version" : "57.0.2987.146" "version" : "undefined"
} }
}, },
{ {

56
test/gpu-test.json Normal file
View File

@@ -0,0 +1,56 @@
[
{
"desc" : "Intel",
"renderer": "Intel HD Graphics 4000 OpenGL Engine",
"expect" :
{
"vendor" : "Intel",
"model" : "HD Graphics 4000"
}
},
{
"desc" : "Intel",
"renderer": "Intel Iris Pro OpenGL Engine",
"expect" :
{
"vendor" : "Intel",
"model" : "Iris Pro"
}
},
{
"desc" : "Intel",
"renderer": "Intel GMA X3100 OpenGL Engine",
"expect" :
{
"vendor" : "Intel",
"model" : "GMA X3100"
}
},
{
"desc" : "ATI",
"renderer": "ATI Radeon HD 6750M OpenGL Engine",
"expect" :
{
"vendor" : "ATI",
"model" : "Radeon HD 6750M"
}
},
{
"desc" : "NVIDIA",
"renderer": "NVIDIA GeForce GT 650M OpenGL Engine",
"expect" :
{
"vendor" : "NVIDIA",
"model" : "GeForce GT 650M"
}
},
{
"desc" : "Qualcomm",
"renderer": "Adreno (TM) 320",
"expect" :
{
"vendor" : "Qualcomm",
"model" : "Adreno 320"
}
}
]

View File

@@ -548,15 +548,6 @@
"version" : "R1" "version" : "R1"
} }
}, },
{
"desc" : "KaiOS",
"ua" : "Mozilla/5.0 (Mobile; Nokia_8110_4G; rv:48.0) Gecko/48.0 Firefox/48.0 KAIOS/2.5",
"expect" :
{
"name" : "KAIOS",
"version" : "2.5"
}
},
{ {
"desc" : "AIX", "desc" : "AIX",
"ua" : "", "ua" : "",

View File

@@ -5,6 +5,7 @@ var browsers = require('./browser-test.json');
var cpus = require('./cpu-test.json'); var cpus = require('./cpu-test.json');
var devices = require('./device-test.json'); var devices = require('./device-test.json');
var engines = require('./engine-test.json'); var engines = require('./engine-test.json');
var gpus = require('./gpu-test.json');
var os = require('./os-test.json'); var os = require('./os-test.json');
var parser = new UAParser(); var parser = new UAParser();
var methods = [ var methods = [
@@ -32,6 +33,12 @@ var methods = [
list : engines, list : engines,
properties : ['name', 'version'] properties : ['name', 'version']
}, },
{
title : 'getGPU',
label : 'gpu',
list : gpus,
properties : ['model', 'vendor']
},
{ {
title : 'getOS', title : 'getOS',
label : 'os', label : 'os',
@@ -43,7 +50,7 @@ describe('UAParser()', function () {
var ua = 'Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6'; var ua = 'Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6';
assert.deepEqual(UAParser(ua), new UAParser().setUA(ua).getResult()); assert.deepEqual(UAParser(ua), new UAParser().setUA(ua).getResult());
}); });
/*
for (var i in methods) { for (var i in methods) {
describe(methods[i]['title'], function () { describe(methods[i]['title'], function () {
for (var j in methods[i]['list']) { for (var j in methods[i]['list']) {
@@ -63,7 +70,22 @@ for (var i in methods) {
} }
} }
}); });
} }*/
describe('getGPU', function () {
for (var i in gpus) {
describe(`[${gpus[i].desc}] "${gpus[i].renderer}"`, function () {
var gpu = parser.setRenderer(gpus[i].renderer).getGPU();
var expect = gpus[i].expect;
it(`should return vendor: ${expect.vendor}`, function(){
assert.equal(gpu.vendor, expect.vendor != 'undefined' ? expect.vendor : undefined);
})
it(`should return model: ${expect.model}`, function(){
assert.equal(gpu.model, expect.model != 'undefined' ? expect.model : undefined);
})
});
}
});
describe('Returns', function () { describe('Returns', function () {
it('getResult() should returns JSON', function(done) { it('getResult() should returns JSON', function(done) {
@@ -74,6 +96,7 @@ describe('Returns', function () {
cpu: { architecture: undefined }, cpu: { architecture: undefined },
device: { vendor: undefined, model: undefined, type: undefined }, device: { vendor: undefined, model: undefined, type: undefined },
engine: { name: undefined, version: undefined}, engine: { name: undefined, version: undefined},
gpu: { vendor: undefined, model: undefined},
os: { name: undefined, version: undefined } os: { name: undefined, version: undefined }
}); });
done(); done();