chromium/chrome/browser/ash/policy/reporting/event_based_logs/event_based_log_manager.h

// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CHROME_BROWSER_ASH_POLICY_REPORTING_EVENT_BASED_LOGS_EVENT_BASED_LOG_MANAGER_H_
#define CHROME_BROWSER_ASH_POLICY_REPORTING_EVENT_BASED_LOGS_EVENT_BASED_LOG_MANAGER_H_

#include <map>
#include <memory>

#include "base/callback_list.h"
#include "base/memory/weak_ptr.h"
#include "base/sequence_checker.h"
#include "chrome/browser/ash/policy/reporting/event_based_logs/event_observer_base.h"
#include "chrome/browser/policy/messaging_layer/proto/synced/log_upload_event.pb.h"

namespace policy {

class EventBasedLogManager {
 public:
  EventBasedLogManager();

  EventBasedLogManager(const EventBasedLogManager&) = delete;
  EventBasedLogManager& operator=(const EventBasedLogManager&) = delete;

  ~EventBasedLogManager();

  // Subscribes to LogUploadEnabled policy changes. When the policy is enabled,
  // creates `event_observers_`. When policy is disabled, deletes all
  // EventObservers from `event_observers_` so we don't listen for events.
  // Individual `EventObserverBase` implementations are responsible for checking
  // any related policies specific to events they're observing.
  void OnLogUploadEnabledPolicyUpdated();

  const std::map<ash::reporting::TriggerEventType,
                 std::unique_ptr<EventObserverBase>>&
  GetEventObserversForTesting() const;

 private:
  // Initializes and adds all available event observers to `event_observers_`.
  void MaybeAddAllEventObservers();

  SEQUENCE_CHECKER(sequence_checker_);
  // List of event observers.
  std::map<ash::reporting::TriggerEventType, std::unique_ptr<EventObserverBase>>
      event_observers_;
  base::CallbackListSubscription log_upload_enabled_policy_subscription_;
  base::WeakPtrFactory<EventBasedLogManager> weak_ptr_factory_{this};
};

}  // namespace policy

#endif  // CHROME_BROWSER_ASH_POLICY_REPORTING_EVENT_BASED_LOGS_EVENT_BASED_LOG_MANAGER_H_