[ads][CodeHealth] Use absl::Cleanup to reset deferred ad viewed event handler (#35812)

After the deferred ad viewed event is triggered, the handler pointer must
always be reset to signal the deferred state is fully resolved. absl::Cleanup
guarantees the reset on all scope exit paths.
This commit is contained in:
Terry Mancey
2026-04-23 14:12:32 +01:00
committed by GitHub
parent f11dc341cd
commit f91e288563
@@ -20,6 +20,7 @@
#include "brave/components/brave_ads/core/internal/user_engagement/site_visit/site_visit.h"
#include "brave/components/brave_ads/core/mojom/brave_ads.mojom.h"
#include "brave/components/brave_ads/core/public/ads_callback.h"
#include "third_party/abseil-cpp/absl/cleanup/cleanup.h"
namespace brave_ads {
@@ -59,15 +60,21 @@ void SearchResultAdHandler::TriggerDeferredAdViewedEventForTesting() {
g_defer_triggering_of_ad_viewed_event_for_testing = false;
if (g_search_result_ad_handler_for_testing) {
g_search_result_ad_handler_for_testing
->is_processing_viewed_ad_event_queue_ = false;
g_search_result_ad_handler_for_testing->MaybeTriggerDeferredAdViewedEvent(
/*intentional*/ base::DoNothing());
absl::Cleanup cleanup = [] {
// `g_search_result_ad_handler_for_testing` was set in
// `FireAdViewedEventCallback` to defer the ad viewed event. Reset it when
// this scope exits now that the deferred event has been triggered.
g_search_result_ad_handler_for_testing = nullptr;
};
if (!g_search_result_ad_handler_for_testing) {
return;
}
g_search_result_ad_handler_for_testing->is_processing_viewed_ad_event_queue_ =
false;
g_search_result_ad_handler_for_testing->MaybeTriggerDeferredAdViewedEvent(
/*intentional*/ base::DoNothing());
}
void SearchResultAdHandler::TriggerEvent(