browser 4.2.0 → 5.0.0
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/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
|