feat(chromium): roll to Chromium 109.0.5412.0 (r1069273) (#9364)

Closes #9233
This commit is contained in:
Nikolay Vitkov 2022-12-07 14:54:00 +01:00 committed by GitHub
parent 1501edefa8
commit 1875da6191
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
18 changed files with 50 additions and 71 deletions

View File

@ -10,7 +10,7 @@ Whether to run the browser in headless mode.
```typescript
interface BrowserLaunchArgumentOptions {
headless?: boolean | 'chrome';
headless?: boolean | 'new';
}
```

View File

@ -15,9 +15,9 @@ export interface BrowserLaunchArgumentOptions
## Properties
| Property | Modifiers | Type | Description | Default |
| --------------------------------------------------------------------------- | --------- | ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------ |
| --------------------------------------------------------------------------- | --------- | ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------ |
| [args?](./puppeteer.browserlaunchargumentoptions.args.md) | | string\[\] | <i>(Optional)</i> Additional command line arguments to pass to the browser instance. | |
| [debuggingPort?](./puppeteer.browserlaunchargumentoptions.debuggingport.md) | | number | <i>(Optional)</i> | |
| [devtools?](./puppeteer.browserlaunchargumentoptions.devtools.md) | | boolean | <i>(Optional)</i> Whether to auto-open a DevTools panel for each tab. If this is set to <code>true</code>, then <code>headless</code> will be forced to <code>false</code>. | <code>false</code> |
| [headless?](./puppeteer.browserlaunchargumentoptions.headless.md) | | boolean \| 'chrome' | <i>(Optional)</i> Whether to run the browser in headless mode. | true |
| [headless?](./puppeteer.browserlaunchargumentoptions.headless.md) | | boolean \| 'new' | <i>(Optional)</i> Whether to run the browser in headless mode. | true |
| [userDataDir?](./puppeteer.browserlaunchargumentoptions.userdatadir.md) | | string | <i>(Optional)</i> Path to a user data directory. [see the Chromium docs](https://chromium.googlesource.com/chromium/src/+/refs/heads/main/docs/user_data_dir.md) for more info. | |

View File

@ -244,9 +244,7 @@ ensure this, the main `test` command runs coverage during testing.
## Debugging Puppeteer
See
[Debugging Tips](https://github.com/puppeteer/puppeteer/blob/main/README.md#debugging-tips)
in the readme.
See [Debugging Tips](https://pptr.dev/guides/debugging).
# For Project Maintainers
@ -262,6 +260,8 @@ The following steps are needed to update the Chromium version.
number.
3. Update `versions.js` with the new Chromium-to-Puppeteer version mapping and
update `lastMaintainedChromiumVersion` with the latest stable Chrome version.
You can find the corresponding version by going to [omahaproxy.appspot.com](https://omahaproxy.appspot.com/) then
searching in `Find Releases` for `r<revision>`.
4. Run `npm run check`. If it fails, update
`packages/puppeteer-core/package.json` and `packages/puppeteer/package.json`
with the expected `devtools-protocol` version.
@ -272,7 +272,7 @@ The following steps are needed to update the Chromium version.
change) or work around the changes in Puppeteer (if its not desirable to
change Puppeteers observable behavior).
7. Commit and push your changes and open a pull request. The commit message must
contain the version in `Chromium <version> (<revision>)` format to ensure
contain the version in `Chromium <version> (r<revision>)` format to ensure
that [pptr.dev](https://pptr.dev/) can parse it correctly, e.g.
`'feat(chromium): roll to Chromium 90.0.4427.0 (r856583)'`.

20
package-lock.json generated
View File

@ -3299,9 +3299,9 @@
}
},
"node_modules/devtools-protocol": {
"version": "0.0.1056733",
"resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1056733.tgz",
"integrity": "sha512-CmTu6SQx2g3TbZzDCAV58+LTxVdKplS7xip0g5oDXpZ+isr0rv5dDP8ToyVRywzPHkCCPKgKgScEcwz4uPWDIA=="
"version": "0.0.1068969",
"resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1068969.tgz",
"integrity": "sha512-ATFTrPbY1dKYhPPvpjtwWKSK2mIwGmRwX54UASn9THEuIZCe2n9k3vVuMmt6jWeL+e5QaaguEv/pMyR+JQB7VQ=="
},
"node_modules/diff": {
"version": "5.1.0",
@ -8776,7 +8776,7 @@
"license": "Apache-2.0",
"dependencies": {
"cosmiconfig": "8.0.0",
"devtools-protocol": "0.0.1056733",
"devtools-protocol": "0.0.1068969",
"https-proxy-agent": "5.0.1",
"progress": "2.0.3",
"proxy-from-env": "1.1.0",
@ -8792,7 +8792,7 @@
"dependencies": {
"cross-fetch": "3.1.5",
"debug": "4.3.4",
"devtools-protocol": "0.0.1056733",
"devtools-protocol": "0.0.1068969",
"extract-zip": "2.0.1",
"https-proxy-agent": "5.0.1",
"proxy-from-env": "1.1.0",
@ -11132,9 +11132,9 @@
}
},
"devtools-protocol": {
"version": "0.0.1056733",
"resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1056733.tgz",
"integrity": "sha512-CmTu6SQx2g3TbZzDCAV58+LTxVdKplS7xip0g5oDXpZ+isr0rv5dDP8ToyVRywzPHkCCPKgKgScEcwz4uPWDIA=="
"version": "0.0.1068969",
"resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1068969.tgz",
"integrity": "sha512-ATFTrPbY1dKYhPPvpjtwWKSK2mIwGmRwX54UASn9THEuIZCe2n9k3vVuMmt6jWeL+e5QaaguEv/pMyR+JQB7VQ=="
},
"diff": {
"version": "5.1.0",
@ -13829,7 +13829,7 @@
"version": "file:packages/puppeteer",
"requires": {
"cosmiconfig": "8.0.0",
"devtools-protocol": "0.0.1056733",
"devtools-protocol": "0.0.1068969",
"https-proxy-agent": "5.0.1",
"progress": "2.0.3",
"proxy-from-env": "1.1.0",
@ -13867,7 +13867,7 @@
"requires": {
"cross-fetch": "3.1.5",
"debug": "4.3.4",
"devtools-protocol": "0.0.1056733",
"devtools-protocol": "0.0.1068969",
"extract-zip": "2.0.1",
"https-proxy-agent": "5.0.1",
"proxy-from-env": "1.1.0",

View File

@ -152,7 +152,7 @@
"dependencies": {
"cross-fetch": "3.1.5",
"debug": "4.3.4",
"devtools-protocol": "0.0.1056733",
"devtools-protocol": "0.0.1068969",
"extract-zip": "2.0.1",
"https-proxy-agent": "5.0.1",
"proxy-from-env": "1.1.0",

View File

@ -204,7 +204,7 @@ export class ChromeLauncher extends ProductLauncher {
}
if (headless) {
chromeArguments.push(
headless === 'chrome' ? '--headless=chrome' : '--headless',
headless === 'new' ? '--headless=new' : '--headless',
'--hide-scrollbars',
'--mute-audio'
);

View File

@ -27,7 +27,7 @@ export interface BrowserLaunchArgumentOptions {
* Whether to run the browser in headless mode.
* @defaultValue true
*/
headless?: boolean | 'chrome';
headless?: boolean | 'new';
/**
* Path to a user data directory.
* {@link https://chromium.googlesource.com/chromium/src/+/refs/heads/main/docs/user_data_dir.md | see the Chromium docs}

View File

@ -18,6 +18,6 @@
* @internal
*/
export const PUPPETEER_REVISIONS = Object.freeze({
chromium: '1056772',
chromium: '1069273',
firefox: 'latest',
});

View File

@ -123,7 +123,7 @@
"license": "Apache-2.0",
"dependencies": {
"cosmiconfig": "8.0.0",
"devtools-protocol": "0.0.1056733",
"devtools-protocol": "0.0.1068969",
"https-proxy-agent": "5.0.1",
"progress": "2.0.3",
"proxy-from-env": "1.1.0",

View File

@ -2039,18 +2039,6 @@
"parameters": ["chrome"],
"expectations": ["PASS", "FAIL"]
},
{
"testIdPattern": "[navigation.spec] navigation Page.goto should fail when navigating to bad SSL",
"platforms": ["darwin"],
"parameters": ["chrome", "headful"],
"expectations": ["FAIL"]
},
{
"testIdPattern": "[navigation.spec] navigation Page.goto should fail when navigating to bad SSL after redirects",
"platforms": ["darwin"],
"parameters": ["chrome", "headful"],
"expectations": ["FAIL"]
},
{
"testIdPattern": "[click.spec] Page.click should click on checkbox input and toggle",
"platforms": ["linux"],

View File

@ -51,7 +51,7 @@
"HEADLESS": "false"
},
"chrome-headless": {
"HEADLESS": "chrome"
"HEADLESS": "new"
},
"webDriverBiDi": {
"PUPPETEER_PROTOCOL": "webDriverBiDi"

View File

@ -27,7 +27,7 @@ describe('Browser specs', function () {
const version = await browser.version();
expect(version.length).toBeGreaterThan(0);
expect(version.startsWith('Headless')).toBe(
isHeadless && headless !== 'chrome'
isHeadless && headless !== 'new'
);
});
});

View File

@ -24,7 +24,7 @@ import path from 'path';
describe('Fixtures', function () {
it('dumpio option should work with pipe option', async () => {
const {defaultBrowserOptions, puppeteerPath, headless} = getTestState();
if (headless === 'chrome') {
if (headless === 'new') {
// This test only works in the old headless mode.
return;
}

View File

@ -65,8 +65,11 @@ const product =
const alternativeInstall = process.env['PUPPETEER_ALT_INSTALL'] || false;
const headless = (process.env['HEADLESS'] || 'true').trim().toLowerCase();
const isHeadless = headless === 'true' || headless === 'chrome';
const headless = (process.env['HEADLESS'] || 'true').trim().toLowerCase() as
| 'true'
| 'false'
| 'new';
const isHeadless = headless === 'true' || headless === 'new';
const isFirefox = product === 'firefox';
const isChrome = product === 'chrome';
const protocol = process.env['PUPPETEER_PROTOCOL'] || 'cdp';
@ -88,7 +91,7 @@ const defaultBrowserOptions = Object.assign(
{
handleSIGINT: true,
executablePath: process.env['BINARY'],
headless: headless === 'chrome' ? ('chrome' as const) : isHeadless,
headless: headless === 'new' ? ('new' as const) : isHeadless,
dumpio: !!process.env['DUMPIO'],
protocol: protocol as 'cdp' | 'webDriverBiDi',
},
@ -143,7 +146,7 @@ interface PuppeteerTestState {
isFirefox: boolean;
isChrome: boolean;
isHeadless: boolean;
headless: string;
headless: 'true' | 'false' | 'new';
puppeteerPath: string;
}
const state: Partial<PuppeteerTestState> = {};
@ -172,8 +175,8 @@ if (
}
-> mode: ${
isHeadless
? headless === 'chrome'
? '--headless=chrome'
? headless === 'new'
? '--headless=new'
: '--headless'
: 'headful'
}`

View File

@ -21,7 +21,6 @@ import {
setupTestBrowserHooks,
setupTestPageAndContextHooks,
} from './mocha-utils.js';
import os from 'os';
import {ServerResponse} from 'http';
import {HTTPRequest} from 'puppeteer-core/internal/common/HTTPRequest.js';
import {TimeoutError} from 'puppeteer';
@ -153,20 +152,8 @@ describe('navigation', function () {
}
});
function getExpectedSSLCertMessage(): string {
const {headless} = getTestState();
/**
* If you are running this on pre-Catalina versions of macOS this will fail
* locally. Mac OSX Catalina outputs a different message than other
* platforms. See https://support.google.com/chrome/thread/18125056?hl=en
* for details. If you're running pre-Catalina Mac OSX this test will fail
* locally.
* In chrome-headless, the message is also different.
*/
return os.platform() === 'darwin' && headless !== 'chrome'
? 'net::ERR_CERT_INVALID'
: 'net::ERR_CERT_AUTHORITY_INVALID';
}
const EXPECTED_SSL_CERT_MESSAGE_REGEX =
/net::ERR_CERT_INVALID|net::ERR_CERT_AUTHORITY_INVALID/;
it('should fail when navigating to bad SSL', async () => {
const {page, httpsServer, isChrome} = getTestState();
@ -189,7 +176,7 @@ describe('navigation', function () {
return (error = error_);
});
if (isChrome) {
expect(error.message).toContain(getExpectedSSLCertMessage());
expect(error.message).toMatch(EXPECTED_SSL_CERT_MESSAGE_REGEX);
} else {
expect(error.message).toContain('SSL_ERROR_UNKNOWN');
}
@ -208,7 +195,7 @@ describe('navigation', function () {
return (error = error_);
});
if (isChrome) {
expect(error.message).toContain(getExpectedSSLCertMessage());
expect(error.message).toMatch(EXPECTED_SSL_CERT_MESSAGE_REGEX);
} else {
expect(error.message).toContain('SSL_ERROR_UNKNOWN');
}

View File

@ -230,7 +230,7 @@ describe('OOPIF', function () {
it('should provide access to elements', async () => {
const {server, isHeadless, headless} = getTestState();
if (!isHeadless || headless === 'chrome') {
if (!isHeadless || headless === 'new') {
// TODO: this test is partially blocked on crbug.com/1334119. Enable test once
// the upstream is fixed.
// TLDR: when we dispatch events ot the frame the compositor might

View File

@ -180,7 +180,7 @@ async function main() {
fail = true;
recommendations.push(...recommendation);
} else {
console.log('Test run matches expecations');
console.log('Test run matches expectations');
continue;
}
} catch (err) {
@ -197,7 +197,7 @@ async function main() {
});
if (toAdd.length) {
console.log(
'Add the following to TestExpecations.json to ignore the error:'
'Add the following to TestExpectations.json to ignore the error:'
);
prettyPrintJSON(
toAdd.map(item => {
@ -210,7 +210,7 @@ async function main() {
});
if (toRemove.length) {
console.log(
'Remove the following from the TestExpecations.json to ignore the error:'
'Remove the following from the TestExpectations.json to ignore the error:'
);
prettyPrintJSON(
toRemove.map(item => {

View File

@ -17,6 +17,7 @@
const versionsPerRelease = new Map([
// This is a mapping from Chromium version => Puppeteer version.
// In Chromium roll patches, use `NEXT` for the Puppeteer version.
['109.0.5412.0', 'NEXT'],
['108.0.5351.0', 'v19.2.0'],
['107.0.5296.0', 'v18.1.0'],
['106.0.5249.0', 'v17.1.0'],
@ -52,8 +53,8 @@ const versionsPerRelease = new Map([
['73.0.3679.0', 'v1.12.2'],
]);
// The same major version as the current Chrome Stable per https://chromestatus.com/roadmap.
const lastMaintainedChromiumVersion = '106.0.5249.0';
// Should not be more then 2 major versions behind Chrome Stable (https://chromestatus.com/roadmap).
const lastMaintainedChromiumVersion = '107.0.5296.0';
if (!versionsPerRelease.has(lastMaintainedChromiumVersion)) {
throw new Error(