From cd8d75062826ee9dcb511126d000773413a9c681 Mon Sep 17 00:00:00 2001 From: Andrey Lushnikov Date: Thu, 14 Jun 2018 13:55:09 -0700 Subject: [PATCH] fix(devicedescriptors): fix UA in DeviceDescriptors (#2741) This patch: - updates `utils/fetch_devices.js` script to format UAs for Chrome UAs and to add iPhone 6/7/8 as separate devices. - re-generates `DeviceDescriptors.js` with the new script Fixes #2730. --- DeviceDescriptors.js | 192 +++++++++++++++++++++++++++++++++-------- utils/fetch_devices.js | 35 ++++++-- 2 files changed, 182 insertions(+), 45 deletions(-) diff --git a/DeviceDescriptors.js b/DeviceDescriptors.js index d1eee254..65e003e0 100644 --- a/DeviceDescriptors.js +++ b/DeviceDescriptors.js @@ -137,7 +137,7 @@ module.exports = [ }, { 'name': 'Galaxy S5', - 'userAgent': 'Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Mobile Safari/537.36', + 'userAgent': 'Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3452.0 Mobile Safari/537.36', 'viewport': { 'width': 360, 'height': 640, @@ -149,7 +149,7 @@ module.exports = [ }, { 'name': 'Galaxy S5 landscape', - 'userAgent': 'Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Mobile Safari/537.36', + 'userAgent': 'Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3452.0 Mobile Safari/537.36', 'viewport': { 'width': 640, 'height': 360, @@ -161,7 +161,7 @@ module.exports = [ }, { 'name': 'iPad', - 'userAgent': 'Mozilla/5.0 (iPad; CPU OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1', + 'userAgent': 'Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1', 'viewport': { 'width': 768, 'height': 1024, @@ -173,7 +173,7 @@ module.exports = [ }, { 'name': 'iPad landscape', - 'userAgent': 'Mozilla/5.0 (iPad; CPU OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1', + 'userAgent': 'Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1', 'viewport': { 'width': 1024, 'height': 768, @@ -185,7 +185,7 @@ module.exports = [ }, { 'name': 'iPad Mini', - 'userAgent': 'Mozilla/5.0 (iPad; CPU OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1', + 'userAgent': 'Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1', 'viewport': { 'width': 768, 'height': 1024, @@ -197,7 +197,7 @@ module.exports = [ }, { 'name': 'iPad Mini landscape', - 'userAgent': 'Mozilla/5.0 (iPad; CPU OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1', + 'userAgent': 'Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1', 'viewport': { 'width': 1024, 'height': 768, @@ -209,7 +209,7 @@ module.exports = [ }, { 'name': 'iPad Pro', - 'userAgent': 'Mozilla/5.0 (iPad; CPU OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1', + 'userAgent': 'Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1', 'viewport': { 'width': 1024, 'height': 1366, @@ -221,7 +221,7 @@ module.exports = [ }, { 'name': 'iPad Pro landscape', - 'userAgent': 'Mozilla/5.0 (iPad; CPU OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1', + 'userAgent': 'Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1', 'viewport': { 'width': 1366, 'height': 1024, @@ -233,7 +233,7 @@ module.exports = [ }, { 'name': 'iPhone 4', - 'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1', + 'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_2 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Version/7.0 Mobile/11D257 Safari/9537.53', 'viewport': { 'width': 320, 'height': 480, @@ -245,7 +245,7 @@ module.exports = [ }, { 'name': 'iPhone 4 landscape', - 'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1', + 'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_2 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Version/7.0 Mobile/11D257 Safari/9537.53', 'viewport': { 'width': 480, 'height': 320, @@ -257,7 +257,7 @@ module.exports = [ }, { 'name': 'iPhone 5', - 'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1', + '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, @@ -269,7 +269,7 @@ module.exports = [ }, { 'name': 'iPhone 5 landscape', - 'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1', + '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, @@ -281,7 +281,7 @@ module.exports = [ }, { 'name': 'iPhone 6', - 'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1', + '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, @@ -293,7 +293,7 @@ module.exports = [ }, { 'name': 'iPhone 6 landscape', - 'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1', + '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, @@ -305,7 +305,7 @@ module.exports = [ }, { 'name': 'iPhone 6 Plus', - 'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1', + '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, @@ -317,7 +317,7 @@ module.exports = [ }, { 'name': 'iPhone 6 Plus landscape', - 'userAgent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1', + '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, @@ -327,6 +327,126 @@ module.exports = [ 'isLandscape': true } }, + { + 'name': '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, + 'isLandscape': false + } + }, + { + 'name': '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, + 'isLandscape': true + } + }, + { + 'name': '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, + 'isLandscape': false + } + }, + { + 'name': '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, + 'isLandscape': true + } + }, + { + 'name': '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, + 'isLandscape': false + } + }, + { + 'name': '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, + 'isLandscape': true + } + }, + { + 'name': '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, + 'isLandscape': false + } + }, + { + 'name': '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, + 'isLandscape': true + } + }, + { + 'name': '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, + 'isLandscape': false + } + }, + { + 'name': '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, + 'isLandscape': true + } + }, { 'name': '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', @@ -377,7 +497,7 @@ module.exports = [ }, { 'name': '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/%s Mobile Safari/537.36', + '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/69.0.3452.0 Mobile Safari/537.36', 'viewport': { 'width': 384, 'height': 640, @@ -389,7 +509,7 @@ module.exports = [ }, { 'name': '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/%s Mobile Safari/537.36', + '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/69.0.3452.0 Mobile Safari/537.36', 'viewport': { 'width': 640, 'height': 384, @@ -437,7 +557,7 @@ module.exports = [ }, { 'name': 'Nexus 10', - 'userAgent': 'Mozilla/5.0 (Linux; Android 4.3; Nexus 10 Build/JSS15Q) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Safari/537.36', + 'userAgent': 'Mozilla/5.0 (Linux; Android 6.0.1; Nexus 10 Build/MOB31T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3452.0 Safari/537.36', 'viewport': { 'width': 800, 'height': 1280, @@ -449,7 +569,7 @@ module.exports = [ }, { 'name': 'Nexus 10 landscape', - 'userAgent': 'Mozilla/5.0 (Linux; Android 4.3; Nexus 10 Build/JSS15Q) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Safari/537.36', + 'userAgent': 'Mozilla/5.0 (Linux; Android 6.0.1; Nexus 10 Build/MOB31T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3452.0 Safari/537.36', 'viewport': { 'width': 1280, 'height': 800, @@ -461,7 +581,7 @@ module.exports = [ }, { 'name': 'Nexus 4', - 'userAgent': 'Mozilla/5.0 (Linux; Android 4.4.2; Nexus 4 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Mobile Safari/537.36', + 'userAgent': 'Mozilla/5.0 (Linux; Android 4.4.2; Nexus 4 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3452.0 Mobile Safari/537.36', 'viewport': { 'width': 384, 'height': 640, @@ -473,7 +593,7 @@ module.exports = [ }, { 'name': 'Nexus 4 landscape', - 'userAgent': 'Mozilla/5.0 (Linux; Android 4.4.2; Nexus 4 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Mobile Safari/537.36', + 'userAgent': 'Mozilla/5.0 (Linux; Android 4.4.2; Nexus 4 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3452.0 Mobile Safari/537.36', 'viewport': { 'width': 640, 'height': 384, @@ -485,7 +605,7 @@ module.exports = [ }, { 'name': 'Nexus 5', - 'userAgent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Mobile Safari/537.36', + 'userAgent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3452.0 Mobile Safari/537.36', 'viewport': { 'width': 360, 'height': 640, @@ -497,7 +617,7 @@ module.exports = [ }, { 'name': 'Nexus 5 landscape', - 'userAgent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Mobile Safari/537.36', + 'userAgent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3452.0 Mobile Safari/537.36', 'viewport': { 'width': 640, 'height': 360, @@ -509,7 +629,7 @@ module.exports = [ }, { 'name': 'Nexus 5X', - 'userAgent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Mobile Safari/537.36', + 'userAgent': 'Mozilla/5.0 (Linux; Android 8.0.0; Nexus 5X Build/OPR4.170623.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3452.0 Mobile Safari/537.36', 'viewport': { 'width': 412, 'height': 732, @@ -521,7 +641,7 @@ module.exports = [ }, { 'name': 'Nexus 5X landscape', - 'userAgent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Mobile Safari/537.36', + 'userAgent': 'Mozilla/5.0 (Linux; Android 8.0.0; Nexus 5X Build/OPR4.170623.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3452.0 Mobile Safari/537.36', 'viewport': { 'width': 732, 'height': 412, @@ -533,7 +653,7 @@ module.exports = [ }, { 'name': 'Nexus 6', - 'userAgent': 'Mozilla/5.0 (Linux; Android 5.1.1; Nexus 6 Build/LYZ28E) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Mobile Safari/537.36', + 'userAgent': 'Mozilla/5.0 (Linux; Android 7.1.1; Nexus 6 Build/N6F26U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3452.0 Mobile Safari/537.36', 'viewport': { 'width': 412, 'height': 732, @@ -545,7 +665,7 @@ module.exports = [ }, { 'name': 'Nexus 6 landscape', - 'userAgent': 'Mozilla/5.0 (Linux; Android 5.1.1; Nexus 6 Build/LYZ28E) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Mobile Safari/537.36', + 'userAgent': 'Mozilla/5.0 (Linux; Android 7.1.1; Nexus 6 Build/N6F26U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3452.0 Mobile Safari/537.36', 'viewport': { 'width': 732, 'height': 412, @@ -557,7 +677,7 @@ module.exports = [ }, { 'name': 'Nexus 6P', - 'userAgent': 'Mozilla/5.0 (Linux; Android 5.1.1; Nexus 6 Build/LYZ28E) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Mobile Safari/537.36', + 'userAgent': 'Mozilla/5.0 (Linux; Android 8.0.0; Nexus 6P Build/OPP3.170518.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3452.0 Mobile Safari/537.36', 'viewport': { 'width': 412, 'height': 732, @@ -569,7 +689,7 @@ module.exports = [ }, { 'name': 'Nexus 6P landscape', - 'userAgent': 'Mozilla/5.0 (Linux; Android 5.1.1; Nexus 6 Build/LYZ28E) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Mobile Safari/537.36', + 'userAgent': 'Mozilla/5.0 (Linux; Android 8.0.0; Nexus 6P Build/OPP3.170518.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3452.0 Mobile Safari/537.36', 'viewport': { 'width': 732, 'height': 412, @@ -581,7 +701,7 @@ module.exports = [ }, { 'name': 'Nexus 7', - 'userAgent': 'Mozilla/5.0 (Linux; Android 4.3; Nexus 7 Build/JSS15Q) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Safari/537.36', + 'userAgent': 'Mozilla/5.0 (Linux; Android 6.0.1; Nexus 7 Build/MOB30X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3452.0 Safari/537.36', 'viewport': { 'width': 600, 'height': 960, @@ -593,7 +713,7 @@ module.exports = [ }, { 'name': 'Nexus 7 landscape', - 'userAgent': 'Mozilla/5.0 (Linux; Android 4.3; Nexus 7 Build/JSS15Q) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Safari/537.36', + 'userAgent': 'Mozilla/5.0 (Linux; Android 6.0.1; Nexus 7 Build/MOB30X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3452.0 Safari/537.36', 'viewport': { 'width': 960, 'height': 600, @@ -653,7 +773,7 @@ module.exports = [ }, { 'name': 'Pixel 2', - 'userAgent': 'Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Mobile Safari/537.36', + 'userAgent': 'Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3452.0 Mobile Safari/537.36', 'viewport': { 'width': 411, 'height': 731, @@ -665,7 +785,7 @@ module.exports = [ }, { 'name': 'Pixel 2 landscape', - 'userAgent': 'Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Mobile Safari/537.36', + 'userAgent': 'Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3452.0 Mobile Safari/537.36', 'viewport': { 'width': 731, 'height': 411, @@ -677,7 +797,7 @@ module.exports = [ }, { 'name': '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/65.0.3325.181 Mobile Safari/537.36', + 'userAgent': 'Mozilla/5.0 (Linux; Android 8.0.0; Pixel 2 XL Build/OPD1.170816.004) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3452.0 Mobile Safari/537.36', 'viewport': { 'width': 411, 'height': 823, @@ -689,7 +809,7 @@ module.exports = [ }, { 'name': '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/65.0.3325.181 Mobile Safari/537.36', + 'userAgent': 'Mozilla/5.0 (Linux; Android 8.0.0; Pixel 2 XL Build/OPD1.170816.004) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3452.0 Mobile Safari/537.36', 'viewport': { 'width': 823, 'height': 411, diff --git a/utils/fetch_devices.js b/utils/fetch_devices.js index 8b377509..98b03f21 100755 --- a/utils/fetch_devices.js +++ b/utils/fetch_devices.js @@ -18,6 +18,7 @@ const util = require('util'); const fs = require('fs'); const path = require('path'); +const puppeteer = require('..'); const DEVICES_URL = 'https://raw.githubusercontent.com/ChromeDevTools/devtools-frontend/master/front_end/emulated_devices/module.json'; const template = `/** @@ -37,7 +38,7 @@ const template = `/** */ module.exports = %s; -for (let device of module.exports) +for (const device of module.exports) module.exports[device.name] = device; `; @@ -71,6 +72,9 @@ if (!outputPath) { main(url); async function main(url) { + const browser = await puppeteer.launch(); + const chromeVersion = (await browser.version()).split('/').pop(); + await browser.close(); console.log('GET ' + url); const text = await httpGET(url); let json = null; @@ -83,11 +87,22 @@ async function main(url) { const devicePayloads = json.extensions.filter(extension => extension.type === 'emulated-device').map(extension => extension.device); let devices = []; for (const payload of devicePayloads) { - const device = createDevice(payload, false); - const landscape = createDevice(payload, true); - devices.push(device); - if (landscape.viewport.width !== device.viewport.width || landscape.viewport.height !== device.viewport.height) - devices.push(landscape); + let names = []; + if (payload.title === 'iPhone 6/7/8') + names = ['iPhone 6', 'iPhone 7', 'iPhone 8']; + else if (payload.title === 'iPhone 6/7/8 Plus') + names = ['iPhone 6 Plus', 'iPhone 7 Plus', 'iPhone 8 Plus']; + else if (payload.title === 'iPhone 5/SE') + names = ['iPhone 5', 'iPhone SE']; + else + names = [payload.title]; + for (const name of names) { + const device = createDevice(chromeVersion, name, payload, false); + const landscape = createDevice(chromeVersion, name, payload, true); + devices.push(device); + if (landscape.viewport.width !== device.viewport.width || landscape.viewport.height !== device.viewport.height) + devices.push(landscape); + } } devices = devices.filter(device => device.viewport.isMobile); devices.sort((a, b) => a.name.localeCompare(b.name)); @@ -100,16 +115,18 @@ async function main(url) { } /** + * @param {string} chromeVersion + * @param {string} deviceName * @param {*} descriptor * @param {boolean} landscape * @return {!Object} */ -function createDevice(descriptor, landscape) { +function createDevice(chromeVersion, deviceName, descriptor, landscape) { const devicePayload = loadFromJSONV1(descriptor); const viewportPayload = landscape ? devicePayload.horizontal : devicePayload.vertical; return { - name: descriptor.title + (landscape ? ' landscape' : ''), - userAgent: devicePayload.userAgent, + name: deviceName + (landscape ? ' landscape' : ''), + userAgent: devicePayload.userAgent.includes('%s') ? util.format(devicePayload.userAgent, chromeVersion) : devicePayload.userAgent, viewport: { width: viewportPayload.width, height: viewportPayload.height,