fix: enable crashpad for ELECTRON_RUN_AS_NODE processes (#36460)
* wip: enable crashpad for node processes fix: add PID testing method wip: plumb fd into child_process in node * node::ProcessInitializationFlags::kNoDefaultSignalHandling * chore: clean up debug logging * chore: gate platform includes * test: clean up node process test * fix: pass pid in node_main * chore: cleanup impl * chore: fixup patch method definition * fix: expose bound methods to node_main * fix: remove bound methods * fix: crashpad connection for all ELECTRON_RUN_AS_NODE processes * chore: fix typo * chore: address review feedback * chore: delay crashpad initialization * chore: ensure options.env, code hygiene * chore: add argv test, check for process.env over {} * fix: fix test, return options.env immutability Co-authored-by: VerteDinde <keeleymhammond@gmail.com> Co-authored-by: Jeremy Rose <jeremya@chromium.org> Co-authored-by: VerteDinde <vertedinde@electronjs.org>
This commit is contained in:
parent
16a7bd7102
commit
2c723d7e84
10 changed files with 194 additions and 12 deletions
|
@ -166,9 +166,7 @@ ifdescribe(!isLinuxOnArm && !process.mas && !process.env.DISABLE_CRASH_REPORTER_
|
|||
expect(crash.mainProcessSpecific).to.equal('mps');
|
||||
});
|
||||
|
||||
// TODO(deepak1556): Re-enable this test once
|
||||
// https://github.com/electron/electron/issues/36030 is resolved.
|
||||
ifit(process.platform !== 'linux')('when a node process crashes', async () => {
|
||||
ifit(!isLinuxOnArm)('when a node process crashes', async () => {
|
||||
const { port, waitForCrash } = await startServer();
|
||||
runCrashApp('node', port);
|
||||
const crash = await waitForCrash();
|
||||
|
@ -177,6 +175,33 @@ ifdescribe(!isLinuxOnArm && !process.mas && !process.env.DISABLE_CRASH_REPORTER_
|
|||
expect(crash.rendererSpecific).to.be.undefined();
|
||||
});
|
||||
|
||||
ifit(!isLinuxOnArm)('when a node process inside a node process crashes', async () => {
|
||||
const { port, waitForCrash } = await startServer();
|
||||
runCrashApp('node-fork', port);
|
||||
const crash = await waitForCrash();
|
||||
checkCrash('node', crash);
|
||||
expect(crash.mainProcessSpecific).to.be.undefined();
|
||||
expect(crash.rendererSpecific).to.be.undefined();
|
||||
});
|
||||
|
||||
// Ensures that passing in crashpadHandlerPID flag for Linx child processes
|
||||
// does not affect child proocess args.
|
||||
ifit(process.platform === 'linux')('ensure linux child process args are not modified', async () => {
|
||||
const { port, waitForCrash } = await startServer();
|
||||
let exitCode: number | null = null;
|
||||
const appPath = path.join(__dirname, 'fixtures', 'apps', 'crash');
|
||||
const crashType = 'node-extra-args';
|
||||
const crashProcess = childProcess.spawn(process.execPath, [appPath,
|
||||
`--crash-type=${crashType}`,
|
||||
`--crash-reporter-url=http://127.0.0.1:${port}`
|
||||
], { stdio: 'inherit' });
|
||||
crashProcess.once('close', (code) => {
|
||||
exitCode = code;
|
||||
});
|
||||
await waitForCrash();
|
||||
expect(exitCode).to.equal(0);
|
||||
});
|
||||
|
||||
describe('with guid', () => {
|
||||
for (const processType of ['main', 'renderer', 'sandboxed-renderer']) {
|
||||
it(`when ${processType} crashes`, async () => {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue