Skip to content

Commit d8057bc

Browse files
committed
Browser naming adjustments for Client Hints:
- `HuaweiBrowser` => `Huawei Browser`, - `Miui Browser` => `MIUI Browser`, - `OperaMobile` => `Opera Mobi`, - `YaBrowser` => `Yandex`
1 parent 837d319 commit d8057bc

File tree

4 files changed

+202
-21
lines changed

4 files changed

+202
-21
lines changed

src/enums/ua-parser-enums.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ export const Browser: Readonly<{
9797
OMNIWEB: "OmniWeb";
9898
OPERA: "Opera";
9999
OPERA_COAST: "Opera Coast";
100+
OPERA_GX: "Opera GX",
100101
OPERA_MINI: "Opera Mini";
101102
OPERA_MOBI: "Opera Mobi";
102103
OPERA_TABLET: "Opera Tablet";

src/enums/ua-parser-enums.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,7 @@ const Browser = Object.freeze({
102102
OMNIWEB: 'OmniWeb',
103103
OPERA: 'Opera',
104104
OPERA_COAST: 'Opera Coast',
105+
OPERA_GX: 'Opera GX',
105106
OPERA_MINI: 'Opera Mini',
106107
OPERA_MOBI: 'Opera Mobi',
107108
OPERA_TABLET: 'Opera Tablet',

src/main/ua-parser.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1213,7 +1213,11 @@
12131213
'Chrome' : 'Google Chrome',
12141214
'Edge' : 'Microsoft Edge',
12151215
'Chrome WebView' : 'Android WebView',
1216-
'Chrome Headless' : 'HeadlessChrome'
1216+
'Chrome Headless' : 'HeadlessChrome',
1217+
'Huawei Browser' : 'HuaweiBrowser',
1218+
'MIUI Browser' : 'Miui Browser',
1219+
'Opera Mobi' : 'OperaMobile',
1220+
'Yandex' : 'YaBrowser'
12171221
});
12181222
this.set(NAME, brandName)
12191223
.set(VERSION, brandVersion)

test/unit/ua-ch.js

Lines changed: 195 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -220,45 +220,220 @@ describe('Map UA-CH headers', () => {
220220
});
221221
});
222222

