| // 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. |
| |
| #include "ios/chrome/browser/promos_manager/model/constants.h" |
| |
| #include <optional> |
| #include <string_view> |
| |
| #include "base/notreached.h" |
| #include "base/strings/strcat.h" |
| |
| namespace promos_manager { |
| |
| const char kImpressionPromoKey[] = "promo"; |
| const char kImpressionDayKey[] = "day"; |
| const char kImpressionFeatureEngagementMigrationCompletedKey[] = |
| "feature_engagement_migration_completed"; |
| |
| // WARNING - PLEASE READ: Sadly, we cannot switch over strings in C++, so be |
| // very careful when updating this method to ensure all enums are accounted for. |
| std::optional<Promo> PromoForName(std::string_view promo) { |
| if (promo == "promos_manager::Promo::Test") { |
| return promos_manager::Promo::Test; |
| } |
| |
| if (promo == "promos_manager::Promo::DefaultBrowser") { |
| return promos_manager::Promo::DefaultBrowser; |
| } |
| |
| if (promo == "promos_manager::Promo::AppStoreRating") { |
| return promos_manager::Promo::AppStoreRating; |
| } |
| |
| if (promo == "promos_manager::Promo::CredentialProviderExtension") { |
| return promos_manager::Promo::CredentialProviderExtension; |
| } |
| |
| if (promo == "promos_manager::Promo::PostRestoreSignInFullscreen") { |
| return promos_manager::Promo::PostRestoreSignInFullscreen; |
| } |
| |
| if (promo == "promos_manager::Promo::PostRestoreSignInAlert") { |
| return promos_manager::Promo::PostRestoreSignInAlert; |
| } |
| |
| if (promo == "promos_manager::Promo::WhatsNew") { |
| return promos_manager::Promo::WhatsNew; |
| } |
| |
| if (promo == "promos_manager::Promo::PostRestoreDefaultBrowserAlert") { |
| return promos_manager::Promo::PostRestoreDefaultBrowserAlert; |
| } |
| |
| if (promo == "promos_manager::Promo::DefaultBrowserRemindMeLater") { |
| return promos_manager::Promo::DefaultBrowserRemindMeLater; |
| } |
| |
| if (promo == "promos_manager::Promo::DockingPromo") { |
| return promos_manager::Promo::DockingPromo; |
| } |
| |
| if (promo == "promos_manager::Promo::DockingPromoRemindMeLater") { |
| return promos_manager::Promo::DockingPromoRemindMeLater; |
| } |
| |
| if (promo == "promos_manager::Promo::AllTabsDefaultBrowser") { |
| return promos_manager::Promo::AllTabsDefaultBrowser; |
| } |
| |
| if (promo == "promos_manager::Promo::MadeForIOSDefaultBrowser") { |
| return promos_manager::Promo::MadeForIOSDefaultBrowser; |
| } |
| |
| if (promo == "promos_manager::Promo::StaySafeDefaultBrowser") { |
| return promos_manager::Promo::StaySafeDefaultBrowser; |
| } |
| |
| if (promo == "promos_manager::Promo::PostDefaultAbandonment") { |
| return promos_manager::Promo::PostDefaultAbandonment; |
| } |
| |
| if (promo == "promos_manager::Promo::SigninFullscreen") { |
| return promos_manager::Promo::SigninFullscreen; |
| } |
| |
| if (promo == "promos_manager::Promo::WelcomeBack") { |
| return promos_manager::Promo::WelcomeBack; |
| } |
| |
| if (promo == "promos_manager::Promo::BWGPromo") { |
| return promos_manager::Promo::BWGPromo; |
| } |
| |
| if (promo == "promos_manager::Promo::SafariImportRemindMeLater") { |
| return promos_manager::Promo::SafariImportRemindMeLater; |
| } |
| |
| if (promo == "promos_manager::Promo::DefaultBrowserOffCycle") { |
| return promos_manager::Promo::DefaultBrowserOffCycle; |
| } |
| |
| return std::nullopt; |
| } |
| |
| std::string NameForPromo(Promo promo) { |
| return base::StrCat({"promos_manager::Promo::", ShortNameForPromo(promo)}); |
| } |
| |
| std::string_view ShortNameForPromo(Promo promo) { |
| switch (promo) { |
| case promos_manager::Promo::Test: |
| return "Test"; |
| case promos_manager::Promo::DefaultBrowser: |
| return "DefaultBrowser"; |
| case promos_manager::Promo::AppStoreRating: |
| return "AppStoreRating"; |
| case promos_manager::Promo::CredentialProviderExtension: |
| return "CredentialProviderExtension"; |
| case promos_manager::Promo::PostRestoreSignInFullscreen: |
| return "PostRestoreSignInFullscreen"; |
| case promos_manager::Promo::PostRestoreSignInAlert: |
| return "PostRestoreSignInAlert"; |
| case promos_manager::Promo::WhatsNew: |
| return "WhatsNew"; |
| case promos_manager::Promo::PostRestoreDefaultBrowserAlert: |
| return "PostRestoreDefaultBrowserAlert"; |
| case promos_manager::Promo::DefaultBrowserRemindMeLater: |
| return "DefaultBrowserRemindMeLater"; |
| case promos_manager::Promo::DockingPromo: |
| return "DockingPromo"; |
| case promos_manager::Promo::DockingPromoRemindMeLater: |
| return "DockingPromoRemindMeLater"; |
| case promos_manager::Promo::AllTabsDefaultBrowser: |
| return "AllTabsDefaultBrowser"; |
| case promos_manager::Promo::MadeForIOSDefaultBrowser: |
| return "MadeForIOSDefaultBrowser"; |
| case promos_manager::Promo::StaySafeDefaultBrowser: |
| return "StaySafeDefaultBrowser"; |
| case promos_manager::Promo::PostDefaultAbandonment: |
| return "PostDefaultAbandonment"; |
| case promos_manager::Promo::SigninFullscreen: |
| return "SigninFullscreen"; |
| case promos_manager::Promo::WelcomeBack: |
| return "WelcomeBack"; |
| case promos_manager::Promo::BWGPromo: |
| return "BWGPromo"; |
| case promos_manager::Promo::SafariImportRemindMeLater: |
| return "SafariImportRemindMeLater"; |
| case promos_manager::Promo::DefaultBrowserOffCycle: |
| return "DefaultBrowserOffCycle"; |
| } |
| } |
| |
| std::optional<promos_manager::Impression> ImpressionFromDict( |
| const base::Value::Dict& dict) { |
| const std::string* stored_promo = |
| dict.FindString(promos_manager::kImpressionPromoKey); |
| std::optional<int> stored_day = |
| dict.FindInt(promos_manager::kImpressionDayKey); |
| std::optional<bool> stored_migration_complete = dict.FindBool( |
| promos_manager::kImpressionFeatureEngagementMigrationCompletedKey); |
| |
| // Skip malformed impression history. (This should almost never happen.) |
| if (!stored_promo || !stored_day.has_value()) { |
| return std::nullopt; |
| } |
| |
| std::optional<promos_manager::Promo> promo = |
| promos_manager::PromoForName(*stored_promo); |
| |
| // Skip malformed impression history. (This should almost never happen.) |
| if (!promo.has_value()) { |
| return std::nullopt; |
| } |
| |
| return promos_manager::Impression(promo.value(), stored_day.value(), |
| stored_migration_complete.value_or(false)); |
| } |
| |
| } // namespace promos_manager |