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
|
// Copyright 2021 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/user_education/user_education_service.h"
#include <memory>
#include "base/check.h"
#include "base/feature_list.h"
#include "chrome/browser/feature_engagement/tracker_factory.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/user_education/recent_session_tracker.h"
#include "chrome/browser/user_education/user_education_service_factory.h"
#include "components/feature_engagement/public/tracker.h"
#include "components/user_education/common/feature_promo/feature_promo_registry.h"
#include "components/user_education/common/feature_promo/feature_promo_session_policy.h"
#include "components/user_education/common/new_badge/new_badge_controller.h"
#include "components/user_education/common/new_badge/new_badge_policy.h"
#include "components/user_education/common/user_education_features.h"
#include "components/user_education/common/user_education_storage_service.h"
BASE_FEATURE(kAllowRecentSessionTracking,
"AllowRecentSessionTracking",
base::FEATURE_ENABLED_BY_DEFAULT);
UserEducationService::UserEducationService(
std::unique_ptr<BrowserUserEducationStorageService> storage_service,
bool allows_promos)
: tutorial_service_(&tutorial_registry_, &help_bubble_factory_registry_),
user_education_storage_service_(std::move(storage_service)),
feature_promo_session_policy_(
std::make_unique<user_education::FeaturePromoSessionPolicyV2>()) {
feature_promo_session_policy_->Init(&user_education_session_manager_,
user_education_storage_service_.get());
product_messaging_controller_.Init(user_education_session_manager_,
*user_education_storage_service_);
if (allows_promos) {
new_badge_registry_ = std::make_unique<user_education::NewBadgeRegistry>();
new_badge_controller_ =
std::make_unique<user_education::NewBadgeController>(
*new_badge_registry_, *user_education_storage_service_,
std::make_unique<user_education::NewBadgePolicy>());
}
if (base::FeatureList::IsEnabled(kAllowRecentSessionTracking)) {
// Only create the recent session tracker if recent session tracking is
// allowed (default).
recent_session_tracker_ = std::make_unique<RecentSessionTracker>(
user_education_session_manager_, *user_education_storage_service_,
*user_education_storage_service_);
} else {
// If the feature is disabled, ensure that we clear any old data.
user_education_storage_service_->ResetRecentSessionData();
}
}
// static
user_education::DisplayNewBadge UserEducationService::MaybeShowNewBadge(
content::BrowserContext* context,
const base::Feature& feature) {
auto* const service =
UserEducationServiceFactory::GetForBrowserContext(context);
if (!service || !service->new_badge_controller()) {
return user_education::DisplayNewBadge();
}
// For some tests, browser initialization is never done so there are no
// registered "New" Badges.
if (!service->new_badge_registry()->IsFeatureRegistered(
user_education::features::kNewBadgeTestFeature)) {
// Verify that this is actually a testing situation, and then fail.
CHECK(Profile::FromBrowserContext(context)->AsTestingProfile());
return user_education::DisplayNewBadge();
}
return service->new_badge_controller()->MaybeShowNewBadge(feature);
}
// static
void UserEducationService::MaybeNotifyNewBadgeFeatureUsed(
content::BrowserContext* context,
const base::Feature& feature) {
// Do not register events for disabled features.
if (!base::FeatureList::IsEnabled(feature)) {
return;
}
// Do not register events for profiles incompatible with user education.
auto* const service =
UserEducationServiceFactory::GetForBrowserContext(context);
if (!service || !service->new_badge_controller()) {
return;
}
// Notify the "New" Badge controller.
service->new_badge_controller()->NotifyFeatureUsedIfValid(feature);
}
UserEducationService::~UserEducationService() = default;
|