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

Side by Side Diff: chrome/browser/web_resource/notification_promo.cc

Issue 10790089: Preferences support for multiple promos. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 8 years, 5 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/web_resource/notification_promo.h" 5 #include "chrome/browser/web_resource/notification_promo.h"
6 6
7 #include <cmath> 7 #include <cmath>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 17 matching lines...) Expand all
28 #endif // defined(OS_ANDROID) 28 #endif // defined(OS_ANDROID)
29 29
30 using content::UserMetricsAction; 30 using content::UserMetricsAction;
31 31
32 namespace { 32 namespace {
33 33
34 const int kDefaultGroupSize = 100; 34 const int kDefaultGroupSize = 100;
35 35
36 const char promo_server_url[] = "https://clients3.google.com/crsignal/client"; 36 const char promo_server_url[] = "https://clients3.google.com/crsignal/client";
37 37
38 const char kPrefPromoObject[] = "promo";
39 const char kPrefPromoText[] = "text";
40 #if defined(OS_ANDROID)
41 const char kPrefPromoTextLong[] = "text_long";
42 const char kPrefPromoActionType[] = "action_type";
43 const char kPrefPromoActionArgs[] = "action_args";
44 #endif
45 const char kPrefPromoStart[] = "start";
46 const char kPrefPromoEnd[] = "end";
47 const char kPrefPromoNumGroups[] = "num_groups";
48 const char kPrefPromoSegment[] = "segment";
49 const char kPrefPromoIncrement[] = "increment";
50 const char kPrefPromoIncrementFrequency[] = "increment_frequency";
51 const char kPrefPromoIncrementMax[] = "increment_max";
52 const char kPrefPromoMaxViews[] = "max_views";
53 const char kPrefPromoGroup[] = "group";
54 const char kPrefPromoViews[] = "views";
55 const char kPrefPromoClosed[] = "closed";
56 const char kPrefPromoGPlusRequired[] = "gplus_required";
57
38 #if defined(OS_ANDROID) 58 #if defined(OS_ANDROID)
39 const int kCurrentMobilePayloadFormatVersion = 3; 59 const int kCurrentMobilePayloadFormatVersion = 3;
40 #endif // defined(OS_ANDROID) 60 #endif // defined(OS_ANDROID)
41 61
42 double GetTimeFromPrefs(PrefService* prefs, const char* pref) {
43 return prefs->HasPrefPath(pref) ? prefs->GetDouble(pref) : 0.0;
44 }
45
46 // Returns a string suitable for the Promo Server URL 'osname' value. 62 // Returns a string suitable for the Promo Server URL 'osname' value.
47 std::string PlatformString() { 63 std::string PlatformString() {
48 #if defined(OS_WIN) 64 #if defined(OS_WIN)
49 return "win"; 65 return "win";
50 #elif defined(OS_IOS) 66 #elif defined(OS_IOS)
51 // TODO(noyau): add iOS-specific implementation 67 // TODO(noyau): add iOS-specific implementation
52 const bool isTablet = false; 68 const bool isTablet = false;
53 return std::string("ios-") + (isTablet ? "tablet" : "phone"); 69 return std::string("ios-") + (isTablet ? "tablet" : "phone");
54 #elif defined(OS_MACOSX) 70 #elif defined(OS_MACOSX)
55 return "mac"; 71 return "mac";
(...skipping 26 matching lines...) Expand all
82 return "dev"; 98 return "dev";
83 case chrome::VersionInfo::CHANNEL_BETA: 99 case chrome::VersionInfo::CHANNEL_BETA:
84 return "beta"; 100 return "beta";
85 case chrome::VersionInfo::CHANNEL_STABLE: 101 case chrome::VersionInfo::CHANNEL_STABLE:
86 return "stable"; 102 return "stable";
87 default: 103 default:
88 return "none"; 104 return "none";
89 } 105 }
90 } 106 }
91 107
108 void ClearDeprecatedPrefs(PrefService* prefs) {
Robert Sesek 2012/07/23 20:38:50 Add a TODO for when to remove this.
achuithb 2012/07/23 23:12:02 Done.
109 prefs->RegisterStringPref(prefs::kNtpPromoLine,
110 std::string(),
111 PrefService::UNSYNCABLE_PREF);
112 prefs->ClearPref(prefs::kNtpPromoLine);
113 #if defined(OS_ANDROID)
114 prefs->RegisterStringPref(prefs::kNtpPromoLineLong,
115 std::string(),
116 PrefService::UNSYNCABLE_PREF);
117 prefs->RegisterStringPref(prefs::kNtpPromoActionType,
118 std::string(),
119 PrefService::UNSYNCABLE_PREF);
120 prefs->RegisterListPref(prefs::kNtpPromoActionArgs,
121 new base::ListValue,
122 PrefService::UNSYNCABLE_PREF);
123 prefs->ClearPref(prefs::kNtpPromoLineLong);
124 prefs->ClearPref(prefs::kNtpPromoActionType);
125 prefs->ClearPref(prefs::kNtpPromoActionArgs);
126 #endif // defined(OS_ANDROID)
127
128 prefs->RegisterDoublePref(prefs::kNtpPromoStart,
129 0,
130 PrefService::UNSYNCABLE_PREF);
131 prefs->RegisterDoublePref(prefs::kNtpPromoEnd,
132 0,
133 PrefService::UNSYNCABLE_PREF);
134
135 prefs->RegisterIntegerPref(prefs::kNtpPromoNumGroups,
136 0,
137 PrefService::UNSYNCABLE_PREF);
138 prefs->RegisterIntegerPref(prefs::kNtpPromoInitialSegment,
139 0,
140 PrefService::UNSYNCABLE_PREF);
141 prefs->RegisterIntegerPref(prefs::kNtpPromoIncrement,
142 1,
143 PrefService::UNSYNCABLE_PREF);
144 prefs->RegisterIntegerPref(prefs::kNtpPromoGroupTimeSlice,
145 0,
146 PrefService::UNSYNCABLE_PREF);
147 prefs->RegisterIntegerPref(prefs::kNtpPromoGroupMax,
148 0,
149 PrefService::UNSYNCABLE_PREF);
150
151 prefs->RegisterIntegerPref(prefs::kNtpPromoViewsMax,
152 0,
153 PrefService::UNSYNCABLE_PREF);
154
155 prefs->RegisterIntegerPref(prefs::kNtpPromoGroup,
156 0,
157 PrefService::UNSYNCABLE_PREF);
158 prefs->RegisterIntegerPref(prefs::kNtpPromoViews,
159 0,
160 PrefService::UNSYNCABLE_PREF);
161 prefs->RegisterBooleanPref(prefs::kNtpPromoClosed,
162 false,
163 PrefService::UNSYNCABLE_PREF);
164
165 prefs->RegisterBooleanPref(prefs::kNtpPromoGplusRequired,
166 false,
167 PrefService::UNSYNCABLE_PREF);
168
169 prefs->ClearPref(prefs::kNtpPromoStart);
170 prefs->ClearPref(prefs::kNtpPromoEnd);
171 prefs->ClearPref(prefs::kNtpPromoNumGroups);
172 prefs->ClearPref(prefs::kNtpPromoInitialSegment);
173 prefs->ClearPref(prefs::kNtpPromoIncrement);
174 prefs->ClearPref(prefs::kNtpPromoGroupTimeSlice);
175 prefs->ClearPref(prefs::kNtpPromoGroupMax);
176 prefs->ClearPref(prefs::kNtpPromoViewsMax);
177 prefs->ClearPref(prefs::kNtpPromoGroup);
178 prefs->ClearPref(prefs::kNtpPromoViews);
179 prefs->ClearPref(prefs::kNtpPromoClosed);
180 prefs->ClearPref(prefs::kNtpPromoGplusRequired);
181 }
182
92 } // namespace 183 } // namespace
93 184
185 const char NotificationPromo::kNtpNotificationPromoType[] =
186 "ntp_notification_promo";
187 const char NotificationPromo::kBubblePromoType[] = "bubble_promo";
188
94 NotificationPromo::NotificationPromo(Profile* profile) 189 NotificationPromo::NotificationPromo(Profile* profile)
95 : profile_(profile), 190 : profile_(profile),
96 prefs_(profile_->GetPrefs()), 191 prefs_(profile_->GetPrefs()),
192 promo_type_(kNtpNotificationPromoType),
97 #if defined(OS_ANDROID) 193 #if defined(OS_ANDROID)
98 promo_action_args_(new base::ListValue), 194 promo_action_args_(new base::ListValue),
99 #endif // defined(OS_ANDROID) 195 #endif // defined(OS_ANDROID)
100 start_(0.0), 196 start_(0.0),
101 end_(0.0), 197 end_(0.0),
102 num_groups_(kDefaultGroupSize), 198 num_groups_(kDefaultGroupSize),
103 initial_segment_(0), 199 initial_segment_(0),
104 increment_(1), 200 increment_(1),
105 time_slice_(0), 201 time_slice_(0),
106 max_group_(0), 202 max_group_(0),
107 max_views_(0), 203 max_views_(0),
108 group_(0), 204 group_(0),
109 views_(0), 205 views_(0),
110 closed_(false), 206 closed_(false),
111 gplus_required_(false), 207 gplus_required_(false),
112 new_notification_(false) { 208 new_notification_(false) {
113 DCHECK(profile); 209 DCHECK(profile);
114 DCHECK(prefs_); 210 DCHECK(prefs_);
115 } 211 }
116 212
117 NotificationPromo::~NotificationPromo() {} 213 NotificationPromo::~NotificationPromo() {}
118 214
119 void NotificationPromo::InitFromJson(const DictionaryValue& json) { 215 void NotificationPromo::InitFromJson(const DictionaryValue& json) {
120 ListValue* promo_list = NULL; 216 ListValue* promo_list = NULL;
121 #if !defined(OS_ANDROID) 217 #if !defined(OS_ANDROID)
122 if (!json.GetList("ntp_notification_promo", &promo_list)) 218 if (!json.GetList(promo_type_, &promo_list))
123 return; 219 return;
124 #else 220 #else
125 if (!json.GetList("mobile_ntp_sync_promo", &promo_list)) { 221 if (!json.GetList("mobile_ntp_sync_promo", &promo_list)) {
126 LOG(ERROR) << "Malfromed JSON: not a mobile_ntp_sync_promo"; 222 LOG(ERROR) << "Malfromed JSON: not a mobile_ntp_sync_promo";
127 return; 223 return;
128 } 224 }
129 #endif // !defined(OS_ANDROID) 225 #endif // !defined(OS_ANDROID)
130 226
131 // No support for multiple promos yet. Only consider the first one. 227 // No support for multiple promos yet. Only consider the first one.
132 DictionaryValue* promo = NULL; 228 DictionaryValue* promo = NULL;
(...skipping 14 matching lines...) Expand all
147 ListValue* date_list = NULL; 243 ListValue* date_list = NULL;
148 if (promo->GetList("date", &date_list)) { 244 if (promo->GetList("date", &date_list)) {
149 DictionaryValue* date; 245 DictionaryValue* date;
150 if (date_list->GetDictionary(0, &date)) { 246 if (date_list->GetDictionary(0, &date)) {
151 std::string time_str; 247 std::string time_str;
152 base::Time time; 248 base::Time time;
153 if (date->GetString("start", &time_str) && 249 if (date->GetString("start", &time_str) &&
154 base::Time::FromString(time_str.c_str(), &time)) { 250 base::Time::FromString(time_str.c_str(), &time)) {
155 start_ = time.ToDoubleT(); 251 start_ = time.ToDoubleT();
156 DVLOG(1) << "start str=" << time_str 252 DVLOG(1) << "start str=" << time_str
157 << ", start_="<< base::DoubleToString(start_); 253 << ", start_="<< base::DoubleToString(start_);
158 } 254 }
159 if (date->GetString("end", &time_str) && 255 if (date->GetString("end", &time_str) &&
160 base::Time::FromString(time_str.c_str(), &time)) { 256 base::Time::FromString(time_str.c_str(), &time)) {
161 end_ = time.ToDoubleT(); 257 end_ = time.ToDoubleT();
162 DVLOG(1) << "end str =" << time_str 258 DVLOG(1) << "end str =" << time_str
163 << ", end_=" << base::DoubleToString(end_); 259 << ", end_=" << base::DoubleToString(end_);
164 } 260 }
165 } 261 }
166 } 262 }
167 263
168 // Grouping. 264 // Grouping.
169 DictionaryValue* grouping = NULL; 265 DictionaryValue* grouping = NULL;
170 if (promo->GetDictionary("grouping", &grouping)) { 266 if (promo->GetDictionary("grouping", &grouping)) {
171 grouping->GetInteger("buckets", &num_groups_); 267 grouping->GetInteger("buckets", &num_groups_);
172 grouping->GetInteger("segment", &initial_segment_); 268 grouping->GetInteger("segment", &initial_segment_);
173 grouping->GetInteger("increment", &increment_); 269 grouping->GetInteger("increment", &increment_);
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
238 } 334 }
239 promo_action_args_->Append(base::Value::CreateStringValue(value)); 335 promo_action_args_->Append(base::Value::CreateStringValue(value));
240 } 336 }
241 } 337 }
242 #endif // defined(OS_ANDROID) 338 #endif // defined(OS_ANDROID)
243 339
244 CheckForNewNotification(); 340 CheckForNewNotification();
245 } 341 }
246 342
247 void NotificationPromo::CheckForNewNotification() { 343 void NotificationPromo::CheckForNewNotification() {
248 const double old_start = GetTimeFromPrefs(prefs_, prefs::kNtpPromoStart); 344 NotificationPromo old_promo(profile_);
249 const double old_end = GetTimeFromPrefs(prefs_, prefs::kNtpPromoEnd); 345 old_promo.InitFromPrefs();
250 const std::string old_promo_text = prefs_->GetString(prefs::kNtpPromoLine); 346 const double old_start = old_promo.start_;
347 const double old_end = old_promo.end_;
348 const std::string old_promo_text = old_promo.promo_text_;
251 349
252 new_notification_ = 350 new_notification_ =
253 old_start != start_ || old_end != end_ || old_promo_text != promo_text_; 351 old_start != start_ || old_end != end_ || old_promo_text != promo_text_;
254 if (new_notification_) 352 if (new_notification_)
255 OnNewNotification(); 353 OnNewNotification();
256 } 354 }
257 355
258 void NotificationPromo::OnNewNotification() { 356 void NotificationPromo::OnNewNotification() {
259 // Create a new promo group. 357 // Create a new promo group.
260 group_ = base::RandInt(0, num_groups_ - 1); 358 group_ = base::RandInt(0, num_groups_ - 1);
261 WritePrefs(); 359 WritePrefs();
262 } 360 }
263 361
264 // static 362 // static
265 void NotificationPromo::RegisterUserPrefs(PrefService* prefs) { 363 void NotificationPromo::RegisterUserPrefs(PrefService* prefs) {
266 prefs->RegisterStringPref(prefs::kNtpPromoLine, 364 ClearDeprecatedPrefs(prefs);
267 std::string(), 365 prefs->RegisterDictionaryPref("promo",
268 PrefService::UNSYNCABLE_PREF); 366 new base::DictionaryValue,
269 #if defined(OS_ANDROID) 367 PrefService::UNSYNCABLE_PREF);
270 prefs->RegisterStringPref(prefs::kNtpPromoLineLong,
271 std::string(),
272 PrefService::UNSYNCABLE_PREF);
273 prefs->RegisterStringPref(prefs::kNtpPromoActionType,
274 std::string(),
275 PrefService::UNSYNCABLE_PREF);
276 prefs->RegisterListPref(prefs::kNtpPromoActionArgs,
277 new base::ListValue,
278 PrefService::UNSYNCABLE_PREF);
279 #endif // defined(OS_ANDROID)
280
281 prefs->RegisterDoublePref(prefs::kNtpPromoStart,
282 0,
283 PrefService::UNSYNCABLE_PREF);
284 prefs->RegisterDoublePref(prefs::kNtpPromoEnd,
285 0,
286 PrefService::UNSYNCABLE_PREF);
287
288 prefs->RegisterIntegerPref(prefs::kNtpPromoNumGroups,
289 0,
290 PrefService::UNSYNCABLE_PREF);
291 prefs->RegisterIntegerPref(prefs::kNtpPromoInitialSegment,
292 0,
293 PrefService::UNSYNCABLE_PREF);
294 prefs->RegisterIntegerPref(prefs::kNtpPromoIncrement,
295 1,
296 PrefService::UNSYNCABLE_PREF);
297 prefs->RegisterIntegerPref(prefs::kNtpPromoGroupTimeSlice,
298 0,
299 PrefService::UNSYNCABLE_PREF);
300 prefs->RegisterIntegerPref(prefs::kNtpPromoGroupMax,
301 0,
302 PrefService::UNSYNCABLE_PREF);
303
304 prefs->RegisterIntegerPref(prefs::kNtpPromoViewsMax,
305 0,
306 PrefService::UNSYNCABLE_PREF);
307
308 prefs->RegisterIntegerPref(prefs::kNtpPromoGroup,
309 0,
310 PrefService::UNSYNCABLE_PREF);
311 prefs->RegisterIntegerPref(prefs::kNtpPromoViews,
312 0,
313 PrefService::UNSYNCABLE_PREF);
314 prefs->RegisterBooleanPref(prefs::kNtpPromoClosed,
315 false,
316 PrefService::UNSYNCABLE_PREF);
317
318 prefs->RegisterBooleanPref(prefs::kNtpPromoGplusRequired,
319 false,
320 PrefService::UNSYNCABLE_PREF);
321
322 // TODO(achuith): Delete this in M22.
323 prefs->RegisterIntegerPref(prefs::kNtpPromoBuild,
324 0,
325 PrefService::UNSYNCABLE_PREF);
326 prefs->RegisterIntegerPref(prefs::kNtpPromoPlatform,
327 0,
328 PrefService::UNSYNCABLE_PREF);
329 prefs->ClearPref(prefs::kNtpPromoBuild);
330 prefs->ClearPref(prefs::kNtpPromoPlatform);
331 } 368 }
332 369
333 void NotificationPromo::WritePrefs() { 370 void NotificationPromo::WritePrefs() {
334 prefs_->SetString(prefs::kNtpPromoLine, promo_text_); 371 DVLOG(1) << "WritePrefs";
372 base::DictionaryValue* ntp_promo(new base::DictionaryValue);
Robert Sesek 2012/07/23 20:38:50 nit: I think it's more common to write this as an
achuithb 2012/07/23 23:12:02 Done.
373 ntp_promo->SetString(kPrefPromoText, promo_text_);
335 #if defined(OS_ANDROID) 374 #if defined(OS_ANDROID)
336 prefs_->SetString(prefs::kNtpPromoLineLong, promo_text_long_); 375 ntp_promo->SetString(kPrefPromoTextLong, promo_text_long_);
337 prefs_->SetString(prefs::kNtpPromoActionType, promo_action_type_); 376 ntp_promo->SetString(kPrefPromoActionType, promo_action_type_);
338 DCHECK(promo_action_args_.get() != NULL); 377 DCHECK(promo_action_args_.get());
339 prefs_->Set(prefs::kNtpPromoActionArgs, *promo_action_args_.get()); 378 ntp_promo->Set(kPrefPromoActionArgs, promo_action_args_->DeepCopy());
340 #endif // defined(OS_ANDROID) 379 #endif // defined(OS_ANDROID)
380 ntp_promo->SetDouble(kPrefPromoStart, start_);
381 ntp_promo->SetDouble(kPrefPromoEnd, end_);
341 382
342 prefs_->SetDouble(prefs::kNtpPromoStart, start_); 383 ntp_promo->SetInteger(kPrefPromoNumGroups, num_groups_);
343 prefs_->SetDouble(prefs::kNtpPromoEnd, end_); 384 ntp_promo->SetInteger(kPrefPromoSegment, initial_segment_);
385 ntp_promo->SetInteger(kPrefPromoIncrement, increment_);
386 ntp_promo->SetInteger(kPrefPromoIncrementFrequency, time_slice_);
387 ntp_promo->SetInteger(kPrefPromoIncrementMax, max_group_);
344 388
345 prefs_->SetInteger(prefs::kNtpPromoNumGroups, num_groups_); 389 ntp_promo->SetInteger(kPrefPromoMaxViews, max_views_);
346 prefs_->SetInteger(prefs::kNtpPromoInitialSegment, initial_segment_);
347 prefs_->SetInteger(prefs::kNtpPromoIncrement, increment_);
348 prefs_->SetInteger(prefs::kNtpPromoGroupTimeSlice, time_slice_);
349 prefs_->SetInteger(prefs::kNtpPromoGroupMax, max_group_);
350 390
351 prefs_->SetInteger(prefs::kNtpPromoViewsMax, max_views_); 391 ntp_promo->SetInteger(kPrefPromoGroup, group_);
392 ntp_promo->SetInteger(kPrefPromoViews, views_);
393 ntp_promo->SetBoolean(kPrefPromoClosed, closed_);
352 394
353 prefs_->SetInteger(prefs::kNtpPromoGroup, group_); 395 ntp_promo->SetBoolean(kPrefPromoGPlusRequired, gplus_required_);
354 prefs_->SetInteger(prefs::kNtpPromoViews, views_);
355 prefs_->SetBoolean(prefs::kNtpPromoClosed, closed_);
356 396
357 prefs_->SetBoolean(prefs::kNtpPromoGplusRequired, gplus_required_); 397 base::ListValue* promo_list(new base::ListValue);
Robert Sesek 2012/07/23 20:38:50 nit: here too
achuithb 2012/07/23 23:12:02 Done.
398 promo_list->Set(0, ntp_promo); // Only support 1 promo for now.
399
400 base::DictionaryValue promo_dict;
401 promo_dict.Set(promo_type_, promo_list);
402 prefs_->Set(kPrefPromoObject, promo_dict);
358 } 403 }
359 404
360 void NotificationPromo::InitFromPrefs() { 405 void NotificationPromo::InitFromPrefs() {
361 promo_text_ = prefs_->GetString(prefs::kNtpPromoLine); 406 const base::DictionaryValue* promo_dict =
407 prefs_->GetDictionary(kPrefPromoObject);
408 if (!promo_dict)
409 return;
410
411 base::ListValue* promo_list(NULL);
412 promo_dict->GetList(promo_type_, &promo_list);
413 if (!promo_list)
414 return;
415
416 base::DictionaryValue* ntp_promo(NULL);
417 promo_list->GetDictionary(0, &ntp_promo);
418 if (!ntp_promo)
419 return;
420
421 ntp_promo->GetString(kPrefPromoText, &promo_text_);
362 #if defined(OS_ANDROID) 422 #if defined(OS_ANDROID)
363 promo_text_long_ = prefs_->GetString(prefs::kNtpPromoLineLong); 423 ntp_promo->GetString(kPrefPromoTextLong, &promo_text_long_);
364 promo_action_type_ = prefs_->GetString(prefs::kNtpPromoActionType); 424 ntp_promo->GetString(kPrefPromoActionType, &promo_action_type_);
365 const base::ListValue* lv = prefs_->GetList(prefs::kNtpPromoActionArgs); 425 base::ListValue* lv(NULL);
426 ntp_promo->GetList(kPrefPromoActionArgs, &lv);
366 DCHECK(lv != NULL); 427 DCHECK(lv != NULL);
367 promo_action_args_.reset(lv->DeepCopy()); 428 promo_action_args_.reset(lv->DeepCopy());
368 #endif // defined(OS_ANDROID) 429 #endif // defined(OS_ANDROID)
369 430
370 start_ = prefs_->GetDouble(prefs::kNtpPromoStart); 431 ntp_promo->GetDouble(kPrefPromoStart, &start_);
371 end_ = prefs_->GetDouble(prefs::kNtpPromoEnd); 432 ntp_promo->GetDouble(kPrefPromoEnd, &end_);
372 433
373 num_groups_ = prefs_->GetInteger(prefs::kNtpPromoNumGroups); 434 ntp_promo->GetInteger(kPrefPromoNumGroups, &num_groups_);
374 initial_segment_ = prefs_->GetInteger(prefs::kNtpPromoInitialSegment); 435 ntp_promo->GetInteger(kPrefPromoSegment, &initial_segment_);
375 increment_ = prefs_->GetInteger(prefs::kNtpPromoIncrement); 436 ntp_promo->GetInteger(kPrefPromoIncrement, &increment_);
376 time_slice_ = prefs_->GetInteger(prefs::kNtpPromoGroupTimeSlice); 437 ntp_promo->GetInteger(kPrefPromoIncrementFrequency, &time_slice_);
377 max_group_ = prefs_->GetInteger(prefs::kNtpPromoGroupMax); 438 ntp_promo->GetInteger(kPrefPromoIncrementMax, &max_group_);
378 439
379 max_views_ = prefs_->GetInteger(prefs::kNtpPromoViewsMax); 440 ntp_promo->GetInteger(kPrefPromoMaxViews, &max_views_);
380 441
381 group_ = prefs_->GetInteger(prefs::kNtpPromoGroup); 442 ntp_promo->GetInteger(kPrefPromoGroup, &group_);
382 views_ = prefs_->GetInteger(prefs::kNtpPromoViews); 443 ntp_promo->GetInteger(kPrefPromoViews, &views_);
383 closed_ = prefs_->GetBoolean(prefs::kNtpPromoClosed); 444 ntp_promo->GetBoolean(kPrefPromoClosed, &closed_);
384 445
385 gplus_required_ = prefs_->GetBoolean(prefs::kNtpPromoGplusRequired); 446 ntp_promo->GetBoolean(kPrefPromoGPlusRequired, &gplus_required_);
386 } 447 }
387 448
388 bool NotificationPromo::CanShow() const { 449 bool NotificationPromo::CanShow() const {
389 return !closed_ && 450 return !closed_ &&
390 !promo_text_.empty() && 451 !promo_text_.empty() &&
391 !ExceedsMaxGroup() && 452 !ExceedsMaxGroup() &&
392 !ExceedsMaxViews() && 453 !ExceedsMaxViews() &&
393 base::Time::FromDoubleT(StartTimeForGroup()) < base::Time::Now() && 454 base::Time::FromDoubleT(StartTimeForGroup()) < base::Time::Now() &&
394 base::Time::FromDoubleT(EndTime()) > base::Time::Now() && 455 base::Time::FromDoubleT(EndTime()) > base::Time::Now() &&
395 IsGPlusRequired(); 456 IsGPlusRequired();
396 } 457 }
397 458
398 void NotificationPromo::HandleClosed() { 459 void NotificationPromo::HandleClosed() {
399 content::RecordAction(UserMetricsAction("NTPPromoClosed")); 460 content::RecordAction(UserMetricsAction("NTPPromoClosed"));
400 prefs_->SetBoolean(prefs::kNtpPromoClosed, true); 461 InitFromPrefs();
462 if (!closed_) {
463 closed_ = true;
464 WritePrefs();
465 }
401 } 466 }
402 467
403 bool NotificationPromo::HandleViewed() { 468 bool NotificationPromo::HandleViewed() {
404 content::RecordAction(UserMetricsAction("NTPPromoShown")); 469 content::RecordAction(UserMetricsAction("NTPPromoShown"));
405 if (prefs_->HasPrefPath(prefs::kNtpPromoViewsMax)) 470 InitFromPrefs();
406 max_views_ = prefs_->GetInteger(prefs::kNtpPromoViewsMax); 471 ++views_;
407 472 WritePrefs();
408 if (prefs_->HasPrefPath(prefs::kNtpPromoViews))
409 views_ = prefs_->GetInteger(prefs::kNtpPromoViews);
410
411 prefs_->SetInteger(prefs::kNtpPromoViews, ++views_);
412 return ExceedsMaxViews(); 473 return ExceedsMaxViews();
413 } 474 }
414 475
415 bool NotificationPromo::ExceedsMaxGroup() const { 476 bool NotificationPromo::ExceedsMaxGroup() const {
416 return (max_group_ == 0) ? false : group_ >= max_group_; 477 return (max_group_ == 0) ? false : group_ >= max_group_;
417 } 478 }
418 479
419 bool NotificationPromo::ExceedsMaxViews() const { 480 bool NotificationPromo::ExceedsMaxViews() const {
420 return (max_views_ == 0) ? false : views_ >= max_views_; 481 return (max_views_ == 0) ? false : views_ >= max_views_;
421 } 482 }
(...skipping 20 matching lines...) Expand all
442 if (group_ < initial_segment_) 503 if (group_ < initial_segment_)
443 return start_; 504 return start_;
444 return start_ + 505 return start_ +
445 std::ceil(static_cast<float>(group_ - initial_segment_ + 1) / increment_) 506 std::ceil(static_cast<float>(group_ - initial_segment_ + 1) / increment_)
446 * time_slice_; 507 * time_slice_;
447 } 508 }
448 509
449 double NotificationPromo::EndTime() const { 510 double NotificationPromo::EndTime() const {
450 return end_; 511 return end_;
451 } 512 }
OLDNEW
« no previous file with comments | « chrome/browser/web_resource/notification_promo.h ('k') | chrome/browser/web_resource/promo_resource_service_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698