| (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(); |
| }) |