From 7307dc6892382577ce322f93d845849cde50f31c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 14 Mar 2026 14:30:58 +0000 Subject: [PATCH] Add WebView detection for Android and iOS Co-authored-by: naorpeled <6171622+naorpeled@users.noreply.github.com> --- src/constants.js | 4 ++ src/parser-browsers.js | 40 ++++++++++++++++++ test/acceptance/useragentstrings.yml | 63 ++++++++++++++++++++++++++++ 3 files changed, 107 insertions(+) diff --git a/src/constants.js b/src/constants.js index 2d06c97..44b7c0f 100644 --- a/src/constants.js +++ b/src/constants.js @@ -11,6 +11,7 @@ export const BROWSER_ALIASES_MAP = { BlackBerry: 'blackberry', 'ChatGPT-User': 'chatgpt_user', Chrome: 'chrome', + 'Chrome WebView': 'chrome_webview', ClaudeBot: 'claudebot', Chromium: 'chromium', Diffbot: 'diffbot', @@ -26,6 +27,7 @@ export const BROWSER_ALIASES_MAP = { Googlebot: 'googlebot', GPTBot: 'gptbot', 'Internet Explorer': 'ie', + 'iOS WebView': 'ios_webview', InternetArchiveCrawler: 'internetarchivecrawler', 'K-Meleon': 'k_meleon', LibreWolf: 'librewolf', @@ -82,6 +84,7 @@ export const BROWSER_MAP = { brave: 'Brave', chatgpt_user: 'ChatGPT-User', chrome: 'Chrome', + chrome_webview: 'Chrome WebView', claudebot: 'ClaudeBot', chromium: 'Chromium', diffbot: 'Diffbot', @@ -98,6 +101,7 @@ export const BROWSER_MAP = { googlebot: 'Googlebot', gptbot: 'GPTBot', ie: 'Internet Explorer', + ios_webview: 'iOS WebView', internetarchivecrawler: 'InternetArchiveCrawler', k_meleon: 'K-Meleon', librewolf: 'LibreWolf', diff --git a/src/parser-browsers.js b/src/parser-browsers.js index 1cc8440..cc45a10 100644 --- a/src/parser-browsers.js +++ b/src/parser-browsers.js @@ -1092,6 +1092,25 @@ const browsersList = [ return browser; }, }, + /* Android WebView */ + { + test(parser) { + return parser.test(/android/i) && parser.test(/; wv\)/i); + }, + describe(ua) { + const browser = { + name: 'Chrome WebView', + }; + const version = Utils.getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.?_?\d+)+)/i, ua); + + if (version) { + browser.version = version; + } + + return browser; + }, + }, + { test: [/chrome|crios|crmo/i], describe(ua) { @@ -1161,6 +1180,27 @@ const browsersList = [ }, }, + /* iOS WebView */ + { + test(parser) { + return parser.test(/(iPhone|iPad|iPod)/i) + && parser.test(/AppleWebKit/i) + && !parser.test(/Safari/i); + }, + describe(ua) { + const browser = { + name: 'iOS WebView', + }; + const version = Utils.getFirstMatch(/AppleWebKit\/(\d+(\.?_?\d+)+)/i, ua); + + if (version) { + browser.version = version; + } + + return browser; + }, + }, + /* Safari */ { test: [/safari|applewebkit/i], diff --git a/test/acceptance/useragentstrings.yml b/test/acceptance/useragentstrings.yml index 2c62c7e..36ce7c5 100644 --- a/test/acceptance/useragentstrings.yml +++ b/test/acceptance/useragentstrings.yml @@ -3831,3 +3831,66 @@ engine: name: "Gecko" version: "20100101" + Chrome WebView: + - + ua: "Mozilla/5.0 (Linux; Android 5.1.1; Nexus 5 Build/LMY48B; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/43.0.2357.65 Mobile Safari/537.36" + spec: + browser: + name: "Chrome WebView" + version: "43.0.2357.65" + os: + name: "Android" + version: "5.1.1" + versionName: "Lollipop" + platform: + type: "mobile" + vendor: "Nexus" + engine: + name: "Blink" + - + ua: "Mozilla/5.0 (Linux; Android 8.0.0; SM-G9300 Build/R16NW; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/64.0.3282.137 Mobile Safari/537.36" + spec: + browser: + name: "Chrome WebView" + version: "64.0.3282.137" + os: + name: "Android" + version: "8.0.0" + versionName: "Oreo" + platform: + type: "mobile" + engine: + name: "Blink" + iOS WebView: + - + ua: "Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/603.1.23 (KHTML, like Gecko) Mobile/14E5239e" + spec: + browser: + name: "iOS WebView" + version: "603.1.23" + os: + name: "iOS" + version: "10.3" + platform: + type: "mobile" + vendor: "Apple" + model: "iPhone" + engine: + name: "WebKit" + version: "603.1.23" + - + ua: "Mozilla/5.0 (iPad; CPU OS 9_0 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/13A344" + spec: + browser: + name: "iOS WebView" + version: "601.1.46" + os: + name: "iOS" + version: "9.0" + platform: + type: "tablet" + vendor: "Apple" + model: "iPad" + engine: + name: "WebKit" + version: "601.1.46"