From 95f991747eff9b3003ecdaef4ae0aa71ed646cdc Mon Sep 17 00:00:00 2001 From: Netzenbot Date: Sun, 1 Mar 2026 13:11:02 -0500 Subject: [PATCH] Fix leaked raw_ptr/raw_ref in BraveOriginService (#34275) Override KeyedService::Shutdown() to clean up raw_ptr members and invalidate weak pointers before the service is destroyed. Without this, the defaulted destructor detects dangling raw_ptr references to PrefService and PolicyService objects that are already freed during the profile teardown sequence. Resolves https://github.com/brave/brave-browser/issues/52757 --- components/brave_origin/brave_origin_service.cc | 9 +++++++++ components/brave_origin/brave_origin_service.h | 3 +++ 2 files changed, 12 insertions(+) diff --git a/components/brave_origin/brave_origin_service.cc b/components/brave_origin/brave_origin_service.cc index aaeb43638f1..7142d0b4c5b 100644 --- a/components/brave_origin/brave_origin_service.cc +++ b/components/brave_origin/brave_origin_service.cc @@ -73,6 +73,15 @@ BraveOriginService::BraveOriginService( BraveOriginService::~BraveOriginService() = default; +void BraveOriginService::Shutdown() { + weak_ptr_factory_.InvalidateWeakPtrs(); + skus_service_.reset(); + local_state_ = nullptr; + profile_prefs_ = nullptr; + profile_policy_service_ = nullptr; + browser_policy_service_ = nullptr; +} + bool BraveOriginService::IsPolicyControlledByBraveOrigin( std::string_view policy_key) const { if (!IsBraveOriginEnabled()) { diff --git a/components/brave_origin/brave_origin_service.h b/components/brave_origin/brave_origin_service.h index f98ac0e22f0..05f224a8d41 100644 --- a/components/brave_origin/brave_origin_service.h +++ b/components/brave_origin/brave_origin_service.h @@ -44,6 +44,9 @@ class BraveOriginService : public KeyedService { SkusServiceGetter skus_service_getter); ~BraveOriginService() override; + // KeyedService: + void Shutdown() override; + // Check if a policy is controlled by BraveOrigin bool IsPolicyControlledByBraveOrigin(std::string_view policy_key) const;