device_detector 1.0.0 → 1.1.3
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 +5 -5
- data/CHANGELOG.md +58 -4
- data/README.md +57 -21
- data/lib/device_detector/bot.rb +2 -2
- data/lib/device_detector/browser.rb +691 -0
- data/lib/device_detector/client.rb +11 -2
- data/lib/device_detector/client_hint.rb +249 -0
- data/lib/device_detector/device.rb +1954 -23
- data/lib/device_detector/memory_cache.rb +26 -19
- data/lib/device_detector/metadata_extractor.rb +7 -8
- data/lib/device_detector/model_extractor.rb +3 -3
- data/lib/device_detector/name_extractor.rb +2 -2
- data/lib/device_detector/os.rb +289 -112
- data/lib/device_detector/parser.rb +49 -13
- data/lib/device_detector/vendor_fragment.rb +25 -0
- data/lib/device_detector/version.rb +3 -1
- data/lib/device_detector/version_extractor.rb +29 -2
- data/lib/device_detector.rb +192 -44
- data/regexes/bots.yml +3399 -91
- data/regexes/client/browser_engine.yml +28 -4
- data/regexes/client/browsers.yml +2697 -408
- data/regexes/client/feed_readers.yml +60 -22
- data/regexes/client/hints/apps.yml +150 -0
- data/regexes/client/hints/browsers.yml +292 -0
- data/regexes/client/libraries.yml +598 -4
- data/regexes/client/mediaplayers.yml +110 -5
- data/regexes/client/mobile_apps.yml +2451 -14
- data/regexes/client/pim.yml +128 -3
- data/regexes/device/cameras.yml +6 -6
- data/regexes/device/car_browsers.yml +39 -3
- data/regexes/device/consoles.yml +40 -6
- data/regexes/device/mobiles.yml +38844 -2907
- data/regexes/device/notebooks.yml +127 -0
- data/regexes/device/portable_media_player.yml +75 -12
- data/regexes/device/shell_tv.yml +145 -0
- data/regexes/device/televisions.yml +981 -40
- data/regexes/oss.yml +1560 -311
- data/regexes/vendorfragments.yml +6 -2
- metadata +31 -105
- data/.gitignore +0 -14
- data/.travis.yml +0 -18
- data/Gemfile +0 -8
- data/Rakefile +0 -79
- data/device_detector.gemspec +0 -26
- data/spec/device_detector/bot_fixtures_spec.rb +0 -30
- data/spec/device_detector/client_fixtures_spec.rb +0 -31
- data/spec/device_detector/concrete_user_agent_spec.rb +0 -136
- data/spec/device_detector/detector_fixtures_spec.rb +0 -60
- data/spec/device_detector/device_fixtures_spec.rb +0 -36
- data/spec/device_detector/device_spec.rb +0 -151
- data/spec/device_detector/memory_cache_spec.rb +0 -116
- data/spec/device_detector/model_extractor_spec.rb +0 -63
- data/spec/device_detector/os_fixtures_spec.rb +0 -26
- data/spec/device_detector/version_extractor_spec.rb +0 -80
- data/spec/device_detector_spec.rb +0 -198
- data/spec/fixtures/client/browser.yml +0 -1313
- data/spec/fixtures/client/feed_reader.yml +0 -187
- data/spec/fixtures/client/library.yml +0 -84
- data/spec/fixtures/client/mediaplayer.yml +0 -168
- data/spec/fixtures/client/mobile_app.yml +0 -30
- data/spec/fixtures/client/pim.yml +0 -96
- data/spec/fixtures/detector/bots.yml +0 -2418
- data/spec/fixtures/detector/camera.yml +0 -115
- data/spec/fixtures/detector/car_browser.yml +0 -20
- data/spec/fixtures/detector/console.yml +0 -267
- data/spec/fixtures/detector/desktop.yml +0 -4828
- data/spec/fixtures/detector/feature_phone.yml +0 -782
- data/spec/fixtures/detector/feed_reader.yml +0 -486
- data/spec/fixtures/detector/mediaplayer.yml +0 -179
- data/spec/fixtures/detector/mobile_apps.yml +0 -149
- data/spec/fixtures/detector/phablet.yml +0 -2140
- data/spec/fixtures/detector/portable_media_player.yml +0 -153
- data/spec/fixtures/detector/smart_display.yml +0 -58
- data/spec/fixtures/detector/smartphone-1.yml +0 -9469
- data/spec/fixtures/detector/smartphone-2.yml +0 -9414
- data/spec/fixtures/detector/smartphone-3.yml +0 -9396
- data/spec/fixtures/detector/smartphone-4.yml +0 -5742
- data/spec/fixtures/detector/smartphone.yml +0 -9411
- data/spec/fixtures/detector/tablet-1.yml +0 -9495
- data/spec/fixtures/detector/tablet-2.yml +0 -248
- data/spec/fixtures/detector/tablet.yml +0 -9484
- data/spec/fixtures/detector/tv.yml +0 -2582
- data/spec/fixtures/detector/unknown.yml +0 -3196
- data/spec/fixtures/device/camera.yml +0 -18
- data/spec/fixtures/device/car_browser.yml +0 -6
- data/spec/fixtures/device/console.yml +0 -78
- data/spec/fixtures/parser/oss.yml +0 -800
- data/spec/fixtures/parser/vendorfragments.yml +0 -162
- data/spec/spec_helper.rb +0 -9
@@ -0,0 +1,691 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class DeviceDetector
|
4
|
+
class Browser
|
5
|
+
# https://github.com/matomo-org/device-detector/blob/75d88bbefb0182f9207c9f48dc39b1bc8c7cc43f/Parser/Client/Browser.php#L48-L680
|
6
|
+
AVAILABLE_BROWSERS = {
|
7
|
+
'V1' => 'Via',
|
8
|
+
'1P' => 'Pure Mini Browser',
|
9
|
+
'4P' => 'Pure Lite Browser',
|
10
|
+
'1R' => 'Raise Fast Browser',
|
11
|
+
'R1' => 'Rabbit Private Browser',
|
12
|
+
'FQ' => 'Fast Browser UC Lite',
|
13
|
+
'FJ' => 'Fast Explorer',
|
14
|
+
'1L' => 'Lightning Browser',
|
15
|
+
'1C' => 'Cake Browser',
|
16
|
+
'1I' => 'IE Browser Fast',
|
17
|
+
'1V' => 'Vegas Browser',
|
18
|
+
'1O' => 'OH Browser',
|
19
|
+
'3O' => 'OH Private Browser',
|
20
|
+
'1X' => 'XBrowser Mini',
|
21
|
+
'1S' => 'Sharkee Browser',
|
22
|
+
'2L' => 'Lark Browser',
|
23
|
+
'3P' => 'Pluma',
|
24
|
+
'1A' => 'Anka Browser',
|
25
|
+
'AZ' => 'Azka Browser',
|
26
|
+
'1D' => 'Dragon Browser',
|
27
|
+
'1E' => 'Easy Browser',
|
28
|
+
'DW' => 'Dark Web Browser',
|
29
|
+
'D6' => 'Dark Browser',
|
30
|
+
'18' => '18+ Privacy Browser',
|
31
|
+
'1B' => '115 Browser',
|
32
|
+
'DM' => '1DM Browser',
|
33
|
+
'1M' => '1DM+ Browser',
|
34
|
+
'2B' => '2345 Browser',
|
35
|
+
'3B' => '360 Secure Browser',
|
36
|
+
'36' => '360 Phone Browser',
|
37
|
+
'7B' => '7654 Browser',
|
38
|
+
'AA' => 'Avant Browser',
|
39
|
+
'AB' => 'ABrowse',
|
40
|
+
'4A' => 'Acoo Browser',
|
41
|
+
'BW' => 'AdBlock Browser',
|
42
|
+
'A7' => 'Adult Browser',
|
43
|
+
'A9' => 'Airfind Secure Browser',
|
44
|
+
'AF' => 'ANT Fresco',
|
45
|
+
'AG' => 'ANTGalio',
|
46
|
+
'AL' => 'Aloha Browser',
|
47
|
+
'AH' => 'Aloha Browser Lite',
|
48
|
+
'A8' => 'ALVA',
|
49
|
+
'AM' => 'Amaya',
|
50
|
+
'A3' => 'Amaze Browser',
|
51
|
+
'A5' => 'Amerigo',
|
52
|
+
'AO' => 'Amigo',
|
53
|
+
'AN' => 'Android Browser',
|
54
|
+
'3A' => 'AOL Explorer',
|
55
|
+
'AE' => 'AOL Desktop',
|
56
|
+
'AD' => 'AOL Shield',
|
57
|
+
'A4' => 'AOL Shield Pro',
|
58
|
+
'2A' => 'Aplix',
|
59
|
+
'A6' => 'AppBrowzer',
|
60
|
+
'AP' => 'APUS Browser',
|
61
|
+
'AR' => 'Arora',
|
62
|
+
'AX' => 'Arctic Fox',
|
63
|
+
'AV' => 'Amiga Voyager',
|
64
|
+
'AW' => 'Amiga Aweb',
|
65
|
+
'PN' => 'APN Browser',
|
66
|
+
'6A' => 'Arachne',
|
67
|
+
'RA' => 'Arc',
|
68
|
+
'AI' => 'Arvin',
|
69
|
+
'AK' => 'Ask.com',
|
70
|
+
'AU' => 'Asus Browser',
|
71
|
+
'A0' => 'Atom',
|
72
|
+
'AT' => 'Atomic Web Browser',
|
73
|
+
'A2' => 'Atlas',
|
74
|
+
'AS' => 'Avast Secure Browser',
|
75
|
+
'VG' => 'AVG Secure Browser',
|
76
|
+
'AC' => 'Avira Secure Browser',
|
77
|
+
'A1' => 'AwoX',
|
78
|
+
'5B' => 'Basic Web Browser',
|
79
|
+
'BA' => 'Beaker Browser',
|
80
|
+
'BM' => 'Beamrise',
|
81
|
+
'F7' => 'BF Browser',
|
82
|
+
'BB' => 'BlackBerry Browser',
|
83
|
+
'6B' => 'Bluefy',
|
84
|
+
'H1' => 'BrowseHere',
|
85
|
+
'B8' => 'Browser Hup Pro',
|
86
|
+
'BD' => 'Baidu Browser',
|
87
|
+
'BS' => 'Baidu Spark',
|
88
|
+
'BG' => 'Bang',
|
89
|
+
'B9' => 'Bangla Browser',
|
90
|
+
'BI' => 'Basilisk',
|
91
|
+
'BV' => 'Belva Browser',
|
92
|
+
'B5' => 'Beyond Private Browser',
|
93
|
+
'BE' => 'Beonex',
|
94
|
+
'B2' => 'Berry Browser',
|
95
|
+
'BT' => 'Bitchute Browser',
|
96
|
+
'9B' => 'BizBrowser',
|
97
|
+
'BH' => 'BlackHawk',
|
98
|
+
'B0' => 'Bloket',
|
99
|
+
'BJ' => 'Bunjalloo',
|
100
|
+
'BL' => 'B-Line',
|
101
|
+
'B6' => 'Black Lion Browser',
|
102
|
+
'BU' => 'Blue Browser',
|
103
|
+
'BO' => 'Bonsai',
|
104
|
+
'BN' => 'Borealis Navigator',
|
105
|
+
'BR' => 'Brave',
|
106
|
+
'BK' => 'BriskBard',
|
107
|
+
'K2' => 'BroKeep Browser',
|
108
|
+
'B3' => 'Browspeed Browser',
|
109
|
+
'BX' => 'BrowseX',
|
110
|
+
'BZ' => 'Browzar',
|
111
|
+
'B7' => 'Browlser',
|
112
|
+
'4B' => 'BrowsBit',
|
113
|
+
'BY' => 'Biyubi',
|
114
|
+
'BF' => 'Byffox',
|
115
|
+
'B4' => 'BXE Browser',
|
116
|
+
'CA' => 'Camino',
|
117
|
+
'5C' => 'Catalyst',
|
118
|
+
'XP' => 'Catsxp',
|
119
|
+
'0C' => 'Cave Browser',
|
120
|
+
'CL' => 'CCleaner',
|
121
|
+
'C8' => 'CG Browser',
|
122
|
+
'CJ' => 'ChanjetCloud',
|
123
|
+
'C6' => 'Chedot',
|
124
|
+
'C9' => 'Cherry Browser',
|
125
|
+
'C0' => 'Centaury',
|
126
|
+
'CQ' => 'Cliqz',
|
127
|
+
'CC' => 'Coc Coc',
|
128
|
+
'C4' => 'CoolBrowser',
|
129
|
+
'C2' => 'Colibri',
|
130
|
+
'6C' => 'Columbus Browser',
|
131
|
+
'CD' => 'Comodo Dragon',
|
132
|
+
'C1' => 'Coast',
|
133
|
+
'CX' => 'Charon',
|
134
|
+
'CE' => 'CM Browser',
|
135
|
+
'C7' => 'CM Mini',
|
136
|
+
'CF' => 'Chrome Frame',
|
137
|
+
'HC' => 'Headless Chrome',
|
138
|
+
'CH' => 'Chrome',
|
139
|
+
'CI' => 'Chrome Mobile iOS',
|
140
|
+
'CK' => 'Conkeror',
|
141
|
+
'CM' => 'Chrome Mobile',
|
142
|
+
'3C' => 'Chowbo',
|
143
|
+
'7C' => 'Classilla',
|
144
|
+
'CN' => 'CoolNovo',
|
145
|
+
'4C' => 'Colom Browser',
|
146
|
+
'CO' => 'CometBird',
|
147
|
+
'2C' => 'Comfort Browser',
|
148
|
+
'CB' => 'COS Browser',
|
149
|
+
'CW' => 'Cornowser',
|
150
|
+
'C3' => 'Chim Lac',
|
151
|
+
'CP' => 'ChromePlus',
|
152
|
+
'CR' => 'Chromium',
|
153
|
+
'C5' => 'Chromium GOST',
|
154
|
+
'CY' => 'Cyberfox',
|
155
|
+
'CS' => 'Cheshire',
|
156
|
+
'RC' => 'Crow Browser',
|
157
|
+
'CT' => 'Crusta',
|
158
|
+
'CG' => 'Craving Explorer',
|
159
|
+
'CZ' => 'Crazy Browser',
|
160
|
+
'CU' => 'Cunaguaro',
|
161
|
+
'CV' => 'Chrome Webview',
|
162
|
+
'YC' => 'CyBrowser',
|
163
|
+
'DB' => 'dbrowser',
|
164
|
+
'PD' => 'Peeps dBrowser',
|
165
|
+
'DK' => 'Dark Web',
|
166
|
+
'DP' => 'Dark Web Private',
|
167
|
+
'D1' => 'Debuggable Browser',
|
168
|
+
'DC' => 'Decentr',
|
169
|
+
'DE' => 'Deepnet Explorer',
|
170
|
+
'DG' => 'deg-degan',
|
171
|
+
'DA' => 'Deledao',
|
172
|
+
'DT' => 'Delta Browser',
|
173
|
+
'D0' => 'Desi Browser',
|
174
|
+
'DS' => 'DeskBrowse',
|
175
|
+
'D3' => 'Dezor',
|
176
|
+
'II' => 'Diigo Browser',
|
177
|
+
'D2' => 'DoCoMo',
|
178
|
+
'DF' => 'Dolphin',
|
179
|
+
'DZ' => 'Dolphin Zero',
|
180
|
+
'DO' => 'Dorado',
|
181
|
+
'DR' => 'Dot Browser',
|
182
|
+
'DL' => 'Dooble',
|
183
|
+
'DI' => 'Dillo',
|
184
|
+
'DU' => 'DUC Browser',
|
185
|
+
'DD' => 'DuckDuckGo Privacy Browser',
|
186
|
+
'E1' => 'East Browser',
|
187
|
+
'EC' => 'Ecosia',
|
188
|
+
'EW' => 'Edge WebView',
|
189
|
+
'EV' => 'Every Browser',
|
190
|
+
'EI' => 'Epic',
|
191
|
+
'EL' => 'Elinks',
|
192
|
+
'EN' => 'EinkBro',
|
193
|
+
'EB' => 'Element Browser',
|
194
|
+
'EE' => 'Elements Browser',
|
195
|
+
'EO' => 'Eolie',
|
196
|
+
'EX' => 'Explore Browser',
|
197
|
+
'EZ' => 'eZ Browser',
|
198
|
+
'E2' => 'EudoraWeb',
|
199
|
+
'EU' => 'EUI Browser',
|
200
|
+
'EP' => 'GNOME Web',
|
201
|
+
'G1' => 'G Browser',
|
202
|
+
'ES' => 'Espial TV Browser',
|
203
|
+
'FG' => 'fGet',
|
204
|
+
'FA' => 'Falkon',
|
205
|
+
'FX' => 'Faux Browser',
|
206
|
+
'F8' => 'Fire Browser',
|
207
|
+
'F4' => 'Fiery Browser',
|
208
|
+
'F1' => 'Firefox Mobile iOS',
|
209
|
+
'FB' => 'Firebird',
|
210
|
+
'FD' => 'Fluid',
|
211
|
+
'FE' => 'Fennec',
|
212
|
+
'FF' => 'Firefox',
|
213
|
+
'FK' => 'Firefox Focus',
|
214
|
+
'FY' => 'Firefox Reality',
|
215
|
+
'FR' => 'Firefox Rocket',
|
216
|
+
'1F' => 'Firefox Klar',
|
217
|
+
'F0' => 'Float Browser',
|
218
|
+
'FL' => 'Flock',
|
219
|
+
'FP' => 'Floorp',
|
220
|
+
'FO' => 'Flow',
|
221
|
+
'F2' => 'Flow Browser',
|
222
|
+
'FM' => 'Firefox Mobile',
|
223
|
+
'FW' => 'Fireweb',
|
224
|
+
'FN' => 'Fireweb Navigator',
|
225
|
+
'FH' => 'Flash Browser',
|
226
|
+
'FS' => 'Flast',
|
227
|
+
'F5' => 'Flyperlink',
|
228
|
+
'FU' => 'FreeU',
|
229
|
+
'F6' => 'Freedom Browser',
|
230
|
+
'FT' => 'Frost',
|
231
|
+
'F3' => 'Frost+',
|
232
|
+
'FI' => 'Fulldive',
|
233
|
+
'GA' => 'Galeon',
|
234
|
+
'G8' => 'Gener8',
|
235
|
+
'GH' => 'Ghostery Privacy Browser',
|
236
|
+
'GI' => 'GinxDroid Browser',
|
237
|
+
'GB' => 'Glass Browser',
|
238
|
+
'GD' => 'Godzilla Browser',
|
239
|
+
'G3' => 'Good Browser',
|
240
|
+
'GE' => 'Google Earth',
|
241
|
+
'GP' => 'Google Earth Pro',
|
242
|
+
'GO' => 'GOG Galaxy',
|
243
|
+
'GR' => 'GoBrowser',
|
244
|
+
'GK' => 'GoKu',
|
245
|
+
'G2' => 'GO Browser',
|
246
|
+
'RN' => 'GreenBrowser',
|
247
|
+
'HW' => 'Habit Browser',
|
248
|
+
'HB' => 'Harman Browser',
|
249
|
+
'HS' => 'HasBrowser',
|
250
|
+
'HA' => 'Hawk Turbo Browser',
|
251
|
+
'HQ' => 'Hawk Quick Browser',
|
252
|
+
'HE' => 'Helio',
|
253
|
+
'HX' => 'Hexa Web Browser',
|
254
|
+
'HI' => 'Hi Browser',
|
255
|
+
'HO' => 'hola! Browser',
|
256
|
+
'H4' => 'Holla Web Browser',
|
257
|
+
'H5' => 'HotBrowser',
|
258
|
+
'HJ' => 'HotJava',
|
259
|
+
'HT' => 'HTC Browser',
|
260
|
+
'HU' => 'Huawei Browser Mobile',
|
261
|
+
'HP' => 'Huawei Browser',
|
262
|
+
'H3' => 'HUB Browser',
|
263
|
+
'IO' => 'iBrowser',
|
264
|
+
'IS' => 'iBrowser Mini',
|
265
|
+
'IB' => 'IBrowse',
|
266
|
+
'I6' => 'iDesktop PC Browser',
|
267
|
+
'IC' => 'iCab',
|
268
|
+
'I2' => 'iCab Mobile',
|
269
|
+
'I1' => 'Iridium',
|
270
|
+
'I3' => 'Iron Mobile',
|
271
|
+
'I4' => 'IceCat',
|
272
|
+
'ID' => 'IceDragon',
|
273
|
+
'IV' => 'Isivioo',
|
274
|
+
'I8' => 'IVVI Browser',
|
275
|
+
'IW' => 'Iceweasel',
|
276
|
+
'2I' => 'Impervious Browser',
|
277
|
+
'N3' => 'Incognito Browser',
|
278
|
+
'IN' => 'Inspect Browser',
|
279
|
+
'I9' => 'Insta Browser',
|
280
|
+
'IE' => 'Internet Explorer',
|
281
|
+
'I7' => 'Internet Browser Secure',
|
282
|
+
'3I' => 'Intune Managed Browser',
|
283
|
+
'I5' => 'Indian UC Mini Browser',
|
284
|
+
'Z0' => 'InBrowser',
|
285
|
+
'IG' => 'Involta Go',
|
286
|
+
'IM' => 'IE Mobile',
|
287
|
+
'IR' => 'Iron',
|
288
|
+
'JB' => 'Japan Browser',
|
289
|
+
'JS' => 'Jasmine',
|
290
|
+
'JA' => 'JavaFX',
|
291
|
+
'JL' => 'Jelly',
|
292
|
+
'JI' => 'Jig Browser',
|
293
|
+
'JP' => 'Jig Browser Plus',
|
294
|
+
'JO' => 'JioSphere',
|
295
|
+
'JZ' => 'JUZI Browser',
|
296
|
+
'KB' => 'K.Browser',
|
297
|
+
'KF' => 'Keepsafe Browser',
|
298
|
+
'KS' => 'Kids Safe Browser',
|
299
|
+
'KI' => 'Kindle Browser',
|
300
|
+
'KM' => 'K-meleon',
|
301
|
+
'KJ' => 'K-Ninja',
|
302
|
+
'KO' => 'Konqueror',
|
303
|
+
'KP' => 'Kapiko',
|
304
|
+
'KE' => 'Keyboard Browser',
|
305
|
+
'KN' => 'Kinza',
|
306
|
+
'K4' => 'Kitt',
|
307
|
+
'KW' => 'Kiwi',
|
308
|
+
'KD' => 'Kode Browser',
|
309
|
+
'KU' => 'KUN',
|
310
|
+
'KT' => 'KUTO Mini Browser',
|
311
|
+
'KY' => 'Kylo',
|
312
|
+
'KZ' => 'Kazehakase',
|
313
|
+
'LB' => 'Cheetah Browser',
|
314
|
+
'LD' => 'Ladybird',
|
315
|
+
'LA' => 'Lagatos Browser',
|
316
|
+
'GN' => 'Legan Browser',
|
317
|
+
'LR' => 'Lexi Browser',
|
318
|
+
'LV' => 'Lenovo Browser',
|
319
|
+
'LF' => 'LieBaoFast',
|
320
|
+
'LG' => 'LG Browser',
|
321
|
+
'LH' => 'Light',
|
322
|
+
'L4' => 'Lightning Browser Plus',
|
323
|
+
'L1' => 'Lilo',
|
324
|
+
'LI' => 'Links',
|
325
|
+
'RI' => 'Liri Browser',
|
326
|
+
'LC' => 'LogicUI TV Browser',
|
327
|
+
'IF' => 'Lolifox',
|
328
|
+
'L3' => 'Lotus',
|
329
|
+
'LO' => 'Lovense Browser',
|
330
|
+
'LT' => 'LT Browser',
|
331
|
+
'LU' => 'LuaKit',
|
332
|
+
'LJ' => 'LUJO TV Browser',
|
333
|
+
'LL' => 'Lulumi',
|
334
|
+
'LS' => 'Lunascape',
|
335
|
+
'LN' => 'Lunascape Lite',
|
336
|
+
'LX' => 'Lynx',
|
337
|
+
'L2' => 'Lynket Browser',
|
338
|
+
'MD' => 'Mandarin',
|
339
|
+
'M5' => 'MarsLab Web Browser',
|
340
|
+
'M7' => 'MaxBrowser',
|
341
|
+
'M1' => 'mCent',
|
342
|
+
'MB' => 'MicroB',
|
343
|
+
'MC' => 'NCSA Mosaic',
|
344
|
+
'MZ' => 'Meizu Browser',
|
345
|
+
'ME' => 'Mercury',
|
346
|
+
'M2' => 'Me Browser',
|
347
|
+
'MF' => 'Mobile Safari',
|
348
|
+
'MI' => 'Midori',
|
349
|
+
'M3' => 'Midori Lite',
|
350
|
+
'M6' => 'MixerBox AI',
|
351
|
+
'MO' => 'Mobicip',
|
352
|
+
'MU' => 'MIUI Browser',
|
353
|
+
'MS' => 'Mobile Silk',
|
354
|
+
'MK' => 'Mogok Browser',
|
355
|
+
'MN' => 'Minimo',
|
356
|
+
'MT' => 'Mint Browser',
|
357
|
+
'MX' => 'Maxthon',
|
358
|
+
'M4' => 'MaxTube Browser',
|
359
|
+
'MA' => 'Maelstrom',
|
360
|
+
'MM' => 'Mmx Browser',
|
361
|
+
'NM' => 'MxNitro',
|
362
|
+
'MY' => 'Mypal',
|
363
|
+
'MR' => 'Monument Browser',
|
364
|
+
'MW' => 'MAUI WAP Browser',
|
365
|
+
'N7' => 'Naenara Browser',
|
366
|
+
'NW' => 'Navigateur Web',
|
367
|
+
'NK' => 'Naked Browser',
|
368
|
+
'NA' => 'Naked Browser Pro',
|
369
|
+
'NR' => 'NFS Browser',
|
370
|
+
'N5' => 'Ninetails',
|
371
|
+
'NB' => 'Nokia Browser',
|
372
|
+
'NO' => 'Nokia OSS Browser',
|
373
|
+
'NV' => 'Nokia Ovi Browser',
|
374
|
+
'N2' => 'Norton Private Browser',
|
375
|
+
'NX' => 'Nox Browser',
|
376
|
+
'N1' => 'NOMone VR Browser',
|
377
|
+
'N6' => 'NOOK Browser',
|
378
|
+
'NE' => 'NetSurf',
|
379
|
+
'NF' => 'NetFront',
|
380
|
+
'NL' => 'NetFront Life',
|
381
|
+
'NP' => 'NetPositive',
|
382
|
+
'NS' => 'Netscape',
|
383
|
+
'WR' => 'NextWord Browser',
|
384
|
+
'NT' => 'NTENT Browser',
|
385
|
+
'NU' => 'Nuanti Meta',
|
386
|
+
'NI' => 'Nuviu',
|
387
|
+
'O9' => 'Ocean Browser',
|
388
|
+
'OC' => 'Oculus Browser',
|
389
|
+
'O6' => 'Odd Browser',
|
390
|
+
'O1' => 'Opera Mini iOS',
|
391
|
+
'OB' => 'Obigo',
|
392
|
+
'O2' => 'Odin',
|
393
|
+
'2O' => 'Odin Browser',
|
394
|
+
'H2' => 'OceanHero',
|
395
|
+
'OD' => 'Odyssey Web Browser',
|
396
|
+
'OF' => 'Off By One',
|
397
|
+
'O5' => 'Office Browser',
|
398
|
+
'HH' => 'OhHai Browser',
|
399
|
+
'OL' => 'OnBrowser Lite',
|
400
|
+
'OE' => 'ONE Browser',
|
401
|
+
'N4' => 'Onion Browser',
|
402
|
+
'Y1' => 'Opera Crypto',
|
403
|
+
'OX' => 'Opera GX',
|
404
|
+
'OG' => 'Opera Neon',
|
405
|
+
'OH' => 'Opera Devices',
|
406
|
+
'OI' => 'Opera Mini',
|
407
|
+
'OM' => 'Opera Mobile',
|
408
|
+
'OP' => 'Opera',
|
409
|
+
'ON' => 'Opera Next',
|
410
|
+
'OO' => 'Opera Touch',
|
411
|
+
'OU' => 'Orbitum',
|
412
|
+
'OA' => 'Orca',
|
413
|
+
'OS' => 'Ordissimo',
|
414
|
+
'OR' => 'Oregano',
|
415
|
+
'O0' => 'Origin In-Game Overlay',
|
416
|
+
'OY' => 'Origyn Web Browser',
|
417
|
+
'O8' => 'OrNET Browser',
|
418
|
+
'OV' => 'Openwave Mobile Browser',
|
419
|
+
'O3' => 'OpenFin',
|
420
|
+
'O4' => 'Open Browser',
|
421
|
+
'4U' => 'Open Browser 4U',
|
422
|
+
'5G' => 'Open Browser fast 5G',
|
423
|
+
'O7' => 'Open TV Browser',
|
424
|
+
'OW' => 'OmniWeb',
|
425
|
+
'OT' => 'Otter Browser',
|
426
|
+
'4O' => 'Owl Browser',
|
427
|
+
'PL' => 'Palm Blazer',
|
428
|
+
'PM' => 'Pale Moon',
|
429
|
+
'PY' => 'Polypane',
|
430
|
+
'PP' => 'Oppo Browser',
|
431
|
+
'P6' => 'Opus Browser',
|
432
|
+
'PR' => 'Palm Pre',
|
433
|
+
'PU' => 'Puffin',
|
434
|
+
'2P' => 'Puffin Web Browser',
|
435
|
+
'PW' => 'Palm WebPro',
|
436
|
+
'PA' => 'Palmscape',
|
437
|
+
'P7' => 'Pawxy',
|
438
|
+
'PE' => 'Perfect Browser',
|
439
|
+
'P1' => 'Phantom.me',
|
440
|
+
'PH' => 'Phantom Browser',
|
441
|
+
'PX' => 'Phoenix',
|
442
|
+
'PB' => 'Phoenix Browser',
|
443
|
+
'5P' => 'Photon',
|
444
|
+
'P9' => 'PirateBrowser',
|
445
|
+
'P8' => 'PICO Browser',
|
446
|
+
'PF' => 'PlayFree Browser',
|
447
|
+
'PK' => 'PocketBook Browser',
|
448
|
+
'PO' => 'Polaris',
|
449
|
+
'PT' => 'Polarity',
|
450
|
+
'LY' => 'PolyBrowser',
|
451
|
+
'PI' => 'PrivacyWall',
|
452
|
+
'P4' => 'Privacy Explorer Fast Safe',
|
453
|
+
'P3' => 'Private Internet Browser',
|
454
|
+
'P5' => 'Proxy Browser',
|
455
|
+
'7P' => 'Proxyium',
|
456
|
+
'6P' => 'Proxynet',
|
457
|
+
'P2' => 'Pi Browser',
|
458
|
+
'P0' => 'PronHub Browser',
|
459
|
+
'PC' => 'PSI Secure Browser',
|
460
|
+
'RW' => 'Reqwireless WebViewer',
|
461
|
+
'PS' => 'Microsoft Edge',
|
462
|
+
'QA' => 'Qazweb',
|
463
|
+
'QI' => 'Qiyu',
|
464
|
+
'QJ' => 'QJY TV Browser',
|
465
|
+
'Q3' => 'Qmamu',
|
466
|
+
'Q4' => 'Quick Search TV',
|
467
|
+
'Q2' => 'QQ Browser Lite',
|
468
|
+
'Q1' => 'QQ Browser Mini',
|
469
|
+
'QQ' => 'QQ Browser',
|
470
|
+
'QS' => 'Quick Browser',
|
471
|
+
'QT' => 'Qutebrowser',
|
472
|
+
'QU' => 'Quark',
|
473
|
+
'QZ' => 'QupZilla',
|
474
|
+
'QM' => 'Qwant Mobile',
|
475
|
+
'QW' => 'QtWebEngine',
|
476
|
+
'R3' => 'Rakuten Browser',
|
477
|
+
'R4' => 'Rakuten Web Search',
|
478
|
+
'R2' => 'Raspbian Chromium',
|
479
|
+
'RE' => 'Realme Browser',
|
480
|
+
'RK' => 'Rekonq',
|
481
|
+
'RM' => 'RockMelt',
|
482
|
+
'RB' => 'Roku Browser',
|
483
|
+
'SB' => 'Samsung Browser',
|
484
|
+
'3L' => 'Samsung Browser Lite',
|
485
|
+
'SA' => 'Sailfish Browser',
|
486
|
+
'R0' => 'SberBrowser',
|
487
|
+
'S8' => 'Seewo Browser',
|
488
|
+
'SC' => 'SEMC-Browser',
|
489
|
+
'SE' => 'Sogou Explorer',
|
490
|
+
'SO' => 'Sogou Mobile Browser',
|
491
|
+
'RF' => 'SOTI Surf',
|
492
|
+
'2S' => 'Soul Browser',
|
493
|
+
'T0' => 'Soundy Browser',
|
494
|
+
'SF' => 'Safari',
|
495
|
+
'PV' => 'Safari Technology Preview',
|
496
|
+
'S5' => 'Safe Exam Browser',
|
497
|
+
'SW' => 'SalamWeb',
|
498
|
+
'VN' => 'Savannah Browser',
|
499
|
+
'SD' => 'SavySoda',
|
500
|
+
'S9' => 'Secure Browser',
|
501
|
+
'SV' => 'SFive',
|
502
|
+
'SH' => 'Shiira',
|
503
|
+
'K1' => 'Sidekick',
|
504
|
+
'S1' => 'SimpleBrowser',
|
505
|
+
'3S' => 'SilverMob US',
|
506
|
+
'SY' => 'Sizzy',
|
507
|
+
'K3' => 'Skye',
|
508
|
+
'SK' => 'Skyfire',
|
509
|
+
'KL' => 'SkyLeap',
|
510
|
+
'SS' => 'Seraphic Sraf',
|
511
|
+
'KK' => 'SiteKiosk',
|
512
|
+
'SL' => 'Sleipnir',
|
513
|
+
'8B' => 'SlimBoat',
|
514
|
+
'S6' => 'Slimjet',
|
515
|
+
'S7' => 'SP Browser',
|
516
|
+
'9S' => 'Sony Small Browser',
|
517
|
+
'8S' => 'Secure Private Browser',
|
518
|
+
'X2' => 'SecureX',
|
519
|
+
'T1' => 'Stampy Browser',
|
520
|
+
'7S' => '7Star',
|
521
|
+
'SQ' => 'Smart Browser',
|
522
|
+
'6S' => 'Smart Search & Web Browser',
|
523
|
+
'LE' => 'Smart Lenovo Browser',
|
524
|
+
'OZ' => 'Smooz',
|
525
|
+
'SN' => 'Snowshoe',
|
526
|
+
'B1' => 'Spectre Browser',
|
527
|
+
'S2' => 'Splash',
|
528
|
+
'SI' => 'Sputnik Browser',
|
529
|
+
'SR' => 'Sunrise',
|
530
|
+
'0S' => 'Sunflower Browser',
|
531
|
+
'SP' => 'SuperBird',
|
532
|
+
'SU' => 'Super Fast Browser',
|
533
|
+
'5S' => 'SuperFast Browser',
|
534
|
+
'HR' => 'Sushi Browser',
|
535
|
+
'S3' => 'surf',
|
536
|
+
'4S' => 'Surf Browser',
|
537
|
+
'RY' => 'Surfy Browser',
|
538
|
+
'SG' => 'Stargon',
|
539
|
+
'S0' => 'START Internet Browser',
|
540
|
+
'5A' => 'Stealth Browser',
|
541
|
+
'S4' => 'Steam In-Game Overlay',
|
542
|
+
'ST' => 'Streamy',
|
543
|
+
'SX' => 'Swiftfox',
|
544
|
+
'SZ' => 'Seznam Browser',
|
545
|
+
'W1' => 'Sweet Browser',
|
546
|
+
'2X' => 'SX Browser',
|
547
|
+
'TP' => 'T+Browser',
|
548
|
+
'TR' => 'T-Browser',
|
549
|
+
'TO' => 't-online.de Browser',
|
550
|
+
'TT' => 'TalkTo',
|
551
|
+
'TA' => 'Tao Browser',
|
552
|
+
'T2' => 'tararia',
|
553
|
+
'TH' => 'Thor',
|
554
|
+
'1T' => 'Tor Browser',
|
555
|
+
'TF' => 'TenFourFox',
|
556
|
+
'TB' => 'Tenta Browser',
|
557
|
+
'TE' => 'Tesla Browser',
|
558
|
+
'TZ' => 'Tizen Browser',
|
559
|
+
'TI' => 'Tint Browser',
|
560
|
+
'TL' => 'TrueLocation Browser',
|
561
|
+
'TC' => 'TUC Mini Browser',
|
562
|
+
'TU' => 'Tungsten',
|
563
|
+
'TG' => 'ToGate',
|
564
|
+
'TS' => 'TweakStyle',
|
565
|
+
'TV' => 'TV Bro',
|
566
|
+
'U0' => 'U Browser',
|
567
|
+
'UB' => 'UBrowser',
|
568
|
+
'UC' => 'UC Browser',
|
569
|
+
'UH' => 'UC Browser HD',
|
570
|
+
'UM' => 'UC Browser Mini',
|
571
|
+
'UT' => 'UC Browser Turbo',
|
572
|
+
'UI' => 'Ui Browser Mini',
|
573
|
+
'UR' => 'UR Browser',
|
574
|
+
'UZ' => 'Uzbl',
|
575
|
+
'UE' => 'Ume Browser',
|
576
|
+
'V0' => 'vBrowser',
|
577
|
+
'VA' => 'Vast Browser',
|
578
|
+
'V3' => 'VD Browser',
|
579
|
+
'VE' => 'Venus Browser',
|
580
|
+
'WD' => 'Vewd Browser',
|
581
|
+
'V5' => 'VibeMate',
|
582
|
+
'N0' => 'Nova Video Downloader Pro',
|
583
|
+
'VS' => 'Viasat Browser',
|
584
|
+
'VI' => 'Vivaldi',
|
585
|
+
'VV' => 'vivo Browser',
|
586
|
+
'V2' => 'Vivid Browser Mini',
|
587
|
+
'VB' => 'Vision Mobile Browser',
|
588
|
+
'V4' => 'Vertex Surf',
|
589
|
+
'VM' => 'VMware AirWatch',
|
590
|
+
'VK' => 'Vonkeror',
|
591
|
+
'VU' => 'Vuhuv',
|
592
|
+
'WI' => 'Wear Internet Browser',
|
593
|
+
'WP' => 'Web Explorer',
|
594
|
+
'W3' => 'Web Browser & Explorer',
|
595
|
+
'W5' => 'Webian Shell',
|
596
|
+
'W4' => 'WebDiscover',
|
597
|
+
'WE' => 'WebPositive',
|
598
|
+
'W6' => 'Weltweitimnetz Browser',
|
599
|
+
'WX' => 'Wexond',
|
600
|
+
'WF' => 'Waterfox',
|
601
|
+
'WB' => 'Wave Browser',
|
602
|
+
'WA' => 'Wavebox',
|
603
|
+
'WH' => 'Whale Browser',
|
604
|
+
'WO' => 'wOSBrowser',
|
605
|
+
'3W' => 'w3m',
|
606
|
+
'WT' => 'WeTab Browser',
|
607
|
+
'1W' => 'World Browser',
|
608
|
+
'WL' => 'Wolvic',
|
609
|
+
'WY' => 'Wyzo',
|
610
|
+
'YG' => 'YAGI',
|
611
|
+
'YJ' => 'Yahoo! Japan Browser',
|
612
|
+
'YA' => 'Yandex Browser',
|
613
|
+
'YL' => 'Yandex Browser Lite',
|
614
|
+
'YN' => 'Yaani Browser',
|
615
|
+
'Y2' => 'Yo Browser',
|
616
|
+
'YB' => 'Yolo Browser',
|
617
|
+
'YO' => 'YouCare',
|
618
|
+
'Y3' => 'YouBrowser',
|
619
|
+
'YZ' => 'Yuzu Browser',
|
620
|
+
'XR' => 'xBrowser',
|
621
|
+
'XB' => 'X Browser Lite',
|
622
|
+
'X0' => 'X-VPN',
|
623
|
+
'X1' => 'xBrowser Pro Super Fast',
|
624
|
+
'XN' => 'XNX Browser',
|
625
|
+
'XT' => 'XtremeCast',
|
626
|
+
'XS' => 'xStand',
|
627
|
+
'XI' => 'Xiino',
|
628
|
+
'XO' => 'Xooloo Internet',
|
629
|
+
'XV' => 'Xvast',
|
630
|
+
'ZE' => 'Zetakey',
|
631
|
+
'ZV' => 'Zvu',
|
632
|
+
'ZI' => 'Zirco Browser',
|
633
|
+
'ZR' => 'Zordo Browser'
|
634
|
+
|
635
|
+
# detected browsers in older versions
|
636
|
+
# 'IA' => 'Iceape', => pim
|
637
|
+
# 'SM' => 'SeaMonkey', => pim
|
638
|
+
}.freeze
|
639
|
+
|
640
|
+
BROWSER_FULL_TO_SHORT = AVAILABLE_BROWSERS.invert.freeze
|
641
|
+
|
642
|
+
# https://github.com/matomo-org/device-detector/blob/75d88bbefb0182f9207c9f48dc39b1bc8c7cc43f/Parser/Client/Browser.php#L746-L768
|
643
|
+
MOBILE_ONLY_BROWSERS = Set.new(
|
644
|
+
%w[
|
645
|
+
36 AH AI BL C1 C4 CB CW DB
|
646
|
+
DD DT EU EZ FK FM FR FX GH
|
647
|
+
GI GR HA HU IV JB KD M1 MF
|
648
|
+
MN MZ NX OC OI OM OZ PU PI
|
649
|
+
PE QU RE S0 S7 SA SB SG SK
|
650
|
+
ST SU T1 UH UM UT VE VV WI
|
651
|
+
WP YN IO IS HQ RW HI PN BW
|
652
|
+
YO PK MR AP AK UI SD VN 4S
|
653
|
+
RF LR SQ BV L1 F0 KS V0 C8
|
654
|
+
AZ MM BT N0 P0 F3 DU D0 P1
|
655
|
+
O4 XO U0 B0 VA X0 A5 X1 18
|
656
|
+
B5 B6 TC A6 2X F4 YG WR NA
|
657
|
+
DM 1M A7 XN XT XB W1 HT B7
|
658
|
+
B9 T0 I8 O6 P7 O8 4B A8 P8
|
659
|
+
1W EV Z0 I9 V4 H4 M5 0S 0C
|
660
|
+
ZR D6 F6 P3 FT A9 X2 NI FG
|
661
|
+
TH N3 GD O9 Q3 F7 K2 N4 P5
|
662
|
+
H5 V3 G2 BG OL II TL M6 Y3
|
663
|
+
M7 GN D3 IG HW 4O OU 5P KE
|
664
|
+
5A TT 6P G3 7P VU F8 L4 DK
|
665
|
+
DP KL K4 N6 KU
|
666
|
+
]
|
667
|
+
).freeze
|
668
|
+
|
669
|
+
# https://github.com/matomo-org/device-detector/blob/75d88bbefb0182f9207c9f48dc39b1bc8c7cc43f/Parser/Client/Browser.php#L775-L783
|
670
|
+
NAME_TO_KNOWN_BROWSERS = {
|
671
|
+
'Chrome' => ['Google Chrome'],
|
672
|
+
'Chrome Webview' => ['Android WebView'],
|
673
|
+
'DuckDuckGo Privacy Browser' => ['DuckDuckGo'],
|
674
|
+
'Edge WebView' => ['Microsoft Edge WebView2'],
|
675
|
+
'Microsoft Edge' => ['Edge'],
|
676
|
+
'Norton Private Browser' => ['Norton Secure Browser'],
|
677
|
+
'Vewd Browser' => ['Vewd Core']
|
678
|
+
}.freeze
|
679
|
+
|
680
|
+
KNOWN_BROWSER_TO_NAME = NAME_TO_KNOWN_BROWSERS.each_with_object({}) do |(name, browsers), h|
|
681
|
+
browsers.each { |b| h[b] = name }
|
682
|
+
end.freeze
|
683
|
+
|
684
|
+
def self.mobile_only_browser?(name)
|
685
|
+
return true if MOBILE_ONLY_BROWSERS.include?(name)
|
686
|
+
|
687
|
+
short = BROWSER_FULL_TO_SHORT[name]
|
688
|
+
MOBILE_ONLY_BROWSERS.include?(short)
|
689
|
+
end
|
690
|
+
end
|
691
|
+
end
|