diff --git a/lib/browser/api/web-contents.ts b/lib/browser/api/web-contents.ts index b62ca2b9e2668..2b0017523b541 100644 --- a/lib/browser/api/web-contents.ts +++ b/lib/browser/api/web-contents.ts @@ -122,7 +122,12 @@ WebContents.prototype.postMessage = function (...args) { }; WebContents.prototype.send = function (channel, ...args) { - return this.mainFrame.send(channel, ...args); + // Catch unhandled rejections if webFrameMain is disposed/unavailable + try { + return this.mainFrame.send(channel, ...args); + } catch (e) { + console.error(e); + } }; WebContents.prototype._sendInternal = function (channel, ...args) { diff --git a/shell/browser/api/electron_api_web_frame_main.cc b/shell/browser/api/electron_api_web_frame_main.cc index d567a4cf09fe5..c5a5945ba0a2a 100644 --- a/shell/browser/api/electron_api_web_frame_main.cc +++ b/shell/browser/api/electron_api_web_frame_main.cc @@ -100,11 +100,7 @@ void WebFrameMain::MarkRenderFrameDisposed() { void WebFrameMain::UpdateRenderFrameHost(content::RenderFrameHost* rfh) { // Should only be called when swapping frames. - if (!render_frame_disposed_) { - DCHECK(render_frame_); - } else { - render_frame_disposed_ = false; - } + render_frame_disposed_ = false; render_frame_ = rfh; renderer_api_.reset(); } @@ -162,7 +158,7 @@ v8::Local WebFrameMain::ExecuteJavaScript( } bool WebFrameMain::Reload() { - if (render_frame_disposed_) + if (!CheckRenderFrame()) return false; return render_frame_->Reload(); } @@ -178,7 +174,7 @@ void WebFrameMain::Send(v8::Isolate* isolate, return; } - if (render_frame_disposed_) + if (!CheckRenderFrame()) return; GetRendererApi()->Message(internal, channel, std::move(message),