diff --git a/shell/renderer/electron_renderer_client.cc b/shell/renderer/electron_renderer_client.cc index cb31488150..67fd46c8ad 100644 --- a/shell/renderer/electron_renderer_client.cc +++ b/shell/renderer/electron_renderer_client.cc @@ -108,12 +108,12 @@ void ElectronRendererClient::DidCreateScriptContext( injected_frames_.insert(render_frame); - // If this is the first environment we are creating, prepare the node - // bindings. if (!node_integration_initialized_) { node_integration_initialized_ = true; node_bindings_->Initialize(); node_bindings_->PrepareMessageLoop(); + } else if (reuse_renderer_processes_enabled) { + node_bindings_->PrepareMessageLoop(); } // Setup node tracing controller. @@ -129,7 +129,7 @@ void ElectronRendererClient::DidCreateScriptContext( // If we have disabled the site instance overrides we should prevent loading // any non-context aware native module - if (command_line->HasSwitch(switches::kDisableElectronSiteInstanceOverrides)) + if (reuse_renderer_processes_enabled) env->set_force_context_aware(true); env->set_warn_context_aware(true); diff --git a/spec-main/api-browser-window-spec.ts b/spec-main/api-browser-window-spec.ts index b4921d147e..741b51a6a4 100644 --- a/spec-main/api-browser-window-spec.ts +++ b/spec-main/api-browser-window-spec.ts @@ -4286,6 +4286,30 @@ describe('BrowserWindow module', () => { }); }); + describe('reloading with allowRendererProcessReuse enabled', () => { + it('does not cause Node.js module API hangs after reload', (done) => { + const w = new BrowserWindow({ + show: false, + webPreferences: { + nodeIntegration: true + } + }); + + let count = 0; + ipcMain.on('async-node-api-done', () => { + if (count === 3) { + ipcMain.removeAllListeners('async-node-api-done'); + done(); + } else { + count++; + w.reload(); + } + }); + + w.loadFile(path.join(fixtures, 'pages', 'send-after-node.html')); + }); + }); + describe('window.webContents.focus()', () => { afterEach(closeAllWindows); it('focuses window', async () => {