blob: 6556bfd3bf0a8785d9af8d84653ee6d2a421c336 [file] [log] [blame]
// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_PERMISSIONS_PERMISSION_HATS_TRIGGER_HELPER_H_
#define COMPONENTS_PERMISSIONS_PERMISSION_HATS_TRIGGER_HELPER_H_
#include <map>
#include <utility>
#include "components/keyed_service/core/keyed_service.h"
#include "components/permissions/permission_util.h"
#include "constants.h"
namespace permissions {
constexpr char kTrueStr[] = "true";
constexpr char kFalseStr[] = "false";
constexpr char kOnPromptAppearing[] = "OnPromptAppearing";
constexpr char kOnPromptResolved[] = "OnPromptResolved";
// A static class that handles permission HaTS survey trigger configuration and
// evaluation.
class PermissionHatsTriggerHelper {
// Key-value mapping type for a HaTS survey's product specific bits data.
typedef std::map<std::string, bool> SurveyBitsData;
// Key-value mapping type for HaTS survey's product specific string data.
typedef std::map<std::string, std::string> SurveyStringData;
public:
struct PromptParametersForHaTS {
PromptParametersForHaTS(
permissions::RequestType request_type,
absl::optional<permissions::PermissionAction> action,
permissions::PermissionPromptDisposition prompt_disposition,
permissions::PermissionPromptDispositionReason
prompt_disposition_reason,
permissions::PermissionRequestGestureType gesture_type,
std::string channel,
std::string survey_display_time,
absl::optional<base::TimeDelta> prompt_display_duration);
PromptParametersForHaTS(const PromptParametersForHaTS& other);
~PromptParametersForHaTS();
permissions::RequestType request_type;
absl::optional<permissions::PermissionAction> action;
permissions::PermissionPromptDisposition prompt_disposition;
permissions::PermissionPromptDispositionReason prompt_disposition_reason;
permissions::PermissionRequestGestureType gesture_type;
std::string channel;
std::string survey_display_time;
absl::optional<base::TimeDelta> prompt_display_duration;
};
struct SurveyProductSpecificData {
public:
~SurveyProductSpecificData();
static SurveyProductSpecificData PopulateFrom(
PromptParametersForHaTS prompt_parameters);
const SurveyBitsData survey_bits_data;
const SurveyStringData survey_string_data;
private:
explicit SurveyProductSpecificData(SurveyBitsData survey_bits_data,
SurveyStringData survey_string_data);
};
~PermissionHatsTriggerHelper() = delete;
PermissionHatsTriggerHelper(const PermissionHatsTriggerHelper&) = delete;
PermissionHatsTriggerHelper& operator=(const PermissionHatsTriggerHelper&) =
delete;
static bool ArePromptTriggerCriteriaSatisfied(
PromptParametersForHaTS prompt_parameters);
};
} // namespace permissions
#endif // COMPONENTS_PERMISSIONS_PERMISSION_HATS_TRIGGER_HELPER_H_