// Test whether a MINIMAL extension's content script injects under headless const { chromium } = require('/usr/lib/node_modules/@playwright/test'); const EXT_PATH = '/tmp/bbp-minimal'; (async () => { const userDataDir = '/tmp/bb-minimal-' + Date.now(); const context = await chromium.launchPersistentContext(userDataDir, { headless: true, channel: 'chromium', args: [ `--disable-extensions-except=${EXT_PATH}`, `--load-extension=${EXT_PATH}`, '--disable-dev-shm-usage', '--no-sandbox', ], viewport: { width: 414, height: 896 }, }); console.log('[minimal] workers:', context.serviceWorkers().length); const page = context.pages()[0] || await context.newPage(); page.on('console', (m) => console.log(`[page:${m.type()}]`, m.text())); page.on('pageerror', (e) => console.log('[page:error]', e.message)); await page.goto('https://beat-battle.net/', { waitUntil: 'domcontentloaded', timeout: 30000 }); await page.waitForTimeout(4000); const result = await page.evaluate(() => ({ htmlClass: document.documentElement.className, hasMarker: !!document.getElementById('bbp-minimal-marker'), markerText: document.getElementById('bbp-minimal-marker')?.textContent, })); console.log('[minimal:result]', result); await context.close(); })().catch((e) => { console.error('FAIL:', e); process.exit(1); });