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)));
|
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 }) => {
|
export default async (CDP, { browserEngine, closeHandlers }) => {
|
||||||
if (browserType !== 'chromium') { // current implementation is for chromium-based only
|
if (browserEngine !== 'chromium') { // current implementation is for chromium-based only
|
||||||
const warning = () => log(`Warning: Idle API is currently only for Chromium (running on ${browserType})`);
|
const warning = () => log(`Warning: Idle API is currently only for Chromium (running on ${browserEngine})`);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
hibernate: warning,
|
hibernate: warning,
|
||||||
@ -129,6 +129,7 @@ export default async (CDP, { browserType }) => {
|
|||||||
log('stopped auto idle');
|
log('stopped auto idle');
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
let lastScreenshot, takingScreenshot = false;
|
let lastScreenshot, takingScreenshot = false;
|
||||||
const screenshotInterval = setInterval(async () => {
|
const screenshotInterval = setInterval(async () => {
|
||||||
if (takingScreenshot) return;
|
if (takingScreenshot) return;
|
||||||
@ -140,6 +141,12 @@ export default async (CDP, { browserType }) => {
|
|||||||
|
|
||||||
getScreenshot().then(x => lastScreenshot = x);
|
getScreenshot().then(x => lastScreenshot = x);
|
||||||
|
|
||||||
|
closeHandlers.push(() => {
|
||||||
|
clearInterval(screenshotInterval);
|
||||||
|
stopAuto();
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
log(`idle API active (window id: ${windowId})`);
|
log(`idle API active (window id: ${windowId})`);
|
||||||
if (autoEnabled) startAuto();
|
if (autoEnabled) startAuto();
|
||||||
|
|
||||||
|
@ -10,8 +10,6 @@ import { fileURLToPath } from 'url';
|
|||||||
import Chromium from './browser/chromium.js';
|
import Chromium from './browser/chromium.js';
|
||||||
import Firefox from './browser/firefox.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 __filename = fileURLToPath(import.meta.url);
|
||||||
const __dirname = dirname(__filename);
|
const __dirname = dirname(__filename);
|
||||||
@ -174,9 +172,6 @@ const startBrowser = async (url, { windowSize, forceBrowser }) => {
|
|||||||
windowSize
|
windowSize
|
||||||
});
|
});
|
||||||
|
|
||||||
Window.idle = await IdleAPI(Window.cdp, { browserType });
|
|
||||||
Window.controls = await ControlsAPI(Window.cdp);
|
|
||||||
|
|
||||||
return Window;
|
return Window;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1,5 +1,8 @@
|
|||||||
import IPCApi from '../lib/ipc.js';
|
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' }) => {
|
export default async (CDP, proc, injectionType = 'browser', { browserName } = { browserName: 'unknown' }) => {
|
||||||
let pageLoadCallback, pageLoadPromise = new Promise(res => pageLoadCallback = res);
|
let pageLoadCallback, pageLoadPromise = new Promise(res => pageLoadCallback = res);
|
||||||
let frameLoadCallback = () => {}, onWindowMessage = () => {};
|
let frameLoadCallback = () => {}, onWindowMessage = () => {};
|
||||||
@ -51,17 +54,25 @@ export default async (CDP, proc, injectionType = 'browser', { browserName } = {
|
|||||||
|
|
||||||
log('finished setup');
|
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();
|
if (readyState === 'complete' || readyState === 'ready') pageLoadCallback();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
const generateVersionInfo = (name, version) => ({
|
const generateVersionInfo = (name, version) => ({
|
||||||
name,
|
name,
|
||||||
version,
|
version,
|
||||||
major: parseInt(version.split('.')[0])
|
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: {
|
page: {
|
||||||
eval: evalInWindow,
|
eval: evalInWindow,
|
||||||
loaded: pageLoadPromise
|
loaded: pageLoadPromise
|
||||||
@ -74,14 +85,17 @@ export default async (CDP, proc, injectionType = 'browser', { browserName } = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
close: () => {
|
close: () => {
|
||||||
|
for (const handler of closeHandlers) handler(); // extra api handlers which need to be closed
|
||||||
|
|
||||||
CDP.close();
|
CDP.close();
|
||||||
proc.kill();
|
proc.kill();
|
||||||
},
|
},
|
||||||
|
|
||||||
versions: {
|
versions
|
||||||
product: generateVersionInfo(browserName, browserInfo.product.split('/')[1]),
|
|
||||||
engine: generateVersionInfo(browserEngine, browserInfo.product.split('/')[1]),
|
|
||||||
jsEngine: generateVersionInfo(browserEngine === 'chromium' ? 'v8' : 'spidermonkey', browserInfo.jsVersion)
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
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