#ifndef CHROME_BROWSER_UI_WEBUI_PASSWORD_MANAGER_SYNC_HANDLER_H_
#define CHROME_BROWSER_UI_WEBUI_PASSWORD_MANAGER_SYNC_HANDLER_H_
#include "base/memory/raw_ptr.h"
#include "base/memory/weak_ptr.h"
#include "base/scoped_observation.h"
#include "base/values.h"
#include "components/signin/public/identity_manager/identity_manager.h"
#include "components/sync/service/sync_service.h"
#include "components/sync/service/sync_service_observer.h"
#include "content/public/browser/web_ui_message_handler.h"
class Profile;
namespace password_manager {
enum class TrustedVaultBannerState {
kNotShown = 0,
kOfferOptIn = 1,
kOptedIn = 2,
};
class SyncHandler : public content::WebUIMessageHandler,
public signin::IdentityManager::Observer,
public syncer::SyncServiceObserver {
public:
explicit SyncHandler(Profile* profile);
SyncHandler(const SyncHandler&) = delete;
SyncHandler& operator=(const SyncHandler&) = delete;
~SyncHandler() override;
private:
void RegisterMessages() override;
void OnJavascriptAllowed() override;
void OnJavascriptDisallowed() override;
base::Value GetTrustedVaultBannerState() const;
void HandleGetTrustedVaultBannerState(const base::Value::List& args);
base::Value::Dict GetSyncInfo() const;
void HandleGetSyncInfo(const base::Value::List& args);
base::Value::Dict GetAccountInfo() const;
void HandleGetAccountInfo(const base::Value::List& args);
#if BUILDFLAG(ENABLE_DICE_SUPPORT)
void HandleOpenBatchUploadDialog(const base::Value::List& args);
#endif
void HandleGetLocalPasswordCount(const base::Value::List& args);
void FireOnGetLocalDataDescriptionReceived(
std::map<syncer::DataType, syncer::LocalDataDescription> data);
void OnGetLocalDataDescriptionReceived(
base::Value callback_id,
std::map<syncer::DataType, syncer::LocalDataDescription> data);
void OnStateChanged(syncer::SyncService* sync_service) override;
void OnSyncShutdown(syncer::SyncService* sync_service) override;
void OnExtendedAccountInfoUpdated(const AccountInfo& info) override;
void OnExtendedAccountInfoRemoved(const AccountInfo& info) override;
syncer::SyncService* GetSyncService() const;
raw_ptr<Profile, DanglingUntriaged> profile_;
base::ScopedObservation<syncer::SyncService, syncer::SyncServiceObserver>
sync_service_observation_{this};
base::ScopedObservation<signin::IdentityManager,
signin::IdentityManager::Observer>
identity_manager_observation_{this};
base::WeakPtrFactory<SyncHandler> weak_ptr_factory_{this};
};
}
#endif