Skip to content

Commit e4d4ca3

Browse files
committed
feat: port upstream code changes
1 parent 34b893e commit e4d4ca3

File tree

6 files changed

+127
-22
lines changed

6 files changed

+127
-22
lines changed

src/client_hints.rs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ pub struct ClientHint {
4747
pub platform_version: Option<String>,
4848
pub full_version_list: Vec<(String, String)>,
4949
pub app: Option<String>,
50+
pub form_factors: Vec<String>,
5051
}
5152

5253
impl ClientHint {
@@ -59,12 +60,15 @@ impl ClientHint {
5960
let mut platform = None;
6061
let mut platform_version = None;
6162
let mut app = None;
62-
63+
let mut form_factors: Vec<String> = Vec::new();
6364
let mut full_version_list: Vec<(String, String)> = Vec::new();
6465

6566
static BRAND_REGEX: Lazy<Regex> =
6667
Lazy::new(|| Regex::new(r#""([^"]+)"; ?v="([^"]+)"?"#).unwrap());
6768

69+
static FORM_FACTOR_REGEX: Lazy<Regex> =
70+
Lazy::new(|| Regex::new(r#"~"([a-z]+)"~i"#).unwrap());
71+
6872
// println!("headers: {:?}", headers);
6973
for (header, value) in headers {
7074
let header = header.replace('_', "-").to_lowercase();
@@ -137,6 +141,14 @@ impl ClientHint {
137141
full_version_list.push((brand.to_owned(), brand_version.to_owned()));
138142
}
139143
}
144+
145+
"sec-ch-ua-form-factors" => {
146+
form_factors = FORM_FACTOR_REGEX
147+
.captures_iter(&value)
148+
.filter_map(|x| x.ok()?.get(1).map(|x| x.as_str().to_lowercase()))
149+
.collect();
150+
}
151+
140152
_ => {}
141153
}
142154
}
@@ -151,6 +163,7 @@ impl ClientHint {
151163
platform_version,
152164
full_version_list,
153165
app,
166+
form_factors,
154167
};
155168

156169
// println!("client hints: {:?}", res);

src/known_browsers.rs

Lines changed: 52 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@ fn available_browsers() -> HashMap<String, String> {
123123
("4A", "Acoo Browser"),
124124
("BW", "AdBlock Browser"),
125125
("A7", "Adult Browser"),
126+
("8A", "Ai Browser"),
126127
("A9", "Airfind Secure Browser"),
127128
("AF", "ANT Fresco"),
128129
("AG", "ANTGalio"),
@@ -140,6 +141,7 @@ fn available_browsers() -> HashMap<String, String> {
140141
("A4", "AOL Shield Pro"),
141142
("2A", "Aplix"),
142143
("A6", "AppBrowzer"),
144+
("0A", "AppTec Secure Browser"),
143145
("AP", "APUS Browser"),
144146
("AR", "Arora"),
145147
("AX", "Arctic Fox"),
@@ -148,6 +150,7 @@ fn available_browsers() -> HashMap<String, String> {
148150
("PN", "APN Browser"),
149151
("6A", "Arachne"),
150152
("RA", "Arc"),
153+
("R5", "Armorfly Browser"),
151154
("AI", "Arvin"),
152155
("AK", "Ask.com"),
153156
("AU", "Asus Browser"),
@@ -193,6 +196,7 @@ fn available_browsers() -> HashMap<String, String> {
193196
("BX", "BrowseX"),
194197
("BZ", "Browzar"),
195198
("B7", "Browlser"),
199+
("M9", "Browser Mini"),
196200
("4B", "BrowsBit"),
197201
("BY", "Biyubi"),
198202
("BF", "Byffox"),
@@ -237,6 +241,7 @@ fn available_browsers() -> HashMap<String, String> {
237241
("C5", "Chromium GOST"),
238242
("CY", "Cyberfox"),
239243
("CS", "Cheshire"),
244+
("8C", "Cromite"),
240245
("RC", "Crow Browser"),
241246
("CT", "Crusta"),
242247
("CG", "Craving Explorer"),
@@ -309,6 +314,7 @@ fn available_browsers() -> HashMap<String, String> {
309314
("FH", "Flash Browser"),
310315
("FS", "Flast"),
311316
("F5", "Flyperlink"),
317+
("F9", "FOSS Browser"),
312318
("FU", "FreeU"),
313319
("F6", "Freedom Browser"),
314320
("FT", "Frost"),
@@ -329,6 +335,7 @@ fn available_browsers() -> HashMap<String, String> {
329335
("G2", "GO Browser"),
330336
("RN", "GreenBrowser"),
331337
("HW", "Habit Browser"),
338+
("H7", "Halo Browser"),
332339
("HB", "Harman Browser"),
333340
("HS", "HasBrowser"),
334341
("HA", "Hawk Turbo Browser"),
@@ -340,6 +347,7 @@ fn available_browsers() -> HashMap<String, String> {
340347
("H4", "Holla Web Browser"),
341348
("H5", "HotBrowser"),
342349
("HJ", "HotJava"),
350+
("H6", "HONOR Browser"),
343351
("HT", "HTC Browser"),
344352
("HU", "Huawei Browser Mobile"),
345353
("HP", "Huawei Browser"),
@@ -364,10 +372,11 @@ fn available_browsers() -> HashMap<String, String> {
364372
("I9", "Insta Browser"),
365373
("IE", "Internet Explorer"),
366374
("I7", "Internet Browser Secure"),
375+
("5I", "Internet Webbrowser"),
367376
("3I", "Intune Managed Browser"),
368377
("I5", "Indian UC Mini Browser"),
369378
("Z0", "InBrowser"),
370-
("IG", "Involt Go"),
379+
("IG", "Involta Go"),
371380
("IM", "IE Mobile"),
372381
("IR", "Iron"),
373382
("JB", "Japan Browser"),
@@ -380,6 +389,7 @@ fn available_browsers() -> HashMap<String, String> {
380389
("JZ", "JUZI Browser"),
381390
("KB", "K.Browser"),
382391
("KF", "Keepsafe Browser"),
392+
("K7", "KeepSolid Browser"),
383393
("KS", "Kids Safe Browser"),
384394
("KI", "Kindle Browser"),
385395
("KM", "K-meleon"),
@@ -404,7 +414,7 @@ fn available_browsers() -> HashMap<String, String> {
404414
("LF", "LieBaoFast"),
405415
("LG", "LG Browser"),
406416
("LH", "Light"),
407-
("L4", "lightning Browser Plus"),
417+
("L4", "Lightning Browser Plus"),
408418
("L1", "Lilo"),
409419
("LI", "Links"),
410420
("RI", "Liri Browser"),
@@ -434,7 +444,7 @@ fn available_browsers() -> HashMap<String, String> {
434444
("M3", "Midori Lite"),
435445
("M6", "MixerBox AI"),
436446
("MO", "Mobicip"),
437-
("MU", "MIUI Browser"),
447+
("MU", "Mi Browser"),
438448
("MS", "Mobile Silk"),
439449
("MK", "Mogok Browser"),
440450
("M8", "Motorola Internet Browser"),
@@ -443,6 +453,7 @@ fn available_browsers() -> HashMap<String, String> {
443453
("MX", "Maxthon"),
444454
("M4", "MaxTube Browser"),
445455
("MA", "Maelstrom"),
456+
("3M", "Mises"),
446457
("MM", "Mmx Browser"),
447458
("NM", "MxNitro"),
448459
("MY", "Mypal"),
@@ -467,6 +478,7 @@ fn available_browsers() -> HashMap<String, String> {
467478
("NP", "NetPositive"),
468479
("NS", "Netscape"),
469480
("WR", "NextWord Browser"),
481+
("N8", "Ninesky"),
470482
("NT", "NTENT Browser"),
471483
("NU", "Nuanti Meta"),
472484
("NI", "Nuviu"),
@@ -485,6 +497,7 @@ fn available_browsers() -> HashMap<String, String> {
485497
("OL", "OnBrowser Lite"),
486498
("OE", "ONE Browser"),
487499
("N4", "Onion Browser"),
500+
("1N", "ONIONBrowser"),
488501
("Y1", "Opera Crypto"),
489502
("OX", "Opera GX"),
490503
("OG", "Opera Neon"),
@@ -506,41 +519,53 @@ fn available_browsers() -> HashMap<String, String> {
506519
("O4", "Open Browser"),
507520
("4U", "Open Browser 4U"),
508521
("5G", "Open Browser fast 5G"),
522+
("5O", "Open Browser Lite"),
509523
("O7", "Open TV Browser"),
510524
("OW", "OmniWeb"),
511525
("OT", "Otter Browser"),
512526
("4O", "Owl Browser"),
527+
("JR", "OJR Browser"),
513528
("PL", "Palm Blazer"),
514529
("PM", "Pale Moon"),
515530
("PY", "Polypane"),
516531
("8P", "Prism"),
517532
("PP", "Oppo Browser"),
518533
("P6", "Opus Browser"),
519534
("PR", "Palm Pre"),
520-
("PU", "Puffin"),
535+
("7I", "Puffin Cloud Browser"),
536+
("6I", "Puffin Incognito Browser"),
537+
("PU", "Puffin Secure Browser"),
521538
("2P", "Puffin Web Browser"),
522539
("PW", "Palm WebPro"),
523540
("PA", "Palmscape"),
524541
("P7", "Pawxy"),
542+
("0P", "Peach Browser"),
525543
("PE", "Perfect Browser"),
544+
("K6", "Perk"),
526545
("P1", "Phantom.me"),
527546
("PH", "Phantom Browser"),
528547
("PX", "Phoenix"),
529548
("PB", "Phoenix Browser"),
530549
("5P", "Photon"),
550+
("N9", "Pintar Browser"),
531551
("P9", "PirateBrowser"),
532552
("P8", "PICO Browser"),
533553
("PF", "PlayFree Browser"),
534554
("PK", "PocketBook Browser"),
535555
("PO", "Polaris"),
536556
("PT", "Polarity"),
537557
("LY", "PolyBrowser"),
558+
("9P", "Presearch"),
559+
("BP", "Privacy Browser"),
538560
("PI", "PrivacyWall"),
539561
("P4", "Privacy Explorer Fast Safe"),
562+
("X5", "Privacy Pioneer Browser"),
540563
("P3", "Private Internet Browser"),
541564
("P5", "Proxy Browser"),
542565
("7P", "Proxyium"),
543566
("6P", "Proxynet"),
567+
("2F", "ProxyFox"),
568+
("2M", "ProxyMax"),
544569
("P2", "Pi Browser"),
545570
("P0", "PronHub Browser"),
546571
("PC", "PSI Secure Browser"),
@@ -560,10 +585,12 @@ fn available_browsers() -> HashMap<String, String> {
560585
("QU", "Quark"),
561586
("QZ", "QupZilla"),
562587
("QM", "Qwant Mobile"),
588+
("Q5", "QtWeb"),
563589
("QW", "QtWebEngine"),
564590
("R3", "Rakuten Browser"),
565591
("R4", "Rakuten Web Search"),
566592
("R2", "Raspbian Chromium"),
593+
("RT", "RCA Tor Explorer"),
567594
("RE", "Realme Browser"),
568595
("RK", "Rekonq"),
569596
("RM", "RockMelt"),
@@ -611,6 +638,7 @@ fn available_browsers() -> HashMap<String, String> {
611638
("LE", "Smart Lenovo Browser"),
612639
("OZ", "Smooz"),
613640
("SN", "Snowshoe"),
641+
("K5", "Spark"),
614642
("B1", "Spectre Browser"),
615643
("S2", "Splash"),
616644
("SI", "Sputnik Browser"),
@@ -648,10 +676,14 @@ fn available_browsers() -> HashMap<String, String> {
648676
("TI", "Tint Browser"),
649677
("TL", "TrueLocation Browser"),
650678
("TC", "TUC Mini Browser"),
679+
("TK", "TUSK"),
651680
("TU", "Tungsten"),
652681
("TG", "ToGate"),
682+
("T3", "Total Browser"),
683+
("TQ", "TQ Browser"),
653684
("TS", "TweakStyle"),
654685
("TV", "TV Bro"),
686+
("T4", "TV-Browser Internet"),
655687
("U0", "U Browser"),
656688
("UB", "UBrowser"),
657689
("UC", "UC Browser"),
@@ -666,6 +698,7 @@ fn available_browsers() -> HashMap<String, String> {
666698
("V0", "vBrowser"),
667699
("VA", "Vast Browser"),
668700
("V3", "VD Browser"),
701+
("VR", "Veera"),
669702
("VE", "Venus Browser"),
670703
("WD", "Vewd Browser"),
671704
("V5", "VibeMate"),
@@ -702,6 +735,7 @@ fn available_browsers() -> HashMap<String, String> {
702735
("YG", "YAGI"),
703736
("YJ", "Yahoo! Japan Browser"),
704737
("YA", "Yandex Browser"),
738+
("Y4", "Yandex Browser Corp"),
705739
("YL", "Yandex Browser Lite"),
706740
("YN", "Yaani Browser"),
707741
("Y2", "Yo Browser"),
@@ -710,13 +744,15 @@ fn available_browsers() -> HashMap<String, String> {
710744
("Y3", "YouBrowser"),
711745
("YZ", "Yuzu Browser"),
712746
("XR", "xBrowser"),
747+
("X3", "MMBOX XBrowser"),
713748
("XB", "X Browser Lite"),
714749
("X0", "X-VPN"),
715750
("X1", "xBrowser Pro Super Fast"),
716751
("XN", "XNX Browser"),
717752
("XT", "XtremeCast"),
718753
("XS", "xStand"),
719754
("XI", "Xiino"),
755+
("X4", "XnBrowse"),
720756
("XO", "Xooloo Internet"),
721757
("XV", "Xvast"),
722758
("ZE", "Zetakey"),
@@ -732,9 +768,9 @@ fn available_browsers() -> HashMap<String, String> {
732768

733769
fn browser_families() -> HashMap<String, Vec<String>> {
734770
[
735-
("Android Browser", vec!["AN", "MU"]),
771+
("Android Browser", vec!["AN"]),
736772
("BlackBerry Browser", vec!["BB"]),
737-
("Baidu", vec!["BD", "BS"]),
773+
("Baidu", vec!["BD", "BS", "H6"]),
738774
("Amiga", vec!["AV", "AW"]),
739775
(
740776
"Chrome",
@@ -757,16 +793,18 @@ fn browser_families() -> HashMap<String, Vec<String>> {
757793
"V4", "H4", "1T", "M5", "0S", "0C", "ZR", "D6", "F6", "RC", "WD", "P3", "FT", "A9",
758794
"X2", "N3", "GD", "O9", "Q3", "F7", "K2", "P5", "H5", "V3", "K3", "Q4", "G2", "R2",
759795
"WX", "XP", "3I", "BG", "R0", "JO", "OL", "GN", "W4", "QI", "E1", "RI", "8B", "5B",
760-
"K4", "WK",
796+
"K4", "WK", "T3", "K5", "MU", "9P", "K6", "VR", "N9", "M9", "F9", "0P", "0A", "JR",
797+
"D3", "TK", "BP", "2F", "2M", "K7", "1N", "8A", "H7", "X3", "T4", "X4", "5O", "8C",
798+
"3M", "6I", "2P", "PU", "7I", "X5", "AL",
761799
],
762800
),
763801
(
764802
"Firefox",
765803
vec![
766804
"FF", "BI", "BF", "BH", "BN", "C0", "CU", "EI", "F1", "FB", "FE", "AX", "FM", "FR",
767805
"FY", "GZ", "I4", "IF", "IW", "LH", "LY", "MB", "MN", "MO", "MY", "OA", "OS", "PI",
768-
"PX", "QA", "S5", "SX", "TF", "TO", "WF", "ZV", "FP", "AD", "WL", "2I", "P9", "KJ",
769-
"WY", "VK", "W5", "7C", "N7", "W7", "8P",
806+
"PX", "QA", "S5", "SX", "TF", "TO", "WF", "ZV", "FP", "AD", "2I", "P9", "KJ", "WY",
807+
"VK", "W5", "7C", "N7", "W7", "8P",
770808
],
771809
),
772810
(
@@ -801,19 +839,20 @@ fn browser_families() -> HashMap<String, Vec<String>> {
801839

802840
pub fn mobile_only_browsers() -> HashSet<String> {
803841
[
804-
"36", "AH", "AI", "BL", "C1", "C4", "CB", "CW", "DB", "DD", "DT", "EU", "EZ", "FK", "FM",
842+
"36", "AH", "AI", "BL", "C1", "C4", "CB", "CW", "DB", "3M", "DT", "EU", "EZ", "FK", "FM",
805843
"FR", "FX", "GH", "GI", "GR", "HA", "HU", "IV", "JB", "KD", "M1", "MF", "MN", "MZ", "NX",
806-
"OC", "OI", "OM", "OZ", "PU", "PI", "PE", "QU", "RE", "S0", "S7", "SA", "SB", "SG", "SK",
844+
"OC", "OI", "OM", "OZ", "2P", "PI", "PE", "QU", "RE", "S0", "S7", "SA", "SB", "SG", "SK",
807845
"ST", "SU", "T1", "UH", "UM", "UT", "VE", "VV", "WI", "WP", "YN", "IO", "IS", "HQ", "RW",
808846
"HI", "PN", "BW", "YO", "PK", "MR", "AP", "AK", "UI", "SD", "VN", "4S", "RF", "LR", "SQ",
809847
"BV", "L1", "F0", "KS", "V0", "C8", "AZ", "MM", "BT", "N0", "P0", "F3", "DU", "D0", "P1",
810848
"O4", "XO", "U0", "B0", "VA", "X0", "A5", "X1", "18", "B5", "B6", "TC", "A6", "2X", "F4",
811849
"YG", "WR", "NA", "DM", "1M", "A7", "XN", "XT", "XB", "W1", "HT", "B7", "B9", "T0", "I8",
812850
"O6", "P7", "O8", "4B", "A8", "P8", "1W", "EV", "Z0", "I9", "V4", "H4", "M5", "0S", "0C",
813851
"ZR", "D6", "F6", "P3", "FT", "A9", "X2", "NI", "FG", "TH", "N3", "GD", "O9", "Q3", "F7",
814-
"K2", "N4", "P5", "H5", "V3", "G2", "BG", "OL", "II", "TL", "M6", "Y3", "M7", "GN", "D3",
852+
"K2", "N4", "P5", "H5", "V3", "G2", "BG", "OL", "II", "TL", "M6", "Y3", "M7", "GN", "JR",
815853
"IG", "HW", "4O", "OU", "5P", "KE", "5A", "TT", "6P", "G3", "7P", "VU", "F8", "L4", "DK",
816-
"DP", "KL", "K4", "N6", "KU", "WK", "M8", "UP", "ZT",
854+
"DP", "KL", "K4", "N6", "KU", "WK", "M8", "UP", "ZT", "9P", "N8", "VR", "N9", "M9", "F9",
855+
"0P", "0A", "2F", "2M", "K7", "1N", "8A", "H7", "X3", "X4", "5O", "6I", "7I", "X5",
817856
]
818857
.into_iter()
819858
.map(|f| f.to_owned())

0 commit comments

Comments
 (0)