diff --git a/packages/common/.npmignore b/packages/common/.npmignore index 4be6126ecc..e55a377e16 100644 --- a/packages/common/.npmignore +++ b/packages/common/.npmignore @@ -39,3 +39,5 @@ lib/**/injected/ !browsers.json # Include commit info !commitinfo +# Include generated devices descriptors +!deviceDescriptorsSource.json diff --git a/src/server/deviceDescriptors.js b/src/server/deviceDescriptors.js index 1c55146cec..628064098b 100644 --- a/src/server/deviceDescriptors.js +++ b/src/server/deviceDescriptors.js @@ -18,1147 +18,4 @@ /** * @type {import('./types').Devices} */ -module.exports = { - 'Blackberry PlayBook': { - 'userAgent': 'Mozilla/5.0 (PlayBook; U; RIM Tablet OS 2.1.0; en-US) AppleWebKit/536.2+ (KHTML like Gecko) Version/7.2.1.0 Safari/536.2+', - 'viewport': { - 'width': 600, - 'height': 1024 - }, - 'deviceScaleFactor': 1, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'webkit' - }, - 'Blackberry PlayBook landscape': { - 'userAgent': 'Mozilla/5.0 (PlayBook; U; RIM Tablet OS 2.1.0; en-US) AppleWebKit/536.2+ (KHTML like Gecko) Version/7.2.1.0 Safari/536.2+', - 'viewport': { - 'width': 1024, - 'height': 600 - }, - 'deviceScaleFactor': 1, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'webkit' - }, - 'BlackBerry Z30': { - 'userAgent': 'Mozilla/5.0 (BB10; Touch) AppleWebKit/537.10+ (KHTML, like Gecko) Version/10.0.9.2372 Mobile Safari/537.10+', - 'viewport': { - 'width': 360, - 'height': 640 - }, - 'deviceScaleFactor': 2, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'webkit' - }, - 'BlackBerry Z30 landscape': { - 'userAgent': 'Mozilla/5.0 (BB10; Touch) AppleWebKit/537.10+ (KHTML, like Gecko) Version/10.0.9.2372 Mobile Safari/537.10+', - 'viewport': { - 'width': 640, - 'height': 360 - }, - 'deviceScaleFactor': 2, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'webkit' - }, - 'Galaxy Note 3': { - 'userAgent': 'Mozilla/5.0 (Linux; U; Android 4.3; en-us; SM-N900T Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30', - 'viewport': { - 'width': 360, - 'height': 640 - }, - 'deviceScaleFactor': 3, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'webkit' - }, - 'Galaxy Note 3 landscape': { - 'userAgent': 'Mozilla/5.0 (Linux; U; Android 4.3; en-us; SM-N900T Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30', - 'viewport': { - 'width': 640, - 'height': 360 - }, - 'deviceScaleFactor': 3, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'webkit' - }, - 'Galaxy Note II': { - 'userAgent': 'Mozilla/5.0 (Linux; U; Android 4.1; en-us; GT-N7100 Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30', - 'viewport': { - 'width': 360, - 'height': 640 - }, - 'deviceScaleFactor': 2, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'webkit' - }, - 'Galaxy Note II landscape': { - 'userAgent': 'Mozilla/5.0 (Linux; U; Android 4.1; en-us; GT-N7100 Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30', - 'viewport': { - 'width': 640, - 'height': 360 - }, - 'deviceScaleFactor': 2, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'webkit' - }, - 'Galaxy S III': { - 'userAgent': 'Mozilla/5.0 (Linux; U; Android 4.0; en-us; GT-I9300 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30', - 'viewport': { - 'width': 360, - 'height': 640 - }, - 'deviceScaleFactor': 2, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'webkit' - }, - 'Galaxy S III landscape': { - 'userAgent': 'Mozilla/5.0 (Linux; U; Android 4.0; en-us; GT-I9300 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30', - 'viewport': { - 'width': 640, - 'height': 360 - }, - 'deviceScaleFactor': 2, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'webkit' - }, - 'Galaxy S5': { - 'userAgent': 'Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Mobile Safari/537.36', - 'viewport': { - 'width': 360, - 'height': 640 - }, - 'deviceScaleFactor': 3, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'chromium' - }, - 'Galaxy S5 landscape': { - 'userAgent': 'Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Mobile Safari/537.36', - 'viewport': { - 'width': 640, - 'height': 360 - }, - 'deviceScaleFactor': 3, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'chromium' - }, - 'Galaxy S8': { - 'userAgent': 'Mozilla/5.0 (Linux; Android 7.0; SM-G950U Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.84 Mobile Safari/537.36', - 'viewport': { - 'width': 360, - 'height': 740 - }, - 'deviceScaleFactor': 3, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'chromium' - }, - 'Galaxy S8 landscape': { - 'userAgent': 'Mozilla/5.0 (Linux; Android 7.0; SM-G950U Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.84 Mobile Safari/537.36', - 'viewport': { - 'width': 740, - 'height': 360 - }, - 'deviceScaleFactor': 3, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'chromium' - }, - 'Galaxy S9+': { - 'userAgent': 'Mozilla/5.0 (Linux; Android 8.0.0; SM-G965U Build/R16NW) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.111 Mobile Safari/537.36', - 'viewport': { - 'width': 320, - 'height': 658 - }, - 'deviceScaleFactor': 4.5, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'chromium' - }, - 'Galaxy S9+ landscape': { - 'userAgent': 'Mozilla/5.0 (Linux; Android 8.0.0; SM-G965U Build/R16NW) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.111 Mobile Safari/537.36', - 'viewport': { - 'width': 658, - 'height': 320 - }, - 'deviceScaleFactor': 4.5, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'chromium' - }, - 'Galaxy Tab S4': { - 'userAgent': 'Mozilla/5.0 (Linux; Android 8.1.0; SM-T837A) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.80 Safari/537.36', - 'viewport': { - 'width': 712, - 'height': 1138 - }, - 'deviceScaleFactor': 2.25, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'chromium' - }, - 'Galaxy Tab S4 landscape': { - 'userAgent': 'Mozilla/5.0 (Linux; Android 8.1.0; SM-T837A) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.80 Safari/537.36', - 'viewport': { - 'width': 1138, - 'height': 712 - }, - 'deviceScaleFactor': 2.25, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'chromium' - }, - 'iPad (gen 6)': { - 'userAgent': 'Mozilla/5.0 (iPad; CPU OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0 Mobile/15E148 Safari/604.1', - 'viewport': { - 'width': 768, - 'height': 1024 - }, - 'deviceScaleFactor': 2, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'webkit' - }, - 'iPad (gen 6) landscape': { - 'userAgent': 'Mozilla/5.0 (iPad; CPU OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0 Mobile/15E148 Safari/604.1', - 'viewport': { - 'width': 1024, - 'height': 768 - }, - 'deviceScaleFactor': 2, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'webkit' - }, - 'iPad (gen 7)': { - 'userAgent': 'Mozilla/5.0 (iPad; CPU OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0 Mobile/15E148 Safari/604.1', - 'viewport': { - 'width': 810, - 'height': 1080 - }, - 'deviceScaleFactor': 2, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'webkit' - }, - 'iPad (gen 7) landscape': { - 'userAgent': 'Mozilla/5.0 (iPad; CPU OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0 Mobile/15E148 Safari/604.1', - 'viewport': { - 'width': 1080, - 'height': 810 - }, - 'deviceScaleFactor': 2, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'webkit' - }, - 'iPad Mini': { - 'userAgent': 'Mozilla/5.0 (iPad; CPU OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0 Mobile/15E148 Safari/604.1', - 'viewport': { - 'width': 768, - 'height': 1024 - }, - 'deviceScaleFactor': 2, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'webkit' - }, - 'iPad Mini landscape': { - 'userAgent': 'Mozilla/5.0 (iPad; CPU OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0 Mobile/15E148 Safari/604.1', - 'viewport': { - 'width': 1024, - 'height': 768 - }, - 'deviceScaleFactor': 2, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'webkit' - }, - 'iPad Pro 11': { - 'userAgent': 'Mozilla/5.0 (iPad; CPU OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0 Mobile/15E148 Safari/604.1', - 'viewport': { - 'width': 834, - 'height': 1194 - }, - 'deviceScaleFactor': 2, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'webkit' - }, - 'iPad Pro 11 landscape': { - 'userAgent': 'Mozilla/5.0 (iPad; CPU OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0 Mobile/15E148 Safari/604.1', - 'viewport': { - 'width': 1194, - 'height': 834 - }, - 'deviceScaleFactor': 2, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'webkit' - }, - 'iPhone 6': { - 'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1', - 'viewport': { - 'width': 375, - 'height': 667 - }, - 'deviceScaleFactor': 2, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'webkit' - }, - 'iPhone 6 landscape': { - 'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1', - 'viewport': { - 'width': 667, - 'height': 375 - }, - 'deviceScaleFactor': 2, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'webkit' - }, - 'iPhone 6 Plus': { - 'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1', - 'viewport': { - 'width': 414, - 'height': 736 - }, - 'deviceScaleFactor': 3, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'webkit' - }, - 'iPhone 6 Plus landscape': { - 'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1', - 'viewport': { - 'width': 736, - 'height': 414 - }, - 'deviceScaleFactor': 3, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'webkit' - }, - 'iPhone 7': { - 'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1', - 'viewport': { - 'width': 375, - 'height': 667 - }, - 'deviceScaleFactor': 2, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'webkit' - }, - 'iPhone 7 landscape': { - 'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1', - 'viewport': { - 'width': 667, - 'height': 375 - }, - 'deviceScaleFactor': 2, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'webkit' - }, - 'iPhone 7 Plus': { - 'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1', - 'viewport': { - 'width': 414, - 'height': 736 - }, - 'deviceScaleFactor': 3, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'webkit' - }, - 'iPhone 7 Plus landscape': { - 'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1', - 'viewport': { - 'width': 736, - 'height': 414 - }, - 'deviceScaleFactor': 3, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'webkit' - }, - 'iPhone 8': { - 'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1', - 'viewport': { - 'width': 375, - 'height': 667 - }, - 'deviceScaleFactor': 2, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'webkit' - }, - 'iPhone 8 landscape': { - 'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1', - 'viewport': { - 'width': 667, - 'height': 375 - }, - 'deviceScaleFactor': 2, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'webkit' - }, - 'iPhone 8 Plus': { - 'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1', - 'viewport': { - 'width': 414, - 'height': 736 - }, - 'deviceScaleFactor': 3, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'webkit' - }, - 'iPhone 8 Plus landscape': { - 'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1', - 'viewport': { - 'width': 736, - 'height': 414 - }, - 'deviceScaleFactor': 3, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'webkit' - }, - 'iPhone SE': { - 'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1', - 'viewport': { - 'width': 320, - 'height': 568 - }, - 'deviceScaleFactor': 2, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'webkit' - }, - 'iPhone SE landscape': { - 'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1', - 'viewport': { - 'width': 568, - 'height': 320 - }, - 'deviceScaleFactor': 2, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'webkit' - }, - 'iPhone X': { - 'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1', - 'viewport': { - 'width': 375, - 'height': 812 - }, - 'deviceScaleFactor': 3, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'webkit' - }, - 'iPhone X landscape': { - 'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1', - 'viewport': { - 'width': 812, - 'height': 375 - }, - 'deviceScaleFactor': 3, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'webkit' - }, - 'iPhone XR': { - 'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 12_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0 Mobile/15E148 Safari/604.1', - 'viewport': { - 'width': 414, - 'height': 896 - }, - 'deviceScaleFactor': 3, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'webkit' - }, - 'iPhone XR landscape': { - 'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 12_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0 Mobile/15E148 Safari/604.1', - 'viewport': { - 'width': 896, - 'height': 414 - }, - 'deviceScaleFactor': 3, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'webkit' - }, - 'iPhone 11': { - 'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0 Mobile/15E148 Safari/604.1', - 'screen': { - 'width': 414, - 'height': 896 - }, - 'viewport': { - 'width': 414, - 'height': 715 - }, - 'deviceScaleFactor': 2, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'webkit' - }, - 'iPhone 11 landscape': { - 'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0 Mobile/15E148 Safari/604.1', - 'screen': { - 'width': 414, - 'height': 896 - }, - 'viewport': { - 'width': 800, - 'height': 364 - }, - 'deviceScaleFactor': 2, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'webkit' - }, - 'iPhone 11 Pro': { - 'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0 Mobile/15E148 Safari/604.1', - 'screen': { - 'width': 375, - 'height': 812 - }, - 'viewport': { - 'width': 375, - 'height': 635 - }, - 'deviceScaleFactor': 3, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'webkit' - }, - 'iPhone 11 Pro landscape': { - 'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0 Mobile/15E148 Safari/604.1', - 'screen': { - 'width': 375, - 'height': 812 - }, - 'viewport': { - 'width': 724, - 'height': 325 - }, - 'deviceScaleFactor': 3, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'webkit' - }, - 'iPhone 11 Pro Max': { - 'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0 Mobile/15E148 Safari/604.1', - 'screen': { - 'width': 414, - 'height': 896 - }, - 'viewport': { - 'width': 414, - 'height': 715 - }, - 'deviceScaleFactor': 3, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'webkit' - }, - 'iPhone 11 Pro Max landscape': { - 'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0 Mobile/15E148 Safari/604.1', - 'screen': { - 'width': 414, - 'height': 896 - }, - 'viewport': { - 'width': 808, - 'height': 364 - }, - 'deviceScaleFactor': 3, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'webkit' - }, - 'iPhone 12': { - 'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.3 Mobile/15E148 Safari/604.1', - 'screen': { - 'width': 390, - 'height': 844 - }, - 'viewport': { - 'width': 390, - 'height': 664 - }, - 'deviceScaleFactor': 3, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'webkit' - }, - 'iPhone 12 landscape': { - 'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.3 Mobile/15E148 Safari/604.1', - 'screen': { - 'width': 390, - 'height': 844 - }, - 'viewport': { - 'width': 750, - 'height': 340 - }, - 'deviceScaleFactor': 3, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'webkit' - }, - 'iPhone 12 Pro': { - 'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.3 Mobile/15E148 Safari/604.1', - 'screen': { - 'width': 390, - 'height': 844 - }, - 'viewport': { - 'width': 390, - 'height': 664 - }, - 'deviceScaleFactor': 3, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'webkit' - }, - 'iPhone 12 Pro landscape': { - 'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.3 Mobile/15E148 Safari/604.1', - 'screen': { - 'width': 390, - 'height': 844 - }, - 'viewport': { - 'width': 750, - 'height': 340 - }, - 'deviceScaleFactor': 3, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'webkit' - }, - 'iPhone 12 Pro Max': { - 'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.3 Mobile/15E148 Safari/604.1', - 'screen': { - 'width': 428, - 'height': 926 - }, - 'viewport': { - 'width': 428, - 'height': 746 - }, - 'deviceScaleFactor': 3, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'webkit' - }, - 'iPhone 12 Pro Max landscape': { - 'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.3 Mobile/15E148 Safari/604.1', - 'screen': { - 'width': 428, - 'height': 926 - }, - 'viewport': { - 'width': 832, - 'height': 378 - }, - 'deviceScaleFactor': 3, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'webkit' - }, - 'JioPhone 2': { - 'userAgent': 'Mozilla/5.0 (Mobile; LYF/F300B/LYF-F300B-001-01-15-130718-i;Android; rv:48.0) Gecko/48.0 Firefox/48.0 KAIOS/2.5', - 'viewport': { - 'width': 240, - 'height': 320 - }, - 'deviceScaleFactor': 1, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'firefox' - }, - 'JioPhone 2 landscape': { - 'userAgent': 'Mozilla/5.0 (Mobile; LYF/F300B/LYF-F300B-001-01-15-130718-i;Android; rv:48.0) Gecko/48.0 Firefox/48.0 KAIOS/2.5', - 'viewport': { - 'width': 320, - 'height': 240 - }, - 'deviceScaleFactor': 1, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'firefox' - }, - 'Kindle Fire HDX': { - 'userAgent': 'Mozilla/5.0 (Linux; U; en-us; KFAPWI Build/JDQ39) AppleWebKit/535.19 (KHTML, like Gecko) Silk/3.13 Safari/535.19 Silk-Accelerated=true', - 'viewport': { - 'width': 800, - 'height': 1280 - }, - 'deviceScaleFactor': 2, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'webkit' - }, - 'Kindle Fire HDX landscape': { - 'userAgent': 'Mozilla/5.0 (Linux; U; en-us; KFAPWI Build/JDQ39) AppleWebKit/535.19 (KHTML, like Gecko) Silk/3.13 Safari/535.19 Silk-Accelerated=true', - 'viewport': { - 'width': 1280, - 'height': 800 - }, - 'deviceScaleFactor': 2, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'webkit' - }, - 'LG Optimus L70': { - 'userAgent': 'Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; LGMS323 Build/KOT49I.MS32310c) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/75.0.3765.0 Mobile Safari/537.36', - 'viewport': { - 'width': 384, - 'height': 640 - }, - 'deviceScaleFactor': 1.25, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'chromium' - }, - 'LG Optimus L70 landscape': { - 'userAgent': 'Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; LGMS323 Build/KOT49I.MS32310c) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/75.0.3765.0 Mobile Safari/537.36', - 'viewport': { - 'width': 640, - 'height': 384 - }, - 'deviceScaleFactor': 1.25, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'chromium' - }, - 'Microsoft Lumia 550': { - 'userAgent': 'Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 550) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Mobile Safari/537.36 Edge/14.14263', - 'viewport': { - 'width': 640, - 'height': 360 - }, - 'deviceScaleFactor': 2, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'chromium' - }, - 'Microsoft Lumia 550 landscape': { - 'userAgent': 'Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 550) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Mobile Safari/537.36 Edge/14.14263', - 'viewport': { - 'width': 360, - 'height': 640 - }, - 'deviceScaleFactor': 2, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'chromium' - }, - 'Microsoft Lumia 950': { - 'userAgent': 'Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 950) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Mobile Safari/537.36 Edge/14.14263', - 'viewport': { - 'width': 360, - 'height': 640 - }, - 'deviceScaleFactor': 4, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'chromium' - }, - 'Microsoft Lumia 950 landscape': { - 'userAgent': 'Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 950) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Mobile Safari/537.36 Edge/14.14263', - 'viewport': { - 'width': 640, - 'height': 360 - }, - 'deviceScaleFactor': 4, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'chromium' - }, - 'Nexus 10': { - 'userAgent': 'Mozilla/5.0 (Linux; Android 6.0.1; Nexus 10 Build/MOB31T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Safari/537.36', - 'viewport': { - 'width': 800, - 'height': 1280 - }, - 'deviceScaleFactor': 2, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'chromium' - }, - 'Nexus 10 landscape': { - 'userAgent': 'Mozilla/5.0 (Linux; Android 6.0.1; Nexus 10 Build/MOB31T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Safari/537.36', - 'viewport': { - 'width': 1280, - 'height': 800 - }, - 'deviceScaleFactor': 2, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'chromium' - }, - 'Nexus 4': { - 'userAgent': 'Mozilla/5.0 (Linux; Android 4.4.2; Nexus 4 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Mobile Safari/537.36', - 'viewport': { - 'width': 384, - 'height': 640 - }, - 'deviceScaleFactor': 2, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'chromium' - }, - 'Nexus 4 landscape': { - 'userAgent': 'Mozilla/5.0 (Linux; Android 4.4.2; Nexus 4 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Mobile Safari/537.36', - 'viewport': { - 'width': 640, - 'height': 384 - }, - 'deviceScaleFactor': 2, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'chromium' - }, - 'Nexus 5': { - 'userAgent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Mobile Safari/537.36', - 'viewport': { - 'width': 360, - 'height': 640 - }, - 'deviceScaleFactor': 3, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'chromium' - }, - 'Nexus 5 landscape': { - 'userAgent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Mobile Safari/537.36', - 'viewport': { - 'width': 640, - 'height': 360 - }, - 'deviceScaleFactor': 3, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'chromium' - }, - 'Nexus 5X': { - 'userAgent': 'Mozilla/5.0 (Linux; Android 8.0.0; Nexus 5X Build/OPR4.170623.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Mobile Safari/537.36', - 'viewport': { - 'width': 412, - 'height': 732 - }, - 'deviceScaleFactor': 2.625, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'chromium' - }, - 'Nexus 5X landscape': { - 'userAgent': 'Mozilla/5.0 (Linux; Android 8.0.0; Nexus 5X Build/OPR4.170623.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Mobile Safari/537.36', - 'viewport': { - 'width': 732, - 'height': 412 - }, - 'deviceScaleFactor': 2.625, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'chromium' - }, - 'Nexus 6': { - 'userAgent': 'Mozilla/5.0 (Linux; Android 7.1.1; Nexus 6 Build/N6F26U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Mobile Safari/537.36', - 'viewport': { - 'width': 412, - 'height': 732 - }, - 'deviceScaleFactor': 3.5, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'chromium' - }, - 'Nexus 6 landscape': { - 'userAgent': 'Mozilla/5.0 (Linux; Android 7.1.1; Nexus 6 Build/N6F26U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Mobile Safari/537.36', - 'viewport': { - 'width': 732, - 'height': 412 - }, - 'deviceScaleFactor': 3.5, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'chromium' - }, - 'Nexus 6P': { - 'userAgent': 'Mozilla/5.0 (Linux; Android 8.0.0; Nexus 6P Build/OPP3.170518.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Mobile Safari/537.36', - 'viewport': { - 'width': 412, - 'height': 732 - }, - 'deviceScaleFactor': 3.5, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'chromium' - }, - 'Nexus 6P landscape': { - 'userAgent': 'Mozilla/5.0 (Linux; Android 8.0.0; Nexus 6P Build/OPP3.170518.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Mobile Safari/537.36', - 'viewport': { - 'width': 732, - 'height': 412 - }, - 'deviceScaleFactor': 3.5, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'chromium' - }, - 'Nexus 7': { - 'userAgent': 'Mozilla/5.0 (Linux; Android 6.0.1; Nexus 7 Build/MOB30X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Safari/537.36', - 'viewport': { - 'width': 600, - 'height': 960 - }, - 'deviceScaleFactor': 2, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'chromium' - }, - 'Nexus 7 landscape': { - 'userAgent': 'Mozilla/5.0 (Linux; Android 6.0.1; Nexus 7 Build/MOB30X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Safari/537.36', - 'viewport': { - 'width': 960, - 'height': 600 - }, - 'deviceScaleFactor': 2, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'chromium' - }, - 'Nokia Lumia 520': { - 'userAgent': 'Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 520)', - 'viewport': { - 'width': 320, - 'height': 533 - }, - 'deviceScaleFactor': 1.5, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'chromium' - }, - 'Nokia Lumia 520 landscape': { - 'userAgent': 'Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 520)', - 'viewport': { - 'width': 533, - 'height': 320 - }, - 'deviceScaleFactor': 1.5, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'chromium' - }, - 'Nokia N9': { - 'userAgent': 'Mozilla/5.0 (MeeGo; NokiaN9) AppleWebKit/534.13 (KHTML, like Gecko) NokiaBrowser/8.5.0 Mobile Safari/534.13', - 'viewport': { - 'width': 480, - 'height': 854 - }, - 'deviceScaleFactor': 1, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'webkit' - }, - 'Nokia N9 landscape': { - 'userAgent': 'Mozilla/5.0 (MeeGo; NokiaN9) AppleWebKit/534.13 (KHTML, like Gecko) NokiaBrowser/8.5.0 Mobile Safari/534.13', - 'viewport': { - 'width': 854, - 'height': 480 - }, - 'deviceScaleFactor': 1, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'webkit' - }, - 'Pixel 2': { - 'userAgent': 'Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Mobile Safari/537.36', - 'viewport': { - 'width': 411, - 'height': 731 - }, - 'deviceScaleFactor': 2.625, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'chromium' - }, - 'Pixel 2 landscape': { - 'userAgent': 'Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Mobile Safari/537.36', - 'viewport': { - 'width': 731, - 'height': 411 - }, - 'deviceScaleFactor': 2.625, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'chromium' - }, - 'Pixel 2 XL': { - 'userAgent': 'Mozilla/5.0 (Linux; Android 8.0.0; Pixel 2 XL Build/OPD1.170816.004) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Mobile Safari/537.36', - 'viewport': { - 'width': 411, - 'height': 823 - }, - 'deviceScaleFactor': 3.5, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'chromium' - }, - 'Pixel 2 XL landscape': { - 'userAgent': 'Mozilla/5.0 (Linux; Android 8.0.0; Pixel 2 XL Build/OPD1.170816.004) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Mobile Safari/537.36', - 'viewport': { - 'width': 823, - 'height': 411 - }, - 'deviceScaleFactor': 3.5, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'chromium' - }, - 'Pixel 3': { - 'userAgent': 'Mozilla/5.0 (Linux; Android 9; Pixel 3 Build/PQ1A.181105.017.A1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.158 Mobile Safari/537.36', - 'viewport': { - 'width': 393, - 'height': 786 - }, - 'deviceScaleFactor': 2.75, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'chromium' - }, - 'Pixel 3 landscape': { - 'userAgent': 'Mozilla/5.0 (Linux; Android 9; Pixel 3 Build/PQ1A.181105.017.A1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.158 Mobile Safari/537.36', - 'viewport': { - 'width': 786, - 'height': 393 - }, - 'deviceScaleFactor': 2.75, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'chromium' - }, - 'Pixel 4': { - 'userAgent': 'Mozilla/5.0 (Linux; Android 10; Pixel 4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Mobile Safari/537.36', - 'viewport': { - 'width': 353, - 'height': 745 - }, - 'deviceScaleFactor': 3, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'chromium' - }, - 'Pixel 4 landscape': { - 'userAgent': 'Mozilla/5.0 (Linux; Android 10; Pixel 4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Mobile Safari/537.36', - 'viewport': { - 'width': 745, - 'height': 353 - }, - 'deviceScaleFactor': 3, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'chromium' - }, - 'Pixel 4a (5G)': { - 'userAgent': 'Mozilla/5.0 (Linux; Android 11; Pixel 4a (5G)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.105 Mobile Safari/537.36', - 'screen': { - 'width': 412, - 'height': 892 - }, - 'viewport': { - 'width': 412, - 'height': 765 - }, - 'deviceScaleFactor': 2.63, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'chromium' - }, - 'Pixel 4a (5G) landscape': { - 'userAgent': 'Mozilla/5.0 (Linux; Android 11; Pixel 4a (5G)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.105 Mobile Safari/537.36', - 'screen': { - 'height': 892, - 'width': 412 - }, - 'viewport': { - 'width': 840, - 'height': 312 - }, - 'deviceScaleFactor': 2.63, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'chromium' - }, - 'Pixel 5': { - 'userAgent': 'Mozilla/5.0 (Linux; Android 11; Pixel 5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.105 Mobile Safari/537.36', - 'screen': { - 'width': 393, - 'height': 851 - }, - 'viewport': { - 'width': 393, - 'height': 727 - }, - 'deviceScaleFactor': 2.75, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'chromium' - }, - 'Pixel 5 landscape': { - 'userAgent': 'Mozilla/5.0 (Linux; Android 11; Pixel 5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.105 Mobile Safari/537.36', - 'screen': { - 'width': 851, - 'height': 393 - }, - 'viewport': { - 'width': 802, - 'height': 293 - }, - 'deviceScaleFactor': 2.75, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'chromium' - }, - 'Moto G4': { - 'userAgent': 'Mozilla/5.0 (Linux; Android 7.0; Moto G (4)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4143.7 Mobile Safari/537.36', - 'viewport': { - 'width': 360, - 'height': 640 - }, - 'deviceScaleFactor': 3, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'chromium' - }, - 'Moto G4 landscape': { - 'userAgent': 'Mozilla/5.0 (Linux; Android 7.0; Moto G (4)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4143.7 Mobile Safari/537.36', - 'viewport': { - 'width': 640, - 'height': 360 - }, - 'deviceScaleFactor': 3, - 'isMobile': true, - 'hasTouch': true, - 'defaultBrowserType': 'chromium' - } -}; +module.exports = require("./deviceDescriptorsSource.json") diff --git a/src/server/deviceDescriptorsSource.json b/src/server/deviceDescriptorsSource.json new file mode 100644 index 0000000000..74d8f16534 --- /dev/null +++ b/src/server/deviceDescriptorsSource.json @@ -0,0 +1,1144 @@ +{ + "Blackberry PlayBook": { + "userAgent": "Mozilla/5.0 (PlayBook; U; RIM Tablet OS 2.1.0; en-US) AppleWebKit/536.2+ (KHTML like Gecko) Version/7.2.1.0 Safari/536.2+", + "viewport": { + "width": 600, + "height": 1024 + }, + "deviceScaleFactor": 1, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "Blackberry PlayBook landscape": { + "userAgent": "Mozilla/5.0 (PlayBook; U; RIM Tablet OS 2.1.0; en-US) AppleWebKit/536.2+ (KHTML like Gecko) Version/7.2.1.0 Safari/536.2+", + "viewport": { + "width": 1024, + "height": 600 + }, + "deviceScaleFactor": 1, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "BlackBerry Z30": { + "userAgent": "Mozilla/5.0 (BB10; Touch) AppleWebKit/537.10+ (KHTML, like Gecko) Version/10.0.9.2372 Mobile Safari/537.10+", + "viewport": { + "width": 360, + "height": 640 + }, + "deviceScaleFactor": 2, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "BlackBerry Z30 landscape": { + "userAgent": "Mozilla/5.0 (BB10; Touch) AppleWebKit/537.10+ (KHTML, like Gecko) Version/10.0.9.2372 Mobile Safari/537.10+", + "viewport": { + "width": 640, + "height": 360 + }, + "deviceScaleFactor": 2, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "Galaxy Note 3": { + "userAgent": "Mozilla/5.0 (Linux; U; Android 4.3; en-us; SM-N900T Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30", + "viewport": { + "width": 360, + "height": 640 + }, + "deviceScaleFactor": 3, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "Galaxy Note 3 landscape": { + "userAgent": "Mozilla/5.0 (Linux; U; Android 4.3; en-us; SM-N900T Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30", + "viewport": { + "width": 640, + "height": 360 + }, + "deviceScaleFactor": 3, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "Galaxy Note II": { + "userAgent": "Mozilla/5.0 (Linux; U; Android 4.1; en-us; GT-N7100 Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30", + "viewport": { + "width": 360, + "height": 640 + }, + "deviceScaleFactor": 2, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "Galaxy Note II landscape": { + "userAgent": "Mozilla/5.0 (Linux; U; Android 4.1; en-us; GT-N7100 Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30", + "viewport": { + "width": 640, + "height": 360 + }, + "deviceScaleFactor": 2, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "Galaxy S III": { + "userAgent": "Mozilla/5.0 (Linux; U; Android 4.0; en-us; GT-I9300 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30", + "viewport": { + "width": 360, + "height": 640 + }, + "deviceScaleFactor": 2, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "Galaxy S III landscape": { + "userAgent": "Mozilla/5.0 (Linux; U; Android 4.0; en-us; GT-I9300 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30", + "viewport": { + "width": 640, + "height": 360 + }, + "deviceScaleFactor": 2, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "Galaxy S5": { + "userAgent": "Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4498.0 Mobile Safari/537.36", + "viewport": { + "width": 360, + "height": 640 + }, + "deviceScaleFactor": 3, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Galaxy S5 landscape": { + "userAgent": "Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4498.0 Mobile Safari/537.36", + "viewport": { + "width": 640, + "height": 360 + }, + "deviceScaleFactor": 3, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Galaxy S8": { + "userAgent": "Mozilla/5.0 (Linux; Android 7.0; SM-G950U Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4498.0 Mobile Safari/537.36", + "viewport": { + "width": 360, + "height": 740 + }, + "deviceScaleFactor": 3, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Galaxy S8 landscape": { + "userAgent": "Mozilla/5.0 (Linux; Android 7.0; SM-G950U Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4498.0 Mobile Safari/537.36", + "viewport": { + "width": 740, + "height": 360 + }, + "deviceScaleFactor": 3, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Galaxy S9+": { + "userAgent": "Mozilla/5.0 (Linux; Android 8.0.0; SM-G965U Build/R16NW) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4498.0 Mobile Safari/537.36", + "viewport": { + "width": 320, + "height": 658 + }, + "deviceScaleFactor": 4.5, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Galaxy S9+ landscape": { + "userAgent": "Mozilla/5.0 (Linux; Android 8.0.0; SM-G965U Build/R16NW) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4498.0 Mobile Safari/537.36", + "viewport": { + "width": 658, + "height": 320 + }, + "deviceScaleFactor": 4.5, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Galaxy Tab S4": { + "userAgent": "Mozilla/5.0 (Linux; Android 8.1.0; SM-T837A) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4498.0 Safari/537.36", + "viewport": { + "width": 712, + "height": 1138 + }, + "deviceScaleFactor": 2.25, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Galaxy Tab S4 landscape": { + "userAgent": "Mozilla/5.0 (Linux; Android 8.1.0; SM-T837A) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4498.0 Safari/537.36", + "viewport": { + "width": 1138, + "height": 712 + }, + "deviceScaleFactor": 2.25, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "iPad (gen 6)": { + "userAgent": "Mozilla/5.0 (iPad; CPU OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0 Mobile/15E148 Safari/604.1", + "viewport": { + "width": 768, + "height": 1024 + }, + "deviceScaleFactor": 2, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPad (gen 6) landscape": { + "userAgent": "Mozilla/5.0 (iPad; CPU OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0 Mobile/15E148 Safari/604.1", + "viewport": { + "width": 1024, + "height": 768 + }, + "deviceScaleFactor": 2, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPad (gen 7)": { + "userAgent": "Mozilla/5.0 (iPad; CPU OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0 Mobile/15E148 Safari/604.1", + "viewport": { + "width": 810, + "height": 1080 + }, + "deviceScaleFactor": 2, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPad (gen 7) landscape": { + "userAgent": "Mozilla/5.0 (iPad; CPU OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0 Mobile/15E148 Safari/604.1", + "viewport": { + "width": 1080, + "height": 810 + }, + "deviceScaleFactor": 2, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPad Mini": { + "userAgent": "Mozilla/5.0 (iPad; CPU OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0 Mobile/15E148 Safari/604.1", + "viewport": { + "width": 768, + "height": 1024 + }, + "deviceScaleFactor": 2, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPad Mini landscape": { + "userAgent": "Mozilla/5.0 (iPad; CPU OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0 Mobile/15E148 Safari/604.1", + "viewport": { + "width": 1024, + "height": 768 + }, + "deviceScaleFactor": 2, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPad Pro 11": { + "userAgent": "Mozilla/5.0 (iPad; CPU OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0 Mobile/15E148 Safari/604.1", + "viewport": { + "width": 834, + "height": 1194 + }, + "deviceScaleFactor": 2, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPad Pro 11 landscape": { + "userAgent": "Mozilla/5.0 (iPad; CPU OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0 Mobile/15E148 Safari/604.1", + "viewport": { + "width": 1194, + "height": 834 + }, + "deviceScaleFactor": 2, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPhone 6": { + "userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1", + "viewport": { + "width": 375, + "height": 667 + }, + "deviceScaleFactor": 2, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPhone 6 landscape": { + "userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1", + "viewport": { + "width": 667, + "height": 375 + }, + "deviceScaleFactor": 2, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPhone 6 Plus": { + "userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1", + "viewport": { + "width": 414, + "height": 736 + }, + "deviceScaleFactor": 3, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPhone 6 Plus landscape": { + "userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1", + "viewport": { + "width": 736, + "height": 414 + }, + "deviceScaleFactor": 3, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPhone 7": { + "userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1", + "viewport": { + "width": 375, + "height": 667 + }, + "deviceScaleFactor": 2, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPhone 7 landscape": { + "userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1", + "viewport": { + "width": 667, + "height": 375 + }, + "deviceScaleFactor": 2, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPhone 7 Plus": { + "userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1", + "viewport": { + "width": 414, + "height": 736 + }, + "deviceScaleFactor": 3, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPhone 7 Plus landscape": { + "userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1", + "viewport": { + "width": 736, + "height": 414 + }, + "deviceScaleFactor": 3, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPhone 8": { + "userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1", + "viewport": { + "width": 375, + "height": 667 + }, + "deviceScaleFactor": 2, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPhone 8 landscape": { + "userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1", + "viewport": { + "width": 667, + "height": 375 + }, + "deviceScaleFactor": 2, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPhone 8 Plus": { + "userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1", + "viewport": { + "width": 414, + "height": 736 + }, + "deviceScaleFactor": 3, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPhone 8 Plus landscape": { + "userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1", + "viewport": { + "width": 736, + "height": 414 + }, + "deviceScaleFactor": 3, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPhone SE": { + "userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1", + "viewport": { + "width": 320, + "height": 568 + }, + "deviceScaleFactor": 2, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPhone SE landscape": { + "userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1", + "viewport": { + "width": 568, + "height": 320 + }, + "deviceScaleFactor": 2, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPhone X": { + "userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1", + "viewport": { + "width": 375, + "height": 812 + }, + "deviceScaleFactor": 3, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPhone X landscape": { + "userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1", + "viewport": { + "width": 812, + "height": 375 + }, + "deviceScaleFactor": 3, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPhone XR": { + "userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 12_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0 Mobile/15E148 Safari/604.1", + "viewport": { + "width": 414, + "height": 896 + }, + "deviceScaleFactor": 3, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPhone XR landscape": { + "userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 12_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0 Mobile/15E148 Safari/604.1", + "viewport": { + "width": 896, + "height": 414 + }, + "deviceScaleFactor": 3, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPhone 11": { + "userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0 Mobile/15E148 Safari/604.1", + "screen": { + "width": 414, + "height": 896 + }, + "viewport": { + "width": 414, + "height": 715 + }, + "deviceScaleFactor": 2, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPhone 11 landscape": { + "userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0 Mobile/15E148 Safari/604.1", + "screen": { + "width": 414, + "height": 896 + }, + "viewport": { + "width": 800, + "height": 364 + }, + "deviceScaleFactor": 2, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPhone 11 Pro": { + "userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0 Mobile/15E148 Safari/604.1", + "screen": { + "width": 375, + "height": 812 + }, + "viewport": { + "width": 375, + "height": 635 + }, + "deviceScaleFactor": 3, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPhone 11 Pro landscape": { + "userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0 Mobile/15E148 Safari/604.1", + "screen": { + "width": 375, + "height": 812 + }, + "viewport": { + "width": 724, + "height": 325 + }, + "deviceScaleFactor": 3, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPhone 11 Pro Max": { + "userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0 Mobile/15E148 Safari/604.1", + "screen": { + "width": 414, + "height": 896 + }, + "viewport": { + "width": 414, + "height": 715 + }, + "deviceScaleFactor": 3, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPhone 11 Pro Max landscape": { + "userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0 Mobile/15E148 Safari/604.1", + "screen": { + "width": 414, + "height": 896 + }, + "viewport": { + "width": 808, + "height": 364 + }, + "deviceScaleFactor": 3, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPhone 12": { + "userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.3 Mobile/15E148 Safari/604.1", + "screen": { + "width": 390, + "height": 844 + }, + "viewport": { + "width": 390, + "height": 664 + }, + "deviceScaleFactor": 3, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPhone 12 landscape": { + "userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.3 Mobile/15E148 Safari/604.1", + "screen": { + "width": 390, + "height": 844 + }, + "viewport": { + "width": 750, + "height": 340 + }, + "deviceScaleFactor": 3, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPhone 12 Pro": { + "userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.3 Mobile/15E148 Safari/604.1", + "screen": { + "width": 390, + "height": 844 + }, + "viewport": { + "width": 390, + "height": 664 + }, + "deviceScaleFactor": 3, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPhone 12 Pro landscape": { + "userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.3 Mobile/15E148 Safari/604.1", + "screen": { + "width": 390, + "height": 844 + }, + "viewport": { + "width": 750, + "height": 340 + }, + "deviceScaleFactor": 3, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPhone 12 Pro Max": { + "userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.3 Mobile/15E148 Safari/604.1", + "screen": { + "width": 428, + "height": 926 + }, + "viewport": { + "width": 428, + "height": 746 + }, + "deviceScaleFactor": 3, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "iPhone 12 Pro Max landscape": { + "userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.3 Mobile/15E148 Safari/604.1", + "screen": { + "width": 428, + "height": 926 + }, + "viewport": { + "width": 832, + "height": 378 + }, + "deviceScaleFactor": 3, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "JioPhone 2": { + "userAgent": "Mozilla/5.0 (Mobile; LYF/F300B/LYF-F300B-001-01-15-130718-i;Android; rv:48.0) Gecko/48.0 Firefox/48.0 KAIOS/2.5", + "viewport": { + "width": 240, + "height": 320 + }, + "deviceScaleFactor": 1, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "firefox" + }, + "JioPhone 2 landscape": { + "userAgent": "Mozilla/5.0 (Mobile; LYF/F300B/LYF-F300B-001-01-15-130718-i;Android; rv:48.0) Gecko/48.0 Firefox/48.0 KAIOS/2.5", + "viewport": { + "width": 320, + "height": 240 + }, + "deviceScaleFactor": 1, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "firefox" + }, + "Kindle Fire HDX": { + "userAgent": "Mozilla/5.0 (Linux; U; en-us; KFAPWI Build/JDQ39) AppleWebKit/535.19 (KHTML, like Gecko) Silk/3.13 Safari/535.19 Silk-Accelerated=true", + "viewport": { + "width": 800, + "height": 1280 + }, + "deviceScaleFactor": 2, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "Kindle Fire HDX landscape": { + "userAgent": "Mozilla/5.0 (Linux; U; en-us; KFAPWI Build/JDQ39) AppleWebKit/535.19 (KHTML, like Gecko) Silk/3.13 Safari/535.19 Silk-Accelerated=true", + "viewport": { + "width": 1280, + "height": 800 + }, + "deviceScaleFactor": 2, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "LG Optimus L70": { + "userAgent": "Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; LGMS323 Build/KOT49I.MS32310c) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/92.0.4498.0 Mobile Safari/537.36", + "viewport": { + "width": 384, + "height": 640 + }, + "deviceScaleFactor": 1.25, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "LG Optimus L70 landscape": { + "userAgent": "Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; LGMS323 Build/KOT49I.MS32310c) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/92.0.4498.0 Mobile Safari/537.36", + "viewport": { + "width": 640, + "height": 384 + }, + "deviceScaleFactor": 1.25, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Microsoft Lumia 550": { + "userAgent": "Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 550) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4498.0 Mobile Safari/537.36 Edge/14.14263", + "viewport": { + "width": 640, + "height": 360 + }, + "deviceScaleFactor": 2, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Microsoft Lumia 550 landscape": { + "userAgent": "Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 550) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4498.0 Mobile Safari/537.36 Edge/14.14263", + "viewport": { + "width": 360, + "height": 640 + }, + "deviceScaleFactor": 2, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Microsoft Lumia 950": { + "userAgent": "Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 950) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4498.0 Mobile Safari/537.36 Edge/14.14263", + "viewport": { + "width": 360, + "height": 640 + }, + "deviceScaleFactor": 4, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Microsoft Lumia 950 landscape": { + "userAgent": "Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 950) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4498.0 Mobile Safari/537.36 Edge/14.14263", + "viewport": { + "width": 640, + "height": 360 + }, + "deviceScaleFactor": 4, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Nexus 10": { + "userAgent": "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 10 Build/MOB31T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4498.0 Safari/537.36", + "viewport": { + "width": 800, + "height": 1280 + }, + "deviceScaleFactor": 2, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Nexus 10 landscape": { + "userAgent": "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 10 Build/MOB31T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4498.0 Safari/537.36", + "viewport": { + "width": 1280, + "height": 800 + }, + "deviceScaleFactor": 2, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Nexus 4": { + "userAgent": "Mozilla/5.0 (Linux; Android 4.4.2; Nexus 4 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4498.0 Mobile Safari/537.36", + "viewport": { + "width": 384, + "height": 640 + }, + "deviceScaleFactor": 2, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Nexus 4 landscape": { + "userAgent": "Mozilla/5.0 (Linux; Android 4.4.2; Nexus 4 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4498.0 Mobile Safari/537.36", + "viewport": { + "width": 640, + "height": 384 + }, + "deviceScaleFactor": 2, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Nexus 5": { + "userAgent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4498.0 Mobile Safari/537.36", + "viewport": { + "width": 360, + "height": 640 + }, + "deviceScaleFactor": 3, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Nexus 5 landscape": { + "userAgent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4498.0 Mobile Safari/537.36", + "viewport": { + "width": 640, + "height": 360 + }, + "deviceScaleFactor": 3, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Nexus 5X": { + "userAgent": "Mozilla/5.0 (Linux; Android 8.0.0; Nexus 5X Build/OPR4.170623.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4498.0 Mobile Safari/537.36", + "viewport": { + "width": 412, + "height": 732 + }, + "deviceScaleFactor": 2.625, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Nexus 5X landscape": { + "userAgent": "Mozilla/5.0 (Linux; Android 8.0.0; Nexus 5X Build/OPR4.170623.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4498.0 Mobile Safari/537.36", + "viewport": { + "width": 732, + "height": 412 + }, + "deviceScaleFactor": 2.625, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Nexus 6": { + "userAgent": "Mozilla/5.0 (Linux; Android 7.1.1; Nexus 6 Build/N6F26U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4498.0 Mobile Safari/537.36", + "viewport": { + "width": 412, + "height": 732 + }, + "deviceScaleFactor": 3.5, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Nexus 6 landscape": { + "userAgent": "Mozilla/5.0 (Linux; Android 7.1.1; Nexus 6 Build/N6F26U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4498.0 Mobile Safari/537.36", + "viewport": { + "width": 732, + "height": 412 + }, + "deviceScaleFactor": 3.5, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Nexus 6P": { + "userAgent": "Mozilla/5.0 (Linux; Android 8.0.0; Nexus 6P Build/OPP3.170518.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4498.0 Mobile Safari/537.36", + "viewport": { + "width": 412, + "height": 732 + }, + "deviceScaleFactor": 3.5, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Nexus 6P landscape": { + "userAgent": "Mozilla/5.0 (Linux; Android 8.0.0; Nexus 6P Build/OPP3.170518.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4498.0 Mobile Safari/537.36", + "viewport": { + "width": 732, + "height": 412 + }, + "deviceScaleFactor": 3.5, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Nexus 7": { + "userAgent": "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 7 Build/MOB30X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4498.0 Safari/537.36", + "viewport": { + "width": 600, + "height": 960 + }, + "deviceScaleFactor": 2, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Nexus 7 landscape": { + "userAgent": "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 7 Build/MOB30X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4498.0 Safari/537.36", + "viewport": { + "width": 960, + "height": 600 + }, + "deviceScaleFactor": 2, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Nokia Lumia 520": { + "userAgent": "Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 520)", + "viewport": { + "width": 320, + "height": 533 + }, + "deviceScaleFactor": 1.5, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Nokia Lumia 520 landscape": { + "userAgent": "Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 520)", + "viewport": { + "width": 533, + "height": 320 + }, + "deviceScaleFactor": 1.5, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Nokia N9": { + "userAgent": "Mozilla/5.0 (MeeGo; NokiaN9) AppleWebKit/534.13 (KHTML, like Gecko) NokiaBrowser/8.5.0 Mobile Safari/534.13", + "viewport": { + "width": 480, + "height": 854 + }, + "deviceScaleFactor": 1, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "Nokia N9 landscape": { + "userAgent": "Mozilla/5.0 (MeeGo; NokiaN9) AppleWebKit/534.13 (KHTML, like Gecko) NokiaBrowser/8.5.0 Mobile Safari/534.13", + "viewport": { + "width": 854, + "height": 480 + }, + "deviceScaleFactor": 1, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "webkit" + }, + "Pixel 2": { + "userAgent": "Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4498.0 Mobile Safari/537.36", + "viewport": { + "width": 411, + "height": 731 + }, + "deviceScaleFactor": 2.625, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Pixel 2 landscape": { + "userAgent": "Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4498.0 Mobile Safari/537.36", + "viewport": { + "width": 731, + "height": 411 + }, + "deviceScaleFactor": 2.625, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Pixel 2 XL": { + "userAgent": "Mozilla/5.0 (Linux; Android 8.0.0; Pixel 2 XL Build/OPD1.170816.004) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4498.0 Mobile Safari/537.36", + "viewport": { + "width": 411, + "height": 823 + }, + "deviceScaleFactor": 3.5, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Pixel 2 XL landscape": { + "userAgent": "Mozilla/5.0 (Linux; Android 8.0.0; Pixel 2 XL Build/OPD1.170816.004) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4498.0 Mobile Safari/537.36", + "viewport": { + "width": 823, + "height": 411 + }, + "deviceScaleFactor": 3.5, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Pixel 3": { + "userAgent": "Mozilla/5.0 (Linux; Android 9; Pixel 3 Build/PQ1A.181105.017.A1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4498.0 Mobile Safari/537.36", + "viewport": { + "width": 393, + "height": 786 + }, + "deviceScaleFactor": 2.75, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Pixel 3 landscape": { + "userAgent": "Mozilla/5.0 (Linux; Android 9; Pixel 3 Build/PQ1A.181105.017.A1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4498.0 Mobile Safari/537.36", + "viewport": { + "width": 786, + "height": 393 + }, + "deviceScaleFactor": 2.75, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Pixel 4": { + "userAgent": "Mozilla/5.0 (Linux; Android 10; Pixel 4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4498.0 Mobile Safari/537.36", + "viewport": { + "width": 353, + "height": 745 + }, + "deviceScaleFactor": 3, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Pixel 4 landscape": { + "userAgent": "Mozilla/5.0 (Linux; Android 10; Pixel 4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4498.0 Mobile Safari/537.36", + "viewport": { + "width": 745, + "height": 353 + }, + "deviceScaleFactor": 3, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Pixel 4a (5G)": { + "userAgent": "Mozilla/5.0 (Linux; Android 11; Pixel 4a (5G)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4498.0 Mobile Safari/537.36", + "screen": { + "width": 412, + "height": 892 + }, + "viewport": { + "width": 412, + "height": 765 + }, + "deviceScaleFactor": 2.63, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Pixel 4a (5G) landscape": { + "userAgent": "Mozilla/5.0 (Linux; Android 11; Pixel 4a (5G)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4498.0 Mobile Safari/537.36", + "screen": { + "height": 892, + "width": 412 + }, + "viewport": { + "width": 840, + "height": 312 + }, + "deviceScaleFactor": 2.63, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Pixel 5": { + "userAgent": "Mozilla/5.0 (Linux; Android 11; Pixel 5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4498.0 Mobile Safari/537.36", + "screen": { + "width": 393, + "height": 851 + }, + "viewport": { + "width": 393, + "height": 727 + }, + "deviceScaleFactor": 2.75, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Pixel 5 landscape": { + "userAgent": "Mozilla/5.0 (Linux; Android 11; Pixel 5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4498.0 Mobile Safari/537.36", + "screen": { + "width": 851, + "height": 393 + }, + "viewport": { + "width": 802, + "height": 293 + }, + "deviceScaleFactor": 2.75, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Moto G4": { + "userAgent": "Mozilla/5.0 (Linux; Android 7.0; Moto G (4)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4498.0 Mobile Safari/537.36", + "viewport": { + "width": 360, + "height": 640 + }, + "deviceScaleFactor": 3, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + }, + "Moto G4 landscape": { + "userAgent": "Mozilla/5.0 (Linux; Android 7.0; Moto G (4)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4498.0 Mobile Safari/537.36", + "viewport": { + "width": 640, + "height": 360 + }, + "deviceScaleFactor": 3, + "isMobile": true, + "hasTouch": true, + "defaultBrowserType": "chromium" + } +} \ No newline at end of file diff --git a/tests/inspector/cli-codegen-java.spec.ts b/tests/inspector/cli-codegen-java.spec.ts index 7177166535..42fb9a06f9 100644 --- a/tests/inspector/cli-codegen-java.spec.ts +++ b/tests/inspector/cli-codegen-java.spec.ts @@ -50,14 +50,14 @@ test('should print the correct context options when using a device', async ({ br test.skip(browserName !== 'chromium'); const cli = runCLI(['--device=Pixel 2', '--target=java', emptyHTML]); + await cli.waitFor(`setHasTouch(true));`); const expectedResult = `BrowserContext context = browser.newContext(new Browser.NewContextOptions() - .setUserAgent("Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Mobile Safari/537.36") + .setUserAgent("Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/XXXX Mobile Safari/537.36") .setViewportSize(411, 731) .setDeviceScaleFactor(2.625) .setIsMobile(true) .setHasTouch(true));`; - await cli.waitFor(expectedResult); - expect(cli.text()).toContain(expectedResult); + expect(cli.text().replace(/(.*Chrome\/)(.*?)( .*)/m, '$1XXXX$3')).toContain(expectedResult); }); test('should print the correct context options when using a device and additional options', async ({ browserName, runCLI }) => { diff --git a/tsconfig.json b/tsconfig.json index 1507a055a0..28b4b9bcbe 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -12,8 +12,9 @@ "declaration": false, "jsx": "react", "downlevelIteration": true, + "resolveJsonModule": true, }, "compileOnSave": true, - "include": ["src/**/*.ts", "src/**/*.js"], + "include": ["src/**/*.ts", "src/**/*.js", "src/server/deviceDescriptorsSource.json"], "exclude": ["node_modules", "src/.eslintrc.js", "src/web/**", "src/**/*webpack.config.js"] } diff --git a/utils/doclint/cli.js b/utils/doclint/cli.js index 3e4310e098..17ba53f4f9 100755 --- a/utils/doclint/cli.js +++ b/utils/doclint/cli.js @@ -43,8 +43,8 @@ async function run() { documentation.filterForLanguage('js'); // Patch README.md + const versions = await getBrowserVersions(); { - const versions = await getBrowserVersions(); const params = new Map(); const { chromium, firefox, webkit } = versions; params.set('chromium-version', chromium); @@ -65,6 +65,20 @@ async function run() { writeAssumeNoop(path.join(PROJECT_DIR, 'README.md'), content, dirtyFiles); } + // Update device descriptors + { + const devicesDescriptorsSourceFile = path.join(PROJECT_DIR, 'src', 'server', 'deviceDescriptorsSource.json') + const devicesDescriptors = require(devicesDescriptorsSourceFile) + for (const deviceName of Object.keys(devicesDescriptors)) + if (devicesDescriptors[deviceName].defaultBrowserType === 'chromium') { + devicesDescriptors[deviceName].userAgent = devicesDescriptors[deviceName].userAgent.replace( + /(.*Chrome\/)(.*?)( .*)/, + `$1${versions.chromium}$3` + ) + } + writeAssumeNoop(devicesDescriptorsSourceFile, JSON.stringify(devicesDescriptors, null, 2), dirtyFiles); + } + // Validate links { for (const file of fs.readdirSync(path.join(PROJECT_DIR, 'docs', 'src'))) {