browser 2.4.0 → 2.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/CHANGELOG.md +8 -0
- data/README.md +7 -5
- data/lib/browser/action_controller.rb +1 -1
- data/lib/browser/base.rb +17 -0
- data/lib/browser/browser.rb +6 -0
- data/lib/browser/device.rb +0 -1
- data/lib/browser/electron.rb +22 -0
- data/lib/browser/facebook.rb +21 -0
- data/lib/browser/otter.rb +21 -0
- data/lib/browser/platform.rb +7 -0
- data/lib/browser/qq.rb +2 -0
- data/lib/browser/version.rb +1 -1
- data/test/ua.yml +16 -10
- data/test/unit/android_app_test.rb +38 -0
- data/test/unit/electron_test.rb +14 -0
- data/test/unit/facebook_test.rb +20 -0
- data/test/unit/otter_test.rb +20 -0
- data/test/unit/qq_test.rb +16 -0
- metadata +13 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dfb0f67e4198ff39314ea0fb6d61f74e6e7e87e0
|
4
|
+
data.tar.gz: f306ab70e7d0c09b6762518a45575cc6174da730
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a735e5313563172b76f9c86a28390755caaaf0f359c135743795f90f7c33df849cb041be3ebdb943101e4f46aefbc6d4ea2e1c6d5c564d43092974676d55614e
|
7
|
+
data.tar.gz: fd6438932dbab1676ceed16b454c746b4d2177f0651aff4ecc1205b392ce7663c894e0e4b4e6ca7435b6b85348921973733a225ed6e2ad910dde3b4a4b72e672
|
data/.gitignore
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,13 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## v2.5.0
|
4
|
+
|
5
|
+
- Add support for QQ Browser Mac & Mac Lite.
|
6
|
+
- Add support for Electron Framework.
|
7
|
+
- Add support for Facebook in-app browser.
|
8
|
+
- Add support for Otter Browser.
|
9
|
+
- Add Android webview detection.
|
10
|
+
|
3
11
|
## v2.4.0
|
4
12
|
|
5
13
|
- Add Google Drive API, Proximic Spider, NewRelic pinger and SocialRank bots.
|
data/README.md
CHANGED
@@ -25,7 +25,8 @@ browser = Browser.new("Some User Agent", accept_language: "en-us")
|
|
25
25
|
browser.bot?
|
26
26
|
browser.chrome?
|
27
27
|
browser.core_media?
|
28
|
-
browser.edge?
|
28
|
+
browser.edge? # Newest MS browser
|
29
|
+
browser.electron? # Electron Framework
|
29
30
|
browser.firefox?
|
30
31
|
browser.full_version
|
31
32
|
browser.ie?
|
@@ -92,15 +93,16 @@ browser.platform.version # e.g. 9 (for iOS9)
|
|
92
93
|
browser.platform.adobe_air?
|
93
94
|
browser.platform.android?
|
94
95
|
browser.platform.android?(4.2) # detect Android Jelly Bean 4.2
|
96
|
+
browser.platform.android_app? # detect webview in an Android app
|
97
|
+
browser.platform.android_webview? # alias for android_app?
|
95
98
|
browser.platform.blackberry?
|
96
99
|
browser.platform.blackberry?(10) # detect specific BlackBerry version
|
97
100
|
browser.platform.chrome_os?
|
98
101
|
browser.platform.firefox_os?
|
99
102
|
browser.platform.ios? # detect iOS
|
100
103
|
browser.platform.ios?(9) # detect specific iOS version
|
101
|
-
browser.platform.ios_app?
|
102
|
-
browser.platform.ios_webview?
|
103
|
-
browser.platform.ios_webview? # request performed by ios' app webview
|
104
|
+
browser.platform.ios_app? # detect webview in an iOS app
|
105
|
+
browser.platform.ios_webview? # alias for ios_app?
|
104
106
|
browser.platform.linux?
|
105
107
|
browser.platform.mac?
|
106
108
|
browser.platform.other?
|
@@ -207,7 +209,7 @@ language.name
|
|
207
209
|
#=> "English/United States"
|
208
210
|
```
|
209
211
|
|
210
|
-
Result is always sorted in quality order from highest -> lowest. As per the HTTP spec:
|
212
|
+
Result is always sorted in quality order from highest -> lowest. As per the HTTP spec:
|
211
213
|
|
212
214
|
- omitting the quality value implies 1.0.
|
213
215
|
- quality value equal to zero means that is not accepted by the client.
|
data/lib/browser/base.rb
CHANGED
@@ -78,6 +78,18 @@ module Browser
|
|
78
78
|
"0"
|
79
79
|
end
|
80
80
|
|
81
|
+
# Detect if browser if Facebook.
|
82
|
+
def facebook?(expected_version = nil)
|
83
|
+
Facebook.new(ua).match? &&
|
84
|
+
detect_version?(full_version, expected_version)
|
85
|
+
end
|
86
|
+
|
87
|
+
# Detect if browser is Otter.
|
88
|
+
def otter?(expected_version = nil)
|
89
|
+
Otter.new(ua).match? &&
|
90
|
+
detect_version?(full_version, expected_version)
|
91
|
+
end
|
92
|
+
|
81
93
|
# Detect if browser is WebKit-based.
|
82
94
|
def webkit?(expected_version = nil)
|
83
95
|
ua =~ /AppleWebKit/i &&
|
@@ -174,5 +186,10 @@ module Browser
|
|
174
186
|
def proxy?
|
175
187
|
nokia? || uc_browser? || opera_mini?
|
176
188
|
end
|
189
|
+
|
190
|
+
# Detect if the browser is Electron.
|
191
|
+
def electron?(expected_version = nil)
|
192
|
+
Electron.new(ua).match? && detect_version?(full_version, expected_version)
|
193
|
+
end
|
177
194
|
end
|
178
195
|
end
|
data/lib/browser/browser.rb
CHANGED
@@ -23,6 +23,9 @@ require "browser/micro_messenger"
|
|
23
23
|
require "browser/weibo"
|
24
24
|
require "browser/qq"
|
25
25
|
require "browser/alipay"
|
26
|
+
require "browser/electron"
|
27
|
+
require "browser/facebook"
|
28
|
+
require "browser/otter"
|
26
29
|
|
27
30
|
require "browser/bot"
|
28
31
|
require "browser/middleware"
|
@@ -50,9 +53,12 @@ module Browser
|
|
50
53
|
Edge,
|
51
54
|
InternetExplorer,
|
52
55
|
Firefox,
|
56
|
+
Otter,
|
57
|
+
Facebook, # must be placed before Chrome and Safari
|
53
58
|
Weibo, # must be placed before Chrome and Safari
|
54
59
|
QQ, # must be placed before Chrome and Safari
|
55
60
|
Alipay, # must be placed before Chrome and Safari
|
61
|
+
Electron, # must be placed before Chrome and Safari
|
56
62
|
Chrome,
|
57
63
|
Safari,
|
58
64
|
MicroMessenger,
|
data/lib/browser/device.rb
CHANGED
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Browser
|
4
|
+
class Electron < Base
|
5
|
+
def id
|
6
|
+
:electron
|
7
|
+
end
|
8
|
+
|
9
|
+
def name
|
10
|
+
"Electron"
|
11
|
+
end
|
12
|
+
|
13
|
+
def full_version
|
14
|
+
ua[%r[Electron/([\d.]+)], 1] ||
|
15
|
+
"0.0"
|
16
|
+
end
|
17
|
+
|
18
|
+
def match?
|
19
|
+
ua =~ /Electron/
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Browser
|
4
|
+
class Facebook < Base
|
5
|
+
def id
|
6
|
+
:facebook
|
7
|
+
end
|
8
|
+
|
9
|
+
def name
|
10
|
+
"Facebook"
|
11
|
+
end
|
12
|
+
|
13
|
+
def full_version
|
14
|
+
ua[%r[FBAV/([\d.]+)], 1]
|
15
|
+
end
|
16
|
+
|
17
|
+
def match?
|
18
|
+
ua =~ /FBAV/
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Browser
|
4
|
+
class Otter < Base
|
5
|
+
def id
|
6
|
+
:otter
|
7
|
+
end
|
8
|
+
|
9
|
+
def name
|
10
|
+
"Otter"
|
11
|
+
end
|
12
|
+
|
13
|
+
def full_version
|
14
|
+
ua[%r[Otter/([\d.]+)], 1] || "0.0"
|
15
|
+
end
|
16
|
+
|
17
|
+
def match?
|
18
|
+
ua =~ /Otter/
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/lib/browser/platform.rb
CHANGED
@@ -127,6 +127,13 @@ module Browser
|
|
127
127
|
ios_app?
|
128
128
|
end
|
129
129
|
|
130
|
+
# Detect if in an Android app webview (Lollipop and newer)
|
131
|
+
# https://developer.chrome.com/multidevice/user-agent#webview_user_agent
|
132
|
+
def android_app?
|
133
|
+
android? && ua =~ /\bwv\b/
|
134
|
+
end
|
135
|
+
alias_method :android_webview?, :android_app?
|
136
|
+
|
130
137
|
# http://msdn.microsoft.com/fr-FR/library/ms537503.aspx#PltToken
|
131
138
|
def windows_xp?
|
132
139
|
windows? && ua =~ /Windows NT 5\.[12]/
|
data/lib/browser/qq.rb
CHANGED
data/lib/browser/version.rb
CHANGED
data/test/ua.yml
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
ADOBE_AIR: 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X; de) AppleWebKit/533.19.4 (KHTML, like Gecko) AdobeAIR/13.0'
|
2
|
+
ALIPAY_ANDROID: "Mozilla/5.0 (Linux; U; Android 4.2.1; zh-cn; HUAWEI G610-T00 Build/HuaweiG610-T00) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 AlipayDefined(nt:WIFI,ws:360|640|1.5) AliApp(AP/9.0.1.073001) AlipayClient/9.0.1.073001 GCanvas/1.4.2.15"
|
3
|
+
ALIPAY_IOS: "Mozilla/5.0 (iPhone; CPU iPhone OS 7_0 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A465 Safari/9537.53 AliApp(AP/2.3.4) AlipayClient/2.3.4"
|
2
4
|
ANDROID: 'Android SDK 1.5r3: Mozilla/5.0 (Linux; U; Android 1.5; de-; sdk Build/CUPCAKE) AppleWebkit/528.5+ (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1'
|
3
5
|
ANDROID_CUPCAKE: Mozilla/5.0 (Linux; U; Android 1.5; en-gb; T-Mobile G1 Build/CRC1) AppleWebKit/528.5+ (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1
|
4
6
|
ANDROID_DONUT: Mozilla/5.0 (Linux; U; Android 1.6; ar-us; SonyEricssonX10i Build/R2BA026) AppleWebKit/528.5+ (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1
|
@@ -15,6 +17,7 @@ ANDROID_LOLLIPOP_50: Mozilla/5.0 (Linux; Android 5.0; Nexus 5 Build/LPX13D) Appl
|
|
15
17
|
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
|
16
18
|
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
|
17
19
|
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
|
20
|
+
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
|
18
21
|
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'
|
19
22
|
BLACKBERRY10: 'Mozilla/5.0 (BB10; Touch) AppleWebKit/537.10+ (KHTML, like Gecko) Version/10.0.9.1675 Mobile Safari/537.10+'
|
20
23
|
BLACKBERRY4: 'BlackBerry8100/4.2.1 Profile/MIDP-2.0 Configuration/CLDC-1.1 VendorID/103'
|
@@ -26,6 +29,8 @@ CHROME: 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-US) AppleWebKit/53
|
|
26
29
|
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.'
|
27
30
|
COREMEDIA: 'Apple Mac OS X v10.6.4 CoreMedia v1.0.0.10F569'
|
28
31
|
CUSTOM_APP: "Our App 0.0.1 (Linux; Android 4.0.3; HTC Ruby Build/IML74K; en_CA)"
|
32
|
+
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"
|
33
|
+
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]
|
29
34
|
FIREFOX: 'Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.9.0.2) Gecko/20121223 Ubuntu/9.25 (jaunty) Firefox/3.8'
|
30
35
|
FIREFOX_ANDROID: 'Mozilla/5.0 (Android; Mobile; rv:40.0) Gecko/40.0 Firefox/40.0'
|
31
36
|
FIREFOX_IOS: 'Mozilla/5.0 (iPhone; CPU iPhone OS 9_2 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) FxiOS/1.2 Mobile/13C75 Safari/601.1.46'
|
@@ -62,6 +67,7 @@ KINDLE_FIRE: 'Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; Kindle Fire Build/GIN
|
|
62
67
|
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'
|
63
68
|
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'
|
64
69
|
LUMIA800: 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; XBLWP7; ZuneWP7'
|
70
|
+
MICRO_MESSENGER: 'Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/13E238 MicroMessenger/6.3.15 NetType/3G+ Language/zh_CN'
|
65
71
|
MIDP: MIDP-2.0
|
66
72
|
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'
|
67
73
|
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'
|
@@ -78,12 +84,17 @@ OPERA_ANDROID: 'Mozill/5.0 (Linux; Android 4.4.2; A1-810 Build/KOT49H) Apple/Web
|
|
78
84
|
OPERA_MINI: 'Opera/9.80 (Android; Opera Mini/7.029952/28.2359;u; fr) Presto/2.8.119 Version/11.10'
|
79
85
|
OPERA_MOBI: 'Opera/9.8 (Android 2.3.5; Linux; Opera Mobi/ADR-1205181138; U; en) Presto/2.10.254 Version/12.00'
|
80
86
|
OPERA_NEXT: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.37 Safari/537.36 OPR/15.0.1147.44 (Edition Next)'
|
87
|
+
OTTER: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/602.1 (KHTML, like Gecko) Otter/0.9.91
|
81
88
|
PHANTOM_JS: 'Mozilla/5.0 (Macintosh; Intel Mac OS X) AppleWebKit/534.34 (KHTML, like Gecko) PhantomJS/1.9.0 Safari/534.34'
|
82
89
|
PLAYBOOK: 'Mozilla/5.0 (PlayBook; U; RIM Tablet OS 2.1.0; en-US) AppleWebKit/536.2+ (KHTML, like Gecko) Version/7.2.1.0 Safari/536.2+'
|
83
90
|
PLAYSTATION3: 'Mozilla/5.0 (PLAYSTATION 3; 3.55)'
|
84
91
|
PLAYSTATION4: 'Mozilla/5.0 (PlayStation 4 1.020) AppleWebKit/536.26 (KHTML, like Gecko)'
|
85
92
|
PSP: 'Mozilla/4.0 (PSP (PlayStation Portable); 2.00)'
|
86
93
|
PSP_VITA: 'Mozilla/5.0 (Playstation Vita 1.61) AppleWebKit/531.22.8 (KHTML, like Gecko) Silk/3.2'
|
94
|
+
QQ_BROWSER_ANDROID: 'Mozilla/5.0 (Linux; Android 5.1.1; SM-N9108V Build/LMY47X) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/37.0.0.0 Mobile MQQBrowser/6.2 TBS/036222 Safari/537.36 V1_AND_SQ_6.2.0_320_YYB_D QQ/6.2.0.2655 NetType/WIFI WebP/0.3.0 Pixel/1440'
|
95
|
+
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'
|
96
|
+
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'
|
97
|
+
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'
|
87
98
|
QUICKTIME: 'QuickTime/7.6.8 (qtver=7.6.8;os=Windows NT 5.1Service Pack 3)'
|
88
99
|
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'
|
89
100
|
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'
|
@@ -102,12 +113,14 @@ SURFACE: 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; ARM; Trident/6.0;
|
|
102
113
|
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'
|
103
114
|
TABLOID: 'Mozilla/5.0 (Linux; U; Android 3.0; en-us; Xoom Build/HRI39) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13'
|
104
115
|
UC_BROWSER: 'Mozilla/5.0 (Linux; U; Android 4.4.2; en-US; GT-I9500 Build/KOT49H) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 UCBrowser/9.9.4.484 U3/0.8.0 Mobile Safari/533.1'
|
105
|
-
|
106
|
-
|
116
|
+
WEIBO_ANDROID: 'Mozilla/5.0 (Linux; Android 5.0.2; vivo X5M Build/LRX22G) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/37.0.0.0 Mobile Safari/537.36 Weibo (vivo-vivo X5M__weibo__5.7.1__android__android5.0.2)'
|
117
|
+
WEIBO_IOS: 'Mozilla/5.0 (iPhone; CPU iPhone OS 8_4 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12H143 Weibo (iPhone7,2__weibo__5.7.1__iphone__os8.4)'
|
118
|
+
WINDOWS10: 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 10.0; Trident/6.0)'
|
107
119
|
WINDOWS7: 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0) chromeframe/10.0.648.205'
|
108
120
|
WINDOWS81: 'Mozilla/5.0 (IE 11.0; Windows NT 6.3; Trident/7.0; .NET4.0E; .NET4.0C; rv:11.0) like Gecko'
|
109
121
|
WINDOWS8: 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)'
|
110
|
-
|
122
|
+
WINDOWS_2000: 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 5.0; Trident/6.0)'
|
123
|
+
WINDOWS_2000_SP1: 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 5.01; Trident/6.0)'
|
111
124
|
WINDOWS_MOBILE: 'Mozilla/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 6.12)'
|
112
125
|
WINDOWS_PHONE8: 'Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 920)'
|
113
126
|
WINDOWS_PHONE: 'Mozilla/4.0 (compatible; MSIE 7.0; Windows Phone OS 7.0; Trident/3.1; IEMobile/7.0; DELL; Venue Pro)'
|
@@ -120,10 +133,3 @@ XBOX360: 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; Xbox),
|
|
120
133
|
XBOXONE: 'Mozilla/5.0 (Compatible; MSIE 10.0; Windows NT 6.2; Trident /6.0; Xbox; Xbox One)'
|
121
134
|
XOOM: 'Mozilla/5.0 (Linux; U; Android 3.0; en-us; Xoom Build/HRI39) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13'
|
122
135
|
YANDEX_BROWSER: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 YaBrowser/15.4.2272.3909 (beta) Yowser/2.0 Safari/537.36'
|
123
|
-
MICRO_MESSENGER: 'Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/13E238 MicroMessenger/6.3.15 NetType/3G+ Language/zh_CN'
|
124
|
-
WEIBO_IOS: 'Mozilla/5.0 (iPhone; CPU iPhone OS 8_4 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12H143 Weibo (iPhone7,2__weibo__5.7.1__iphone__os8.4)'
|
125
|
-
WEIBO_ANDROID: 'Mozilla/5.0 (Linux; Android 5.0.2; vivo X5M Build/LRX22G) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/37.0.0.0 Mobile Safari/537.36 Weibo (vivo-vivo X5M__weibo__5.7.1__android__android5.0.2)'
|
126
|
-
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'
|
127
|
-
QQ_BROWSER_ANDROID: 'Mozilla/5.0 (Linux; Android 5.1.1; SM-N9108V Build/LMY47X) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/37.0.0.0 Mobile MQQBrowser/6.2 TBS/036222 Safari/537.36 V1_AND_SQ_6.2.0_320_YYB_D QQ/6.2.0.2655 NetType/WIFI WebP/0.3.0 Pixel/1440'
|
128
|
-
ALIPAY_IOS: "Mozilla/5.0 (iPhone; CPU iPhone OS 7_0 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A465 Safari/9537.53 AliApp(AP/2.3.4) AlipayClient/2.3.4"
|
129
|
-
ALIPAY_ANDROID: "Mozilla/5.0 (Linux; U; Android 4.2.1; zh-cn; HUAWEI G610-T00 Build/HuaweiG610-T00) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 AlipayDefined(nt:WIFI,ws:360|640|1.5) AliApp(AP/9.0.1.073001) AlipayClient/9.0.1.073001 GCanvas/1.4.2.15"
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "test_helper"
|
4
|
+
|
5
|
+
class AndroidAppTest < Minitest::Test
|
6
|
+
let(:browser) { Browser.new(Browser["ANDROID_WEBVIEW"]) }
|
7
|
+
|
8
|
+
test "detect as android" do
|
9
|
+
assert browser.platform.android?
|
10
|
+
end
|
11
|
+
|
12
|
+
test "detect as webview" do
|
13
|
+
assert browser.platform.android_webview?
|
14
|
+
end
|
15
|
+
|
16
|
+
test "non-webviews do not detect as webview" do
|
17
|
+
%w[
|
18
|
+
ANDROID_CUPCAKE
|
19
|
+
ANDROID_DONUT
|
20
|
+
ANDROID_ECLAIR_21
|
21
|
+
ANDROID_FROYO
|
22
|
+
ANDROID_GINGERBREAD
|
23
|
+
ANDROID_HONEYCOMB_30
|
24
|
+
ANDROID_ICECREAM
|
25
|
+
ANDROID_JELLYBEAN_41
|
26
|
+
ANDROID_JELLYBEAN_42
|
27
|
+
ANDROID_JELLYBEAN_43
|
28
|
+
ANDROID_KITKAT
|
29
|
+
ANDROID_LOLLIPOP_50
|
30
|
+
ANDROID_LOLLIPOP_51
|
31
|
+
ANDROID_TV
|
32
|
+
ANDROID_NEXUS_PLAYER
|
33
|
+
FIREFOX_ANDROID
|
34
|
+
].each do |android_type|
|
35
|
+
refute Browser.new(Browser[android_type]).platform.android_webview?
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "test_helper"
|
4
|
+
|
5
|
+
class ElectronTest < Minitest::Test
|
6
|
+
test "detect electron" do
|
7
|
+
browser = Browser.new(Browser["ELECTRON"])
|
8
|
+
|
9
|
+
assert_equal "Electron", browser.name
|
10
|
+
assert browser.electron?
|
11
|
+
assert_equal :electron, browser.id
|
12
|
+
assert_equal "1.4.12", browser.full_version
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "test_helper"
|
4
|
+
|
5
|
+
class FacebookTest < Minitest::Test
|
6
|
+
test "detects facebook" do
|
7
|
+
browser = Browser.new(Browser["FACEBOOK"])
|
8
|
+
|
9
|
+
assert_equal "Facebook", browser.name
|
10
|
+
assert browser.facebook?
|
11
|
+
assert :facebook, browser.id
|
12
|
+
assert_equal "135.0.0.45.90", browser.full_version
|
13
|
+
assert_equal "135", browser.version
|
14
|
+
end
|
15
|
+
|
16
|
+
test "detects version by range" do
|
17
|
+
browser = Browser.new(Browser["FACEBOOK"])
|
18
|
+
assert browser.facebook?(%w[>=135])
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "test_helper"
|
4
|
+
|
5
|
+
class OtterBrowserTest < Minitest::Test
|
6
|
+
test "detects Otter Browser" do
|
7
|
+
browser = Browser.new(Browser["OTTER"])
|
8
|
+
|
9
|
+
assert browser.otter?
|
10
|
+
assert_equal "Otter", browser.name
|
11
|
+
assert_equal :otter, browser.id
|
12
|
+
assert_equal "0.9.91", browser.full_version
|
13
|
+
assert_equal "0", browser.version
|
14
|
+
end
|
15
|
+
|
16
|
+
test "detects version by range" do
|
17
|
+
browser = Browser.new(Browser["OTTER"])
|
18
|
+
assert browser.otter?(%w[=0.9.91])
|
19
|
+
end
|
20
|
+
end
|
data/test/unit/qq_test.rb
CHANGED
@@ -18,4 +18,20 @@ class QQTest < Minitest::Test
|
|
18
18
|
assert_equal "QQ Browser", browser.name
|
19
19
|
assert_equal :qq, browser.id
|
20
20
|
end
|
21
|
+
|
22
|
+
test "detects QQ browser for Mac" do
|
23
|
+
browser = Browser.new(Browser["QQ_BROWSER_MAC"])
|
24
|
+
|
25
|
+
assert_equal "4.2.4753.400", browser.full_version
|
26
|
+
assert_equal "QQ Browser", browser.name
|
27
|
+
assert_equal :qq, browser.id
|
28
|
+
end
|
29
|
+
|
30
|
+
test "detects QQ browser lite for Mac" do
|
31
|
+
browser = Browser.new(Browser["QQ_BROWSER_MAC_LITE"])
|
32
|
+
|
33
|
+
assert_equal "1.0.4", browser.full_version
|
34
|
+
assert_equal "QQ Browser", browser.name
|
35
|
+
assert_equal :qq, browser.id
|
36
|
+
end
|
21
37
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: browser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nando Vieira
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-08-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -204,6 +204,8 @@ files:
|
|
204
204
|
- lib/browser/device/xbox_360.rb
|
205
205
|
- lib/browser/device/xbox_one.rb
|
206
206
|
- lib/browser/edge.rb
|
207
|
+
- lib/browser/electron.rb
|
208
|
+
- lib/browser/facebook.rb
|
207
209
|
- lib/browser/firefox.rb
|
208
210
|
- lib/browser/generic.rb
|
209
211
|
- lib/browser/internet_explorer.rb
|
@@ -228,6 +230,7 @@ files:
|
|
228
230
|
- lib/browser/middleware/context/url_methods.rb
|
229
231
|
- lib/browser/nokia.rb
|
230
232
|
- lib/browser/opera.rb
|
233
|
+
- lib/browser/otter.rb
|
231
234
|
- lib/browser/phantom_js.rb
|
232
235
|
- lib/browser/platform.rb
|
233
236
|
- lib/browser/platform/adobe_air.rb
|
@@ -263,6 +266,7 @@ files:
|
|
263
266
|
- test/unit/adobe_air_test.rb
|
264
267
|
- test/unit/aliases_test.rb
|
265
268
|
- test/unit/alipay_test.rb
|
269
|
+
- test/unit/android_app_test.rb
|
266
270
|
- test/unit/android_test.rb
|
267
271
|
- test/unit/blackberry_test.rb
|
268
272
|
- test/unit/bots_test.rb
|
@@ -270,6 +274,8 @@ files:
|
|
270
274
|
- test/unit/console_test.rb
|
271
275
|
- test/unit/device_test.rb
|
272
276
|
- test/unit/edge_test.rb
|
277
|
+
- test/unit/electron_test.rb
|
278
|
+
- test/unit/facebook_test.rb
|
273
279
|
- test/unit/firefox_test.rb
|
274
280
|
- test/unit/generic_test.rb
|
275
281
|
- test/unit/internet_explorer_test.rb
|
@@ -280,6 +286,7 @@ files:
|
|
280
286
|
- test/unit/micro_messenger_test.rb
|
281
287
|
- test/unit/nokia_test.rb
|
282
288
|
- test/unit/opera_test.rb
|
289
|
+
- test/unit/otter_test.rb
|
283
290
|
- test/unit/platform_test.rb
|
284
291
|
- test/unit/proxy_test.rb
|
285
292
|
- test/unit/qq_test.rb
|
@@ -325,6 +332,7 @@ test_files:
|
|
325
332
|
- test/unit/adobe_air_test.rb
|
326
333
|
- test/unit/aliases_test.rb
|
327
334
|
- test/unit/alipay_test.rb
|
335
|
+
- test/unit/android_app_test.rb
|
328
336
|
- test/unit/android_test.rb
|
329
337
|
- test/unit/blackberry_test.rb
|
330
338
|
- test/unit/bots_test.rb
|
@@ -332,6 +340,8 @@ test_files:
|
|
332
340
|
- test/unit/console_test.rb
|
333
341
|
- test/unit/device_test.rb
|
334
342
|
- test/unit/edge_test.rb
|
343
|
+
- test/unit/electron_test.rb
|
344
|
+
- test/unit/facebook_test.rb
|
335
345
|
- test/unit/firefox_test.rb
|
336
346
|
- test/unit/generic_test.rb
|
337
347
|
- test/unit/internet_explorer_test.rb
|
@@ -342,6 +352,7 @@ test_files:
|
|
342
352
|
- test/unit/micro_messenger_test.rb
|
343
353
|
- test/unit/nokia_test.rb
|
344
354
|
- test/unit/opera_test.rb
|
355
|
+
- test/unit/otter_test.rb
|
345
356
|
- test/unit/platform_test.rb
|
346
357
|
- test/unit/proxy_test.rb
|
347
358
|
- test/unit/qq_test.rb
|