From 1bfd3e0631a00a4940d7ce89bebb515ad7e519ca Mon Sep 17 00:00:00 2001 From: Shelley Vohr Date: Thu, 14 Mar 2024 09:50:52 +0100 Subject: [PATCH] fix: account for potentially swapped `FrameTreeNodeId` in `WebFrameMain` (#41538) fix: account for potentially swapped FrameTreeNodeId in WebFrameMain Co-authored-by: John Kleinschmidt --- .../api/electron_api_web_frame_main.cc | 25 ++++++++++++++----- 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/shell/browser/api/electron_api_web_frame_main.cc b/shell/browser/api/electron_api_web_frame_main.cc index da0e9ca50c60..b6f49a68ab89 100644 --- a/shell/browser/api/electron_api_web_frame_main.cc +++ b/shell/browser/api/electron_api_web_frame_main.cc @@ -72,7 +72,17 @@ WebFrameMain* WebFrameMain::FromFrameTreeNodeId(int frame_tree_node_id) { // static WebFrameMain* WebFrameMain::FromRenderFrameHost(content::RenderFrameHost* rfh) { - return rfh ? FromFrameTreeNodeId(rfh->GetFrameTreeNodeId()) : nullptr; + if (!rfh) + return nullptr; + + // TODO(codebytere): remove after refactoring away from FrameTreeNodeId as map + // key. + auto* ftn = + static_cast(rfh)->frame_tree_node(); + if (!ftn) + return nullptr; + + return FromFrameTreeNodeId(rfh->GetFrameTreeNodeId()); } gin::WrapperInfo WebFrameMain::kWrapperInfo = {gin::kEmbedderNativeGin}; @@ -358,8 +368,9 @@ gin::Handle WebFrameMain::New(v8::Isolate* isolate) { // static gin::Handle WebFrameMain::From(v8::Isolate* isolate, content::RenderFrameHost* rfh) { - if (rfh == nullptr) + if (!rfh) return gin::Handle(); + auto* web_frame = FromRenderFrameHost(rfh); if (web_frame) return gin::CreateHandle(isolate, web_frame); @@ -376,12 +387,14 @@ gin::Handle WebFrameMain::From(v8::Isolate* isolate, gin::Handle WebFrameMain::FromOrNull( v8::Isolate* isolate, content::RenderFrameHost* rfh) { - if (rfh == nullptr) + if (!rfh) return gin::Handle(); + auto* web_frame = FromRenderFrameHost(rfh); - if (web_frame) - return gin::CreateHandle(isolate, web_frame); - return gin::Handle(); + if (!web_frame) + return gin::Handle(); + + return gin::CreateHandle(isolate, web_frame); } // static