| Index: chrome/browser/web_resource/notification_promo.cc
|
| diff --git a/chrome/browser/web_resource/notification_promo.cc b/chrome/browser/web_resource/notification_promo.cc
|
| index 0ddcdae9963febb6323a24a9dc8ffad66c13d32c..8999dd841c83bb3dae5704e217ec97c5c235a489 100644
|
| --- a/chrome/browser/web_resource/notification_promo.cc
|
| +++ b/chrome/browser/web_resource/notification_promo.cc
|
| @@ -49,6 +49,8 @@ const char kPrefPromoIncrement[] = "increment";
|
| const char kPrefPromoIncrementFrequency[] = "increment_frequency";
|
| const char kPrefPromoIncrementMax[] = "increment_max";
|
| const char kPrefPromoMaxViews[] = "max_views";
|
| +const char kPrefPromoMaxSeconds[] = "max_seconds";
|
| +const char kPrefPromoFirstViewTime[] = "first_view_time";
|
| const char kPrefPromoGroup[] = "group";
|
| const char kPrefPromoViews[] = "views";
|
| const char kPrefPromoClosed[] = "closed";
|
| @@ -199,6 +201,8 @@ NotificationPromo::NotificationPromo()
|
| time_slice_(0),
|
| max_group_(0),
|
| max_views_(0),
|
| + max_seconds_(0),
|
| + first_view_time_(0),
|
| group_(0),
|
| views_(0),
|
| closed_(false),
|
| @@ -284,6 +288,9 @@ void NotificationPromo::InitFromJson(const base::DictionaryValue& json,
|
| promo->GetInteger("max_views", &max_views_);
|
| DVLOG(1) << "max_views_ " << max_views_;
|
|
|
| + promo->GetInteger("max_seconds", &max_seconds_);
|
| + DVLOG(1) << "max_seconds_ " << max_seconds_;
|
| +
|
| CheckForNewNotification();
|
| }
|
|
|
| @@ -341,6 +348,8 @@ void NotificationPromo::WritePrefs() {
|
| ntp_promo->SetInteger(kPrefPromoIncrementMax, max_group_);
|
|
|
| ntp_promo->SetInteger(kPrefPromoMaxViews, max_views_);
|
| + ntp_promo->SetInteger(kPrefPromoMaxSeconds, max_seconds_);
|
| + ntp_promo->SetDouble(kPrefPromoFirstViewTime, first_view_time_);
|
|
|
| ntp_promo->SetInteger(kPrefPromoGroup, group_);
|
| ntp_promo->SetInteger(kPrefPromoViews, views_);
|
| @@ -388,6 +397,8 @@ void NotificationPromo::InitFromPrefs(PromoType promo_type) {
|
| ntp_promo->GetInteger(kPrefPromoIncrementMax, &max_group_);
|
|
|
| ntp_promo->GetInteger(kPrefPromoMaxViews, &max_views_);
|
| + ntp_promo->GetInteger(kPrefPromoMaxSeconds, &max_seconds_);
|
| + ntp_promo->GetDouble(kPrefPromoFirstViewTime, &first_view_time_);
|
|
|
| ntp_promo->GetInteger(kPrefPromoGroup, &group_);
|
| ntp_promo->GetInteger(kPrefPromoViews, &views_);
|
| @@ -412,6 +423,7 @@ bool NotificationPromo::CanShow() const {
|
| !promo_text_.empty() &&
|
| !ExceedsMaxGroup() &&
|
| !ExceedsMaxViews() &&
|
| + !ExceedsMaxSeconds() &&
|
| CheckAppLauncher() &&
|
| base::Time::FromDoubleT(StartTimeForGroup()) < base::Time::Now() &&
|
| base::Time::FromDoubleT(EndTime()) > base::Time::Now();
|
| @@ -434,8 +446,11 @@ bool NotificationPromo::HandleViewed(PromoType promo_type) {
|
| NotificationPromo promo;
|
| promo.InitFromPrefs(promo_type);
|
| ++promo.views_;
|
| + if (promo.first_view_time_ == 0) {
|
| + promo.first_view_time_ = base::Time::Now().ToDoubleT();
|
| + }
|
| promo.WritePrefs();
|
| - return promo.ExceedsMaxViews();
|
| + return promo.ExceedsMaxViews() || promo.ExceedsMaxSeconds();
|
| }
|
|
|
| bool NotificationPromo::ExceedsMaxGroup() const {
|
| @@ -446,6 +461,15 @@ bool NotificationPromo::ExceedsMaxViews() const {
|
| return (max_views_ == 0) ? false : views_ >= max_views_;
|
| }
|
|
|
| +bool NotificationPromo::ExceedsMaxSeconds() const {
|
| + if (max_seconds_ == 0 || first_view_time_ == 0)
|
| + return false;
|
| +
|
| + const base::Time last_view_time = base::Time::FromDoubleT(first_view_time_) +
|
| + base::TimeDelta::FromSeconds(max_seconds_);
|
| + return last_view_time < base::Time::Now();
|
| +}
|
| +
|
| // static
|
| GURL NotificationPromo::PromoServerURL() {
|
| GURL url(promo_server_url);
|
|
|