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)
|
#endif // BUILDFLAG(ENABLE_BUILTIN_SPELLCHECKER)
|
||||||
|
|
||||||
struct UserDataLink : base::SupportsUserData::Data {
|
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;
|
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());
|
protocol_.Reset(isolate, Protocol::Create(isolate, browser_context).ToV8());
|
||||||
|
|
||||||
browser_context->SetUserData(kElectronApiSessionKey,
|
browser_context->SetUserData(
|
||||||
std::make_unique<UserDataLink>(this));
|
kElectronApiSessionKey,
|
||||||
|
std::make_unique<UserDataLink>(weak_factory_.GetWeakPtr()));
|
||||||
|
|
||||||
#if BUILDFLAG(ENABLE_BUILTIN_SPELLCHECKER)
|
#if BUILDFLAG(ENABLE_BUILTIN_SPELLCHECKER)
|
||||||
SpellcheckService* service =
|
SpellcheckService* service =
|
||||||
|
@ -1512,7 +1514,7 @@ bool Session::IsSpellCheckerEnabled() const {
|
||||||
Session* Session::FromBrowserContext(content::BrowserContext* context) {
|
Session* Session::FromBrowserContext(content::BrowserContext* context) {
|
||||||
auto* data =
|
auto* data =
|
||||||
static_cast<UserDataLink*>(context->GetUserData(kElectronApiSessionKey));
|
static_cast<UserDataLink*>(context->GetUserData(kElectronApiSessionKey));
|
||||||
return data ? data->session : nullptr;
|
return data ? data->session.get() : nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
// static
|
// static
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include "base/memory/raw_ptr.h"
|
#include "base/memory/raw_ptr.h"
|
||||||
|
#include "base/memory/weak_ptr.h"
|
||||||
#include "base/values.h"
|
#include "base/values.h"
|
||||||
#include "content/public/browser/download_manager.h"
|
#include "content/public/browser/download_manager.h"
|
||||||
#include "electron/buildflags/buildflags.h"
|
#include "electron/buildflags/buildflags.h"
|
||||||
|
@ -215,7 +216,9 @@ class Session : public gin::Wrappable<Session>,
|
||||||
// The client id to enable the network throttler.
|
// The client id to enable the network throttler.
|
||||||
base::UnguessableToken network_emulation_token_;
|
base::UnguessableToken network_emulation_token_;
|
||||||
|
|
||||||
raw_ptr<ElectronBrowserContext> browser_context_;
|
const raw_ptr<ElectronBrowserContext> browser_context_;
|
||||||
|
|
||||||
|
base::WeakPtrFactory<Session> weak_factory_{this};
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace api
|
} // namespace api
|
||||||
|
|
Loading…
Reference in a new issue