223-
describe('Browser naming adjustments', () => {
223+
describe('UA-CH Headers tests', () => {
224224
[
225225
{
226-
ua_ch: '"Google Chrome";v="111", "Not(A:Brand";v="8", "Chromium";v="111"',
226+
headers : {
227+
'sec-ch-ua': '"Avast Secure Browser";v="131", "Chromium";v="131", "Not_A Brand";v="24"'
228+
},
227229
expect: {
228-
before: 'Google Chrome',
229-
after: 'Chrome'
230+
browser : {
231+
name : 'Avast Secure Browser',
232+
version : '131',
233+
major : '131',
234+
type : undefined
235+
}
230236
}
231237
},
232238
{
233-
ua_ch: '"Not_A Brand";v="8", "Chromium";v="120", "Microsoft Edge";v="120"',
239+
headers : {
240+
'sec-ch-ua': '"Not A(Brand";v="8", "Chromium";v="132", "Brave";v="132"'
241+
},
234242
expect: {
235-
before: "Microsoft Edge",
236-
after: "Edge"
243+
browser : {
244+
name : 'Brave',
245+
version : '132',
246+
major : '132',
247+
type : undefined
248+
}
237249
}
238250
},
239251
{
240-
ua_ch: '"Android WebView";v="123", "Not:A-Brand";v="8", "Chromium";v="123"',
252+
headers : {
253+
'sec-ch-ua': '"Google Chrome";v="111", "Not(A:Brand";v="8", "Chromium";v="111"'
254+
},
241255
expect: {
242-
before: "Android WebView",
243-
after: "Chrome WebView"
256+
browser : {
257+
name : 'Chrome',
258+
version : '111',
259+
major : '111',
260+
type : undefined
261+
}
244262
}
245263
},
246264
{
247-
ua_ch: '"Chromium";v="124", "HeadlessChrome";v="124", "Not-A.Brand";v="99"',
265+
headers : {
266+
'sec-ch-ua': '"Chromium";v="124", "HeadlessChrome";v="124", "Not-A.Brand";v="99"'
267+
},
248268
expect: {
249-
before: "HeadlessChrome",
250-
after: "Chrome Headless"
269+
browser : {
270+
name : 'Chrome Headless',
271+
version : '124',
272+
major : '124',
273+
type : undefined
274+
}
275+
}
276+
},
277+
{
278+
headers : {
279+
'sec-ch-ua': '"Android WebView";v="123", "Not:A-Brand";v="8", "Chromium";v="123"'
280+
},
281+
expect: {
282+
browser : {
283+
name : 'Chrome WebView',
284+
version : '123',
285+
major : '123',
286+
type : undefined
287+
}
288+
}
289+
},
290+
{
291+
headers : {
292+
'sec-ch-ua': '"DuckDuckGo";v="131", "Chromium";v="131", "Not_A Brand";v="24"'
293+
},
294+
expect : {
295+
browser : {
296+
name : 'DuckDuckGo',
297+
version : '131',
298+
major : '131',
299+
type : undefined
300+
}
301+
}
302+
},
303+
{
304+
headers : {
305+
'sec-ch-ua': '"Not_A Brand";v="8", "Chromium";v="120", "Microsoft Edge";v="120"'
306+
},
307+
expect: {
308+
browser : {
309+
name : 'Edge',
310+
version : '120',
311+
major : '120',
312+
type : undefined
313+
}
314+
}
315+
},
316+
{
317+
headers : {
318+
'sec-ch-ua': '"Not.A/Brand";v="8", "Chromium";v="114", "HuaweiBrowser";v="114"'
319+
},
320+
expect: {
321+
browser : {
322+
name : 'Huawei Browser',
323+
version : '114',
324+
major : '114',
325+
type : undefined
326+
}
327+
}
328+
},
329+
{
330+
headers : {
331+
'sec-ch-ua': '"Miui Browser";v="123", "Not:A-Brand";v="8", "Chromium";v="123"'
332+
},
333+
expect: {
334+
browser : {
335+
name : 'MIUI Browser',
336+
version : '123',
337+
major : '123',
338+
type : undefined
339+
}
340+
}
341+
},
342+
{
343+
headers : {
344+
'sec-ch-ua': '"Chromium";v="130", "Oculus Browser";v="36", "Not?A_Brand";v="99"'
345+
},
346+
expect: {
347+
browser : {
348+
name : 'Oculus Browser',
349+
version : '36',
350+
major : '36',
351+
type : undefined
352+
}
353+
}
354+
},
355+
{
356+
headers : {
357+
'sec-ch-ua': '"Opera";v="116", "Chromium";v="131", "Not_A Brand";v="24"'
358+
},
359+
expect: {
360+
browser : {
361+
name : 'Opera',
362+
version : '116',
363+
major : '116',
364+
type : undefined
365+
}
366+
}
367+
},
368+
{
369+
headers : {
370+
'sec-ch-ua': '"Chromium";v="128", "Not;A=Brand";v="24", "Opera GX";v="114"'
371+
},
372+
expect: {
373+
browser : {
374+
name : 'Opera GX',
375+
version : '114',
376+
major : '114',
377+
type : undefined
378+
}
379+
}
380+
},
381+
{
382+
headers : {
383+
'sec-ch-ua': '"OperaMobile";v="86", ";Not A Brand";v="99", "Opera";v="115", "Chromium";v="130"'
384+
},
385+
expect: {
386+
browser : {
387+
name : 'Opera Mobi',
388+
version : '86',
389+
major : '86',
390+
type : undefined
391+
}
392+
}
393+
},
394+
{
395+
headers : {
396+
'sec-ch-ua': '"Chromium";v="132", "OperaMobile";v="87", "Opera";v="117", " Not A;Brand";v="99"'
397+
},
398+
expect: {
399+
browser : {
400+
name : 'Opera Mobi',
401+
version : '87',
402+
major : '87',
403+
type : undefined
404+
}
405+
}
406+
},
407+
{
408+
headers : {
409+
'sec-ch-ua': '"Chromium";v="125", "Not.A/Brand";v="24", "Samsung Internet";v="27.0"'
410+
},
411+
expect: {
412+
browser : {
413+
name : 'Samsung Internet',
414+
version : '27.0',
415+
major : '27',
416+
type : undefined
417+
}
418+
}
419+
},
420+
{
421+
headers : {
422+
'sec-ch-ua': '"Chromium";v="130", "YaBrowser";v="24.12", "Not?A_Brand";v="99", "Yowser";v="2.5"'
423+
},
424+
expect: {
425+
browser : {
426+
name : 'Yandex',
427+
version : '24.12',
428+
major : '24',
429+
type : undefined
430+
}
251431
}
252432
},
253433
]
254434
.forEach(test => {
255-
it(`"${test.expect.before}" => "${test.expect.after}"`, () => {
256-
const headers = {
257-
'sec-ch-ua' : test.ua_ch,
258-
};
259-
const { browser } = UAParser(headers).withClientHints();
260-
assert.strictEqual(browser.name, test.expect.after);
261-
});
435+
const { browser } = UAParser(test.headers).withClientHints();
436+
assert.deepEqual(browser, test.expect.browser);
262437
});
263438
});
264439

0 commit comments

Comments
 (0)