8000 fix: self.module.paths not working in web workers by trop[bot] · Pull Request #30012 · electron/electron · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

fix: self.module.paths not working in web workers #30012

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions lib/worker/init.ts
8000
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@ require('../common/reset-search-paths');
// Import common settings.
require('@electron/internal/common/init');

// Process command line arguments.
const { hasSwitch, getSwitchValue } = process._linkedBinding('electron_common_command_line');

// Export node bindings to global.
const { makeRequireFunction } = __non_webpack_require__('internal/modules/cjs/helpers') // eslint-disable-line
global.module = new Module('electron/js2c/worker_init');
Expand All @@ -32,4 +35,10 @@ if (self.location.protocol === 'file:') {
// For backwards compatibility we fake these two paths here
global.__filename = path.join(process.resourcesPath, 'electron.asar', 'worker', 'init.js');
global.__dirname = path.join(process.resourcesPath, 'electron.asar', 'worker');

const appPath = hasSwitch('app-path') ? getSwitchValue('app-path') : null;
if (appPath) {
// Search for module under the app directory.
global.module.paths = Module._nodeModulePaths(appPath);
}
}
20 changes: 20 additions & 0 deletions spec-main/chromium-spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -672,6 +672,26 @@ describe('chromium features', () => {
});
});

describe('web workers', () => {
let appProcess: ChildProcess.ChildProcessWithoutNullStreams | undefined;

afterEach(() => {
if (appProcess && !appProcess.killed) {
appProcess.kill();
appProcess = undefined;
}
});

it('Worker with nodeIntegrationInWorker has access to self.module.paths', async () => {
const appPath = path.join(__dirname, 'fixtures', 'apps', 'self-module-paths');

appProcess = ChildProcess.spawn(process.execPath, [appPath]);

const [code] = await emittedOnce(appProcess, 'exit');
expect(code).to.equal(0);
});
});

describe('form submit', () => {
let server: http.Server;
let serverUrl: string;
Expand Down
7 changes: 7 additions & 0 deletions spec-main/fixtures/apps/self-module-paths/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<!DOCTYPE html>
<html>
<body>
<h1>Hello World!</h1>
<script src="./renderer.js"></script>
</body>
</html>
34 changes: 34 additions & 0 deletions spec-main/fixtures/apps/self-module-paths/main.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
// Modules to control application life and create native browser window
const { app, BrowserWindow, ipcMain } = require('electron');
const path = require('path');

function createWindow () {
const mainWindow = new BrowserWindow({
width: 800,
height: 600,
show: false,
webPreferences: {
nodeIntegration: true,
nodeIntegrationInWorker: true,
contextIsolation: false
}
});

mainWindow.loadFile('index.html');
}

ipcMain.handle('module-paths', (e, success) => {
process.exit(success ? 0 : 1);
});

app.whenReady().then(() => {
createWindow();

app.on('activate', function () {
if (BrowserWindow.getAllWindows().length === 0) createWindow();
});
});

app.on('window-all-closed', function () {
if (process.platform !== 'darwin') app.quit();
});
4 changes: 4 additions & 0 deletions spec-main/fixtures/apps/self-module-paths/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"name": "electron-test-self-module-paths",
"main": "main.js"
}
12 changes: 12 additions & 0 deletions spec-main/fixtures/apps/self-module-paths/renderer.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
const { ipcRenderer } = require('electron');

const worker = new Worker('worker.js');

worker. => {
const workerPaths = event.data.sort().toString();
const rendererPaths = self.module.paths.sort().toString();
const validModulePaths = workerPaths === rendererPaths && workerPaths !== 0;

ipcRenderer.invoke('module-paths', validModulePaths);
worker.terminate();
};
1 change: 1 addition & 0 deletions spec-main/fixtures/apps/self-module-paths/worker.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
self.postMessage(self.module.paths);
0