blob: a293ed53b651f74d4d57c7f3504c242ccc648b8c [file] [log] [blame]
(async function(testRunner) {
// This needs to be https:// for the headers to work.
const base = 'https://devtools.test:8443';
// The page used enables the headers via an Accept-CH header.
var {page, session, dp} = await testRunner.startURL(
base + '/inspector-protocol/emulation/resources/set-accept-ch.php',
'Test client hint behavior with setUserAgentOverride.');
// Calling setUserAgentOverride w/o userAgentMetadata should first disable client hints
testRunner.log('Testing without specifying userAgentMetadata');
await dp.Emulation.setUserAgentOverride({userAgent: 'Custombrowser'});
testRunner.log('navigator.userAgent == ' + await session.evaluate('navigator.userAgent'));
testRunner.log('brands == ' + await session.evaluate('JSON.stringify(navigator.userAgentData.brands)'));
testRunner.log('is mobile?' + await session.evaluate('navigator.userAgentData.mobile'));
await printHeader('sec-ch-ua');
await printHeader('sec-ch-ua-full-version');
await printHeader('sec-ch-ua-arch');
await printHeader('sec-ch-ua-platform');
await printHeader('sec-ch-ua-platform-version');
await printHeader('sec-ch-ua-mobile');
await printHeader('sec-ch-ua-model');
// Now test with an override.
testRunner.log('');
testRunner.log('Testing with specifying userAgentMetadata');
await dp.Emulation.setUserAgentOverride({
userAgent: 'Ferrum Typewriter',
userAgentMetadata: {
brands: [{brand: 'Ferrum', version: '42.0'},
{brand: 'Iron', version: '3'}],
fullVersion: '42.0.3.14159',
platform: 'Typewriter',
platformVersion: '1950',
architecture: 'Electromechanical',
model: 'QWERTY',
mobile: true
}
});
testRunner.log('navigator.userAgent == ' + await session.evaluate('navigator.userAgent'));
testRunner.log('brands == ' + await session.evaluate('JSON.stringify(navigator.userAgentData.brands)'));
testRunner.log('is mobile?' + await session.evaluate('navigator.userAgentData.mobile'));
testRunner.log(await session.evaluateAsync(
'navigator.userAgentData.getHighEntropyValues(' +
'["platform", "platformVersion", "architecture", "model", "uaFullVersion"])'));
await printHeader('sec-ch-ua');
await printHeader('sec-ch-ua-full-version');
await printHeader('sec-ch-ua-arch');
await printHeader('sec-ch-ua-platform');
await printHeader('sec-ch-ua-platform-version');
await printHeader('sec-ch-ua-mobile');
await printHeader('sec-ch-ua-model');
// testing effect on navigation.
testRunner.log('');
testRunner.log('Testing effect on navigation');
await session.navigate(base + '/inspector-protocol/emulation/resources/echo-headers.php');
let navHeaders = await session.evaluate('document.documentElement.textContent');
printHeaderFromList('sec-ch-ua', navHeaders);
printHeaderFromList('sec-ch-ua-full-version', navHeaders);
printHeaderFromList('sec-ch-ua-arch', navHeaders);
printHeaderFromList('sec-ch-ua-platform', navHeaders);
printHeaderFromList('sec-ch-ua-platform-version', navHeaders);
printHeaderFromList('sec-ch-ua-mobile', navHeaders);
printHeaderFromList('sec-ch-ua-model', navHeaders);
// Tests to make sure that not passing in brand and fullVersion uses defaults
testRunner.log('');
testRunner.log('Testing defaulting of brand and fullVersion');
await dp.Emulation.setUserAgentOverride({
userAgent: 'Electric Typewriter',
userAgentMetadata: {
platform: 'Electric Typewriter',
platformVersion: '1970',
architecture: 'Electronic',
model: 'With erase tape',
mobile: true
}
});
testRunner.log('navigator.userAgent == ' + await session.evaluate('navigator.userAgent'));
testRunner.log('brands == ' + await session.evaluate('JSON.stringify(navigator.userAgentData.brands)'));
testRunner.log('is mobile?' + await session.evaluate('navigator.userAgentData.mobile'));
testRunner.log(await session.evaluateAsync(
'navigator.userAgentData.getHighEntropyValues(' +
'["platform", "platformVersion", "architecture", "model", "uaFullVersion"])'));
await printHeader('sec-ch-ua');
await printHeader('sec-ch-ua-full-version');
await printHeader('sec-ch-ua-arch');
await printHeader('sec-ch-ua-platform');
await printHeader('sec-ch-ua-platform-version');
await printHeader('sec-ch-ua-mobile');
await printHeader('sec-ch-ua-model');
function printHeaderFromList(name, headers) {
let logged = false;
for (const header of headers.split('\n')) {
if (header.startsWith(name + ':')) {
testRunner.log(header);
logged = true;
}
}
if (!logged) {
testRunner.log('Missing header:' + name);
}
}
async function printHeader(name) {
const url = base + '/inspector-protocol/emulation/resources/echo-headers.php';
const headers = await session.evaluateAsync(`fetch("${url}").then(r => r.text())`);
printHeaderFromList(name, headers);
}
testRunner.completeTest();
})