mirror of
https://github.com/puppeteer/puppeteer
synced 2024-06-14 14:02:48 +00:00
feat(chromium): roll to Chromium 109.0.5412.0 (r1069273) (#9364)
Closes #9233
This commit is contained in:
parent
1501edefa8
commit
1875da6191
@ -10,7 +10,7 @@ Whether to run the browser in headless mode.
|
||||
|
||||
```typescript
|
||||
interface BrowserLaunchArgumentOptions {
|
||||
headless?: boolean | 'chrome';
|
||||
headless?: boolean | 'new';
|
||||
}
|
||||
```
|
||||
|
||||
|
@ -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. | |
|
||||
|
@ -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 it’s not desirable to
|
||||
change Puppeteer’s 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
20
package-lock.json
generated
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -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'
|
||||
);
|
||||
|
@ -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}
|
||||
|
@ -18,6 +18,6 @@
|
||||
* @internal
|
||||
*/
|
||||
export const PUPPETEER_REVISIONS = Object.freeze({
|
||||
chromium: '1056772',
|
||||
chromium: '1069273',
|
||||
firefox: 'latest',
|
||||
});
|
||||
|
@ -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",
|
||||
|
@ -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"],
|
||||
|
@ -51,7 +51,7 @@
|
||||
"HEADLESS": "false"
|
||||
},
|
||||
"chrome-headless": {
|
||||
"HEADLESS": "chrome"
|
||||
"HEADLESS": "new"
|
||||
},
|
||||
"webDriverBiDi": {
|
||||
"PUPPETEER_PROTOCOL": "webDriverBiDi"
|
||||
|
@ -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'
|
||||
);
|
||||
});
|
||||
});
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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'
|
||||
}`
|
||||
|
@ -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');
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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 => {
|
||||
|
@ -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(
|
||||
|
Loading…
Reference in New Issue
Block a user