fix: early GC of WebFrameMain instances (#27648)

This commit is contained in:
Samuel Maddock 2021-02-08 14:30:18 -05:00 committed by GitHub
parent bc7c290601
commit 1bbfa934f0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 13 additions and 2 deletions

View file

@ -57,6 +57,9 @@ WebFrameMain::~WebFrameMain() {
}
void WebFrameMain::MarkRenderFrameDisposed() {
if (render_frame_disposed_)
return;
Unpin();
g_render_frame_map.Get().erase(render_frame_);
render_frame_disposed_ = true;
}
@ -305,8 +308,14 @@ gin::Handle<WebFrameMain> WebFrameMain::From(v8::Isolate* isolate,
if (rfh == nullptr)
return gin::Handle<WebFrameMain>();
auto* web_frame = FromRenderFrameHost(rfh);
auto handle = gin::CreateHandle(
isolate, web_frame == nullptr ? new WebFrameMain(rfh) : web_frame);
if (web_frame)
return gin::CreateHandle(isolate, web_frame);
auto handle = gin::CreateHandle(isolate, new WebFrameMain(rfh));
// Prevent garbage collection of frame until it has been deleted internally.
handle->Pin(isolate);
return handle;
}

View file

@ -13,6 +13,7 @@
#include "gin/handle.h"
#include "gin/wrappable.h"
#include "shell/common/gin_helper/constructible.h"
#include "shell/common/gin_helper/pinnable.h"
class GURL;
@ -34,6 +35,7 @@ namespace api {
// Bindings for accessing frames from the main process.
class WebFrameMain : public gin::Wrappable<WebFrameMain>,
public gin_helper::Pinnable<WebFrameMain>,
public gin_helper::Constructible<WebFrameMain> {
public:
// Create a new WebFrameMain and return the V8 wrapper of it.