Skip to content

Commit d5edcba

Browse files
committed
Fix #763 - Add support for Headers object
1 parent a1644b6 commit d5edcba

File tree

2 files changed

+26
-2
lines changed

2 files changed

+26
-2
lines changed

src/main/ua-parser.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1236,14 +1236,21 @@
12361236
headers = extensions; // case UAParser(ua, headers)
12371237
extensions = undefined;
12381238
}
1239+
1240+
// Convert Headers object into a plain object
1241+
if (headers && typeof headers.append === FUNC_TYPE) {
1242+
var kv = {};
1243+
headers.forEach(function (v, k) { kv[k] = v; });
1244+
headers = kv;
1245+
}
12391246

12401247
if (!(this instanceof UAParser)) {
12411248
return new UAParser(ua, extensions, headers).getResult();
12421249
}
12431250

12441251
var userAgent = typeof ua === STR_TYPE ? ua : // Passed user-agent string
1245-
((NAVIGATOR && NAVIGATOR.userAgent) ? NAVIGATOR.userAgent : // navigator.userAgent
12461252
(headers && headers[USER_AGENT] ? headers[USER_AGENT] : // User-Agent from passed headers
1253+
((NAVIGATOR && NAVIGATOR.userAgent) ? NAVIGATOR.userAgent : // navigator.userAgent
12471254
EMPTY)), // empty string
12481255

12491256
httpUACH = new UACHData(headers, true),

test/playwright-test-main.spec.mjs

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,4 +123,21 @@ test.describe('withFeatureCheck() tests', () => {
123123
expect(uap).toHaveProperty('device.model', 'iPad');
124124
expect(uap).toHaveProperty('device.type', 'tablet');
125125
});
126-
});
126+
});
127+
128+
test.describe('request.headers can be passed in form of a Headers object', () => {
129+
130+
test('Headers automatically converted into a plain key-value object', async ({ page }) => {
131+
await page.addInitScript(() => {
132+
Object.defineProperty(window, 'req', {
133+
value : {
134+
headers: new Headers([["User-Agent", "myBrowser/1.0"]])
135+
}
136+
});
137+
});
138+
await page.goto(localHtml);
139+
// @ts-ignore
140+
const uap = await page.evaluate(() => UAParser(req.headers));
141+
expect(uap.ua).toBe('myBrowser/1.0');
142+
});
143+
});

0 commit comments

Comments
 (0)