fix: dangling raw_ptr<Session> in UserDataLink (#42852)
* fix: dangling raw_ptr<Session> in UserDataLink Co-authored-by: Charles Kerr <charles@charleskerr.com> * fixup! fix: dangling raw_ptr<Session> in UserDataLink Co-authored-by: Charles Kerr <charles@charleskerr.com> --------- Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com> Co-authored-by: Charles Kerr <charles@charleskerr.com>
This commit is contained in:
		
					parent
					
						
							
								217e740791
							
						
					
				
			
			
				commit
				
					
						e768a1f228
					
				
			
		
					 2 changed files with 11 additions and 6 deletions
				
			
		| 
						 | 
				
			
			@ -530,9 +530,10 @@ class DictionaryObserver final : public SpellcheckCustomDictionary::Observer {
 | 
			
		|||
#endif  // BUILDFLAG(ENABLE_BUILTIN_SPELLCHECKER)
 | 
			
		||||
 | 
			
		||||
struct UserDataLink : base::SupportsUserData::Data {
 | 
			
		||||
  explicit UserDataLink(Session* ses) : session(ses) {}
 | 
			
		||||
  explicit UserDataLink(base::WeakPtr<Session> session_in)
 | 
			
		||||
      : session{std::move(session_in)} {}
 | 
			
		||||
 | 
			
		||||
  raw_ptr<Session> session;
 | 
			
		||||
  base::WeakPtr<Session> session;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const void* kElectronApiSessionKey = &kElectronApiSessionKey;
 | 
			
		||||
| 
						 | 
				
			
			@ -552,8 +553,9 @@ Session::Session(v8::Isolate* isolate, ElectronBrowserContext* browser_context)
 | 
			
		|||
 | 
			
		||||
  protocol_.Reset(isolate, Protocol::Create(isolate, browser_context).ToV8());
 | 
			
		||||
 | 
			
		||||
  browser_context->SetUserData(kElectronApiSessionKey,
 | 
			
		||||
                               std::make_unique<UserDataLink>(this));
 | 
			
		||||
  browser_context->SetUserData(
 | 
			
		||||
      kElectronApiSessionKey,
 | 
			
		||||
      std::make_unique<UserDataLink>(weak_factory_.GetWeakPtr()));
 | 
			
		||||
 | 
			
		||||
#if BUILDFLAG(ENABLE_BUILTIN_SPELLCHECKER)
 | 
			
		||||
  SpellcheckService* service =
 | 
			
		||||
| 
						 | 
				
			
			@ -1512,7 +1514,7 @@ bool Session::IsSpellCheckerEnabled() const {
 | 
			
		|||
Session* Session::FromBrowserContext(content::BrowserContext* context) {
 | 
			
		||||
  auto* data =
 | 
			
		||||
      static_cast<UserDataLink*>(context->GetUserData(kElectronApiSessionKey));
 | 
			
		||||
  return data ? data->session : nullptr;
 | 
			
		||||
  return data ? data->session.get() : nullptr;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// static
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -10,6 +10,7 @@
 | 
			
		|||
#include <vector>
 | 
			
		||||
 | 
			
		||||
#include "base/memory/raw_ptr.h"
 | 
			
		||||
#include "base/memory/weak_ptr.h"
 | 
			
		||||
#include "base/values.h"
 | 
			
		||||
#include "content/public/browser/download_manager.h"
 | 
			
		||||
#include "electron/buildflags/buildflags.h"
 | 
			
		||||
| 
						 | 
				
			
			@ -215,7 +216,9 @@ class Session : public gin::Wrappable<Session>,
 | 
			
		|||
  // The client id to enable the network throttler.
 | 
			
		||||
  base::UnguessableToken network_emulation_token_;
 | 
			
		||||
 | 
			
		||||
  raw_ptr<ElectronBrowserContext> browser_context_;
 | 
			
		||||
  const raw_ptr<ElectronBrowserContext> browser_context_;
 | 
			
		||||
 | 
			
		||||
  base::WeakPtrFactory<Session> weak_factory_{this};
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
}  // namespace api
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue