Chromium Code Reviews| Index: chrome/browser/web_resource/notification_promo.cc |
| =================================================================== |
| --- chrome/browser/web_resource/notification_promo.cc (revision 150023) |
| +++ chrome/browser/web_resource/notification_promo.cc (working copy) |
| @@ -105,6 +105,28 @@ |
| } |
| } |
| +struct PromoMapEntry { |
| + NotificationPromo::PromoType promo_type; |
| + const char* promo_type_str; |
| +}; |
| + |
| +const PromoMapEntry kPromoMap[] = { |
| + { NotificationPromo::NO_PROMO, "" }, |
| + { NotificationPromo::NTP_NOTIFICATION_PROMO, "ntp_notification_promo" }, |
| + { NotificationPromo::BUBBLE_PROMO, "bubble_promo" }, |
| + { NotificationPromo::MOBILE_NTP_SYNC_PROMO, "mobile_ntp_sync_promo" }, |
| +}; |
| + |
| +// Convert PromoType to appropriate string. |
| +const char* PromoTypeToString(NotificationPromo::PromoType promo_type) { |
| + for (size_t i = 0; i < arraysize(kPromoMap); ++i) { |
| + if (kPromoMap[i].promo_type == promo_type) |
| + return kPromoMap[i].promo_type_str; |
| + } |
| + NOTREACHED(); |
| + return ""; |
| +} |
| + |
| // TODO(achuith): remove this in m23. |
| void ClearDeprecatedPrefs(PrefService* prefs) { |
| prefs->RegisterStringPref(prefs::kNtpPromoLine, |
| @@ -183,17 +205,13 @@ |
| } // namespace |
| -const char NotificationPromo::kNtpNotificationPromoType[] = |
| - "ntp_notification_promo"; |
| -const char NotificationPromo::kBubblePromoType[] = "bubble_promo"; |
| - |
| NotificationPromo::NotificationPromo(Profile* profile) |
| : profile_(profile), |
| prefs_(profile_->GetPrefs()), |
| - promo_type_(kNtpNotificationPromoType), |
| + promo_type_(NO_PROMO), |
| #if defined(OS_ANDROID) |
| promo_action_args_(new base::ListValue), |
| -#endif // defined(OS_ANDROID) |
| +#endif |
| start_(0.0), |
| end_(0.0), |
| num_groups_(kDefaultGroupSize), |
| @@ -213,17 +231,14 @@ |
| NotificationPromo::~NotificationPromo() {} |
| -void NotificationPromo::InitFromJson(const DictionaryValue& json) { |
| +void NotificationPromo::InitFromJson(const DictionaryValue& json, |
| + PromoType promo_type) { |
| + promo_type_ = promo_type; |
| const ListValue* promo_list = NULL; |
| -#if !defined(OS_ANDROID) |
| - if (!json.GetList(promo_type_, &promo_list)) |
| + if (!json.GetList(PromoTypeToString(promo_type_), &promo_list)) { |
| + LOG(ERROR) << "Malfromed JSON: not " << PromoTypeToString(promo_type_); |
| return; |
| -#else |
| - if (!json.GetList("mobile_ntp_sync_promo", &promo_list)) { |
| - LOG(ERROR) << "Malfromed JSON: not a mobile_ntp_sync_promo"; |
| - return; |
| } |
| -#endif // !defined(OS_ANDROID) |
| // No support for multiple promos yet. Only consider the first one. |
| const DictionaryValue* promo = NULL; |
| @@ -343,7 +358,7 @@ |
| void NotificationPromo::CheckForNewNotification() { |
| NotificationPromo old_promo(profile_); |
| - old_promo.InitFromPrefs(); |
| + old_promo.InitFromPrefs(promo_type_); |
| const double old_start = old_promo.start_; |
| const double old_end = old_promo.end_; |
| const std::string old_promo_text = old_promo.promo_text_; |
| @@ -400,18 +415,19 @@ |
| promo_list->Set(0, ntp_promo); // Only support 1 promo for now. |
| base::DictionaryValue promo_dict; |
| - promo_dict.Set(promo_type_, promo_list); |
| + promo_dict.Set(PromoTypeToString(promo_type_), promo_list); |
| prefs_->Set(kPrefPromoObject, promo_dict); |
| } |
| -void NotificationPromo::InitFromPrefs() { |
| +void NotificationPromo::InitFromPrefs(PromoType promo_type) { |
| + promo_type_ = promo_type; |
| const base::DictionaryValue* promo_dict = |
| prefs_->GetDictionary(kPrefPromoObject); |
| if (!promo_dict) |
| return; |
| const base::ListValue* promo_list(NULL); |
| - promo_dict->GetList(promo_type_, &promo_list); |
| + promo_dict->GetList(PromoTypeToString(promo_type_), &promo_list); |
| if (!promo_list) |
| return; |
| @@ -458,21 +474,25 @@ |
| IsGPlusRequired(); |
| } |
| -void NotificationPromo::HandleClosed() { |
| +// static |
| +void NotificationPromo::HandleClosed(Profile* profile, PromoType promo_type) { |
| content::RecordAction(UserMetricsAction("NTPPromoClosed")); |
| - InitFromPrefs(); |
| - if (!closed_) { |
| - closed_ = true; |
| - WritePrefs(); |
| + NotificationPromo promo(profile); |
| + promo.InitFromPrefs(promo_type); |
| + if (!promo.closed_) { |
| + promo.closed_ = true; |
| + promo.WritePrefs(); |
| } |
| } |
| -bool NotificationPromo::HandleViewed() { |
| +// static |
| +bool NotificationPromo::HandleViewed(Profile* profile, PromoType promo_type) { |
| content::RecordAction(UserMetricsAction("NTPPromoShown")); |
| - InitFromPrefs(); |
| - ++views_; |
| - WritePrefs(); |
| - return ExceedsMaxViews(); |
| + NotificationPromo promo(profile); |
| + promo.InitFromPrefs(promo_type); |
| + promo.views_++; |
|
Robert Sesek
2012/08/06 21:21:44
Use ++pre-increment.
achuithb
2012/08/06 22:16:19
Done.
|
| + promo.WritePrefs(); |
| + return promo.ExceedsMaxViews(); |
| } |
| bool NotificationPromo::ExceedsMaxGroup() const { |