browser 3.0.2 → 5.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/ISSUE_TEMPLATE.md +1 -1
- data/.prettierignore +1 -0
- data/.rubocop.yml +9 -0
- data/.travis.yml +3 -3
- data/CHANGELOG.md +81 -18
- data/FUNDING.yml +3 -0
- data/README.md +113 -88
- data/bots.yml +300 -294
- data/browser.gemspec +3 -1
- data/lib/browser/base.rb +63 -7
- data/lib/browser/browser.rb +27 -26
- data/lib/browser/chrome.rb +12 -2
- data/lib/browser/device.rb +2 -2
- data/lib/browser/device/unknown.rb +1 -1
- data/lib/browser/duck_duck_go.rb +22 -0
- data/lib/browser/edge.rb +2 -2
- data/lib/browser/google_search_app.rb +21 -0
- data/lib/browser/huawei_browser.rb +21 -0
- data/lib/browser/maxthon.rb +21 -0
- data/lib/browser/meta.rb +0 -1
- data/lib/browser/meta/base.rb +0 -1
- data/lib/browser/miui_browser.rb +21 -0
- data/lib/browser/platform.rb +5 -5
- data/lib/browser/platform/base.rb +3 -2
- data/lib/browser/platform/ios.rb +1 -1
- data/lib/browser/platform/mac.rb +4 -2
- data/lib/browser/platform/{other.rb → unknown.rb} +3 -3
- data/lib/browser/platform/windows.rb +1 -1
- data/lib/browser/safari.rb +16 -1
- data/lib/browser/samsung_browser.rb +21 -0
- data/lib/browser/sougou_browser.rb +24 -0
- data/lib/browser/{generic.rb → unknown.rb} +3 -3
- data/lib/browser/version.rb +1 -1
- data/test/browser_test.rb +23 -6
- data/test/test_helper.rb +8 -0
- data/test/ua.yml +17 -1
- data/test/ua_bots.yml +8 -2
- data/test/unit/adobe_air_test.rb +1 -1
- data/test/unit/alipay_test.rb +6 -0
- data/test/unit/console_test.rb +2 -2
- data/test/unit/device_test.rb +2 -2
- data/test/unit/duck_duck_go_test.rb +37 -0
- data/test/unit/edge_test.rb +34 -2
- data/test/unit/google_search_app_test.rb +54 -0
- data/test/unit/huawei_browser_test.rb +25 -0
- data/test/unit/maxthon_test.rb +25 -0
- data/test/unit/meta_test.rb +9 -0
- 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 -0
- data/test/unit/platform_test.rb +12 -7
- 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
- metadata +33 -10
- data/lib/browser/meta/modern.rb +0 -11
data/lib/browser/platform/ios.rb
CHANGED
@@ -5,7 +5,7 @@ module Browser
|
|
5
5
|
class IOS < Base
|
6
6
|
MATCHER = /(iPhone|iPad|iPod)/.freeze
|
7
7
|
VERSION_MATCHER =
|
8
|
-
/OS (
|
8
|
+
/OS (?<major>\d+)_(?<minor>\d+)_?(?<patch>\d+)?/.freeze
|
9
9
|
|
10
10
|
def version
|
11
11
|
matches = VERSION_MATCHER.match(ua)
|
data/lib/browser/platform/mac.rb
CHANGED
@@ -4,11 +4,13 @@ module Browser
|
|
4
4
|
class Platform
|
5
5
|
class Mac < Base
|
6
6
|
def version
|
7
|
-
(ua[/Mac OS X\s*([0-9_
|
7
|
+
(ua[/Mac OS X\s*([0-9_.]+)?/, 1] || "0").tr("_", ".")
|
8
8
|
end
|
9
9
|
|
10
10
|
def name
|
11
|
-
"
|
11
|
+
return "macOS" if platform.mac?(">= 10.12")
|
12
|
+
|
13
|
+
"Mac OS X"
|
12
14
|
end
|
13
15
|
|
14
16
|
def id
|
data/lib/browser/safari.rb
CHANGED
@@ -18,7 +18,22 @@ module Browser
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def match?
|
21
|
-
ua =~ /Safari/ &&
|
21
|
+
ua =~ /Safari/ &&
|
22
|
+
ua !~ /PhantomJS|FxiOS/ &&
|
23
|
+
!edge? &&
|
24
|
+
!chrome? &&
|
25
|
+
!opera? &&
|
26
|
+
!samsung_browser? &&
|
27
|
+
!huawei_browser? &&
|
28
|
+
!miui_browser? &&
|
29
|
+
!duck_duck_go? &&
|
30
|
+
!yandex? &&
|
31
|
+
!sputnik? &&
|
32
|
+
!maxthon? &&
|
33
|
+
!qq? &&
|
34
|
+
!alipay? &&
|
35
|
+
!sougou_browser? &&
|
36
|
+
!google_search_app?
|
22
37
|
end
|
23
38
|
end
|
24
39
|
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Browser
|
4
|
+
class SamsungBrowser < Chrome
|
5
|
+
def id
|
6
|
+
:samsung_browser
|
7
|
+
end
|
8
|
+
|
9
|
+
def name
|
10
|
+
"Samsung Browser"
|
11
|
+
end
|
12
|
+
|
13
|
+
def full_version
|
14
|
+
ua[%r{SamsungBrowser/([\d.]+)}, 1] || super
|
15
|
+
end
|
16
|
+
|
17
|
+
def match?
|
18
|
+
ua =~ /SamsungBrowser/
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Browser
|
4
|
+
class SougouBrowser < Base
|
5
|
+
def id
|
6
|
+
:sougou_browser
|
7
|
+
end
|
8
|
+
|
9
|
+
def name
|
10
|
+
"Sougou Browser"
|
11
|
+
end
|
12
|
+
|
13
|
+
# We can't get the real version on desktop device from the ua string
|
14
|
+
def full_version
|
15
|
+
ua[%r{(?:SogouMobileBrowser)/([\d.]+)}, 1] || "0.0"
|
16
|
+
end
|
17
|
+
|
18
|
+
# SogouMobileBrowser for mobile device
|
19
|
+
# SE for desktop device
|
20
|
+
def match?
|
21
|
+
ua =~ /SogouMobileBrowser/i || ua =~ / SE /
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -1,18 +1,18 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Browser
|
4
|
-
class
|
4
|
+
class Unknown < Base
|
5
5
|
NAMES = {
|
6
6
|
"QuickTime" => "QuickTime",
|
7
7
|
"CoreMedia" => "Apple CoreMedia"
|
8
8
|
}.freeze
|
9
9
|
|
10
10
|
def id
|
11
|
-
:
|
11
|
+
:unknown_browser
|
12
12
|
end
|
13
13
|
|
14
14
|
def name
|
15
|
-
infer_name || "
|
15
|
+
infer_name || "Unknown Browser"
|
16
16
|
end
|
17
17
|
|
18
18
|
def full_version
|
data/lib/browser/version.rb
CHANGED
data/test/browser_test.rb
CHANGED
@@ -106,14 +106,13 @@ class BrowserTest < Minitest::Test
|
|
106
106
|
refute browser.chrome?(">=65")
|
107
107
|
end
|
108
108
|
|
109
|
-
test "detects unknown
|
109
|
+
test "detects unknown browser" do
|
110
110
|
browser = Browser.new("Unknown")
|
111
|
-
assert_equal :generic, browser.id
|
112
|
-
end
|
113
111
|
|
114
|
-
|
115
|
-
browser
|
116
|
-
assert_equal
|
112
|
+
assert browser.unknown?
|
113
|
+
refute browser.known?
|
114
|
+
assert_equal :unknown_browser, browser.id
|
115
|
+
assert_equal "Unknown Browser", browser.name
|
117
116
|
end
|
118
117
|
|
119
118
|
test "returns empty language set for missing accept language" do
|
@@ -155,4 +154,22 @@ class BrowserTest < Minitest::Test
|
|
155
154
|
browser = Browser.new("Fancy new browser")
|
156
155
|
refute browser.known?
|
157
156
|
end
|
157
|
+
|
158
|
+
test "rejects user agent larger than 512 bytes" do
|
159
|
+
message = "user_agent cannot be larger than 512 bytes; actual size is " \
|
160
|
+
"513 bytes"
|
161
|
+
|
162
|
+
assert_raises(Browser::Error, message) do
|
163
|
+
Browser.new("a" * 513)
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
test "rejects accept language larger than 256 bytes" do
|
168
|
+
message = "accept_language cannot be larger than 256 bytes; actual size " \
|
169
|
+
"is 257 bytes"
|
170
|
+
|
171
|
+
assert_raises(Browser::Error, message) do
|
172
|
+
Browser.new("Chrome", accept_language: "a" * 257)
|
173
|
+
end
|
174
|
+
end
|
158
175
|
end
|
data/test/test_helper.rb
CHANGED
data/test/ua.yml
CHANGED
@@ -32,6 +32,8 @@ CHROME: "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-US) AppleWebKit/53
|
|
32
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."
|
33
33
|
COREMEDIA: "Apple Mac OS X v10.6.4 CoreMedia v1.0.0.10F569"
|
34
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"
|
35
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"
|
36
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]
|
37
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;]"
|
@@ -42,6 +44,10 @@ FIREFOX_IOS: "Mozilla/5.0 (iPhone; CPU iPhone OS 9_2 like Mac OS X) AppleWebKit/
|
|
42
44
|
FIREFOX_MODERN: "Mozilla/5.0 (X11; Ubuntu; Linux armv7l; rv:17.0) Gecko/20100101 Firefox/17.0"
|
43
45
|
FIREFOX_OS: "Mozilla/5.0 (Mobile; rv:18.0) Gecko/18.0 Firefox/18.0"
|
44
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"
|
45
51
|
IE10: "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0; EIE10;ENUSMSN)"
|
46
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)"
|
47
53
|
IE10_X64_WINX64: "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0)"
|
@@ -77,12 +83,19 @@ KINDLE_FIRE: "Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; Kindle Fire Build/GIN
|
|
77
83
|
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"
|
78
84
|
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"
|
79
85
|
LUMIA800: "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; XBLWP7; ZuneWP7"
|
80
|
-
|
86
|
+
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"
|
87
|
+
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"
|
88
|
+
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"
|
89
|
+
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"
|
90
|
+
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"
|
81
91
|
MIDP: MIDP-2.0
|
92
|
+
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"
|
82
93
|
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"
|
83
94
|
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"
|
95
|
+
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"
|
84
96
|
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"
|
85
97
|
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)"
|
98
|
+
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"
|
86
99
|
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"
|
87
100
|
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"
|
88
101
|
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"
|
@@ -107,6 +120,8 @@ QQ_BROWSER_ANDROID: "Mozilla/5.0 (Linux; Android 5.1.1; SM-N9108V Build/LMY47X)
|
|
107
120
|
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"
|
108
121
|
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"
|
109
122
|
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"
|
123
|
+
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"
|
124
|
+
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"
|
110
125
|
QUICKTIME: "QuickTime/7.6.8 (qtver=7.6.8;os=Windows NT 5.1Service Pack 3)"
|
111
126
|
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"
|
112
127
|
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"
|
@@ -119,6 +134,7 @@ SAFARI: "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-us) AppleWebKit/53
|
|
119
134
|
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"
|
120
135
|
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"
|
121
136
|
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"
|
137
|
+
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"
|
122
138
|
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"
|
123
139
|
SMART_TV: "Mozilla/5.0 (SmartHub; SMART-TV; U; Linux/SmartTV) AppleWebKit/531.2+ (KHTML, like Gecko) WebBrowser/1.0 SmartTV Safari/531.2+"
|
124
140
|
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)
|
data/test/ua_bots.yml
CHANGED
@@ -4,15 +4,16 @@ 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
|
-
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"
|
10
10
|
BAIDU: "Baiduspider+(+http://www.baidu.com/search/spider.htm)"
|
11
11
|
BARKROWLER: "Barkrowler/0.7 (+http://www.exensa.com/crawl)"
|
12
12
|
BINGBOT: "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)"
|
13
13
|
BINGPREVIEW: "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534+ (KHTML, like Gecko) BingPreview/1.0b"
|
14
14
|
BUBING: "BUbiNG (+http://law.di.unimi.it/BUbiNG.html)"
|
15
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"
|
16
17
|
CIPACRAWLER: "CipaCrawler/3.0 (info@domaincrawler.com; http://www.domaincrawler.com/www.example.com)"
|
17
18
|
CLOUDFLARE: "Mozilla/5.0 (compatible; CloudFlare-AlwaysOnline/1.0; +http://www.cloudflare.com/always-online) AppleWebKit/534.34"
|
18
19
|
COMMONCRAWL: "CCBot/2.0 (http://commoncrawl.org/faq/)"
|
@@ -30,7 +31,9 @@ FYREBOT: "Fyrebot/1.0"
|
|
30
31
|
GARLIK: "GarlikCrawler/1.2 (http://garlik.com/, crawler@garlik.com)"
|
31
32
|
GERMCRAWLER: "GermCrawler"
|
32
33
|
GO_1.1_PACKAGE_HTTP: "Go 1.1 package http"
|
34
|
+
GO_HTTP_CLIENT: "Go-http-client"
|
33
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)"
|
34
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"
|
35
38
|
GOOGLE_SHOPPING: "google-xrawler"
|
36
39
|
GOOGLE_SITE_VERIFICATION: Mozilla/5.0 (compatible; Google-Site-Verification/1.0)
|
@@ -43,6 +46,7 @@ IMPLISENSEBOT: "ImplisenseBot 1.0"
|
|
43
46
|
JAUNT: "Jaunt/1.5"
|
44
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"
|
45
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"
|
46
50
|
LINKDEXBOT: "Mozilla/5.0 (compatible; linkdexbot/2.0; +http://www.linkdex.com/bots/)"
|
47
51
|
LINKEDIN: "LinkedInBot/1.0 (compatible; Mozilla/5.0; Jakarta Commons-HttpClient/3.1 +http://www.linkedin.com)"
|
48
52
|
LOAD_TIME_BOT: "Mozilla/5.0 (compatible; LoadTimeBot/0.9; +http://www.loadtime.net/bot.html)"
|
@@ -68,10 +72,12 @@ SCOUT_URL_MONITOR: ScoutURLMonitor/6.2.2
|
|
68
72
|
SCRAPY: "Scrapy/0.18.4 (+http://scrapy.org)"
|
69
73
|
SEMANTICBOT: "Mozilla/5.0 (compatible; Semanticbot/1.0; +http://sempi.tech/bot.html)"
|
70
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)"
|
71
76
|
SEODIVER: "Mozilla/5.0 (compatible; SEOdiver/1.0; +http://www.seodiver.com/bot)"
|
72
77
|
SEOKICKS: "Mozilla/5.0 (compatible; SEOkicks-Robot; +http://www.seokicks.de/robot.html)"
|
73
78
|
SISTRIX: "Mozilla/5.0 (compatible; SISTRIX Crawler; http://crawler.sistrix.net/)"
|
74
|
-
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"
|
75
81
|
SOCIALRANKIO: SocialRankIOBot; http://socialrank.io/about
|
76
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"
|
77
83
|
STRIPE: "Stripe/1.0 (+https://stripe.com/docs/webhooks)"
|
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
|
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
@@ -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
|
@@ -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
@@ -65,8 +65,40 @@ class EdgeTest < ActionController::TestCase
|
|
65
65
|
refute browser.safari?
|
66
66
|
end
|
67
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
|
+
|
68
100
|
test "detects version by range" do
|
69
|
-
browser = Browser.new(Browser["
|
70
|
-
assert browser.edge?(%w[>=
|
101
|
+
browser = Browser.new(Browser["MS_EDGE_IOS"])
|
102
|
+
assert browser.edge?(%w[>=43 <45])
|
71
103
|
end
|
72
104
|
end
|