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 105 106 107 108 109 110 111 112
|
// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/ui/webui/password_manager/promo_card.h"
#include "base/functional/bind.h"
#include "base/json/values_util.h"
#include "base/memory/weak_ptr.h"
#include "base/metrics/histogram_functions.h"
#include "base/notreached.h"
#include "build/build_config.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/sync/sync_service_factory.h"
#include "chrome/browser/user_education/user_education_service.h"
#include "chrome/browser/user_education/user_education_service_factory.h"
#include "chrome/browser/web_applications/web_app_helpers.h"
#include "chrome/common/webui_url_constants.h"
#include "chrome/grit/branded_strings.h"
#include "chrome/grit/generated_resources.h"
#include "components/password_manager/core/browser/password_manager_constants.h"
#include "components/password_manager/core/browser/password_sync_util.h"
#include "components/password_manager/core/common/password_manager_pref_names.h"
#include "components/prefs/scoped_user_pref_update.h"
#include "components/sync/service/sync_service.h"
#include "ui/base/l10n/l10n_util.h"
namespace password_manager {
namespace {
constexpr char kIdKey[] = "id";
constexpr char kLastTimeShownKey[] = "last_time_shown";
constexpr char kNumberOfTimesShownKey[] = "number_of_times_shown";
constexpr char kWasDismissedKey[] = "was_dismissed";
// Creates new pref entry for the promo card with a given id.
base::Value::Dict CreatePromoCardPrefEntry(const std::string& id) {
base::Value::Dict promo_card_pref_entry;
promo_card_pref_entry.Set(kIdKey, id);
promo_card_pref_entry.Set(kLastTimeShownKey, base::TimeToValue(base::Time()));
promo_card_pref_entry.Set(kNumberOfTimesShownKey, 0);
promo_card_pref_entry.Set(kWasDismissedKey, false);
return promo_card_pref_entry;
}
} // namespace
// static
PasswordPromoCardBase::PasswordPromoCardBase(const std::string& id,
PrefService* prefs)
: prefs_(prefs) {
const base::Value::List& promo_card_prefs =
prefs_->GetList(prefs::kPasswordManagerPromoCardsList);
for (const auto& promo_card_pref : promo_card_prefs) {
auto* promo_id = promo_card_pref.GetDict().FindString(kIdKey);
if (promo_id == nullptr || *promo_id != id) {
continue;
}
number_of_times_shown_ =
*promo_card_pref.GetDict().FindInt(kNumberOfTimesShownKey);
last_time_shown_ =
base::ValueToTime(promo_card_pref.GetDict().Find(kLastTimeShownKey))
.value();
was_dismissed_ = *promo_card_pref.GetDict().FindBool(kWasDismissedKey);
return;
}
// If there is no pref with matching ID, create one.
ScopedListPrefUpdate update(prefs_, prefs::kPasswordManagerPromoCardsList);
update.Get().Append(CreatePromoCardPrefEntry(id));
}
PasswordPromoCardBase::~PasswordPromoCardBase() = default;
std::u16string PasswordPromoCardBase::GetActionButtonText() const {
return std::u16string();
}
void PasswordPromoCardBase::OnPromoCardDismissed() {
was_dismissed_ = true;
ScopedListPrefUpdate update(prefs_, prefs::kPasswordManagerPromoCardsList);
for (auto& promo_card_pref : update.Get()) {
if (*promo_card_pref.GetDict().FindString(kIdKey) == GetPromoID()) {
promo_card_pref.GetDict().Set(kWasDismissedKey, true);
break;
}
}
}
void PasswordPromoCardBase::OnPromoCardShown() {
number_of_times_shown_++;
last_time_shown_ = base::Time::Now();
ScopedListPrefUpdate update(prefs_, prefs::kPasswordManagerPromoCardsList);
for (auto& promo_card_pref : update.Get()) {
if (*promo_card_pref.GetDict().FindString(kIdKey) == GetPromoID()) {
promo_card_pref.GetDict().Set(kNumberOfTimesShownKey,
number_of_times_shown_);
promo_card_pref.GetDict().Set(kLastTimeShownKey,
base::TimeToValue(last_time_shown_));
break;
}
}
base::UmaHistogramEnumeration("PasswordManager.PromoCard.Shown",
GetPromoCardType());
}
} // namespace password_manager
|