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

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

Issue 2694893002: Integrate SMS service with Desktop iOS promotion (Closed)
Patch Set: SMS integration & loggin 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_controller.cc
diff --git a/chrome/browser/ui/desktop_ios_promotion/desktop_ios_promotion_controller.cc b/chrome/browser/ui/desktop_ios_promotion/desktop_ios_promotion_controller.cc
index b4cba3f3b0609a62b09c4e79114e780cf215f3ed..ea9e2760198bda5bfcd445484ae6ec055c0e33af 100644
--- a/chrome/browser/ui/desktop_ios_promotion/desktop_ios_promotion_controller.cc
+++ b/chrome/browser/ui/desktop_ios_promotion/desktop_ios_promotion_controller.cc
@@ -4,14 +4,102 @@
#include "chrome/browser/ui/desktop_ios_promotion/desktop_ios_promotion_controller.h"
-DesktopIOSPromotionController::DesktopIOSPromotionController() {}
+#include "base/bind.h"
+#include "base/metrics/histogram_macros.h"
+#include "base/time/time.h"
+#include "chrome/browser/browser_process.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/ui/desktop_ios_promotion/desktop_ios_promotion_util.h"
+#include "chrome/browser/ui/desktop_ios_promotion/sms_service.h"
+#include "chrome/browser/ui/desktop_ios_promotion/sms_service_factory.h"
+#include "components/prefs/pref_service.h"
+
+DesktopIOSPromotionController::DesktopIOSPromotionController(
+ Profile* profile,
+ desktop_ios_promotion::PromotionEntryPoint entry_point)
+ : weak_ptr_factory_(this),
sky 2017/02/16 00:13:35 Order of member initialize list should match that
mrefaat 2017/02/16 21:02:39 Done.
+ recovery_number_(std::string()),
sky 2017/02/16 00:13:35 Don't bother initializing members that have empty
mrefaat 2017/02/16 21:02:39 Done.
+ entry_point_(entry_point),
+ profile_prefs_(profile->GetPrefs()) {
+ sms_service_ = SMSServiceFactory::GetForProfile(profile);
sky 2017/02/16 00:13:36 Move to member initializer.
mrefaat 2017/02/16 21:02:39 Done.
+ sms_service_->QueryPhoneNumber(
+ base::Bind(&DesktopIOSPromotionController::OnQueryPhoneNumber,
+ weak_ptr_factory_.GetWeakPtr()));
+}
DesktopIOSPromotionController::~DesktopIOSPromotionController() {}
void DesktopIOSPromotionController::OnSendSMSClicked() {
- // TODO(crbug.com/676655): Call the growth api to send sms.
+ // TODO(crbug.com/676655): Get the SMS message id from the finch group.
+ std::string sms_message_id = "19001507";
+ sms_service_->SendSMS(sms_message_id,
+ base::Bind(&DesktopIOSPromotionController::OnSendSMS,
+ weak_ptr_factory_.GetWeakPtr()));
+
+ // Update Profile prefs.
+ profile_prefs_->SetInteger(prefs::kIOSPromotionSMSEntryPoint,
+ (int)entry_point_);
sky 2017/02/16 00:13:35 Use c++ casts.
mrefaat 2017/02/16 21:02:39 Done.
+
+ // Update histograms.
+ desktop_ios_promotion::LogDismissalReason(
+ desktop_ios_promotion::PromotionDismissalReason::SEND_SMS, entry_point_);
+}
+
+void DesktopIOSPromotionController::OnPromotionShown() {
+ // update the impressions count.
+ PrefService* local_state = g_browser_process->local_state();
+ int impressions = local_state->GetInteger(
+ desktop_ios_promotion::kEntryPointLocalPrefs[(int)entry_point_ - 1][(
sky 2017/02/16 00:13:36 Again with the casts, also, use a constant for the
mrefaat 2017/02/16 21:02:39 made a constant but i think it shouldn't be in the
+ int)desktop_ios_promotion::EntryPointLocalPrefType::IMPRESSIONS]);
+ impressions++;
+ local_state->SetInteger(
+ desktop_ios_promotion::kEntryPointLocalPrefs[(int)entry_point_ - 1][(
+ int)desktop_ios_promotion::EntryPointLocalPrefType::IMPRESSIONS],
+ impressions);
+
+ // Update synced profile prefs.
+ int shown_entrypoints =
+ profile_prefs_->GetInteger(prefs::kIOSPromotionShownEntryPoints);
+ shown_entrypoints |= 1 << (int)entry_point_;
+ profile_prefs_->SetInteger(prefs::kIOSPromotionShownEntryPoints,
+ shown_entrypoints);
+
+ // If the promo is seen then it means the SMS was not sent on the last 7 days,
+ // reset the pref.
+ profile_prefs_->SetInteger(prefs::kIOSPromotionSMSEntryPoint, 0);
+
+ double last_impression = base::Time::NowFromSystemTime().ToDoubleT();
+ profile_prefs_->SetDouble(prefs::kIOSPromotionLastImpression,
+ last_impression);
+ // Update histograms.
+ UMA_HISTOGRAM_ENUMERATION("DesktopIOSPromotion.ImpressionFromEntryPoint",
+ (int)entry_point_, 5);
sky 2017/02/16 00:13:36 Use a constant for 5.
mrefaat 2017/02/16 21:02:39 Done.
}
void DesktopIOSPromotionController::OnNoThanksClicked() {
- // TODO(crbug.com/676655): Handle logging & update sync.
+ PrefService* local_state = g_browser_process->local_state();
+ local_state->SetBoolean(
+ desktop_ios_promotion::kEntryPointLocalPrefs[(int)entry_point_ - 1][(
+ int)desktop_ios_promotion::EntryPointLocalPrefType::DISMISSED],
+ true);
+
+ desktop_ios_promotion::LogDismissalReason(
+ desktop_ios_promotion::PromotionDismissalReason::NO_THANKS, entry_point_);
+}
+
+void DesktopIOSPromotionController::OnQueryPhoneNumber(
+ SMSService::Request* request,
+ bool success,
+ const std::string& number) {
+ if (success) {
sky 2017/02/16 00:13:36 no {}
mrefaat 2017/02/16 21:02:39 Done.
+ recovery_number_ = number;
sky 2017/02/16 00:13:36 AFAICT this isn't used. Based on my understanding
mrefaat 2017/02/16 21:02:39 Our Targeting set will only have the user if their
sky 2017/02/17 00:04:12 Not sure I follow. That sort of implies success is
+ }
+ UMA_HISTOGRAM_BOOLEAN("DesktopIOSPromotion.QueryPhoneNumberSucceeded",
+ success);
+}
+
+void DesktopIOSPromotionController::OnSendSMS(SMSService::Request* request,
+ bool success,
+ const std::string& number) {
+ UMA_HISTOGRAM_BOOLEAN("DesktopIOSPromotion.SendSMSSucceeded", success);
}

Powered by Google App Engine
This is Rietveld 408576698