/** * Common browser configuration for Puppeteer tests * Prevents bookmark prompts and other UI interruptions */ const { createSeededChromeProfile } = require('../shared/chrome_profile'); const BROWSER_CONFIG = { headless: Boolean(process.env.CI), // userDataDir is defined as a lazy getter below so merely importing // this module (some scripts import both configs) doesn't create an // unused profile directory. args: [ '--no-sandbox', '--disable-setuid-sandbox', '--disable-dev-shm-usage', '--disable-accelerated-2d-canvas', '--no-first-run', '--no-zygote', '--disable-gpu', '--disable-extensions', '--disable-default-apps', '--disable-sync', '--disable-bookmarks-ui', '--disable-features=TranslateUI', '--disable-popup-blocking', '--disable-bookmark-prompt-on-load', '--disable-save-password-bubble', '--disable-prompt-on-repost', '--disable-background-networking', '--disable-background-timer-throttling', '--disable-backgrounding-occluded-windows', '--disable-breakpad', '--disable-client-side-phishing-detection', '--disable-component-extensions-with-background-pages', '--disable-features=site-per-process', '--disable-hang-monitor', '--disable-ipc-flooding-protection', '--disable-renderer-backgrounding' ], ignoreDefaultArgs: ['--enable-automation'], defaultViewport: { width: 1280, height: 800 } }; // Disables Chrome's password leak detection, whose invisible tab-modal // "data breach" dialog otherwise eats all real CDP input after logging // in with the CI credentials — see chrome_profile.js and issue #4430. // Lazy + memoized: the profile directory is only created when a launch // actually reads the option. let seededProfileDir = null; Object.defineProperty(BROWSER_CONFIG, 'userDataDir', { enumerable: true, get() { if (!seededProfileDir) { seededProfileDir = createSeededChromeProfile(); } return seededProfileDir; } }); /** * Page initialization options */ const PAGE_CONFIG = { waitUntil: 'domcontentloaded', timeout: 5000 // Reduced from 30000 to 5000ms }; module.exports = { BROWSER_CONFIG, PAGE_CONFIG };