Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3514)

Unified Diff: chrome/browser/ui/desktop_ios_promotion/desktop_ios_promotion_util.cc

Issue 2694893002: Integrate SMS service with Desktop iOS promotion (Closed)
Patch Set: unique_ptr Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/desktop_ios_promotion/desktop_ios_promotion_util.cc
diff --git a/chrome/browser/ui/desktop_ios_promotion/desktop_ios_promotion_util.cc b/chrome/browser/ui/desktop_ios_promotion/desktop_ios_promotion_util.cc
index 8f46fc1f004ead38f5bbb60b11e5639d7c853255..65497e524bea73e1a39cf9b01ac03d8ac3d26c0a 100644
--- a/chrome/browser/ui/desktop_ios_promotion/desktop_ios_promotion_util.cc
+++ b/chrome/browser/ui/desktop_ios_promotion/desktop_ios_promotion_util.cc
@@ -4,8 +4,13 @@
#include "chrome/browser/ui/desktop_ios_promotion/desktop_ios_promotion_util.h"
+#include "base/command_line.h"
#include "base/i18n/rtl.h"
+#include "base/metrics/histogram_macros.h"
+#include "base/strings/stringprintf.h"
+#include "chrome/browser/browser_process.h"
#include "chrome/common/chrome_features.h"
+#include "chrome/common/chrome_switches.h"
#include "chrome/grit/generated_resources.h"
#include "components/browser_sync/profile_sync_service.h"
#include "components/pref_registry/pref_registry_syncable.h"
@@ -17,32 +22,54 @@ namespace desktop_ios_promotion {
// Default Impression cap. for each entry point.
const int kEntryPointImpressionCap[] = {2, 2, 5, 10};
+const char* kEntrypointHistogramPrefix[] = {
+ "SavePasswordsNewBubble", "BookmarksNewBubble", "BookmarksFootNote",
+ "HistoryPage",
+};
+
bool IsEligibleForIOSPromotion(
PrefService* prefs,
const syncer::SyncService* sync_service,
desktop_ios_promotion::PromotionEntryPoint entry_point) {
+ if (base::CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kForceDesktopIOSPromotion)) {
+ return true;
+ }
+
// Promotion should only show for english locale.
+ PrefService* local_state = g_browser_process->local_state();
std::string locale = base::i18n::GetConfiguredLocale();
if (locale != "en-US" && locale != "en-CA")
return false;
if (!base::FeatureList::IsEnabled(features::kDesktopIOSPromotion) ||
!sync_service || !sync_service->IsSyncAllowed())
return false;
+
// TODO(crbug.com/676655): Check if the specific entrypoint is enabled by
// Finch.
- bool is_dismissed =
- prefs->GetBoolean(kEntryPointLocalPrefs[(int)entry_point][1]);
- int show_count =
- prefs->GetInteger(kEntryPointLocalPrefs[(int)entry_point][0]);
+ bool is_dismissed = local_state->GetBoolean(
+ kEntryPointLocalPrefs[static_cast<int>(entry_point)][1]);
+ int show_count = local_state->GetInteger(
+ kEntryPointLocalPrefs[static_cast<int>(entry_point)][0]);
// TODO(crbug.com/676655): Get the impression cap. from Finch and replace the
// value from the entryPointImpressionCap array.
- if (is_dismissed || show_count >= kEntryPointImpressionCap[(int)entry_point])
+ if (is_dismissed ||
+ show_count >= kEntryPointImpressionCap[static_cast<int>(entry_point)])
return false;
+
+ // Don't show the promotion if the user have used any entry point to recieve
+ // SMS on the last 7 days.
+ double last_impression = prefs->GetDouble(prefs::kIOSPromotionLastImpression);
+ int sms_entrypoint = prefs->GetInteger(prefs::kIOSPromotionSMSEntryPoint);
+ base::TimeDelta delta =
+ base::Time::Now() - base::Time::FromDoubleT(last_impression);
+ if (delta.InDays() <= 7 && sms_entrypoint != 0)
+ return false;
+
bool is_user_eligible = prefs->GetBoolean(prefs::kIOSPromotionEligible);
bool did_promo_done_before = prefs->GetBoolean(prefs::kIOSPromotionDone);
return is_user_eligible && !did_promo_done_before;
}
-
base::string16 GetPromoBubbleText(
desktop_ios_promotion::PromotionEntryPoint entry_point) {
if (entry_point ==
@@ -60,6 +87,15 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) {
registry->RegisterBooleanPref(
prefs::kIOSPromotionDone, false,
user_prefs::PrefRegistrySyncable::SYNCABLE_PRIORITY_PREF);
+ registry->RegisterIntegerPref(
+ prefs::kIOSPromotionSMSEntryPoint, 0,
+ user_prefs::PrefRegistrySyncable::SYNCABLE_PRIORITY_PREF);
+ registry->RegisterIntegerPref(
+ prefs::kIOSPromotionShownEntryPoints, 0,
+ user_prefs::PrefRegistrySyncable::SYNCABLE_PRIORITY_PREF);
+ registry->RegisterDoublePref(
+ prefs::kIOSPromotionLastImpression, 0,
+ user_prefs::PrefRegistrySyncable::SYNCABLE_PRIORITY_PREF);
}
void RegisterLocalPrefs(PrefRegistrySimple* registry) {
@@ -78,4 +114,21 @@ void RegisterLocalPrefs(PrefRegistrySimple* registry) {
registry->RegisterBooleanPref(prefs::kHistoryPageIOSPromoDismissed, false);
}
+void LogDismissalReason(PromotionDismissalReason reason,
+ PromotionEntryPoint entry_point) {
+ constexpr int dismissal_reason_min =
+ static_cast<int>(PromotionDismissalReason::FOCUS_LOST);
+ base::Histogram::FactoryGet(
+ base::StringPrintf(
+ "DesktopIOSPromotion.%s.DismissalReason",
+ desktop_ios_promotion::kEntrypointHistogramPrefix[static_cast<int>(
+ entry_point)]),
+ dismissal_reason_min,
+ static_cast<int>(PromotionDismissalReason::DISMISSAL_REASON_MAX_VALUE),
+ static_cast<int>(PromotionDismissalReason::DISMISSAL_REASON_MAX_VALUE) +
+ 1,
+ base::HistogramBase::kUmaTargetedHistogramFlag)
+ ->Add(static_cast<int>(reason));
+}
+
} // namespace desktop_ios_promotion

Powered by Google App Engine
This is Rietveld 408576698