#ifndef CHROME_BROWSER_UI_WEBUI_METRICS_INTERNALS_METRICS_INTERNALS_HANDLER_H_
#define CHROME_BROWSER_UI_WEBUI_METRICS_INTERNALS_METRICS_INTERNALS_HANDLER_H_
#include <memory>
#include "base/callback_list.h"
#include "base/memory/weak_ptr.h"
#include "base/scoped_observation.h"
#include "components/metrics/dwa/dwa_service.h"
#include "components/metrics/metrics_service_observer.h"
#include "components/variations/variations_seed_store.h"
#include "content/public/browser/web_ui_message_handler.h"
#include "third_party/federated_compute/src/fcp/confidentialcompute/cose.h"
class MetricsInternalsHandler : public content::WebUIMessageHandler,
public metrics::dwa::DwaService::Observer {
public:
MetricsInternalsHandler();
MetricsInternalsHandler(const MetricsInternalsHandler&) = delete;
MetricsInternalsHandler& operator=(const MetricsInternalsHandler&) = delete;
~MetricsInternalsHandler() override;
void OnJavascriptAllowed() override;
void OnJavascriptDisallowed() override;
void RegisterMessages() override;
private:
bool ShouldUseMetricsServiceObserver();
metrics::MetricsServiceObserver* GetUmaObserver();
void HandleFetchVariationsSummary(const base::Value::List& args);
void HandleFetchStoredSeedInfo(
variations::VariationsSeedStore::SeedType seed_type,
const base::Value::List& args);
void HandleFetchUmaSummary(const base::Value::List& args);
void HandleFetchUmaLogsData(const base::Value::List& args);
void HandleFetchEncryptionPublicKey(const base::Value::List& args);
void HandleIsUsingMetricsServiceObserver(const base::Value::List& args);
void OnUmaLogCreatedOrEvent();
void OnEncryptionPublicKeyChanged(
const fcp::confidential_compute::OkpCwt& decoded_public_key) override;
std::unique_ptr<metrics::MetricsServiceObserver> uma_log_observer_;
base::CallbackListSubscription uma_log_notified_subscription_;
base::ScopedObservation<metrics::dwa::DwaService,
metrics::dwa::DwaService::Observer>
dwa_service_observation_{this};
base::WeakPtrFactory<MetricsInternalsHandler> weak_ptr_factory_{this};
};
#endif