1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
|
// Copyright 2025 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_USER_EDUCATION_COMMON_NTP_PROMO_NTP_PROMO_SPECIFICATION_H_
#define COMPONENTS_USER_EDUCATION_COMMON_NTP_PROMO_NTP_PROMO_SPECIFICATION_H_
#include <optional>
#include <string>
#include <utility>
#include <variant>
#include <vector>
#include "base/functional/callback_forward.h"
#include "base/functional/callback_helpers.h"
#include "components/strings/grit/components_strings.h"
#include "components/user_education/common/ntp_promo/ntp_promo_identifier.h"
#include "components/user_education/common/user_education_metadata.h"
class Browser;
class Profile;
namespace user_education {
// Visual content of the promo, for consumption by the UI.
class NtpPromoContent {
public:
NtpPromoContent() = delete;
NtpPromoContent(const NtpPromoContent&);
NtpPromoContent(NtpPromoContent&&) noexcept;
~NtpPromoContent();
NtpPromoContent(std::string_view icon_name,
int body_text_string_id,
int action_button_text_string_id);
std::string_view icon_name() const { return icon_name_; }
int body_text_string_id() const { return body_text_string_id_; }
int action_button_text_string_id() const {
return action_button_text_string_id_;
}
private:
std::string icon_name_;
int body_text_string_id_;
int action_button_text_string_id_;
};
// Describes a promo displayed on the New Tab Page, including the visual
// properties and ties to the features being promoted.
class NtpPromoSpecification {
public:
// Eligibility status returned by an EligibilityCallback.
enum class Eligibility { kIneligible, kEligible, kCompleted };
// Receives the profile to be evaluated for eligibility.
using EligibilityCallback = base::RepeatingCallback<Eligibility(Profile*)>;
// Receives a browser in which the action can be taken, and an object
// to be held by the invoked flow until termination.
using ActionCallback = base::RepeatingCallback<void(Browser*)>;
NtpPromoSpecification() = delete;
NtpPromoSpecification(NtpPromoSpecification&&) noexcept;
~NtpPromoSpecification();
NtpPromoSpecification(NtpPromoIdentifier id,
NtpPromoContent content,
EligibilityCallback eligibility_callback,
ActionCallback action_callback,
base::flat_set<NtpPromoIdentifier> show_after,
user_education::Metadata);
const NtpPromoContent& content() const { return content_; }
EligibilityCallback eligibility_callback() const {
return eligibility_callback_;
}
ActionCallback action_callback() const { return action_callback_; }
const std::string& id() const { return id_; }
const base::flat_set<NtpPromoIdentifier>& show_after() const {
return show_after_;
}
private:
NtpPromoIdentifier id_;
// Visual content of the promo.
NtpPromoContent content_;
// Called to test the eligibility of the promo (ie. can it be shown or not).
EligibilityCallback eligibility_callback_;
// Called to invoke the promoted action flow.
ActionCallback action_callback_;
// The set of other promos that must be listed before the current promo,
// whenever promos are shown to the user.
base::flat_set<NtpPromoIdentifier> show_after_;
// Required in all User Education registries.
user_education::Metadata metadata_;
};
} // namespace user_education
#endif // COMPONENTS_USER_EDUCATION_COMMON_NTP_PROMO_NTP_PROMO_SPECIFICATION_H_
|