Browse Source

fix: hold browser_context instead of render_frame_host to fix lifetime issues (#23375)

Co-authored-by: Paul Frazee <[email protected]>
trop[bot] 5 years ago
parent
commit
5414c8dd7e

+ 5 - 4
shell/browser/network_hints_handler_impl.cc

@@ -21,7 +21,7 @@ NetworkHintsHandlerImpl::NetworkHintsHandlerImpl(
     : network_hints::SimpleNetworkHintsHandlerImpl(
           frame_host->GetProcess()->GetID(),
           frame_host->GetRoutingID()),
-      render_frame_host_(frame_host) {}
+      browser_context_(frame_host->GetProcess()->GetBrowserContext()) {}
 
 NetworkHintsHandlerImpl::~NetworkHintsHandlerImpl() = default;
 
@@ -29,11 +29,12 @@ void NetworkHintsHandlerImpl::Preconnect(const GURL& url,
                                          bool allow_credentials) {
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
 
-  content::BrowserContext* browser_context =
-      render_frame_host_->GetProcess()->GetBrowserContext();
+  if (!browser_context_) {
+    return;
+  }
   auto* session = electron::api::Session::FromWrappedClass(
       v8::Isolate::GetCurrent(),
-      static_cast<electron::ElectronBrowserContext*>(browser_context));
+      static_cast<electron::ElectronBrowserContext*>(browser_context_));
   if (session) {
     session->Emit("preconnect", url, allow_credentials);
   }

+ 3 - 2
shell/browser/network_hints_handler_impl.h

@@ -9,7 +9,8 @@
 
 namespace content {
 class RenderFrameHost;
-}
+class BrowserContext;
+}  // namespace content
 
 class NetworkHintsHandlerImpl
     : public network_hints::SimpleNetworkHintsHandlerImpl {
@@ -27,7 +28,7 @@ class NetworkHintsHandlerImpl
  private:
   explicit NetworkHintsHandlerImpl(content::RenderFrameHost*);
 
-  content::RenderFrameHost* render_frame_host_ = nullptr;
+  content::BrowserContext* browser_context_ = nullptr;
 };
 
 #endif  // SHELL_BROWSER_NETWORK_HINTS_HANDLER_IMPL_H_