Fix several crashing issues (#869)
* Fix canary issue and stream crashing. * Fix process package by NodeJS. * Move ipc calls to IPC module.
This commit is contained in:
parent
d25e56cc23
commit
959bdc3a4f
|
@ -11,4 +11,5 @@ export const CLOSE_DEVTOOLS = "bd-close-devtools";
|
|||
export const OPEN_WINDOW = "bd-open-window";
|
||||
export const INSPECT_ELEMENT = "bd-inspect-element";
|
||||
export const MINIMUM_SIZE = "bd-minimum-size";
|
||||
export const DEVTOOLS_WARNING = "bd-remove-devtools-message";
|
||||
export const DEVTOOLS_WARNING = "bd-remove-devtools-message";
|
||||
export const REGISTER_PRELOAD = "bd-register-preload";
|
|
@ -9,8 +9,6 @@ import CSP from "./modules/csp";
|
|||
if (!process.argv.includes("--vanilla")) {
|
||||
process.env.NODE_OPTIONS = "--no-force-async-hooks-checks";
|
||||
app.commandLine.appendSwitch("no-force-async-hooks-checks");
|
||||
process.electronBinding("command_line").appendSwitch("no-force-async-hooks-checks");
|
||||
|
||||
|
||||
// Patch and replace the built-in BrowserWindow
|
||||
BrowserWindow.patchBrowserWindow();
|
||||
|
|
|
@ -77,6 +77,10 @@ const setMinimumSize = (event, width, height) => {
|
|||
|
||||
const stopDevtoolsWarning = event => event.sender.removeAllListeners("devtools-opened");
|
||||
|
||||
const registerPreload = (event, path) => {
|
||||
app.commandLine.appendSwitch("preload", path);
|
||||
};
|
||||
|
||||
export default class IPCMain {
|
||||
static registerEvents() {
|
||||
ipc.on(IPCEvents.GET_PATH, getPath);
|
||||
|
@ -86,6 +90,7 @@ export default class IPCMain {
|
|||
ipc.on(IPCEvents.INSPECT_ELEMENT, inspectElement);
|
||||
ipc.on(IPCEvents.MINIMUM_SIZE, setMinimumSize);
|
||||
ipc.on(IPCEvents.DEVTOOLS_WARNING, stopDevtoolsWarning);
|
||||
ipc.on(IPCEvents.REGISTER_PRELOAD, registerPreload);
|
||||
ipc.handle(IPCEvents.RUN_SCRIPT, runScript);
|
||||
ipc.handle(IPCEvents.OPEN_WINDOW, createBrowserWindow);
|
||||
}
|
||||
|
|
|
@ -1,6 +1,17 @@
|
|||
const Module = require("module");
|
||||
const path = require("path");
|
||||
const electron = require("electron");
|
||||
const NodeEvents = require("events");
|
||||
|
||||
const cloneObject = function (target, newObject = {}, keys) {
|
||||
if (!Array.isArray(keys)) keys = Object.keys(Object.getOwnPropertyDescriptors(target));
|
||||
return keys.reduce((clone, key) => {
|
||||
if (typeof(target[key]) === "object" && !Array.isArray(target[key]) && target[key] !== null && !(target[key] instanceof NodeEvents)) clone[key] = cloneObject(target[key], {});
|
||||
else clone[key] = target[key];
|
||||
|
||||
return clone;
|
||||
}, newObject);
|
||||
};
|
||||
|
||||
/* global window:false */
|
||||
|
||||
|
@ -11,16 +22,26 @@ Object.defineProperty(window, "webpackJsonp", {
|
|||
|
||||
electron.webFrame.top.context.global = electron.webFrame.top.context;
|
||||
electron.webFrame.top.context.require = require;
|
||||
electron.webFrame.top.context.process = process;
|
||||
electron.webFrame.top.context.Buffer = Buffer;
|
||||
electron.webFrame.top.context.process = new class PatchedProcess extends NodeEvents {
|
||||
get __ORIGINAL_PROCESS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED__() {return process;}
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
|
||||
Object.assign(this,
|
||||
cloneObject(process, {}, Object.keys(NodeEvents.prototype)),
|
||||
cloneObject(process, {})
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
// Load Discord's original preload
|
||||
const preload = process.env.DISCORD_PRELOAD;
|
||||
if (preload) {
|
||||
|
||||
// Restore original preload for future windows
|
||||
process.electronBinding("command_line").appendSwitch("preload", preload);
|
||||
|
||||
electron.ipcRenderer.send("bd-register-preload", preload);
|
||||
// Run original preload
|
||||
try {
|
||||
const originalKill = process.kill;
|
||||
|
|
|
@ -7,6 +7,10 @@ export default function() {
|
|||
const load = Module._load;
|
||||
|
||||
Module._load = function(request) {
|
||||
if (request === "process") {
|
||||
return window.process;
|
||||
}
|
||||
|
||||
if (request === namespace || request.startsWith(prefix)) {
|
||||
const requested = request.substr(prefix.length);
|
||||
if (requested == "bdapi") return BdApi;
|
||||
|
|
Loading…
Reference in New Issue