Skip to content

Commit 594c88d

Browse files
committed
revised Chromium launch flags
1 parent d33bb2a commit 594c88d

File tree

8 files changed

+90
-65
lines changed

8 files changed

+90
-65
lines changed

source/hooks/adblock.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ let adblocker: any = null;
66

77
/**
88
* Enables ad blocking in page.
9-
* Requires `@cliqz/adblocker-puppeteer` package to be installed.
9+
* Requires `@cliqz/adblocker-puppeteer` package.
1010
*
1111
* @param page - Page to hook to.
1212
*/

source/hooks/agent.ts

+9-7
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11
import { Page } from 'puppeteer-core';
22

33
/**
4-
* Removes `Headless` from the User Agent string.
4+
* Removes `Headless` from the User Agent string, if present.
55
*
66
* @param page - Page to hook to.
77
*/
8-
export = function (page: Page): Promise<Page> {
9-
return page
10-
.browser()
11-
.userAgent()
12-
.then((value) => page.setUserAgent(value.replace('Headless', '')))
13-
.then(() => page);
8+
export = async function (page: Page): Promise<Page> {
9+
let result = await page.browser().userAgent();
10+
11+
if (result.includes('Headless') === true) {
12+
await page.setUserAgent(result.replace('Headless', ''));
13+
}
14+
15+
return page;
1416
};

source/hooks/chrome.ts

+6-3
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { Writeable } from '../../typings/chrome-aws-lambda';
77
* @param page - Page to hook to.
88
*/
99
export = async function (page: Page): Promise<Page> {
10-
await page.evaluateOnNewDocument(() => {
10+
const handler = () => {
1111
let alpha = Date.now();
1212
let delta = Math.floor(500 * Math.random());
1313

@@ -179,8 +179,11 @@ export = async function (page: Page): Promise<Page> {
179179
};
180180
},
181181
});
182-
}
183-
});
182+
};
183+
}
184+
185+
await page.evaluate(handler);
186+
await page.evaluateOnNewDocument(handler);
184187

185188
return page;
186189
}

source/hooks/languages.ts

+5-2
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,18 @@ import { Page } from 'puppeteer-core';
66
* @param page - Page to hook to.
77
*/
88
export = async function (page: Page): Promise<Page> {
9-
await page.evaluateOnNewDocument(() => {
9+
const handler = () => {
1010
Object.defineProperty(Object.getPrototypeOf(navigator), 'language', {
1111
get: () => 'en-US',
1212
});
1313

1414
Object.defineProperty(Object.getPrototypeOf(navigator), 'languages', {
1515
get: () => ['en-US', 'en'],
1616
});
17-
});
17+
};
18+
19+
await page.evaluate(handler);
20+
await page.evaluateOnNewDocument(handler);
1821

1922
return page;
2023
}

source/hooks/permissions.ts

+5-2
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { Page } from 'puppeteer-core';
66
* @param page - Page to hook to.
77
*/
88
export = async function (page: Page): Promise<Page> {
9-
await page.evaluateOnNewDocument(() => {
9+
const handler = () => {
1010
let query = window.navigator.permissions.query;
1111

1212
(Permissions as any).prototype.query = function (parameters: DevicePermissionDescriptor | MidiPermissionDescriptor | PermissionDescriptor | PushPermissionDescriptor) {
@@ -19,7 +19,10 @@ export = async function (page: Page): Promise<Page> {
1919

2020
return query(parameters);
2121
};
22-
});
22+
};
23+
24+
await page.evaluate(handler);
25+
await page.evaluateOnNewDocument(handler);
2326

2427
return page;
2528
}

source/hooks/webdriver.ts

+8-3
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,14 @@ import { Page } from 'puppeteer-core';
66
* @param page - Page to hook to.
77
*/
88
export = async function (page: Page): Promise<Page> {
9-
await page.evaluateOnNewDocument(() => {
10-
delete Object.getPrototypeOf(navigator).webdriver;
11-
});
9+
const handler = () => {
10+
Object.defineProperty(Object.getPrototypeOf(navigator), 'webdriver', {
11+
get: () => false,
12+
});
13+
};
14+
15+
await page.evaluate(handler);
16+
await page.evaluateOnNewDocument(handler);
1217

1318
return page;
1419
}

source/hooks/window.ts

+30-7
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,47 @@
11
import { Page } from 'puppeteer-core';
22

33
/**
4-
* Patches `outerHeight` and `outerWidth` to mimic headful Chrome.
4+
* Patches window outer dimentions to mimic headful Chrome.
55
*
66
* @param page - Page to hook to.
77
*/
88
export = async function (page: Page): Promise<Page> {
9-
await page.evaluateOnNewDocument(() => {
9+
const handler = () => {
10+
if (window.outerWidth === 0) {
11+
Object.defineProperty(window, 'outerWidth', {
12+
get: () => screen.availWidth,
13+
});
14+
}
15+
1016
if (window.outerHeight === 0) {
1117
Object.defineProperty(window, 'outerHeight', {
12-
get: () => window.innerHeight,
18+
get: () => screen.availHeight,
1319
});
1420
}
1521

16-
if (window.outerWidth === 0) {
17-
Object.defineProperty(window, 'outerWidth', {
18-
get: () => window.innerWidth,
22+
if (window.screenX === 0) {
23+
Object.defineProperty(window, 'screenX', {
24+
get: () => screen.width - screen.availWidth,
25+
});
26+
27+
Object.defineProperty(window, 'screenLeft', {
28+
get: () => screenX,
1929
});
2030
}
21-
});
31+
32+
if (window.screenY === 0) {
33+
Object.defineProperty(window, 'screenY', {
34+
get: () => screen.height - screen.availHeight,
35+
});
36+
37+
Object.defineProperty(window, 'screenTop', {
38+
get: () => screenY,
39+
});
40+
}
41+
};
42+
43+
await page.evaluate(handler);
44+
await page.evaluateOnNewDocument(handler);
2245

2346
return page;
2447
}

source/index.ts

+26-40
Original file line numberDiff line numberDiff line change
@@ -88,53 +88,39 @@ class Chromium {
8888
}
8989

9090
/**
91-
* Returns a list of recommended additional Chromium flags.
91+
* Returns a list of additional Chromium flags recommended for serverless environments.
92+
* The canonical list of flags can be found on https://peter.sh/experiments/chromium-command-line-switches/.
9293
*/
9394
static get args(): string[] {
9495
const result = [
95-
'--autoplay-policy=user-gesture-required',
96-
'--disable-background-networking',
97-
'--disable-background-timer-throttling',
98-
'--disable-backgrounding-occluded-windows',
99-
'--disable-breakpad',
100-
'--disable-client-side-phishing-detection',
101-
'--disable-component-update',
102-
'--disable-default-apps',
103-
'--disable-dev-shm-usage',
104-
'--disable-domain-reliability',
105-
'--disable-extensions',
106-
'--disable-features=AudioServiceOutOfProcess,IsolateOrigins,site-per-process',
107-
'--disable-hang-monitor',
108-
'--disable-ipc-flooding-protection',
109-
'--disable-offer-store-unmasked-wallet-cards',
110-
'--disable-popup-blocking',
111-
'--disable-print-preview',
112-
'--disable-prompt-on-repost',
113-
'--disable-renderer-backgrounding',
114-
'--disable-setuid-sandbox',
115-
'--disable-speech-api',
116-
'--disable-sync',
117-
'--disable-web-security',
118-
'--disk-cache-size=33554432',
119-
'--hide-scrollbars',
120-
'--ignore-gpu-blocklist',
121-
'--metrics-recording-only',
122-
'--mute-audio',
123-
'--no-default-browser-check',
124-
'--no-first-run',
125-
'--no-pings',
126-
'--no-sandbox',
127-
'--no-zygote',
128-
'--password-store=basic',
129-
'--use-gl=swiftshader',
130-
'--use-mock-keychain',
131-
'--window-size=1920,1080',
96+
'--allow-running-insecure-content', // https://source.chromium.org/search?q=lang:cpp+symbol:kAllowRunningInsecureContent&ss=chromium
97+
'--autoplay-policy=user-gesture-required', // https://source.chromium.org/search?q=lang:cpp+symbol:kAutoplayPolicy&ss=chromium
98+
'--disable-component-update', // https://source.chromium.org/search?q=lang:cpp+symbol:kDisableComponentUpdate&ss=chromium
99+
'--disable-domain-reliability', // https://source.chromium.org/search?q=lang:cpp+symbol:kDisableDomainReliability&ss=chromium
100+
'--disable-features=AudioServiceOutOfProcess,IsolateOrigins,site-per-process', // https://source.chromium.org/search?q=file:content_features.cc&ss=chromium
101+
'--disable-print-preview', // https://source.chromium.org/search?q=lang:cpp+symbol:kDisablePrintPreview&ss=chromium
102+
'--disable-setuid-sandbox', // https://source.chromium.org/search?q=lang:cpp+symbol:kDisableSetuidSandbox&ss=chromium
103+
'--disable-site-isolation-trials', // https://source.chromium.org/search?q=lang:cpp+symbol:kDisableSiteIsolation&ss=chromium
104+
'--disable-speech-api', // https://source.chromium.org/search?q=lang:cpp+symbol:kDisableSpeechAPI&ss=chromium
105+
'--disable-web-security', // https://source.chromium.org/search?q=lang:cpp+symbol:kDisableWebSecurity&ss=chromium
106+
'--disk-cache-size=33554432', // https://source.chromium.org/search?q=lang:cpp+symbol:kDiskCacheSize&ss=chromium
107+
'--enable-features=SharedArrayBuffer', // https://source.chromium.org/search?q=file:content_features.cc&ss=chromium
108+
'--hide-scrollbars', // https://source.chromium.org/search?q=lang:cpp+symbol:kHideScrollbars&ss=chromium
109+
'--ignore-gpu-blocklist', // https://source.chromium.org/search?q=lang:cpp+symbol:kIgnoreGpuBlocklist&ss=chromium
110+
'--in-process-gpu', // https://source.chromium.org/search?q=lang:cpp+symbol:kInProcessGPU&ss=chromium
111+
'--mute-audio', // https://source.chromium.org/search?q=lang:cpp+symbol:kMuteAudio&ss=chromium
112+
'--no-default-browser-check', // https://source.chromium.org/search?q=lang:cpp+symbol:kNoDefaultBrowserCheck&ss=chromium
113+
'--no-pings', // https://source.chromium.org/search?q=lang:cpp+symbol:kNoPings&ss=chromium
114+
'--no-sandbox', // https://source.chromium.org/search?q=lang:cpp+symbol:kNoSandbox&ss=chromium
115+
'--no-zygote', // https://source.chromium.org/search?q=lang:cpp+symbol:kNoZygote&ss=chromium
116+
'--use-gl=swiftshader', // https://source.chromium.org/search?q=lang:cpp+symbol:kUseGl&ss=chromium
117+
'--window-size=1920,1080', // https://source.chromium.org/search?q=lang:cpp+symbol:kWindowSize&ss=chromium
132118
];
133119

134120
if (Chromium.headless === true) {
135-
result.push('--single-process');
121+
result.push('--single-process'); // https://source.chromium.org/search?q=lang:cpp+symbol:kSingleProcess&ss=chromium
136122
} else {
137-
result.push('--start-maximized');
123+
result.push('--start-maximized'); // https://source.chromium.org/search?q=lang:cpp+symbol:kStartMaximized&ss=chromium
138124
}
139125

140126
return result;

0 commit comments

Comments
 (0)