browser 4.2.0 → 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/CHANGELOG.md +24 -1
- data/FUNDING.yml +3 -0
- data/README.md +96 -47
- data/bots.yml +1 -1
- data/lib/browser/base.rb +53 -2
- data/lib/browser/browser.rb +22 -2
- data/lib/browser/chrome.rb +7 -1
- data/lib/browser/device.rb +2 -2
- data/lib/browser/device/unknown.rb +1 -1
- 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/miui_browser.rb +21 -0
- data/lib/browser/platform.rb +4 -4
- data/lib/browser/platform/ios.rb +1 -1
- data/lib/browser/platform/mac.rb +1 -1
- data/lib/browser/platform/{other.rb → unknown.rb} +3 -3
- data/lib/browser/platform/windows.rb +1 -1
- data/lib/browser/safari.rb +9 -1
- 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/ua.yml +12 -4
- 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 +2 -0
- 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/miui_browser_test.rb +25 -0
- data/test/unit/opera_test.rb +1 -0
- data/test/unit/platform_test.rb +6 -6
- data/test/unit/qq_test.rb +12 -0
- data/test/unit/safari_test.rb +12 -7
- data/test/unit/sougou_browser_test.rb +41 -0
- metadata +23 -7
data/lib/browser/browser.rb
CHANGED
@@ -15,7 +15,7 @@ require_relative "firefox"
|
|
15
15
|
require_relative "edge"
|
16
16
|
require_relative "opera"
|
17
17
|
require_relative "blackberry"
|
18
|
-
require_relative "
|
18
|
+
require_relative "unknown"
|
19
19
|
require_relative "phantom_js"
|
20
20
|
require_relative "uc_browser"
|
21
21
|
require_relative "nokia"
|
@@ -32,6 +32,11 @@ require_relative "sputnik"
|
|
32
32
|
require_relative "snapchat"
|
33
33
|
require_relative "duck_duck_go"
|
34
34
|
require_relative "samsung_browser"
|
35
|
+
require_relative "huawei_browser"
|
36
|
+
require_relative "miui_browser"
|
37
|
+
require_relative "maxthon"
|
38
|
+
require_relative "sougou_browser"
|
39
|
+
require_relative "google_search_app"
|
35
40
|
|
36
41
|
require_relative "bot"
|
37
42
|
require_relative "bot/empty_user_agent_matcher"
|
@@ -46,10 +51,20 @@ require_relative "meta"
|
|
46
51
|
module Browser
|
47
52
|
EMPTY_STRING = ""
|
48
53
|
|
54
|
+
Error = Class.new(StandardError)
|
55
|
+
|
49
56
|
def self.root
|
50
57
|
@root ||= Pathname.new(File.expand_path("../..", __dir__))
|
51
58
|
end
|
52
59
|
|
60
|
+
class << self
|
61
|
+
attr_accessor :user_agent_size_limit
|
62
|
+
attr_accessor :accept_language_size_limit
|
63
|
+
end
|
64
|
+
|
65
|
+
self.user_agent_size_limit = 512
|
66
|
+
self.accept_language_size_limit = 256
|
67
|
+
|
53
68
|
# Hold the list of browser matchers.
|
54
69
|
# Order is important.
|
55
70
|
def self.matchers
|
@@ -75,9 +90,14 @@ module Browser
|
|
75
90
|
Sputnik, # must be placed before Chrome and Safari
|
76
91
|
DuckDuckGo, # must be placed before Chrome and Safari
|
77
92
|
SamsungBrowser, # must be placed before Chrome and Safari
|
93
|
+
HuaweiBrowser, # must be placed before Chrome and Safari
|
94
|
+
MiuiBrowser, # must be placed before Chrome and Safari
|
95
|
+
Maxthon, # must be placed before Chrome and Safari
|
96
|
+
SougouBrowser, # must be placed before Chrome and Safari
|
97
|
+
GoogleSearchApp, # must be placed before Chrome and Safari
|
78
98
|
Chrome,
|
79
99
|
Safari,
|
80
|
-
|
100
|
+
Unknown
|
81
101
|
]
|
82
102
|
end
|
83
103
|
|
data/lib/browser/chrome.rb
CHANGED
@@ -27,7 +27,13 @@ module Browser
|
|
27
27
|
!duck_duck_go? &&
|
28
28
|
!yandex? &&
|
29
29
|
!sputnik? &&
|
30
|
-
!samsung_browser?
|
30
|
+
!samsung_browser? &&
|
31
|
+
!huawei_browser? &&
|
32
|
+
!miui_browser? &&
|
33
|
+
!maxthon? &&
|
34
|
+
!qq? &&
|
35
|
+
!sougou_browser? &&
|
36
|
+
!google_search_app?
|
31
37
|
end
|
32
38
|
end
|
33
39
|
end
|
data/lib/browser/device.rb
CHANGED
@@ -88,7 +88,7 @@ module Browser
|
|
88
88
|
end
|
89
89
|
|
90
90
|
def unknown?
|
91
|
-
id == :
|
91
|
+
id == :unknown_device
|
92
92
|
end
|
93
93
|
|
94
94
|
def ipod_touch?
|
@@ -197,7 +197,7 @@ module Browser
|
|
197
197
|
psp? ||
|
198
198
|
/zunewp7/i.match(ua) ||
|
199
199
|
%r{(android|bb\d+|meego).+mobile|avantgo|bada/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino}i.match(ua) ||
|
200
|
-
%r{1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s
|
200
|
+
%r{1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|/(k|l|u)|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-}i.match(ua[0..3])
|
201
201
|
end
|
202
202
|
# rubocop:enable Layout/LineLength
|
203
203
|
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Browser
|
4
|
+
class GoogleSearchApp < Chrome
|
5
|
+
def id
|
6
|
+
:google_search_app
|
7
|
+
end
|
8
|
+
|
9
|
+
def name
|
10
|
+
"Google Search App"
|
11
|
+
end
|
12
|
+
|
13
|
+
def full_version
|
14
|
+
ua[%r{GSA/([\d.]+\d)}, 1] || super
|
15
|
+
end
|
16
|
+
|
17
|
+
def match?
|
18
|
+
ua =~ /GSA/
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Browser
|
4
|
+
class HuaweiBrowser < Base
|
5
|
+
def id
|
6
|
+
:huawei_browser
|
7
|
+
end
|
8
|
+
|
9
|
+
def name
|
10
|
+
"Huawei Browser"
|
11
|
+
end
|
12
|
+
|
13
|
+
def full_version
|
14
|
+
ua[%r{(?:HuaweiBrowser)/([\d.]+)}i, 1] || "0.0"
|
15
|
+
end
|
16
|
+
|
17
|
+
def match?
|
18
|
+
ua =~ /HuaweiBrowser/i
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Browser
|
4
|
+
class Maxthon < Base
|
5
|
+
def id
|
6
|
+
:maxthon
|
7
|
+
end
|
8
|
+
|
9
|
+
def name
|
10
|
+
"Maxthon"
|
11
|
+
end
|
12
|
+
|
13
|
+
def full_version
|
14
|
+
ua[%r{(?:Maxthon)/([\d.]+)}i, 1] || "0.0"
|
15
|
+
end
|
16
|
+
|
17
|
+
def match?
|
18
|
+
ua =~ /Maxthon/i
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Browser
|
4
|
+
class MiuiBrowser < Base
|
5
|
+
def id
|
6
|
+
:miui_browser
|
7
|
+
end
|
8
|
+
|
9
|
+
def name
|
10
|
+
"Miui Browser"
|
11
|
+
end
|
12
|
+
|
13
|
+
def full_version
|
14
|
+
ua[%r{MiuiBrowser/([\d.]+)}, 1] || "0.0"
|
15
|
+
end
|
16
|
+
|
17
|
+
def match?
|
18
|
+
ua =~ /MiuiBrowser/
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/lib/browser/platform.rb
CHANGED
@@ -10,7 +10,7 @@ require_relative "platform/windows_mobile"
|
|
10
10
|
require_relative "platform/firefox_os"
|
11
11
|
require_relative "platform/blackberry"
|
12
12
|
require_relative "platform/android"
|
13
|
-
require_relative "platform/
|
13
|
+
require_relative "platform/unknown"
|
14
14
|
require_relative "platform/chrome_os"
|
15
15
|
require_relative "platform/adobe_air"
|
16
16
|
|
@@ -35,7 +35,7 @@ module Browser
|
|
35
35
|
FirefoxOS,
|
36
36
|
Windows,
|
37
37
|
Linux,
|
38
|
-
|
38
|
+
Unknown
|
39
39
|
]
|
40
40
|
end
|
41
41
|
|
@@ -61,8 +61,8 @@ module Browser
|
|
61
61
|
id == :android && detect_version?(version, expected_version)
|
62
62
|
end
|
63
63
|
|
64
|
-
def
|
65
|
-
id == :
|
64
|
+
def unknown?
|
65
|
+
id == :unknown_platform
|
66
66
|
end
|
67
67
|
|
68
68
|
def linux?
|
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
data/lib/browser/safari.rb
CHANGED
@@ -22,10 +22,18 @@ module Browser
|
|
22
22
|
ua !~ /PhantomJS|FxiOS/ &&
|
23
23
|
!edge? &&
|
24
24
|
!chrome? &&
|
25
|
+
!opera? &&
|
25
26
|
!samsung_browser? &&
|
27
|
+
!huawei_browser? &&
|
28
|
+
!miui_browser? &&
|
26
29
|
!duck_duck_go? &&
|
27
30
|
!yandex? &&
|
28
|
-
!sputnik?
|
31
|
+
!sputnik? &&
|
32
|
+
!maxthon? &&
|
33
|
+
!qq? &&
|
34
|
+
!alipay? &&
|
35
|
+
!sougou_browser? &&
|
36
|
+
!google_search_app?
|
29
37
|
end
|
30
38
|
end
|
31
39
|
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/ua.yml
CHANGED
@@ -32,8 +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_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"
|
36
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"
|
37
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"
|
38
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]
|
39
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;]"
|
@@ -44,6 +44,10 @@ FIREFOX_IOS: "Mozilla/5.0 (iPhone; CPU iPhone OS 9_2 like Mac OS X) AppleWebKit/
|
|
44
44
|
FIREFOX_MODERN: "Mozilla/5.0 (X11; Ubuntu; Linux armv7l; rv:17.0) Gecko/20100101 Firefox/17.0"
|
45
45
|
FIREFOX_OS: "Mozilla/5.0 (Mobile; rv:18.0) Gecko/18.0 Firefox/18.0"
|
46
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"
|
47
51
|
IE10: "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0; EIE10;ENUSMSN)"
|
48
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)"
|
49
53
|
IE10_X64_WINX64: "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0)"
|
@@ -81,16 +85,18 @@ KINDLE_FIRE_HD_MOBILE: "Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; KFTT Build/
|
|
81
85
|
LUMIA800: "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; XBLWP7; ZuneWP7"
|
82
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"
|
83
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"
|
84
|
-
|
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"
|
85
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"
|
86
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"
|
87
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"
|
88
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"
|
89
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"
|
90
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)"
|
91
|
-
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"
|
92
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"
|
93
|
-
|
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"
|
94
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"
|
95
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"
|
96
102
|
NINTENDO_SWITCH: "Mozilla/5.0 (Nintendo Switch; WifiWebAuthApplet) AppleWebKit/601.6 (KHTML, like Gecko) NF/4.0.0.7.9 NintendoBrowser/5.1.0.15785"
|
@@ -114,6 +120,8 @@ QQ_BROWSER_ANDROID: "Mozilla/5.0 (Linux; Android 5.1.1; SM-N9108V Build/LMY47X)
|
|
114
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"
|
115
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"
|
116
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"
|
117
125
|
QUICKTIME: "QuickTime/7.6.8 (qtver=7.6.8;os=Windows NT 5.1Service Pack 3)"
|
118
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"
|
119
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"
|
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
|