browser 2.7.1 → 5.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/ISSUE_TEMPLATE.md +1 -1
- data/.github/workflows/tests.yml +57 -0
- data/.gitignore +1 -0
- data/.prettierignore +1 -0
- data/.rubocop.yml +13 -1
- data/CHANGELOG.md +122 -13
- data/FUNDING.yml +3 -0
- data/README.md +134 -88
- data/Rakefile +8 -1
- data/bot_exceptions.yml +1 -0
- data/bots.yml +300 -293
- data/browser.gemspec +4 -1
- data/gemfiles/{rails5.gemfile → rails6_1.gemfile} +1 -1
- data/lib/browser/accept_language.rb +4 -4
- data/lib/browser/aliases.rb +1 -1
- data/lib/browser/alipay.rb +1 -1
- data/lib/browser/base.rb +82 -18
- data/lib/browser/blackberry.rb +1 -1
- data/lib/browser/bot/empty_user_agent_matcher.rb +11 -0
- data/lib/browser/bot/keyword_matcher.rb +11 -0
- data/lib/browser/bot/known_bots_matcher.rb +11 -0
- data/lib/browser/bot.rb +34 -26
- data/lib/browser/browser.rb +59 -56
- data/lib/browser/chrome.rb +13 -3
- data/lib/browser/device/android.rb +1 -1
- data/lib/browser/device/blackberry_playbook.rb +1 -1
- data/lib/browser/device/ipad.rb +1 -1
- data/lib/browser/device/iphone.rb +1 -1
- data/lib/browser/device/ipod_touch.rb +1 -1
- data/lib/browser/device/kindle.rb +1 -1
- data/lib/browser/device/kindle_fire.rb +1 -1
- data/lib/browser/device/playstation3.rb +1 -1
- data/lib/browser/device/playstation4.rb +1 -1
- data/lib/browser/device/psp.rb +1 -1
- data/lib/browser/device/psvita.rb +1 -1
- data/lib/browser/device/samsung.rb +33 -0
- data/lib/browser/device/surface.rb +1 -1
- data/lib/browser/device/switch.rb +1 -1
- data/lib/browser/device/tv.rb +1 -1
- data/lib/browser/device/unknown.rb +1 -1
- data/lib/browser/device/wii.rb +1 -1
- data/lib/browser/device/wiiu.rb +1 -1
- data/lib/browser/device/xbox_360.rb +1 -1
- data/lib/browser/device/xbox_one.rb +1 -1
- data/lib/browser/device.rb +37 -27
- data/lib/browser/duck_duck_go.rb +22 -0
- data/lib/browser/edge.rb +3 -3
- data/lib/browser/electron.rb +1 -1
- data/lib/browser/facebook.rb +1 -1
- data/lib/browser/firefox.rb +1 -1
- data/lib/browser/google_search_app.rb +21 -0
- data/lib/browser/huawei_browser.rb +21 -0
- data/lib/browser/instagram.rb +1 -1
- data/lib/browser/internet_explorer.rb +2 -2
- data/lib/browser/maxthon.rb +21 -0
- data/lib/browser/meta/base.rb +0 -1
- data/lib/browser/meta.rb +12 -13
- data/lib/browser/micro_messenger.rb +1 -1
- data/lib/browser/middleware/context/additions.rb +1 -1
- data/lib/browser/middleware.rb +1 -1
- data/lib/browser/miui_browser.rb +21 -0
- data/lib/browser/nokia.rb +1 -1
- data/lib/browser/opera.rb +1 -1
- data/lib/browser/otter.rb +1 -1
- data/lib/browser/phantom_js.rb +1 -1
- data/lib/browser/platform/adobe_air.rb +1 -1
- data/lib/browser/platform/android.rb +1 -1
- data/lib/browser/platform/base.rb +3 -2
- data/lib/browser/platform/blackberry.rb +1 -1
- data/lib/browser/platform/chrome_os.rb +1 -1
- data/lib/browser/platform/firefox_os.rb +1 -1
- data/lib/browser/platform/ios.rb +2 -2
- data/lib/browser/platform/kai_os.rb +23 -0
- data/lib/browser/platform/linux.rb +1 -1
- data/lib/browser/platform/mac.rb +5 -3
- data/lib/browser/platform/{other.rb → unknown.rb} +3 -3
- data/lib/browser/platform/windows.rb +2 -2
- data/lib/browser/platform/windows_mobile.rb +1 -1
- data/lib/browser/platform/windows_phone.rb +1 -1
- data/lib/browser/platform.rb +37 -28
- data/lib/browser/qq.rb +1 -1
- data/lib/browser/rails.rb +3 -3
- data/lib/browser/safari.rb +16 -1
- data/lib/browser/samsung_browser.rb +21 -0
- data/lib/browser/snapchat.rb +1 -1
- data/lib/browser/sougou_browser.rb +24 -0
- data/lib/browser/sputnik.rb +2 -5
- data/lib/browser/uc_browser.rb +1 -1
- data/lib/browser/{generic.rb → unknown.rb} +3 -3
- data/lib/browser/version.rb +1 -1
- data/lib/browser/weibo.rb +1 -1
- data/lib/browser/yandex.rb +1 -1
- data/lib/browser.rb +2 -2
- data/samsung.yml +138 -0
- data/test/browser_test.rb +37 -10
- data/test/test_helper.rb +8 -0
- data/test/ua.yml +26 -3
- data/test/ua_bots.yml +9 -2
- data/test/ua_search_engines.yml +1 -0
- data/test/unit/accept_language_test.rb +6 -0
- data/test/unit/adobe_air_test.rb +1 -1
- data/test/unit/alipay_test.rb +6 -0
- data/test/unit/blackberry_test.rb +0 -6
- data/test/unit/bots_test.rb +26 -39
- data/test/unit/chrome_test.rb +8 -3
- data/test/unit/console_test.rb +2 -2
- data/test/unit/device_test.rb +30 -3
- data/test/unit/duck_duck_go_test.rb +37 -0
- data/test/unit/edge_test.rb +34 -6
- data/test/unit/firefox_test.rb +0 -3
- data/test/unit/google_search_app_test.rb +54 -0
- data/test/unit/huawei_browser_test.rb +25 -0
- data/test/unit/internet_explorer_test.rb +0 -12
- data/test/unit/ios_test.rb +0 -5
- data/test/unit/kai_os_test.rb +31 -0
- data/test/unit/kindle_test.rb +0 -2
- data/test/unit/maxthon_test.rb +25 -0
- data/test/unit/meta_test.rb +10 -2
- data/test/unit/micro_messenger_test.rb +21 -6
- data/test/unit/miui_browser_test.rb +25 -0
- data/test/unit/opera_test.rb +1 -2
- data/test/unit/platform_test.rb +13 -8
- data/test/unit/qq_test.rb +12 -0
- data/test/unit/safari_test.rb +12 -7
- data/test/unit/samsung_browser_test.rb +23 -0
- data/test/unit/sougou_browser_test.rb +41 -0
- data/test/unit/sputnik_test.rb +1 -0
- metadata +46 -16
- data/.bundle/config +0 -2
- data/.travis.yml +0 -23
- data/lib/browser/meta/modern.rb +0 -11
- /data/gemfiles/{rails6.gemfile → rails6_0.gemfile} +0 -0
data/test/ua.yml
CHANGED
|
@@ -18,6 +18,7 @@ ANDROID_LOLLIPOP_50: Mozilla/5.0 (Linux; Android 5.0; Nexus 5 Build/LPX13D) Appl
|
|
|
18
18
|
ANDROID_LOLLIPOP_51: Mozilla/5.0 (Linux; Android 5.1; Nexus 5 Build/LMY47I) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/40.0.0.0 Mobile Safari/537.36; DailymotionEmbedSDK 1.0
|
|
19
19
|
ANDROID_NEXUS_PLAYER: Mozilla/5.0 (Linux; Android 5.0; Nexus Player Build/LRX21V) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.0
|
|
20
20
|
ANDROID_OREO: Mozilla/5.0 (Linux; Android 8.0.0; Pixel Build/OPR6.170623.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.03112.107 Mobile Safari/537.36
|
|
21
|
+
ANDROID_Q: Mozilla/5.0 (Linux; Android 10; Pixel 2 Build/QQ1A.191205.008; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/78.0.3904.108 Mobile Safari/537.36
|
|
21
22
|
ANDROID_TV: Mozilla/5.0 (Linux; Android 5.0; ADT-1 Build/LRW87K) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/37.0.0.0 Mobile Safari/537.36
|
|
22
23
|
ANDROID_WEBVIEW: 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
|
|
23
24
|
ANDROID_WITH_SAFARI: "Mozilla/5.0 (Linux; U; Android 4.3; en-us; SCH-I535 Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30"
|
|
@@ -31,6 +32,8 @@ CHROME: "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-US) AppleWebKit/53
|
|
|
31
32
|
CHROME_OS: "Mozilla/5.0 (X11; CrOS x86_64 3701.81.0) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.57 Safari/537.31."
|
|
32
33
|
COREMEDIA: "Apple Mac OS X v10.6.4 CoreMedia v1.0.0.10F569"
|
|
33
34
|
CUSTOM_APP: "Our App 0.0.1 (Linux; Android 4.0.3; HTC Ruby Build/IML74K; en_CA)"
|
|
35
|
+
DUCKDUCKGO_BROWSER_ANDROID: Mozilla/5.0 (Linux; Android 10) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/78.0.3904.96 Mobile Safari/537.36 DuckDuckGo/5"
|
|
36
|
+
DUCKDUCKGO_BROWSER_IOS: "Mozilla/5.0 (iPhone; CPU iPhone OS 13_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 DuckDuckGo/7"
|
|
34
37
|
ELECTRON: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Electron/1.4.12 Safari/537.36"
|
|
35
38
|
FACEBOOK: Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_3 like Mac OS X) AppleWebKit/603.3.8 (KHTML, like Gecko) Mobile/14G60 [FBAN/FBIOS;FBAV/135.0.0.45.90;FBBV/66877072;FBDV/iPhone9,3;FBMD/iPhone;FBSN/iOS;FBSV/10.3.3;FBSS/2;FBCR/AT&T;FBID/phone;FBLC/en_US;FBOP/5;FBRV/0]
|
|
36
39
|
FACEBOOK_ANDROID: "Mozilla/5.0 (Linux; Android 9; ONEPLUS A6003 Build/PKQ1.180716.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/73.0.3683.90 Mobile Safari/537.36 [FB_IAB/FB4A;FBAV/214.0.0.43.83;]"
|
|
@@ -41,6 +44,10 @@ FIREFOX_IOS: "Mozilla/5.0 (iPhone; CPU iPhone OS 9_2 like Mac OS X) AppleWebKit/
|
|
|
41
44
|
FIREFOX_MODERN: "Mozilla/5.0 (X11; Ubuntu; Linux armv7l; rv:17.0) Gecko/20100101 Firefox/17.0"
|
|
42
45
|
FIREFOX_OS: "Mozilla/5.0 (Mobile; rv:18.0) Gecko/18.0 Firefox/18.0"
|
|
43
46
|
FIREFOX_TABLET: "Mozilla/5.0 (Android; Tablet; rv:14.0) Gecko/14.0 Firefox/14.0"
|
|
47
|
+
GOOGLE_SEARCH_APP_ANDROID: "Mozilla/5.0 (Linux; Android 10; SM-G960U Build/QP1A.190711.020; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/81.0.4044.117 Mobile Safari/537.36 GSA/11.6.8.21.arm64"
|
|
48
|
+
GOOGLE_SEARCH_APP_IPAD: "Mozilla/5.0 (iPad; CPU OS 12_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) GSA/102.0.304944559 Mobile/15E148 Safari/605.1"
|
|
49
|
+
GOOGLE_SEARCH_APP_IPHONE: "Mozilla/5.0 (iPhone; CPU iPhone OS 13_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) GSA/105.0.307913796 Mobile/17D50 Safari/604.1"
|
|
50
|
+
HUAWEI_BROWSER: "Mozilla/5.0 (Linux; Android 10; HMA-AL00; HMSCore 5.0.0.304; GMSCore 19.6.29) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 HuaweiBrowser/10.1.2.300 Mobile Safari/537.36"
|
|
44
51
|
IE10: "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0; EIE10;ENUSMSN)"
|
|
45
52
|
IE10_COMPAT: "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; EIE10;ENUSMSN)"
|
|
46
53
|
IE10_X64_WINX64: "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0)"
|
|
@@ -57,6 +64,7 @@ IE9_COMPAT: "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/5.0)"
|
|
|
57
64
|
IE_WITHOUT_TRIDENT: Mozilla/4.0 (compatible; MSIE8.0; Windows NT 6.0) .NET CLR 2.0.50727)
|
|
58
65
|
INSTAGRAM: "Mozilla/5.0 (iPhone; CPU iPhone OS 11_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E216 Instagram 41.0.0.14.90 (iPhone9,3; iOS 11_3; pl_PL; pl-PL; scale=2.00; gamut=wide; 750x1334)"
|
|
59
66
|
INSTAGRAM_OTHER: "Instagram/182257141 CFNetwork/1107.1 Darwin/19.0.0"
|
|
67
|
+
IOS12: "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"
|
|
60
68
|
IOS3: "Mozilla/5.0 (iPad; U; CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B314 Safari/531.21.10"
|
|
61
69
|
IOS4: "Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7"
|
|
62
70
|
IOS5: "Mozilla/5.0 (iPhone; CPU iPhone OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3"
|
|
@@ -66,22 +74,29 @@ IOS8: "Mozilla/5.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/600.1.4
|
|
|
66
74
|
IOS8_1_2: 'Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_2 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B440 Safari/600.1.4'
|
|
67
75
|
IOS8_3: 'Mozilla/5.0 (iPhone; CPU iPhone OS 8_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12F70 Safari/600.1.4'
|
|
68
76
|
IOS9: "Mozilla/5.0 (iPad; CPU OS 9_0 like Mac OS X) AppleWebKit/601.1.17 (KHTML, like Gecko) Version/8.0 Mobile/13A175 Safari/600.1.4"
|
|
69
|
-
IOS12: "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"
|
|
70
77
|
IOS_WEBVIEW: Mozilla/5.0 (iPhone; CPU iPhone OS 8_4 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12H141
|
|
71
78
|
IPAD: "Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B367 Safari/531.21.10"
|
|
72
79
|
IPHONE: "Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit/420.1 (KHTML, like Gecko) Version/3.0 Mobile/1A542a Safari/419.3"
|
|
73
80
|
IPOD: "Mozilla/5.0 (iPod; U; CPU like Mac OS X; en) AppleWebKit/420.1 (KHTML, like Gecko) Version/3.0 Mobile/3A100a Safari/419.3"
|
|
81
|
+
JIOPHONE_2: "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"
|
|
74
82
|
KINDLE: "Mozilla/5.0 (Linux; U; en-US) AppleWebKit/528.5+ (KHTML, like Gecko, Safari/528.5+) Version/4.0 Kindle/3.0 (screen 600×800; rotate)"
|
|
75
83
|
KINDLE_FIRE: "Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; Kindle Fire Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1"
|
|
76
84
|
KINDLE_FIRE_HD: "Mozilla/5.0 (Linux; U; en-us; KFTT Build/IML74K) AppleWebKit/535.19 (KHTML, like Gecko) Silk/3.4 Safari/535.19 Silk-Accelerated=true"
|
|
77
85
|
KINDLE_FIRE_HD_MOBILE: "Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; KFTT Build/IML74K) AppleWebKit/535.19 (KHTML, like Gecko) Silk/3.4 Mobile Safari/535.19 Silk-Accelerated=true"
|
|
78
86
|
LUMIA800: "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; XBLWP7; ZuneWP7"
|
|
79
|
-
|
|
87
|
+
MAC_OS: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.5 Safari/605.1.15"
|
|
88
|
+
MAC_OSX: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/601.3.9 (KHTML, like Gecko) Version/9.0.2 Safari/601.3.9"
|
|
89
|
+
MAXTHON: "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36 Maxthon/5.3.8.2000"
|
|
90
|
+
MICRO_MESSENGER_ANDROID: "Mozilla/5.0 (Linux; Android 7.1.2; Redmi 4X Build/N2G47H; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.126 MQQBrowser/6.2 TBS/045131 Mobile Safari/537.36 MMWEBID/9286 MicroMessenger/7.0.13.1640(0x27000D37) Process/tools NetType/WIFI Language/zh_CN ABI/arm64 WeChat/arm64"
|
|
91
|
+
MICRO_MESSENGER_IOS: "Mozilla/5.0 (iPhone; CPU iPhone OS 13_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/7.0.10(0x17000a21) NetType/4G Language/zh_CN"
|
|
80
92
|
MIDP: MIDP-2.0
|
|
93
|
+
MIUI_BROWSER: "Mozilla/5.0 (Linux; U; Android 7.1.2; zh-cn; Redmi 4X Build/N2G47H) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/71.0.3578.141 Mobile Safari/537.36 XiaoMi/MiuiBrowser/12.3.3-g"
|
|
81
94
|
MOBILE_CHROME: "Mozilla/5.0 (iPhone; U; CPU iPhone OS 5_1_1 like Mac OS X; en) AppleWebKit/534.46.0 (KHTML, like Gecko) CriOS/19.0.1084.60 Mobile/9B206 Safari/7534.48.3"
|
|
82
95
|
MS_EDGE: "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36 Edge/12.0"
|
|
96
|
+
MS_EDGE_ANDROID: "Mozilla/5.0 (Linux; Android 7.1.2; Redmi 4X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.0 Mobile Safari/537.36 EdgA/44.11.2.4122"
|
|
83
97
|
MS_EDGE_CHROME: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.29 Safari/537.36 Edg/79.0.309.18"
|
|
84
98
|
MS_EDGE_COMPAT: "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/8.0; .NET4.0C; .NET4.0E; Tablet PC 2.0; Microsoft Outlook 15.0.4433; ms-office; MSOffice 15)"
|
|
99
|
+
MS_EDGE_IOS: "Mozilla/5.0 (iPhone; CPU iPhone OS 12_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.1.1 EdgiOS/44.5.0.10 Mobile/15E148 Safari/604.1"
|
|
85
100
|
MS_EDGE_MOBILE: "Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; DEVICE INFO) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Mobile Safari/537.36 Edge/12.0"
|
|
86
101
|
NEXUS7: "Mozilla/5.0 (Linux; Android 4.3; Nexus 7 Build/JWR66Y) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.72 Safari/537.36"
|
|
87
102
|
NEXUS_TABLET: "Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19"
|
|
@@ -89,6 +104,7 @@ NINTENDO_SWITCH: "Mozilla/5.0 (Nintendo Switch; WifiWebAuthApplet) AppleWebKit/6
|
|
|
89
104
|
NINTENDO_WII: "Opera/9.00 (Nintendo Wii; U; ; 1309-9; en)"
|
|
90
105
|
NINTENDO_WIIU: "Mozilla/5.0 (Nintendo WiiU) AppleWebKit/534.52 (KHTML, like Gecko) NX/2.1.0.8.23 NintendoBrowser/1.1.0.7579.EU"
|
|
91
106
|
NOKIA: "Mozilla/5.0 (Series40; NokiaX3-02/le6.32; Profile/MIDP-2.1 Configuration/CLDC-1.1) Gecko/20100401 S40OviBrowser/2.0.2.62.10"
|
|
107
|
+
NOKIA_8110: "Mozilla/5.0 (Mobile; Nokia_8110_4G; rv:48.0) Gecko/48.0 Firefox/48.0 KAIOS/2.5"
|
|
92
108
|
NOOK: "Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; NOOK BNTV250A Build/GINGERBREAD 1.4.3) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Safari/533.1"
|
|
93
109
|
OPERA: "Opera/9.80 (Macintosh; Intel Mac OS X 10.7.4; U; en) Presto/2.10.229 Version/11.64"
|
|
94
110
|
OPERA_ANDROID: "Mozill/5.0 (Linux; Android 4.4.2; A1-810 Build/KOT49H) Apple/WebKit/537.36 (KHTML, like Gecko) Chrome/48.0.25 64.99 Safari/537.36 OPR/35.0.2070.100283"
|
|
@@ -106,6 +122,8 @@ QQ_BROWSER_ANDROID: "Mozilla/5.0 (Linux; Android 5.1.1; SM-N9108V Build/LMY47X)
|
|
|
106
122
|
QQ_BROWSER_IOS: "Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/13E238 QQ/6.3.3.432 V1_IPH_SQ_6.3.3_1_APP_A Pixel/640 Core/UIWebView NetType/WIFI Mem/47"
|
|
107
123
|
QQ_BROWSER_MAC: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36 QQBrowser/4.2.4753.400"
|
|
108
124
|
QQ_BROWSER_MAC_LITE: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/602.2.14 (KHTML, like Gecko) Version/10.0.1 Safari/602.2.14 QQBrowserLite/1.0.4"
|
|
125
|
+
SOUGOU_BROWSER: "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.81 Safari/537.36 SE 2.X MetaSr 1.0"
|
|
126
|
+
SOUGOU_BROWSER_MOBILE: "Mozilla/5.0 (Linux; Android 7.1.2; Redmi 4X Build/N2G47H; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/68.0.3440.106 Mobile Safari/537.36 AWP/2.0 SogouMSE,SogouMobileBrowser/5.28.12"
|
|
109
127
|
QUICKTIME: "QuickTime/7.6.8 (qtver=7.6.8;os=Windows NT 5.1Service Pack 3)"
|
|
110
128
|
SAFARI3: "Mozilla/5.0 (Windows; U; Windows NT 6.0; en) AppleWebKit/522.15.5 (KHTML, like Gecko) Version/3.0.3 Safari/522.15.5"
|
|
111
129
|
SAFARI4: "Mozilla/5.0 (Windows; U; Windows NT 6.0; fr-ch) AppleWebKit/531.9 (KHTML, like Gecko) Version/4.0.3 Safari/531.9"
|
|
@@ -118,11 +136,16 @@ SAFARI: "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-us) AppleWebKit/53
|
|
|
118
136
|
SAFARI_IPAD_WEBAPP_MODE: "Mozilla/5.0 (iPad; U; CPU OS 3_2_1 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Mobile/7B405"
|
|
119
137
|
SAFARI_IPHONE_WEBAPP_MODE: "Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.20 (KHTML, like Gecko) Mobile/7B298g"
|
|
120
138
|
SAMSUNG: "Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; SAMSUNG-SGH-I497 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30"
|
|
139
|
+
SAMSUNG_BROWSER: "Mozilla/5.0 (Linux; Android 10; SAMSUNG SM-N960U) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/11.1 Chrome/75.0.3770.143 Mobile Safari/537.36"
|
|
121
140
|
SAMSUNG_CHROME: "Mozilla/5.0 (Linux; Android 4.4.2; en-gb; SAMSUNG GT-I9195/I9195XXUCNEA Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/1.5 Chrome/28.0.1500.94 Mobile Safari/537.36"
|
|
141
|
+
SAMSUNG_SM-G975F: "Mozilla/5.0 (Linux; Android 10; SM-G975F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.101 Mobile Safari/537.36"
|
|
142
|
+
SAMSUNG_SM-G960F: "Mozilla/5.0 (Linux; Android 8.0.0; SM-G960F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.127 Mobile Safari/537.36"
|
|
143
|
+
SAMSUNG_SM-F700F: "Mozilla/5.0 (Linux; Android 10; SAMSUNG SM-F700F) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/11.1 Chrome/75.0.3770.143 Mobile Safari/537.36"
|
|
144
|
+
SAMSUNG_SM-FAKE: "Mozilla/5.0 (Linux; Android 8.0.0; SM-0000) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.127 Mobile Safari/537.36"
|
|
122
145
|
SMART_TV: "Mozilla/5.0 (SmartHub; SMART-TV; U; Linux/SmartTV) AppleWebKit/531.2+ (KHTML, like Gecko) WebBrowser/1.0 SmartTV Safari/531.2+"
|
|
123
146
|
SNAPCHAT: Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Snapchat/10.69.5.72 (iPhone10,3; iOS 13.2.2; gzip)
|
|
124
|
-
SNAPCHAT_SPACE_VERSION: "Mozilla/5.0 (Linux; Android 9; SM-N960U Build/PPR1.180610.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/78.0.3904.96 Mobile Safari/537.36Snapchat 10.70.0.0 (SM-N960U; Android 9#N960USQS3CSJ2#28; gzip)"
|
|
125
147
|
SNAPCHAT_EMPTY_STRING_VERSION: "Mozilla/5.0 (Linux; Android 9; SM-N960U Build/PPR1.180610.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/78.0.3904.96 Mobile Safari/537.36Snapchat10.70.0.0 (SM-N960U; Android 9#N960USQS3CSJ2#28; gzip)"
|
|
148
|
+
SNAPCHAT_SPACE_VERSION: "Mozilla/5.0 (Linux; Android 9; SM-N960U Build/PPR1.180610.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/78.0.3904.96 Mobile Safari/537.36Snapchat 10.70.0.0 (SM-N960U; Android 9#N960USQS3CSJ2#28; gzip)"
|
|
126
149
|
SPUTNIK: "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 SputnikBrowser/4.1.2801.0 Safari/537.36"
|
|
127
150
|
SURFACE: "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; ARM; Trident/6.0; Touch)"
|
|
128
151
|
SYMBIAN: "Nokia5250/10.0.011 (SymbianOS/9.4; U; Series60/5.0 Mozilla/5.0; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/525 (KHTML, like Gecko) Safari/525 3gpp-gba"
|
data/test/ua_bots.yml
CHANGED
|
@@ -4,6 +4,7 @@ ADS_TXT_CRAWLER: "AdsTxtCrawler/1.0"
|
|
|
4
4
|
ANDERSPINK: "Mozilla/5.0 (compatible; AndersPinkBot/1.0; +http://anderspink.com/bot.html)"
|
|
5
5
|
APIS_GOOGLE: "APIs-Google; (+https://developers.google.com/webmasters/APIs-Google.html)"
|
|
6
6
|
APPLE_BOT: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/600.2.5 (KHTML, like Gecko) Version/8.0.2 Safari/600.2.5 (Applebot/0.1)"
|
|
7
|
+
ARCHIVEBOT: "ArchiveTeam ArchiveBot/20190617.01 (wpull 2.0.3) and not Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36"
|
|
7
8
|
ASK: "Mozilla/2.0 (compatible; Ask Jeeves/Teoma; +http://sp.ask.com/docs/about/tech_crawling.html)"
|
|
8
9
|
AWS_ELB: ELB-HealthChecker/1.0
|
|
9
10
|
BAIDU: "Baiduspider+(+http://www.baidu.com/search/spider.htm)"
|
|
@@ -12,6 +13,7 @@ BINGBOT: "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm
|
|
|
12
13
|
BINGPREVIEW: "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534+ (KHTML, like Gecko) BingPreview/1.0b"
|
|
13
14
|
BUBING: "BUbiNG (+http://law.di.unimi.it/BUbiNG.html)"
|
|
14
15
|
BUZZBOT: "Buzzbot/1.0 (Buzzbot; http://www.buzzstream.com; buzzbot@buzzstream.com)"
|
|
16
|
+
CHROME_LIGHTHOUSE: "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3694.0 Mobile Safari/537.36 Chrome-Lighthouse"
|
|
15
17
|
CIPACRAWLER: "CipaCrawler/3.0 (info@domaincrawler.com; http://www.domaincrawler.com/www.example.com)"
|
|
16
18
|
CLOUDFLARE: "Mozilla/5.0 (compatible; CloudFlare-AlwaysOnline/1.0; +http://www.cloudflare.com/always-online) AppleWebKit/534.34"
|
|
17
19
|
COMMONCRAWL: "CCBot/2.0 (http://commoncrawl.org/faq/)"
|
|
@@ -29,7 +31,9 @@ FYREBOT: "Fyrebot/1.0"
|
|
|
29
31
|
GARLIK: "GarlikCrawler/1.2 (http://garlik.com/, crawler@garlik.com)"
|
|
30
32
|
GERMCRAWLER: "GermCrawler"
|
|
31
33
|
GO_1.1_PACKAGE_HTTP: "Go 1.1 package http"
|
|
34
|
+
GO_HTTP_CLIENT: "Go-http-client"
|
|
32
35
|
GOOGLE_BOT: "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
|
|
36
|
+
GOOGLE_IMAGE_PROXY: "Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko Firefox/11.0 (via ggpht.com GoogleImageProxy)"
|
|
33
37
|
GOOGLE_PAGE_SPEED_INSIGHTS: "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.4 (KHTML, like Gecko; Google Page Speed Insights) Chrome/22.0.1229 Safari/537.4"
|
|
34
38
|
GOOGLE_SHOPPING: "google-xrawler"
|
|
35
39
|
GOOGLE_SITE_VERIFICATION: Mozilla/5.0 (compatible; Google-Site-Verification/1.0)
|
|
@@ -39,8 +43,10 @@ GOOGLE_STRUCTURED_DATA_TESTING_TOOL: "Mozilla/5.0 (compatible; X11; Linux x86_64
|
|
|
39
43
|
GRAPESHOT: "Mozilla/5.0 (compatible; GrapeshotCrawler/2.0; +http://www.grapeshot.co.uk/crawler.php)"
|
|
40
44
|
HTTRACK: "Mozilla/4.5 (compatible; HTTrack 3.0x; Windows 98)"
|
|
41
45
|
IMPLISENSEBOT: "ImplisenseBot 1.0"
|
|
46
|
+
JAUNT: "Jaunt/1.5"
|
|
42
47
|
JOBSEEKER: "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/538.1 (KHTML, like Gecko) JobBot/5.0 (compatible; +http://www.jobseeker.com.au/bot.html) Safari/538.1"
|
|
43
48
|
JOOBLE: "Mozilla/5.0 (compatible; Jooblebot/2.0; Windows NT 6.1; WOW64; +http://jooble.org/jooble-bot) Mobile"
|
|
49
|
+
KNOWLEDGE_AI: "The Knowledge AI"
|
|
44
50
|
LINKDEXBOT: "Mozilla/5.0 (compatible; linkdexbot/2.0; +http://www.linkdex.com/bots/)"
|
|
45
51
|
LINKEDIN: "LinkedInBot/1.0 (compatible; Mozilla/5.0; Jakarta Commons-HttpClient/3.1 +http://www.linkedin.com)"
|
|
46
52
|
LOAD_TIME_BOT: "Mozilla/5.0 (compatible; LoadTimeBot/0.9; +http://www.loadtime.net/bot.html)"
|
|
@@ -66,13 +72,14 @@ SCOUT_URL_MONITOR: ScoutURLMonitor/6.2.2
|
|
|
66
72
|
SCRAPY: "Scrapy/0.18.4 (+http://scrapy.org)"
|
|
67
73
|
SEMANTICBOT: "Mozilla/5.0 (compatible; Semanticbot/1.0; +http://sempi.tech/bot.html)"
|
|
68
74
|
SEO_AUDIT: "Mozilla/5.0 (compatible; seo-audit-check-bot/1.0)"
|
|
75
|
+
SEOBILITYBOT: "SeobilityBot (SEO Tool; https://www.seobility.net/sites/bot.html)"
|
|
69
76
|
SEODIVER: "Mozilla/5.0 (compatible; SEOdiver/1.0; +http://www.seodiver.com/bot)"
|
|
70
77
|
SEOKICKS: "Mozilla/5.0 (compatible; SEOkicks-Robot; +http://www.seokicks.de/robot.html)"
|
|
71
78
|
SISTRIX: "Mozilla/5.0 (compatible; SISTRIX Crawler; http://crawler.sistrix.net/)"
|
|
72
|
-
SITECHECK:
|
|
79
|
+
SITECHECK: "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.0) SiteCheck-sitecrawl by Siteimprove.com"
|
|
80
|
+
SKYPE: "Mozilla/5.0 (Windows NT 6.1; WOW64) SkypeUriPreview Preview/0.5"
|
|
73
81
|
SOCIALRANKIO: SocialRankIOBot; http://socialrank.io/about
|
|
74
82
|
SQUIDER: "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36 Squider/0.01"
|
|
75
|
-
STRIPE: "Stripe/1.0 (+https://stripe.com/docs/webhooks)"
|
|
76
83
|
SWIFTYPE: "Swiftbot"
|
|
77
84
|
TANGIBLEEBOT: "TangibleeBot"
|
|
78
85
|
TEERAID: "Mozilla/5.0 (compatible; TeeRaidBot; +https://teeraid.com/bot/)"
|
data/test/ua_search_engines.yml
CHANGED
|
@@ -157,4 +157,10 @@ class AcceptLanguageTest < Minitest::Test
|
|
|
157
157
|
assert_equal 5, result.size
|
|
158
158
|
assert_language result[3], code: "de", region: nil, quality: 0.7
|
|
159
159
|
end
|
|
160
|
+
|
|
161
|
+
test "sets default quality value for invalid strings" do
|
|
162
|
+
result = Browser::AcceptLanguage.parse(";q=0.0.0.0")
|
|
163
|
+
|
|
164
|
+
assert_equal 0.1, result[0].quality
|
|
165
|
+
end
|
|
160
166
|
end
|
data/test/unit/adobe_air_test.rb
CHANGED
|
@@ -9,7 +9,7 @@ class AdobeAirTest < Minitest::Test
|
|
|
9
9
|
assert browser.webkit?
|
|
10
10
|
assert_equal "0", browser.version
|
|
11
11
|
assert_equal "0.0", browser.full_version
|
|
12
|
-
assert_equal "
|
|
12
|
+
assert_equal "Unknown Browser", browser.name
|
|
13
13
|
assert_equal "Adobe AIR", browser.platform.name
|
|
14
14
|
assert_equal "13.0", browser.platform.version
|
|
15
15
|
end
|
data/test/unit/alipay_test.rb
CHANGED
|
@@ -10,6 +10,9 @@ class AlipayTest < Minitest::Test
|
|
|
10
10
|
assert browser.alipay?
|
|
11
11
|
assert_equal "Alipay", browser.name
|
|
12
12
|
assert_equal "2.3.4", browser.full_version
|
|
13
|
+
|
|
14
|
+
refute browser.chrome?
|
|
15
|
+
refute browser.safari?
|
|
13
16
|
end
|
|
14
17
|
|
|
15
18
|
test "detects alipay Android" do
|
|
@@ -19,6 +22,9 @@ class AlipayTest < Minitest::Test
|
|
|
19
22
|
assert browser.alipay?
|
|
20
23
|
assert_equal "Alipay", browser.name
|
|
21
24
|
assert_equal "9.0.1.073001", browser.full_version
|
|
25
|
+
|
|
26
|
+
refute browser.chrome?
|
|
27
|
+
refute browser.safari?
|
|
22
28
|
end
|
|
23
29
|
|
|
24
30
|
test "detects version by range" do
|
|
@@ -9,7 +9,6 @@ class BlackberryTest < Minitest::Test
|
|
|
9
9
|
assert_equal "BlackBerry", browser.name
|
|
10
10
|
refute browser.device.tablet?
|
|
11
11
|
assert browser.device.mobile?
|
|
12
|
-
refute browser.modern?
|
|
13
12
|
assert_equal "4.1.0", browser.full_version
|
|
14
13
|
assert_equal "4", browser.version
|
|
15
14
|
end
|
|
@@ -18,7 +17,6 @@ class BlackberryTest < Minitest::Test
|
|
|
18
17
|
browser = Browser.new(Browser["BLACKBERRY4"])
|
|
19
18
|
|
|
20
19
|
assert_equal "BlackBerry", browser.name
|
|
21
|
-
refute browser.modern?
|
|
22
20
|
assert_equal "4.2.1", browser.full_version
|
|
23
21
|
assert_equal "4", browser.version
|
|
24
22
|
end
|
|
@@ -29,7 +27,6 @@ class BlackberryTest < Minitest::Test
|
|
|
29
27
|
assert_equal "BlackBerry", browser.name
|
|
30
28
|
refute browser.device.tablet?
|
|
31
29
|
assert browser.device.mobile?
|
|
32
|
-
refute browser.modern?
|
|
33
30
|
assert_equal "5.0.0.93", browser.full_version
|
|
34
31
|
assert_equal "5", browser.version
|
|
35
32
|
end
|
|
@@ -40,7 +37,6 @@ class BlackberryTest < Minitest::Test
|
|
|
40
37
|
assert_equal "BlackBerry", browser.name
|
|
41
38
|
refute browser.device.tablet?
|
|
42
39
|
assert browser.device.mobile?
|
|
43
|
-
assert browser.modern?
|
|
44
40
|
assert_equal "6.0.0.141", browser.full_version
|
|
45
41
|
assert_equal "6", browser.version
|
|
46
42
|
end
|
|
@@ -51,7 +47,6 @@ class BlackberryTest < Minitest::Test
|
|
|
51
47
|
assert_equal "BlackBerry", browser.name
|
|
52
48
|
refute browser.device.tablet?
|
|
53
49
|
assert browser.device.mobile?
|
|
54
|
-
assert browser.modern?
|
|
55
50
|
assert_equal "7.0.0.1", browser.full_version
|
|
56
51
|
assert_equal "7", browser.version
|
|
57
52
|
end
|
|
@@ -62,7 +57,6 @@ class BlackberryTest < Minitest::Test
|
|
|
62
57
|
assert_equal "BlackBerry", browser.name
|
|
63
58
|
refute browser.device.tablet?
|
|
64
59
|
assert browser.device.mobile?
|
|
65
|
-
assert browser.modern?
|
|
66
60
|
assert_equal "10.0.9.1675", browser.full_version
|
|
67
61
|
assert_equal "10", browser.version
|
|
68
62
|
end
|
data/test/unit/bots_test.rb
CHANGED
|
@@ -15,34 +15,6 @@ class BotsTest < Minitest::Test
|
|
|
15
15
|
refute browser.bot?
|
|
16
16
|
end
|
|
17
17
|
|
|
18
|
-
test "doesn't consider empty UA as bot" do
|
|
19
|
-
browser = Browser.new("")
|
|
20
|
-
refute browser.bot?
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
test "allows setting empty string as bots" do
|
|
24
|
-
Browser::Bot.detect_empty_ua!
|
|
25
|
-
browser = Browser.new("")
|
|
26
|
-
|
|
27
|
-
assert browser.bot?
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
test "allows setting nil as user agent for bots" do
|
|
31
|
-
browser = Browser.new(nil)
|
|
32
|
-
refute browser.bot?
|
|
33
|
-
|
|
34
|
-
Browser::Bot.detect_empty_ua!
|
|
35
|
-
browser = Browser.new(nil)
|
|
36
|
-
assert browser.bot?
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
test "doesn't detect mozilla as a bot when considering empty UA" do
|
|
40
|
-
Browser::Bot.detect_empty_ua!
|
|
41
|
-
browser = Browser.new("Mozilla")
|
|
42
|
-
|
|
43
|
-
refute browser.bot?
|
|
44
|
-
end
|
|
45
|
-
|
|
46
18
|
test "returns bot name" do
|
|
47
19
|
browser = Browser.new(Browser["GOOGLE_BOT"])
|
|
48
20
|
assert_equal "Google Bot", browser.bot.name
|
|
@@ -51,13 +23,6 @@ class BotsTest < Minitest::Test
|
|
|
51
23
|
assert_equal "Facebook Bot", browser.bot.name
|
|
52
24
|
end
|
|
53
25
|
|
|
54
|
-
test "returns bot name (empty string ua detection enabled)" do
|
|
55
|
-
Browser::Bot.detect_empty_ua!
|
|
56
|
-
browser = Browser.new("")
|
|
57
|
-
|
|
58
|
-
assert_equal browser.bot.name, "Generic Bot"
|
|
59
|
-
end
|
|
60
|
-
|
|
61
26
|
test "returns nil for non-bots" do
|
|
62
27
|
browser = Browser.new(Browser["CHROME"])
|
|
63
28
|
assert_nil browser.bot.name
|
|
@@ -84,7 +49,6 @@ class BotsTest < Minitest::Test
|
|
|
84
49
|
refute browser.platform.windows10?
|
|
85
50
|
refute browser.platform.windows_phone?
|
|
86
51
|
refute browser.edge?
|
|
87
|
-
refute browser.modern?
|
|
88
52
|
refute browser.device.mobile?
|
|
89
53
|
refute browser.webkit?
|
|
90
54
|
refute browser.chrome?
|
|
@@ -116,9 +80,32 @@ class BotsTest < Minitest::Test
|
|
|
116
80
|
end
|
|
117
81
|
|
|
118
82
|
test "tells why user agent is considered a bot" do
|
|
119
|
-
|
|
83
|
+
matcher = Browser::Bot.why?(Browser.bot_user_agents["LINKEDIN"])
|
|
84
|
+
|
|
85
|
+
assert_equal Browser::Bot::KnownBotsMatcher, matcher
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
test "adds custom bot matcher" do
|
|
89
|
+
Browser::Bot.matchers << ->(ua, _) { ua.match?(/some-script/) }
|
|
90
|
+
browser = Browser.new("some-script")
|
|
120
91
|
|
|
121
|
-
|
|
122
|
-
assert_equal "
|
|
92
|
+
assert browser.bot?
|
|
93
|
+
assert_equal "Generic Bot", browser.bot.name
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
%w[
|
|
97
|
+
content-fetcher
|
|
98
|
+
content-crawler
|
|
99
|
+
some-search-engine
|
|
100
|
+
monitoring-service
|
|
101
|
+
content-spider
|
|
102
|
+
some-bot
|
|
103
|
+
].each do |ua|
|
|
104
|
+
test "detects user agents based on keywords (#{ua})" do
|
|
105
|
+
browser = Browser.new(ua)
|
|
106
|
+
|
|
107
|
+
assert browser.bot?
|
|
108
|
+
assert_equal Browser::Bot::KeywordMatcher, browser.bot.why?
|
|
109
|
+
end
|
|
123
110
|
end
|
|
124
111
|
end
|
data/test/unit/chrome_test.rb
CHANGED
|
@@ -10,7 +10,6 @@ class ChromeTest < Minitest::Test
|
|
|
10
10
|
assert browser.chrome?
|
|
11
11
|
refute browser.safari?
|
|
12
12
|
assert browser.webkit?
|
|
13
|
-
assert browser.modern?
|
|
14
13
|
assert_equal "5.0.375.99", browser.full_version
|
|
15
14
|
assert_equal "5", browser.version
|
|
16
15
|
end
|
|
@@ -22,7 +21,6 @@ class ChromeTest < Minitest::Test
|
|
|
22
21
|
assert browser.chrome?
|
|
23
22
|
refute browser.safari?
|
|
24
23
|
assert browser.webkit?
|
|
25
|
-
assert browser.modern?
|
|
26
24
|
assert_equal "19.0.1084.60", browser.full_version
|
|
27
25
|
assert_equal "19", browser.version
|
|
28
26
|
end
|
|
@@ -35,7 +33,6 @@ class ChromeTest < Minitest::Test
|
|
|
35
33
|
assert browser.platform.android?
|
|
36
34
|
refute browser.safari?
|
|
37
35
|
assert browser.webkit?
|
|
38
|
-
assert browser.modern?
|
|
39
36
|
assert_equal "28.0.1500.94", browser.full_version
|
|
40
37
|
assert_equal "28", browser.version
|
|
41
38
|
end
|
|
@@ -61,6 +58,14 @@ class ChromeTest < Minitest::Test
|
|
|
61
58
|
assert browser.chrome?
|
|
62
59
|
end
|
|
63
60
|
|
|
61
|
+
test "detects chrome on android 10" do
|
|
62
|
+
browser = Browser.new(Browser["ANDROID_Q"])
|
|
63
|
+
|
|
64
|
+
assert browser.chrome?
|
|
65
|
+
assert_equal "Chrome", browser.name
|
|
66
|
+
assert_equal "78", browser.version
|
|
67
|
+
end
|
|
68
|
+
|
|
64
69
|
test "detects version by range" do
|
|
65
70
|
browser = Browser.new(Browser["CHROME"])
|
|
66
71
|
assert browser.chrome?(%w[>=5 <6])
|
data/test/unit/console_test.rb
CHANGED
|
@@ -5,11 +5,11 @@ require "test_helper"
|
|
|
5
5
|
class ConsoleTest < Minitest::Test
|
|
6
6
|
test "detects psp" do
|
|
7
7
|
browser = Browser.new(Browser["PSP"])
|
|
8
|
-
assert_equal "
|
|
8
|
+
assert_equal "Unknown Browser", browser.name
|
|
9
9
|
end
|
|
10
10
|
|
|
11
11
|
test "detects psp vita" do
|
|
12
12
|
browser = Browser.new(Browser["PSP_VITA"])
|
|
13
|
-
assert_equal "
|
|
13
|
+
assert_equal "Unknown Browser", browser.name
|
|
14
14
|
end
|
|
15
15
|
end
|
data/test/unit/device_test.rb
CHANGED
|
@@ -5,7 +5,7 @@ require "test_helper"
|
|
|
5
5
|
class DeviceTest < Minitest::Test
|
|
6
6
|
class CustomDevice < Browser::Device::Base
|
|
7
7
|
def match?
|
|
8
|
-
ua
|
|
8
|
+
ua.include?("Custom")
|
|
9
9
|
end
|
|
10
10
|
|
|
11
11
|
def id
|
|
@@ -20,14 +20,14 @@ class DeviceTest < Minitest::Test
|
|
|
20
20
|
|
|
21
21
|
Browser::Device.matchers.shift
|
|
22
22
|
device = Browser::Device.new("Custom")
|
|
23
|
-
assert_equal :
|
|
23
|
+
assert_equal :unknown_device, device.id
|
|
24
24
|
end
|
|
25
25
|
|
|
26
26
|
test "detect generic device" do
|
|
27
27
|
device = Browser::Device.new("")
|
|
28
28
|
|
|
29
29
|
assert device.unknown?
|
|
30
|
-
assert_equal :
|
|
30
|
+
assert_equal :unknown_device, device.id
|
|
31
31
|
end
|
|
32
32
|
|
|
33
33
|
test "detect ipad" do
|
|
@@ -258,4 +258,31 @@ class DeviceTest < Minitest::Test
|
|
|
258
258
|
assert_equal name, device.name
|
|
259
259
|
end
|
|
260
260
|
end
|
|
261
|
+
|
|
262
|
+
test "detect samsung devices" do
|
|
263
|
+
device = Browser::Device.new(Browser["SAMSUNG_SM-G975F"])
|
|
264
|
+
|
|
265
|
+
assert device.samsung?
|
|
266
|
+
assert_equal :samsung, device.id
|
|
267
|
+
assert_equal "Samsung Galaxy S10+", device.name
|
|
268
|
+
end
|
|
269
|
+
|
|
270
|
+
test "detect generic samsung devices" do
|
|
271
|
+
device = Browser::Device.new(Browser["SAMSUNG_SM-FAKE"])
|
|
272
|
+
|
|
273
|
+
assert device.samsung?
|
|
274
|
+
assert_equal :samsung, device.id
|
|
275
|
+
assert_equal "Samsung SM-0000", device.name
|
|
276
|
+
end
|
|
277
|
+
|
|
278
|
+
{
|
|
279
|
+
"SAMSUNG_SM-G975F" => "Samsung Galaxy S10+",
|
|
280
|
+
"SAMSUNG_SM-G960F" => "Samsung Galaxy S9",
|
|
281
|
+
"SAMSUNG_SM-F700F" => "Samsung Galaxy Z Flip"
|
|
282
|
+
}.each do |key, name|
|
|
283
|
+
test "detect device name of #{key} as #{name}" do
|
|
284
|
+
device = Browser::Device.new(Browser[key])
|
|
285
|
+
assert_equal name, device.name
|
|
286
|
+
end
|
|
287
|
+
end
|
|
261
288
|
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "test_helper"
|
|
4
|
+
|
|
5
|
+
class DuckDuckGoTest < Minitest::Test
|
|
6
|
+
test "detects DuckDuckGo on iOS device" do
|
|
7
|
+
browser = Browser.new(Browser["DUCKDUCKGO_BROWSER_IOS"])
|
|
8
|
+
assert browser.duck_duck_go?
|
|
9
|
+
refute browser.safari?
|
|
10
|
+
refute browser.chrome?
|
|
11
|
+
assert browser.webkit?
|
|
12
|
+
refute browser.bot?
|
|
13
|
+
assert_equal "DuckDuckGo", browser.name
|
|
14
|
+
assert_equal :duckduckgo, browser.id
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
test "detects DuckDuckGo on Android device" do
|
|
18
|
+
browser = Browser.new(Browser["DUCKDUCKGO_BROWSER_ANDROID"])
|
|
19
|
+
assert browser.duck_duck_go?
|
|
20
|
+
refute browser.safari?
|
|
21
|
+
refute browser.chrome?
|
|
22
|
+
refute browser.bot?
|
|
23
|
+
assert_equal "DuckDuckGo", browser.name
|
|
24
|
+
assert_equal :duckduckgo, browser.id
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
test "detects correct version" do
|
|
28
|
+
browser = Browser.new(Browser["DUCKDUCKGO_BROWSER_IOS"])
|
|
29
|
+
assert_equal "7", browser.full_version
|
|
30
|
+
assert_equal "7", browser.version
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
test "detects version by range" do
|
|
34
|
+
browser = Browser.new(Browser["DUCKDUCKGO_BROWSER_IOS"])
|
|
35
|
+
assert browser.duck_duck_go?(%w[>=7 <8])
|
|
36
|
+
end
|
|
37
|
+
end
|
data/test/unit/edge_test.rb
CHANGED
|
@@ -12,7 +12,6 @@ class EdgeTest < ActionController::TestCase
|
|
|
12
12
|
assert_equal "12", browser.version
|
|
13
13
|
assert browser.platform.windows10?
|
|
14
14
|
assert browser.edge?
|
|
15
|
-
assert browser.modern?
|
|
16
15
|
refute browser.webkit?
|
|
17
16
|
refute browser.chrome?
|
|
18
17
|
refute browser.safari?
|
|
@@ -30,7 +29,6 @@ class EdgeTest < ActionController::TestCase
|
|
|
30
29
|
assert_equal "7", browser.msie_version
|
|
31
30
|
assert browser.edge?
|
|
32
31
|
assert browser.compatibility_view?
|
|
33
|
-
refute browser.modern?
|
|
34
32
|
refute browser.webkit?
|
|
35
33
|
refute browser.chrome?
|
|
36
34
|
refute browser.safari?
|
|
@@ -47,7 +45,6 @@ class EdgeTest < ActionController::TestCase
|
|
|
47
45
|
refute browser.platform.windows10?
|
|
48
46
|
assert browser.platform.windows_phone?
|
|
49
47
|
assert browser.edge?
|
|
50
|
-
assert browser.modern?
|
|
51
48
|
refute browser.webkit?
|
|
52
49
|
refute browser.chrome?
|
|
53
50
|
refute browser.safari?
|
|
@@ -63,14 +60,45 @@ class EdgeTest < ActionController::TestCase
|
|
|
63
60
|
assert browser.platform.mac?
|
|
64
61
|
refute browser.platform.windows?
|
|
65
62
|
assert browser.edge?
|
|
66
|
-
assert browser.modern?
|
|
67
63
|
assert browser.webkit?
|
|
68
64
|
refute browser.chrome?
|
|
69
65
|
refute browser.safari?
|
|
70
66
|
end
|
|
71
67
|
|
|
68
|
+
test "detects Microsoft Edge Mobile on iOS" do
|
|
69
|
+
browser = Browser.new(Browser["MS_EDGE_IOS"])
|
|
70
|
+
|
|
71
|
+
assert_equal :edge, browser.id
|
|
72
|
+
assert_equal "Microsoft Edge", browser.name
|
|
73
|
+
assert_equal "44.5.0.10", browser.full_version
|
|
74
|
+
assert_equal "44", browser.version
|
|
75
|
+
refute browser.platform.windows10?
|
|
76
|
+
refute browser.platform.windows_phone?
|
|
77
|
+
assert browser.platform.ios?
|
|
78
|
+
assert browser.edge?
|
|
79
|
+
refute browser.webkit?
|
|
80
|
+
refute browser.chrome?
|
|
81
|
+
refute browser.safari?
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
test "detects Microsoft Edge Mobile on Android" do
|
|
85
|
+
browser = Browser.new(Browser["MS_EDGE_ANDROID"])
|
|
86
|
+
|
|
87
|
+
assert_equal :edge, browser.id
|
|
88
|
+
assert_equal "Microsoft Edge", browser.name
|
|
89
|
+
assert_equal "44.11.2.4122", browser.full_version
|
|
90
|
+
assert_equal "44", browser.version
|
|
91
|
+
refute browser.platform.windows10?
|
|
92
|
+
refute browser.platform.windows_phone?
|
|
93
|
+
assert browser.platform.android?
|
|
94
|
+
assert browser.edge?
|
|
95
|
+
refute browser.webkit?
|
|
96
|
+
refute browser.chrome?
|
|
97
|
+
refute browser.safari?
|
|
98
|
+
end
|
|
99
|
+
|
|
72
100
|
test "detects version by range" do
|
|
73
|
-
browser = Browser.new(Browser["
|
|
74
|
-
assert browser.edge?(%w[>=
|
|
101
|
+
browser = Browser.new(Browser["MS_EDGE_IOS"])
|
|
102
|
+
assert browser.edge?(%w[>=43 <45])
|
|
75
103
|
end
|
|
76
104
|
end
|
data/test/unit/firefox_test.rb
CHANGED
|
@@ -8,7 +8,6 @@ class FirefoxTest < Minitest::Test
|
|
|
8
8
|
|
|
9
9
|
assert_equal "Firefox", browser.name
|
|
10
10
|
assert browser.firefox?
|
|
11
|
-
refute browser.modern?
|
|
12
11
|
assert_equal "3.8", browser.full_version
|
|
13
12
|
assert_equal "3", browser.version
|
|
14
13
|
end
|
|
@@ -29,7 +28,6 @@ class FirefoxTest < Minitest::Test
|
|
|
29
28
|
assert_equal :firefox, browser.id
|
|
30
29
|
assert_equal "Firefox", browser.name
|
|
31
30
|
assert browser.firefox?
|
|
32
|
-
assert browser.modern?
|
|
33
31
|
assert_equal "17.0", browser.full_version
|
|
34
32
|
assert_equal "17", browser.version
|
|
35
33
|
end
|
|
@@ -40,7 +38,6 @@ class FirefoxTest < Minitest::Test
|
|
|
40
38
|
assert_equal :firefox, browser.id
|
|
41
39
|
assert_equal "Firefox", browser.name
|
|
42
40
|
assert browser.firefox?
|
|
43
|
-
assert browser.modern?
|
|
44
41
|
assert browser.platform.android?
|
|
45
42
|
assert_equal "14.0", browser.full_version
|
|
46
43
|
assert_equal "14", browser.version
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "test_helper"
|
|
4
|
+
|
|
5
|
+
class GoogleSearchAppTest < Minitest::Test
|
|
6
|
+
test "detects Google Search App (Android)" do
|
|
7
|
+
browser = Browser.new(Browser["GOOGLE_SEARCH_APP_ANDROID"])
|
|
8
|
+
|
|
9
|
+
assert browser.webkit?
|
|
10
|
+
assert browser.google_search_app?
|
|
11
|
+
assert browser.platform.android?
|
|
12
|
+
assert_equal :google_search_app, browser.id
|
|
13
|
+
assert_equal "11", browser.version
|
|
14
|
+
assert_equal "11.6.8.21", browser.full_version
|
|
15
|
+
assert_equal "Google Search App", browser.name
|
|
16
|
+
refute browser.chrome?
|
|
17
|
+
refute browser.safari?
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
test "detects Google Search App (iPad)" do
|
|
21
|
+
browser = Browser.new(Browser["GOOGLE_SEARCH_APP_IPAD"])
|
|
22
|
+
|
|
23
|
+
assert browser.webkit?
|
|
24
|
+
assert browser.google_search_app?
|
|
25
|
+
assert browser.device.ipad?
|
|
26
|
+
assert browser.platform.ios?
|
|
27
|
+
assert_equal :google_search_app, browser.id
|
|
28
|
+
assert_equal "102", browser.version
|
|
29
|
+
assert_equal "102.0.304944559", browser.full_version
|
|
30
|
+
assert_equal "Google Search App", browser.name
|
|
31
|
+
refute browser.chrome?
|
|
32
|
+
refute browser.safari?
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
test "detects Google Search App (iPhone)" do
|
|
36
|
+
browser = Browser.new(Browser["GOOGLE_SEARCH_APP_IPHONE"])
|
|
37
|
+
|
|
38
|
+
assert browser.webkit?
|
|
39
|
+
assert browser.google_search_app?
|
|
40
|
+
assert browser.device.iphone?
|
|
41
|
+
assert browser.platform.ios?
|
|
42
|
+
assert_equal :google_search_app, browser.id
|
|
43
|
+
assert_equal "105", browser.version
|
|
44
|
+
assert_equal "105.0.307913796", browser.full_version
|
|
45
|
+
assert_equal "Google Search App", browser.name
|
|
46
|
+
refute browser.chrome?
|
|
47
|
+
refute browser.safari?
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
test "detects version by range (iPad)" do
|
|
51
|
+
browser = Browser.new(Browser["GOOGLE_SEARCH_APP_IPAD"])
|
|
52
|
+
assert browser.google_search_app?(%w[>=102 <103])
|
|
53
|
+
end
|
|
54
|
+
end
|