File: ntp_promo_specification.h

package info (click to toggle)
chromium 139.0.7258.127-1
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 6,122,068 kB
  • sloc: cpp: 35,100,771; ansic: 7,163,530; javascript: 4,103,002; python: 1,436,920; asm: 946,517; xml: 746,709; pascal: 187,653; perl: 88,691; sh: 88,436; objc: 79,953; sql: 51,488; cs: 44,583; fortran: 24,137; makefile: 22,147; tcl: 15,277; php: 13,980; yacc: 8,984; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (104 lines) | stat: -rw-r--r-- 3,588 bytes parent folder | download | duplicates (3)
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_