idle: add close handler (also move API creation into inject)
This commit is contained in:
parent
a6fdc53d36
commit
0724473b01
@ -2,9 +2,9 @@ import { exec } from 'child_process';
|
||||
|
||||
const killProcesses = async pids => process.platform !== 'win32' ? Promise.resolve('') : new Promise(resolve => exec(`taskkill /F ${pids.map(x => `/PID ${x}`).join(' ')}`, (e, out) => resolve(out)));
|
||||
|
||||
export default async (CDP, { browserType }) => {
|
||||
if (browserType !== 'chromium') { // current implementation is for chromium-based only
|
||||
const warning = () => log(`Warning: Idle API is currently only for Chromium (running on ${browserType})`);
|
||||
export default async (CDP, { browserEngine, closeHandlers }) => {
|
||||
if (browserEngine !== 'chromium') { // current implementation is for chromium-based only
|
||||
const warning = () => log(`Warning: Idle API is currently only for Chromium (running on ${browserEngine})`);
|
||||
|
||||
return {
|
||||
hibernate: warning,
|
||||
@ -129,6 +129,7 @@ export default async (CDP, { browserType }) => {
|
||||
log('stopped auto idle');
|
||||
};
|
||||
|
||||
|
||||
let lastScreenshot, takingScreenshot = false;
|
||||
const screenshotInterval = setInterval(async () => {
|
||||
if (takingScreenshot) return;
|
||||
@ -140,6 +141,12 @@ export default async (CDP, { browserType }) => {
|
||||
|
||||
getScreenshot().then(x => lastScreenshot = x);
|
||||
|
||||
closeHandlers.push(() => {
|
||||
clearInterval(screenshotInterval);
|
||||
stopAuto();
|
||||
});
|
||||
|
||||
|
||||
log(`idle API active (window id: ${windowId})`);
|
||||
if (autoEnabled) startAuto();
|
||||
|
||||
|
@ -10,8 +10,6 @@ import { fileURLToPath } from 'url';
|
||||
import Chromium from './browser/chromium.js';
|
||||
import Firefox from './browser/firefox.js';
|
||||
|
||||
import IdleAPI from './api/idle.js';
|
||||
import ControlsAPI from './api/controls.js';
|
||||
|
||||
const __filename = fileURLToPath(import.meta.url);
|
||||
const __dirname = dirname(__filename);
|
||||
@ -174,9 +172,6 @@ const startBrowser = async (url, { windowSize, forceBrowser }) => {
|
||||
windowSize
|
||||
});
|
||||
|
||||
Window.idle = await IdleAPI(Window.cdp, { browserType });
|
||||
Window.controls = await ControlsAPI(Window.cdp);
|
||||
|
||||
return Window;
|
||||
};
|
||||
|
||||
|
@ -1,5 +1,8 @@
|
||||
import IPCApi from '../lib/ipc.js';
|
||||
|
||||
import IdleApi from '../api/idle.js';
|
||||
import ControlsApi from '../api/controls.js';
|
||||
|
||||
export default async (CDP, proc, injectionType = 'browser', { browserName } = { browserName: 'unknown' }) => {
|
||||
let pageLoadCallback, pageLoadPromise = new Promise(res => pageLoadCallback = res);
|
||||
let frameLoadCallback = () => {}, onWindowMessage = () => {};
|
||||
@ -51,17 +54,25 @@ export default async (CDP, proc, injectionType = 'browser', { browserName } = {
|
||||
|
||||
log('finished setup');
|
||||
|
||||
evalInWindow('document.readyState').then(readyState => {
|
||||
evalInWindow('document.readyState').then(readyState => { // check if already loaded, if so trigger page load promise
|
||||
if (readyState === 'complete' || readyState === 'ready') pageLoadCallback();
|
||||
});
|
||||
|
||||
|
||||
const generateVersionInfo = (name, version) => ({
|
||||
name,
|
||||
version,
|
||||
major: parseInt(version.split('.')[0])
|
||||
});
|
||||
|
||||
return {
|
||||
const versions = {
|
||||
product: generateVersionInfo(browserName, browserInfo.product.split('/')[1]),
|
||||
engine: generateVersionInfo(browserEngine, browserInfo.product.split('/')[1]),
|
||||
jsEngine: generateVersionInfo(browserEngine === 'chromium' ? 'v8' : 'spidermonkey', browserInfo.jsVersion)
|
||||
};
|
||||
|
||||
const closeHandlers = [];
|
||||
const Window = {
|
||||
page: {
|
||||
eval: evalInWindow,
|
||||
loaded: pageLoadPromise
|
||||
@ -74,14 +85,17 @@ export default async (CDP, proc, injectionType = 'browser', { browserName } = {
|
||||
},
|
||||
|
||||
close: () => {
|
||||
for (const handler of closeHandlers) handler(); // extra api handlers which need to be closed
|
||||
|
||||
CDP.close();
|
||||
proc.kill();
|
||||
},
|
||||
|
||||
versions: {
|
||||
product: generateVersionInfo(browserName, browserInfo.product.split('/')[1]),
|
||||
engine: generateVersionInfo(browserEngine, browserInfo.product.split('/')[1]),
|
||||
jsEngine: generateVersionInfo(browserEngine === 'chromium' ? 'v8' : 'spidermonkey', browserInfo.jsVersion)
|
||||
}
|
||||
versions
|
||||
};
|
||||
|
||||
Window.idle = await IdleApi(Window.cdp, { browserEngine, closeHandlers });
|
||||
Window.controls = await ControlsApi(Window.cdp);
|
||||
|
||||
return Window;
|
||||
};
|
Loading…
x
Reference in New Issue
Block a user