mirror of
https://github.com/puppeteer/puppeteer
synced 2024-06-14 14:02:48 +00:00
feat: merge user-provided --{disable,enable}-features in args (#11152)
Bug: #11072
This commit is contained in:
parent
d99f9d752b
commit
2b578e4a09
47
packages/puppeteer-core/src/node/ChromeLauncher.test.ts
Normal file
47
packages/puppeteer-core/src/node/ChromeLauncher.test.ts
Normal file
@ -0,0 +1,47 @@
|
||||
/**
|
||||
* Copyright 2023 Google Inc. All rights reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
import {describe, it} from 'node:test';
|
||||
|
||||
import expect from 'expect';
|
||||
|
||||
import {getFeatures} from './ChromeLauncher.js';
|
||||
|
||||
describe('getFeatures', () => {
|
||||
it('returns an empty array when no options are provided', () => {
|
||||
const result = getFeatures('--foo');
|
||||
expect(result).toEqual([]);
|
||||
});
|
||||
|
||||
it('returns an empty array when no options match the flag', () => {
|
||||
const result = getFeatures('--foo', ['--bar', '--baz']);
|
||||
expect(result).toEqual([]);
|
||||
});
|
||||
|
||||
it('returns an array of values when options match the flag', () => {
|
||||
const result = getFeatures('--foo', ['--foo=bar', '--foo=baz']);
|
||||
expect(result).toEqual(['bar', 'baz']);
|
||||
});
|
||||
|
||||
it('does not handle whitespace', () => {
|
||||
const result = getFeatures('--foo', ['--foo bar', '--foo baz ']);
|
||||
expect(result).toEqual([]);
|
||||
});
|
||||
|
||||
it('handles equals sign around the flag and value', () => {
|
||||
const result = getFeatures('--foo', ['--foo=bar', '--foo=baz ']);
|
||||
expect(result).toEqual(['bar', 'baz']);
|
||||
});
|
||||
});
|
@ -166,6 +166,7 @@ export class ChromeLauncher extends ProductLauncher {
|
||||
override defaultArgs(options: BrowserLaunchArgumentOptions = {}): string[] {
|
||||
// See https://github.com/GoogleChrome/chrome-launcher/blob/main/docs/chrome-flags-for-tools.md
|
||||
|
||||
// Merge default disabled features with user-provided ones, if any.
|
||||
const disabledFeatures = [
|
||||
'Translate',
|
||||
// AcceptCHFrame disabled because of crbug.com/1348106.
|
||||
@ -174,9 +175,14 @@ export class ChromeLauncher extends ProductLauncher {
|
||||
'OptimizationHints',
|
||||
// https://crbug.com/1492053
|
||||
'ProcessPerSiteUpToMainFrameThreshold',
|
||||
...getFeatures('--disable-features', options.args),
|
||||
];
|
||||
|
||||
const enabledFeatures = ['NetworkServiceInProcess2'];
|
||||
// Merge default enabled features with user-provided ones, if any.
|
||||
const enabledFeatures = [
|
||||
'NetworkServiceInProcess2',
|
||||
...getFeatures('--enable-features', options.args),
|
||||
];
|
||||
|
||||
const chromeArguments = [
|
||||
'--allow-pre-commit-input',
|
||||
@ -266,3 +272,28 @@ function convertPuppeteerChannelToBrowsersChannel(
|
||||
return BrowsersChromeReleaseChannel.CANARY;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Extracts all features from the given command-line flag
|
||||
* (e.g. `--enable-features`, `--enable-features=`).
|
||||
*
|
||||
* Example input:
|
||||
* ["--enable-features=NetworkService,NetworkServiceInProcess", "--enable-features=Foo"]
|
||||
*
|
||||
* Example output:
|
||||
* ["NetworkService", "NetworkServiceInProcess", "Foo"]
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
export function getFeatures(flag: string, options: string[] = []): string[] {
|
||||
return options
|
||||
.filter(s => {
|
||||
return s.startsWith(flag.endsWith('=') ? flag : `${flag}=`);
|
||||
})
|
||||
.map(s => {
|
||||
return s.split(new RegExp(`${flag}` + '=\\s*'))[1]?.trim();
|
||||
})
|
||||
.filter(s => {
|
||||
return s;
|
||||
}) as string[];
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user