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

Unified Diff: ios/chrome/browser/notification_promo.cc

Issue 2094523002: Add migration from old to new NTP Promo pref structure. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: edits Created 4 years, 6 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
« no previous file with comments | « ios/chrome/browser/notification_promo.h ('k') | ios/chrome/browser/notification_promo_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ios/chrome/browser/notification_promo.cc
diff --git a/ios/chrome/browser/notification_promo.cc b/ios/chrome/browser/notification_promo.cc
index 11119b2332611769418c8002d528b06b9ee67c5b..e5f5d34392d5f2842382bd291056d0ed2bbc4b51 100644
--- a/ios/chrome/browser/notification_promo.cc
+++ b/ios/chrome/browser/notification_promo.cc
@@ -25,6 +25,7 @@ const char kNTPPromoFinchExperiment[] = "IOSNTPPromotion";
const char kPrefPromoObject[] = "ios.ntppromo";
// Keys in the kPrefPromoObject dictionary; used only here.
+const char kPrefPromoID[] = "id";
const char kPrefPromoFirstViewTime[] = "first_view_time";
const char kPrefPromoViews[] = "views";
const char kPrefPromoClosed[] = "closed";
@@ -135,14 +136,21 @@ void NotificationPromo::MigrateUserPrefs(PrefService* user_prefs) {
}
void NotificationPromo::WritePrefs() {
+ WritePrefs(promo_id_, first_view_time_, views_, closed_);
+}
+
+void NotificationPromo::WritePrefs(int promo_id,
+ double first_view_time,
+ int views,
+ bool closed) {
base::DictionaryValue* ntp_promo = new base::DictionaryValue;
- ntp_promo->SetDouble(kPrefPromoFirstViewTime, first_view_time_);
- ntp_promo->SetInteger(kPrefPromoViews, views_);
- ntp_promo->SetBoolean(kPrefPromoClosed, closed_);
+ ntp_promo->SetDouble(kPrefPromoFirstViewTime, first_view_time);
+ ntp_promo->SetInteger(kPrefPromoViews, views);
+ ntp_promo->SetBoolean(kPrefPromoClosed, closed);
base::DictionaryValue promo_dict;
promo_dict.MergeDictionary(local_state_->GetDictionary(kPrefPromoObject));
- promo_dict.Set(base::IntToString(promo_id_), ntp_promo);
+ promo_dict.Set(base::IntToString(promo_id), ntp_promo);
local_state_->Set(kPrefPromoObject, promo_dict);
DVLOG(1) << "WritePrefs " << promo_dict;
}
@@ -150,6 +158,10 @@ void NotificationPromo::WritePrefs() {
void NotificationPromo::InitFromPrefs(PromoType promo_type) {
promo_type_ = promo_type;
+ // Check if data is stored in the old prefs structure, and migrate it before
+ // reading from prefs.
+ MigrateOldPrefs();
+
// If |promo_id_| is not set, do nothing.
if (promo_id_ == -1)
return;
@@ -169,6 +181,48 @@ void NotificationPromo::InitFromPrefs(PromoType promo_type) {
ntp_promo->GetBoolean(kPrefPromoClosed, &closed_);
}
+void NotificationPromo::MigrateOldPrefs() {
+ const base::DictionaryValue* promo_dict =
+ local_state_->GetDictionary(kPrefPromoObject);
+ if (!promo_dict)
+ return;
+
+ const base::ListValue* promo_list = NULL;
+ promo_dict->GetList("mobile_ntp_whats_new_promo", &promo_list);
+ if (!promo_list)
+ return;
+
+ const base::DictionaryValue* ntp_promo = NULL;
+ promo_list->GetDictionary(0, &ntp_promo);
+ if (!ntp_promo) {
+ // If the list is saved but there is no promo dictionary, clear prefs to
+ // delete the empty list.
+ NotificationPromo::MigrateUserPrefs(local_state_);
+ return;
+ }
+
+ int promo_id = -1;
+ ntp_promo->GetInteger(kPrefPromoID, &promo_id);
+ if (promo_id == -1) {
+ // If there is no promo id saved in prefs, then data is corrupt and the
+ // prefs can be discarded.
+ NotificationPromo::MigrateUserPrefs(local_state_);
+ return;
+ }
+
+ double first_view_time = 0;
+ ntp_promo->GetDouble(kPrefPromoFirstViewTime, &first_view_time);
+ int views = 0;
+ ntp_promo->GetInteger(kPrefPromoViews, &views);
+ bool closed = false;
+ ntp_promo->GetBoolean(kPrefPromoClosed, &closed);
+
+ // Clear prefs to discard the old structure before saving the data in the new
+ // structure.
+ NotificationPromo::MigrateUserPrefs(local_state_);
+ WritePrefs(promo_id, first_view_time, views, closed);
+}
+
bool NotificationPromo::CanShow() const {
return !closed_ && !promo_text_.empty() && !ExceedsMaxViews() &&
!ExceedsMaxSeconds() &&
« no previous file with comments | « ios/chrome/browser/notification_promo.h ('k') | ios/chrome/browser/notification_promo_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698