Skip to content

Commit

Permalink
refactor: always teardown mojo connection
Browse files Browse the repository at this point in the history
This should eliminate an entire class of potential errors from appearing in the future.
  • Loading branch information
samuelmaddock committed May 17, 2022
1 parent 886c278 commit bed2845
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 4 deletions.
13 changes: 9 additions & 4 deletions shell/browser/api/electron_api_web_frame_main.cc
Expand Up @@ -96,14 +96,14 @@ void WebFrameMain::Destroyed() {
void WebFrameMain::MarkRenderFrameDisposed() {
render_frame_ = nullptr;
render_frame_disposed_ = true;
TeardownMojoConnection();
}

void WebFrameMain::UpdateRenderFrameHost(content::RenderFrameHost* rfh) {
// Should only be called when swapping frames.
render_frame_disposed_ = false;
render_frame_ = rfh;
renderer_api_.reset();
pending_receiver_.reset();
TeardownMojoConnection();
MaybeSetupMojoConnection();
}

Expand Down Expand Up @@ -194,14 +194,19 @@ void WebFrameMain::MaybeSetupMojoConnection() {
&WebFrameMain::OnRendererConnectionError, weak_factory_.GetWeakPtr()));
}
// Wait for RenderFrame to be created in renderer before accessing remote.
if (pending_receiver_ && !render_frame_disposed_ && render_frame_->IsRenderFrameCreated()) {
if (pending_receiver_ && render_frame_->IsRenderFrameCreated()) {
render_frame_->GetRemoteInterfaces()->GetInterface(
std::move(pending_receiver_));
}
}

void WebFrameMain::OnRendererConnectionError() {
void WebFrameMain::TeardownMojoConnection() {
renderer_api_.reset();
pending_receiver_.reset();
}

void WebFrameMain::OnRendererConnectionError() {
TeardownMojoConnection();
}

void WebFrameMain::PostMessage(v8::Isolate* isolate,
Expand Down
1 change: 1 addition & 0 deletions shell/browser/api/electron_api_web_frame_main.h
Expand Up @@ -83,6 +83,7 @@ class WebFrameMain : public gin::Wrappable<WebFrameMain>,

const mojo::Remote<mojom::ElectronRenderer>& GetRendererApi();
void MaybeSetupMojoConnection();
void TeardownMojoConnection();
void OnRendererConnectionError();

// WebFrameMain can outlive its RenderFrameHost pointer so we need to check
Expand Down

0 comments on commit bed2845

Please sign in to comment.