#ifndef CHROME_BROWSER_UI_HATS_SURVEY_CONFIG_H_
#define CHROME_BROWSER_UI_HATS_SURVEY_CONFIG_H_
#include <optional>
#include <string>
#include <vector>
#include "base/feature_list.h"
#include "base/time/time.h"
#include "build/branding_buildflags.h"
#include "components/compose/buildflags.h"
#include "pdf/buildflags.h"
#if !BUILDFLAG(IS_ANDROID)
extern const char kHatsSurveyTriggerAutofillAddress[];
extern const char kHatsSurveyTriggerAutofillAddressUserPerception[];
extern const char kHatsSurveyTriggerAutofillAiFilling[];
extern const char kHatsSurveyTriggerAutofillAiSavePrompt[];
extern const char kHatsSurveyTriggerAutofillAddressUserDeclinedSuggestion[];
extern const char kHatsSurveyTriggerAutofillAddressUserDeclinedSave[];
extern const char kHatsSurveyTriggerAutofillCreditCardUserPerception[];
extern const char kHatsSurveyTriggerAutofillPasswordUserPerception[];
extern const char kHatsSurveyTriggerAutofillCard[];
extern const char kHatsSurveyTriggerAutofillPassword[];
extern const char kHatsSurveyTriggerDownloadWarningBubbleBypass[];
extern const char kHatsSurveyTriggerDownloadWarningBubbleHeed[];
extern const char kHatsSurveyTriggerDownloadWarningBubbleIgnore[];
extern const char kHatsSurveyTriggerDownloadWarningPageBypass[];
extern const char kHatsSurveyTriggerDownloadWarningPageHeed[];
extern const char kHatsSurveyTriggerDownloadWarningPageIgnore[];
extern const char kHatsSurveyTriggerHistoryEmbeddings[];
extern const char kHatsSurveyTriggerIdentityAddressBubbleSignin[];
extern const char kHatsSurveyTriggerIdentityDiceWebSigninAccepted[];
extern const char kHatsSurveyTriggerIdentityDiceWebSigninDeclined[];
extern const char kHatsSurveyTriggerIdentityFirstRunSignin[];
extern const char kHatsSurveyTriggerIdentityPasswordBubbleSignin[];
extern const char kHatsSurveyTriggerIdentityProfileMenuDismissed[];
extern const char kHatsSurveyTriggerIdentityProfileMenuSignin[];
extern const char kHatsSurveyTriggerIdentityProfilePickerAddProfileSignin[];
extern const char kHatsSurveyTriggerIdentitySigninInterceptProfileSeparation[];
extern const char kHatsSurveyTriggerIdentitySigninPromoBubbleDismissed[];
extern const char kHatsSurveyTriggerIdentitySwitchProfileFromProfileMenu[];
extern const char kHatsSurveyTriggerIdentitySwitchProfileFromProfilePicker[];
extern const char kHatsSurveyTriggerLensOverlayResults[];
extern const char kHatsSurveyTriggerNtpModules[];
extern const char kHatsSurveyTriggerNextPanel[];
extern const char kHatsSurveyTriggerNtpPhotosModuleOptOut[];
extern const char kHatsSurveyTriggerPasswordChangeCanceled[];
extern const char kHatsSurveyTriggerPasswordChangeDelayed[];
extern const char kHatsSurveyTriggerPasswordChangeError[];
extern const char kHatsSurveyTriggerPasswordChangeSuccess[];
extern const char kHatsSurveyTriggerPerformanceControlsPPM[];
extern const char kHatsSurveyTriggerPrivacyGuide[];
extern const char kHatsSurveyTriggerRedWarning[];
extern const char kHatsSurveyTriggerSafetyHubOneOffExperimentControl[];
extern const char kHatsSurveyTriggerSafetyHubOneOffExperimentNotification[];
extern const char kHatsSurveyTriggerSafetyHubOneOffExperimentInteraction[];
extern const char kHatsSurveyTriggerSettings[];
extern const char kHatsSurveyTriggerSettingsPrivacy[];
extern const char kHatsSurveyTriggerSettingsSecurity[];
extern const char kHatsSurveyTriggerTrustSafetyPrivacySettings[];
extern const char kHatsSurveyTriggerTrustSafetyTrustedSurface[];
extern const char kHatsSurveyTriggerTrustSafetyTransactions[];
extern const char kHatsSurveyTriggerTrustSafetyV2BrowsingData[];
extern const char kHatsSurveyTriggerTrustSafetyV2ControlGroup[];
extern const char kHatsSurveyTriggerTrustSafetyV2DownloadWarningUI[];
extern const char kHatsSurveyTriggerTrustSafetyV2PasswordCheck[];
extern const char kHatsSurveyTriggerTrustSafetyV2PasswordProtectionUI[];
extern const char kHatsSurveyTriggerTrustSafetyV2SafetyCheck[];
extern const char kHatsSurveyTriggerTrustSafetyV2SafetyHubNotification[];
extern const char kHatsSurveyTriggerTrustSafetyV2SafetyHubInteraction[];
extern const char kHatsSurveyTriggerTrustSafetyV2TrustedSurface[];
extern const char kHatsSurveyTriggerTrustSafetyV2PrivacyGuide[];
extern const char kHatsSurveyTriggerTrustSafetyV2SafeBrowsingInterstitial[];
extern const char kHatsSurveyTriggerWallpaperSearch[];
#if BUILDFLAG(ENABLE_COMPOSE)
extern const char kHatsSurveyTriggerComposeAcceptance[];
extern const char kHatsSurveyTriggerComposeClose[];
extern const char kHatsSurveyTriggerComposeNudgeClose[];
#endif
extern const char kHatsSurveyTriggerWhatsNew[];
#else
extern const char kHatsSurveyTriggerAndroidStartupSurvey[];
extern const char kHatsSurveyTriggerSigninFirstRun[];
extern const char kHatsSurveyTriggerSigninWeb[];
extern const char kHatsSurveyTriggerSigninNtpAvatar[];
extern const char kHatsSurveyTriggerSigninNtpPromo[];
extern const char kHatsSurveyTriggerSigninBookmarkPromo[];
#endif
extern const char kHatsSurveyTriggerPermissionsPrompt[];
extern const char kHatsSurveyTriggerPlusAddressAcceptedFirstTimeCreate[];
extern const char kHatsSurveyTriggerPlusAddressCreatedMultiplePlusAddresses[];
extern const char
kHatsSurveyTriggerPlusAddressCreatedPlusAddressViaManualFallback[];
extern const char kHatsSurveyTriggerPlusAddressDeclinedFirstTimeCreate[];
extern const char
kHatsSurveyTriggerPlusAddressDidChooseEmailOverPlusAddressSurvey[];
extern const char
kHatsSurveyTriggerPlusAddressDidChoosePlusAddressOverEmailSurvey[];
extern const char
kHatsSurveyTriggerPlusAddressFilledPlusAddressViaManualFallback[];
extern const char kHatsSurveyTriggerPrivacySandboxSentimentSurvey[];
extern const char kHatsSurveyTriggerPrivacySandboxActSurvey[];
extern const char kHatsSurveyTriggerMerchantTrustEvaluationControlSurvey[];
extern const char kHatsSurveyTriggerMerchantTrustEvaluationExperimentSurvey[];
extern const char kHatsSurveyTriggerMerchantTrustLearnSurvey[];
extern const char kHatsSurveyTriggerOnFocusZpsSuggestionsHappiness[];
extern const char kHatsSurveyTriggerOnFocusZpsSuggestionsUtility[];
#if BUILDFLAG(ENABLE_PDF_SAVE_TO_DRIVE)
extern const char kHatsSurveyConsumerTriggerPdfSaveToDrive[];
extern const char kHatsSurveyEnterpriseTriggerPdfSaveToDrive[];
#endif
extern const char kHatsSurveyTriggerTesting[];
extern const char kHatsNextSurveyTriggerIDTesting[];
class Profile;
namespace hats {
struct SurveyConfig {
enum RequestedBrowserType {
kRegular = 0,
kIncognito = 1,
};
SurveyConfig(
const base::Feature* feature,
const std::string& trigger,
const std::optional<std::string>& presupplied_trigger_id = std::nullopt,
const std::vector<std::string>& product_specific_bits_data_fields = {},
const std::vector<std::string>& product_specific_string_data_fields = {},
bool log_responses_to_uma = false,
bool log_responses_to_ukm = false,
RequestedBrowserType requested_browser_type =
RequestedBrowserType::kRegular);
SurveyConfig();
SurveyConfig(const SurveyConfig&);
~SurveyConfig();
bool enabled = false;
double probability = 0.0f;
std::string trigger;
std::string trigger_id;
std::optional<std::string> hats_histogram_name;
std::optional<uint64_t> hats_survey_ukm_id;
bool user_prompted = false;
std::vector<std::string> product_specific_bits_data_fields;
std::vector<std::string> product_specific_string_data_fields;
RequestedBrowserType requested_browser_type = RequestedBrowserType::kRegular;
raw_ptr<const base::Feature> survey_feature;
static std::optional<std::string> ValidateHatsHistogramName(
const std::optional<std::string>& hats_histogram_name);
static std::optional<uint64_t> ValidateHatsSurveyUkmId(
const std::optional<uint64_t> hats_survey_ukm_id);
void SetCooldownPeriodOverride(
const base::TimeDelta& cooldown_period_override);
std::optional<base::TimeDelta> GetCooldownPeriodOverride(
Profile* profile) const;
bool IsCooldownOverrideEnabled(Profile* profile) const;
private:
std::optional<base::TimeDelta> cooldown_period_override_;
};
using SurveyConfigs = base::flat_map<std::string, SurveyConfig>;
void GetActiveSurveyConfigs(SurveyConfigs& survey_configs_by_triggers_);
}
#endif