From d42a34bc27c22160b031ee425e340251ad48b5f7 Mon Sep 17 00:00:00 2001 From: Norman Elton Date: Fri, 4 Jan 2019 10:21:14 -0500 Subject: [PATCH] Correctly parse Kindle Fire Silk UA Correctly parse newer Kindle Fire Silk user agents per Amazon's specifications: https://docs.aws.amazon.com/silk/latest/developerguide/user-agent.html --- platform.js | 30 ++++++++++++++++++++++-------- test/test.js | 16 +++++++++++++--- 2 files changed, 35 insertions(+), 11 deletions(-) diff --git a/platform.js b/platform.js index 937504a..a2d2df3 100644 --- a/platform.js +++ b/platform.js @@ -379,7 +379,7 @@ 'RockMelt', { 'label': 'Samsung Internet', 'pattern': 'SamsungBrowser' }, 'SeaMonkey', - { 'label': 'Silk', 'pattern': '(?:Cloud9|Silk-Accelerated)' }, + { 'label': 'Silk', 'pattern': '(?:Cloud9|Silk-Accelerated|Silk\/)' }, 'Sleipnir', 'SlimBrowser', { 'label': 'SRWare Iron', 'pattern': 'Iron' }, @@ -419,12 +419,12 @@ 'iPod', 'iPhone', 'Kindle', - { 'label': 'Kindle Fire', 'pattern': '(?:Cloud9|Silk-Accelerated)' }, 'Nexus', 'Nook', 'PlayBook', 'PlayStation Vita', 'PlayStation', + { 'label': 'Kindle Fire', 'pattern': '(?:Cloud9|Silk-Accelerated|Silk\/)' }, 'TouchPad', 'Transformer', { 'label': 'Wii U', 'pattern': 'WiiU' }, @@ -658,12 +658,26 @@ } // Detect Silk desktop/accelerated modes. else if (name == 'Silk') { - if (!/\bMobi/i.test(ua)) { - os = 'Android'; - description.unshift('desktop mode'); - } - if (/Accelerated *= *true/i.test(ua)) { - description.unshift('accelerated'); + if (/Accelerated/.test(ua)) { + // Gen 1 Kindle Fire + + if (!/\bMobi/i.test(ua)) { + os = 'Android'; + description.unshift('desktop mode'); + } + if (/Accelerated *= *true/i.test(ua)) { + description.unshift('accelerated'); + } + } else { + if (/^Mozilla\/5\.0 \(Linux; Android/.test(ua)) { + description.unshift('tablet mode'); + } else if (/^Mozilla\/5\.0 \(X11;/.test(ua)) { + description.unshift('desktop mode'); + } else if (/^Mozilla\/5\.0 \(Macintosh;/.test(ua)) { + description.unshift('desktop mode'); + } else if (/^Mozilla\/5\.0 \(Linux; U;/.test(ua)) { + description.unshift('mobile mode'); + } } } // Detect PaleMoon identifying as Firefox. diff --git a/test/test.js b/test/test.js index 49f8b06..4321593 100644 --- a/test/test.js +++ b/test/test.js @@ -2372,7 +2372,7 @@ 'version': '1.0.13.81' }, - 'Silk 1.0.0 on Amazon Kindle Fire (Android 2.3.4)': { + 'Silk 1.0.0 (mobile mode) on Amazon Kindle Fire (Android 2.3.4)': { 'ua': 'Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; Cloud9/1.0.0) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1', 'layout': 'WebKit', 'manufacturer': 'Amazon', @@ -2382,12 +2382,12 @@ 'version': '1.0.0' }, - 'Silk 1.0.0 (desktop mode) on Amazon Kindle Fire': { + 'Silk 1.0.0 (desktop mode) on Amazon Kindle Fire (OS X 10.6.3)': { 'ua': 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; en-us; Cloud9/1.0.0) AppleWebKit/533.16 (KHTML, like Gecko) Version/5.0 Safari/533.16', 'layout': 'WebKit', 'manufacturer': 'Amazon', 'name': 'Silk', - 'os': 'Android', + 'os': 'OS X 10.6.3', 'product': 'Kindle Fire', 'version': '1.0.0' }, @@ -2432,6 +2432,16 @@ 'version': '1.1.0' }, + 'Silk 70.5.1 (tablet mode) on Amazon Kindle Fire (Android 5.1.1)': { + 'ua': 'Mozilla/5.0 (Linux; Android 5.1.1; KFDOWI) AppleWebKit/537.36 (KHTML, like Gecko) Silk/70.5.1 like Chrome/70.0.3538.110 Safari/537.36', + 'layout': 'Blink', + 'manufacturer': 'Amazon', + 'name': 'Silk', + 'os': 'Android 5.1.1', + 'product': 'Kindle Fire', + 'version': '70.5.1' + }, + 'Sleipnir 2.8.4 on Windows XP': { 'ua': 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Sleipnir 2.8.4)', 'layout': 'Trident',