Skip to content

Commit

Permalink
Fix #635 - ua-ch: prioritize more specific brand name regardless the …
Browse files Browse the repository at this point in the history
…order
  • Loading branch information
faisalman committed Jan 10, 2024
1 parent 0c49d75 commit b5c62b0
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 5 deletions.
11 changes: 6 additions & 5 deletions src/main/ua-parser.js
Expand Up @@ -140,7 +140,7 @@
var token = trim(tokens[i]).split(';v=');
arr[i] = { brand : token[0], version : token[1] };
} else {
arr[i] = tokens[i];
arr[i] = trim(tokens[i]);
}
}
return arr;
Expand Down Expand Up @@ -1055,15 +1055,16 @@

switch (this.itemType) {
case UA_BROWSER:
var brands = uaCH[FULLVERLIST] || uaCH[BRANDS];
var brands = uaCH[FULLVERLIST] || uaCH[BRANDS], prevName;
if (brands) {
for (var i in brands) {
var brandName = brands[i].brand || brands[i],
var brandName = strip(GOOGLE+' ', brands[i].brand || brands[i]),
brandVersion = brands[i].version;
if (!/not.a.brand/i.test(brandName) && (i < 1 || /chromi/i.test(this.get(NAME)))) {
this.set(NAME, strip(GOOGLE+' ', brandName))
if (!/not.a.brand/i.test(brandName) && (!prevName || (/chrom/i.test(prevName) && !/chromi/i.test(brandName)))) {
this.set(NAME, brandName)
.set(VERSION, brandVersion)
.set(MAJOR, majorize(brandVersion));
prevName = brandName;
}
}
}
Expand Down
46 changes: 46 additions & 0 deletions test/mocha-test.js
Expand Up @@ -512,4 +512,50 @@ describe('Map UA-CH headers', function () {
assert.strictEqual(uap.browser.version, undefined);
assert.strictEqual(uap.browser.major, undefined);
});

it('Prioritize more specific brand name regardless the order', function () {

const headers3a = {
'sec-ch-ua-full-version-list' : '"Not_A Brand;v=8, Chromium;v=120.0.6099.131, Google Chrome;v=120.0.6099.132"'
};
const headers3b = {
'sec-ch-ua-full-version-list' : '"Chromium;v=120.0.6099.131, Not_A Brand;v=8, Google Chrome;v=120.0.6099.132"'
};
const headers3c = {
'sec-ch-ua-full-version-list' : '"Google Chrome;v=120.0.6099.132, Chromium;v=120.0.6099.131, Not_A Brand;v=8"'
};
const headers3d = {
'sec-ch-ua-full-version-list' : '"Microsoft Edge;v=120.0.6099.133, Google Chrome;v=120.0.6099.132, Chromium;v=120.0.6099.131, Not_A Brand;v=8"'
};
const headers3e = {
'sec-ch-ua-full-version-list' : '"Chromium;v=120.0.6099.131, Google Chrome;v=120.0.6099.132, Microsoft Edge;v=120.0.6099.133, Not_A Brand;v=8"'
};
const headers3f = {
'sec-ch-ua-full-version-list' : '"Not_A Brand;v=8, Microsoft Edge;v=120.0.6099.133, Google Chrome;v=120.0.6099.132, Chromium;v=120.0.6099.131"'
};

uap = UAParser(headers3a).withClientHints();
assert.strictEqual(uap.browser.name, "Chrome");
assert.strictEqual(uap.browser.version, "120.0.6099.132");

uap = UAParser(headers3b).withClientHints();
assert.strictEqual(uap.browser.name, "Chrome");
assert.strictEqual(uap.browser.version, "120.0.6099.132");

uap = UAParser(headers3c).withClientHints();
assert.strictEqual(uap.browser.name, "Chrome");
assert.strictEqual(uap.browser.version, "120.0.6099.132");

uap = UAParser(headers3d).withClientHints();
assert.strictEqual(uap.browser.name, "Microsoft Edge");
assert.strictEqual(uap.browser.version, "120.0.6099.133");

uap = UAParser(headers3e).withClientHints();
assert.strictEqual(uap.browser.name, "Microsoft Edge");
assert.strictEqual(uap.browser.version, "120.0.6099.133");

uap = UAParser(headers3f).withClientHints();
assert.strictEqual(uap.browser.name, "Microsoft Edge");
assert.strictEqual(uap.browser.version, "120.0.6099.133");
});
});

0 comments on commit b5c62b0

Please sign in to comment.