LazyBoy2/box/stop-browser.mjs

26 lines
1.1 KiB
JavaScript
Raw Normal View History

2026-09-14 09:08:35 +00:00
// Browser.close runs Chromium's normal shutdown path and flushes profile data.
import { chromium } from '/opt/grokboy/playwright/node_modules/playwright/index.mjs';
import { readdir, readFile } from 'node:fs/promises';
import { setTimeout as delay } from 'node:timers/promises';
const deadline = setTimeout(() => process.exit(1), 8000);
try {
const browser = await chromium.connectOverCDP('http://127.0.0.1:9222', { timeout: 2000 });
const disconnected = new Promise(resolve => browser.once('disconnected', resolve));
const session = await browser.newBrowserCDPSession();
await session.send('Browser.close').catch(() => {});
await disconnected;
// DevTools disconnects before the browser's storage shutdown has finished.
for (;;) {
let running = false;
for (const pid of await readdir('/proc')) {
if (!/^\d+$/.test(pid)) continue;
const cmd = await readFile(`/proc/${pid}/cmdline`, 'utf8').catch(() => '');
const args = cmd.split('\0');
if (args[0]?.endsWith('/chromium') && !args.some(arg => arg.startsWith('--type='))) running = true;
}
if (!running) break;
await delay(50);
}
} catch {}
clearTimeout(deadline);