mirror of
https://github.com/electron/electron.git
synced 2026-04-10 03:01:51 -04:00
refactor: call methods directly from electron:WebContents
Writing static method boilerplate isn't fun
This commit is contained in:
@@ -1397,6 +1397,10 @@ void WebContents::HandleNewRenderFrame(
|
||||
void WebContents::RenderFrameCreated(
|
||||
content::RenderFrameHost* render_frame_host) {
|
||||
HandleNewRenderFrame(render_frame_host);
|
||||
|
||||
auto* web_frame = WebFrameMain::From(render_frame_host);
|
||||
if (web_frame)
|
||||
web_frame->Connect();
|
||||
}
|
||||
|
||||
void WebContents::RenderViewDeleted(content::RenderViewHost* render_view_host) {
|
||||
@@ -1643,7 +1647,9 @@ void WebContents::RenderFrameDeleted(
|
||||
content::RenderFrameHost* render_frame_host) {
|
||||
// A WebFrameMain can outlive its RenderFrameHost so we need to mark it as
|
||||
// disposed to prevent access to it.
|
||||
WebFrameMain::RenderFrameDeleted(render_frame_host);
|
||||
auto* web_frame = WebFrameMain::From(render_frame_host);
|
||||
if (web_frame)
|
||||
web_frame->MarkRenderFrameDisposed();
|
||||
}
|
||||
|
||||
void WebContents::DidStartNavigation(
|
||||
|
||||
@@ -61,7 +61,8 @@ typedef std::unordered_map<content::RenderFrameHost*, WebFrameMain*>
|
||||
base::LazyInstance<RenderFrameMap>::DestructorAtExit g_render_frame_map =
|
||||
LAZY_INSTANCE_INITIALIZER;
|
||||
|
||||
WebFrameMain* FromRenderFrameHost(content::RenderFrameHost* rfh) {
|
||||
// static
|
||||
WebFrameMain* WebFrameMain::From(content::RenderFrameHost* rfh) {
|
||||
auto frame_map = g_render_frame_map.Get();
|
||||
auto iter = frame_map.find(rfh);
|
||||
auto* web_frame = iter == frame_map.end() ? nullptr : iter->second;
|
||||
@@ -293,6 +294,13 @@ std::vector<content::RenderFrameHost*> WebFrameMain::FramesInSubtree() const {
|
||||
return frame_hosts;
|
||||
}
|
||||
|
||||
void WebFrameMain::Connect() {
|
||||
if (pending_receiver_) {
|
||||
render_frame_->GetRemoteInterfaces()->GetInterface(
|
||||
std::move(pending_receiver_));
|
||||
}
|
||||
}
|
||||
|
||||
// static
|
||||
gin::Handle<WebFrameMain> WebFrameMain::New(v8::Isolate* isolate) {
|
||||
return gin::Handle<WebFrameMain>();
|
||||
@@ -303,7 +311,7 @@ gin::Handle<WebFrameMain> WebFrameMain::From(v8::Isolate* isolate,
|
||||
content::RenderFrameHost* rfh) {
|
||||
if (rfh == nullptr)
|
||||
return gin::Handle<WebFrameMain>();
|
||||
auto* web_frame = FromRenderFrameHost(rfh);
|
||||
auto* web_frame = From(rfh);
|
||||
if (web_frame)
|
||||
return gin::CreateHandle(isolate, web_frame);
|
||||
|
||||
@@ -324,26 +332,6 @@ gin::Handle<WebFrameMain> WebFrameMain::FromID(v8::Isolate* isolate,
|
||||
return From(isolate, rfh);
|
||||
}
|
||||
|
||||
// static
|
||||
void WebFrameMain::RenderFrameDeleted(content::RenderFrameHost* rfh) {
|
||||
auto* web_frame = FromRenderFrameHost(rfh);
|
||||
if (web_frame)
|
||||
web_frame->MarkRenderFrameDisposed();
|
||||
}
|
||||
|
||||
void WebFrameMain::RenderFrameCreated(content::RenderFrameHost* rfh) {
|
||||
auto* web_frame = FromRenderFrameHost(rfh);
|
||||
if (web_frame)
|
||||
web_frame->Connect();
|
||||
}
|
||||
|
||||
void WebFrameMain::Connect() {
|
||||
if (pending_receiver_) {
|
||||
render_frame_->GetRemoteInterfaces()->GetInterface(
|
||||
std::move(pending_receiver_));
|
||||
}
|
||||
}
|
||||
|
||||
// static
|
||||
v8::Local<v8::ObjectTemplate> WebFrameMain::FillObjectTemplate(
|
||||
v8::Isolate* isolate,
|
||||
|
||||
@@ -31,6 +31,8 @@ namespace electron {
|
||||
|
||||
namespace api {
|
||||
|
||||
class WebContents;
|
||||
|
||||
// Bindings for accessing frames from the main process.
|
||||
class WebFrameMain : public gin::Wrappable<WebFrameMain>,
|
||||
public gin_helper::Pinnable<WebFrameMain>,
|
||||
@@ -45,17 +47,7 @@ class WebFrameMain : public gin::Wrappable<WebFrameMain>,
|
||||
static gin::Handle<WebFrameMain> From(
|
||||
v8::Isolate* isolate,
|
||||
content::RenderFrameHost* render_frame_host);
|
||||
|
||||
// Called to mark any RenderFrameHost as disposed by any WebFrameMain that
|
||||
// may be holding a weak reference.
|
||||
static void RenderFrameDeleted(content::RenderFrameHost* rfh);
|
||||
static void RenderFrameCreated(content::RenderFrameHost* rfh);
|
||||
|
||||
// Mark RenderFrameHost as disposed and to no longer access it. This can
|
||||
// occur upon frame navigation.
|
||||
void MarkRenderFrameDisposed();
|
||||
|
||||
const mojo::Remote<mojom::ElectronRenderer>& GetRendererApi();
|
||||
static WebFrameMain* From(content::RenderFrameHost* render_frame_host);
|
||||
|
||||
// gin::Wrappable
|
||||
static gin::WrapperInfo kWrapperInfo;
|
||||
@@ -69,6 +61,14 @@ class WebFrameMain : public gin::Wrappable<WebFrameMain>,
|
||||
~WebFrameMain() override;
|
||||
|
||||
private:
|
||||
friend class WebContents;
|
||||
|
||||
// Mark RenderFrameHost as disposed and to no longer access it. This can
|
||||
// occur upon frame navigation.
|
||||
void MarkRenderFrameDisposed();
|
||||
|
||||
const mojo::Remote<mojom::ElectronRenderer>& GetRendererApi();
|
||||
|
||||
// WebFrameMain can outlive its RenderFrameHost pointer so we need to check
|
||||
// whether its been disposed of prior to accessing it.
|
||||
bool CheckRenderFrame() const;
|
||||
|
||||
Reference in New Issue
Block a user