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

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

Issue 10496008: Purge legacy notification promo code. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 8 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 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/promo_resource_service.h" 5 #include "chrome/browser/web_resource/promo_resource_service.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/rand_util.h" 8 #include "base/rand_util.h"
9 #include "base/string_number_conversions.h" 9 #include "base/string_number_conversions.h"
10 #include "base/threading/thread_restrictions.h" 10 #include "base/threading/thread_restrictions.h"
(...skipping 13 matching lines...) Expand all
24 #include "content/public/browser/notification_service.h" 24 #include "content/public/browser/notification_service.h"
25 #include "googleurl/src/gurl.h" 25 #include "googleurl/src/gurl.h"
26 26
27 namespace { 27 namespace {
28 28
29 // Delay on first fetch so we don't interfere with startup. 29 // Delay on first fetch so we don't interfere with startup.
30 static const int kStartResourceFetchDelay = 5000; 30 static const int kStartResourceFetchDelay = 5000;
31 31
32 // Delay between calls to update the cache (12 hours), and 3 min in debug mode. 32 // Delay between calls to update the cache (12 hours), and 3 min in debug mode.
33 static const int kCacheUpdateDelay = 12 * 60 * 60 * 1000; 33 static const int kCacheUpdateDelay = 12 * 60 * 60 * 1000;
34 static const int kTestCacheUpdateDelay = 3 * 60 * 1000; 34 static const int kTestCacheUpdateDelay = 3 * 60 * 1000;
Dan Beam 2012/06/04 18:41:04 I think this should be a separate flag, personally
achuithb 2012/06/04 19:52:59 We probably already have too many chrome flags. We
35 35
36 // The version of the service (used to expire the cache when upgrading Chrome 36 // The version of the service (used to expire the cache when upgrading Chrome
37 // to versions with different types of promos). 37 // to versions with different types of promos).
38 static const int kPromoServiceVersion = 7; 38 static const int kPromoServiceVersion = 7;
39 39
40 // Properties used by the server. 40 // Properties used by the server.
41 static const char kAnswerIdProperty[] = "answer_id"; 41 static const char kAnswerIdProperty[] = "answer_id";
42 static const char kWebStoreHeaderProperty[] = "question"; 42 static const char kWebStoreHeaderProperty[] = "question";
43 static const char kWebStoreButtonProperty[] = "inproduct_target"; 43 static const char kWebStoreButtonProperty[] = "inproduct_target";
44 static const char kWebStoreLinkProperty[] = "inproduct"; 44 static const char kWebStoreLinkProperty[] = "inproduct";
45 static const char kWebStoreExpireProperty[] = "tooltip"; 45 static const char kWebStoreExpireProperty[] = "tooltip";
46 46
47 GURL GetPromoResourceURL(bool legacy) { 47 GURL GetPromoResourceURL(bool legacy) {
48 const std::string promo_server_url = CommandLine::ForCurrentProcess()-> 48 const std::string promo_server_url = CommandLine::ForCurrentProcess()->
49 GetSwitchValueASCII(switches::kPromoServerURL); 49 GetSwitchValueASCII(switches::kPromoServerURL);
50 if (!promo_server_url.empty()) 50 if (!promo_server_url.empty())
51 return GURL(promo_server_url); 51 return GURL(promo_server_url);
52 return legacy ? GURL(PromoResourceService::kDefaultPromoResourceServer) : 52 return legacy ? GURL(PromoResourceService::kDefaultPromoResourceServer) :
53 NotificationPromo::PromoServerURL(); 53 NotificationPromo::PromoServerURL();
54 } 54 }
55 55
56 bool IsTest() { 56 bool IsTest() {
57 return CommandLine::ForCurrentProcess()->HasSwitch(switches::kPromoServerURL); 57 return CommandLine::ForCurrentProcess()->HasSwitch(switches::kPromoServerURL);
Dan Beam 2012/06/04 18:20:08 is it time to add something else here that delays
achuithb 2012/06/04 19:52:59 Let's punt this for now.
58 } 58 }
59 59
60 int GetCacheUpdateDelay() { 60 int GetCacheUpdateDelay() {
61 return IsTest() ? kTestCacheUpdateDelay : kCacheUpdateDelay; 61 return IsTest() ? kTestCacheUpdateDelay : kCacheUpdateDelay;
Dan Beam 2012/06/04 18:41:04 I'd prefer to separate this logic / control this w
achuithb 2012/06/04 19:52:59 Punt for now.
62 } 62 }
63 63
64 } // namespace 64 } // namespace
65 65
66 // Server for dynamically loaded NTP HTML elements. 66 // Server for dynamically loaded NTP HTML elements.
67 const char* PromoResourceService::kDefaultPromoResourceServer = 67 const char* PromoResourceService::kDefaultPromoResourceServer =
Dan Beam 2012/06/04 18:41:04 legacy
achuithb 2012/06/04 19:52:59 Done.
68 "https://www.google.com/support/chrome/bin/topic/1142433/inproduct?hl="; 68 "https://www.google.com/support/chrome/bin/topic/1142433/inproduct?hl=";
69 69
70 70
71 71
72 // static 72 // static
73 void PromoResourceService::RegisterPrefs(PrefService* local_state) { 73 void PromoResourceService::RegisterPrefs(PrefService* local_state) {
74 local_state->RegisterIntegerPref(prefs::kNtpPromoVersion, 0); 74 local_state->RegisterIntegerPref(prefs::kNtpPromoVersion, 0);
Dan Beam 2012/06/04 18:41:04 is this still truly global, or can there be differ
achuithb 2012/06/04 19:52:59 It makes sense for it to be truly global, but I do
75 local_state->RegisterStringPref(prefs::kNtpPromoLocale, std::string()); 75 local_state->RegisterStringPref(prefs::kNtpPromoLocale, std::string());
76 } 76 }
77 77
78 // static 78 // static
79 void PromoResourceService::RegisterUserPrefs(PrefService* prefs) { 79 void PromoResourceService::RegisterUserPrefs(PrefService* prefs) {
80 prefs->RegisterStringPref(prefs::kNtpPromoResourceCacheUpdate, 80 prefs->RegisterStringPref(prefs::kNtpPromoResourceCacheUpdate,
81 "0", 81 "0",
82 PrefService::UNSYNCABLE_PREF); 82 PrefService::UNSYNCABLE_PREF);
83 prefs->RegisterDoublePref(prefs::kNtpCustomLogoStart, 83 prefs->RegisterDoublePref(prefs::kNtpCustomLogoStart,
84 0, 84 0,
85 PrefService::UNSYNCABLE_PREF); 85 PrefService::UNSYNCABLE_PREF);
86 prefs->RegisterDoublePref(prefs::kNtpCustomLogoEnd, 86 prefs->RegisterDoublePref(prefs::kNtpCustomLogoEnd,
87 0, 87 0,
88 PrefService::UNSYNCABLE_PREF); 88 PrefService::UNSYNCABLE_PREF);
89 NotificationPromo::RegisterUserPrefs(prefs); 89 NotificationPromo::RegisterUserPrefs(prefs);
90 } 90 }
91 91
92 // static 92 // static
93 chrome::VersionInfo::Channel PromoResourceService::GetChannel() { 93 chrome::VersionInfo::Channel PromoResourceService::GetChannel() {
94 // GetChannel hits the registry on Windows. See http://crbug.com/70898. 94 // GetChannel hits the registry on Windows. See http://crbug.com/70898.
95 base::ThreadRestrictions::ScopedAllowIO allow_io; 95 base::ThreadRestrictions::ScopedAllowIO allow_io;
Dan Beam 2012/06/04 18:41:04 would it be worth doing an #if defined(OS_WINDOWS)
achuithb 2012/06/04 19:52:59 Hopefully we can delete this.
96 return chrome::VersionInfo::GetChannel(); 96 return chrome::VersionInfo::GetChannel();
97 } 97 }
98 98
99 // static 99 // static
100 bool PromoResourceService::IsBuildTargeted(chrome::VersionInfo::Channel channel, 100 bool PromoResourceService::IsBuildTargeted(chrome::VersionInfo::Channel channel,
Dan Beam 2012/06/04 18:41:04 why do we still need this? or perhaps only keep th
achuithb 2012/06/04 19:52:59 flag check? It's used in UnpackWebstoreSignal
Dan Beam 2012/06/04 21:26:32 return CommandLine::ForCurrentProcess()->HasSwitch
101 int builds_allowed) { 101 int builds_allowed) {
102 if (builds_allowed == NO_BUILD || 102 if (builds_allowed == NO_BUILD ||
103 builds_allowed < 0 || 103 builds_allowed < 0 ||
104 builds_allowed > ALL_BUILDS) { 104 builds_allowed > ALL_BUILDS) {
105 return false; 105 return false;
106 } 106 }
107 switch (channel) { 107 switch (channel) {
108 case chrome::VersionInfo::CHANNEL_CANARY: 108 case chrome::VersionInfo::CHANNEL_CANARY:
109 return (CANARY_BUILD & builds_allowed) != 0; 109 return (CANARY_BUILD & builds_allowed) != 0;
110 case chrome::VersionInfo::CHANNEL_DEV: 110 case chrome::VersionInfo::CHANNEL_DEV:
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
142 142
143 return IsBuildTargeted(channel_, builds_targeted); 143 return IsBuildTargeted(channel_, builds_targeted);
144 } 144 }
145 145
146 void PromoResourceService::Unpack(const DictionaryValue& parsed_json) { 146 void PromoResourceService::Unpack(const DictionaryValue& parsed_json) {
147 UnpackLogoSignal(parsed_json); 147 UnpackLogoSignal(parsed_json);
148 UnpackNotificationSignal(parsed_json); 148 UnpackNotificationSignal(parsed_json);
149 UnpackWebStoreSignal(parsed_json); 149 UnpackWebStoreSignal(parsed_json);
150 } 150 }
151 151
152 void PromoResourceService::OnNotificationParsed(double start, double end,
153 bool new_notification) {
154 if (new_notification) {
155 ScheduleNotification(start, end);
156 }
157 }
158
159 void PromoResourceService::ScheduleNotification(double promo_start, 152 void PromoResourceService::ScheduleNotification(double promo_start,
160 double promo_end) { 153 double promo_end) {
161 if (promo_start > 0 && promo_end > 0) { 154 if (promo_start > 0 && promo_end > 0) {
162 int64 ms_until_start = 155 int64 ms_until_start =
163 static_cast<int64>((base::Time::FromDoubleT( 156 static_cast<int64>((base::Time::FromDoubleT(
164 promo_start) - base::Time::Now()).InMilliseconds()); 157 promo_start) - base::Time::Now()).InMilliseconds());
165 int64 ms_until_end = 158 int64 ms_until_end =
166 static_cast<int64>((base::Time::FromDoubleT( 159 static_cast<int64>((base::Time::FromDoubleT(
167 promo_end) - base::Time::Now()).InMilliseconds()); 160 promo_end) - base::Time::Now()).InMilliseconds());
168 if (ms_until_start > 0) 161 if (ms_until_start > 0)
169 PostNotification(ms_until_start); 162 PostNotification(ms_until_start);
170 if (ms_until_end > 0) { 163 if (ms_until_end > 0) {
171 PostNotification(ms_until_end); 164 PostNotification(ms_until_end);
172 if (ms_until_start <= 0) { 165 if (ms_until_start <= 0) {
173 // Notify immediately if time is between start and end. 166 // Notify immediately if time is between start and end.
174 PostNotification(0); 167 PostNotification(0);
175 } 168 }
176 } 169 }
177 } 170 }
178 } 171 }
179 172
180 void PromoResourceService::ScheduleNotificationOnInit() { 173 void PromoResourceService::ScheduleNotificationOnInit() {
181 std::string locale = g_browser_process->GetApplicationLocale(); 174 std::string locale = g_browser_process->GetApplicationLocale();
182 if ((GetPromoServiceVersion() != kPromoServiceVersion) || 175 if ((GetPromoServiceVersion() != kPromoServiceVersion) ||
Dan Beam 2012/06/04 18:41:04 less ()
achuithb 2012/06/04 19:52:59 Done.
183 (GetPromoLocale() != locale)) { 176 (GetPromoLocale() != locale)) {
184 // If the promo service has been upgraded or Chrome switched locales, 177 // If the promo service has been upgraded or Chrome switched locales,
185 // refresh the promos. 178 // refresh the promos.
186 PrefService* local_state = g_browser_process->local_state(); 179 PrefService* local_state = g_browser_process->local_state();
187 local_state->SetInteger(prefs::kNtpPromoVersion, kPromoServiceVersion); 180 local_state->SetInteger(prefs::kNtpPromoVersion, kPromoServiceVersion);
188 local_state->SetString(prefs::kNtpPromoLocale, locale); 181 local_state->SetString(prefs::kNtpPromoLocale, locale);
189 prefs_->ClearPref(prefs::kNtpPromoResourceCacheUpdate); 182 prefs_->ClearPref(prefs::kNtpPromoResourceCacheUpdate);
190 AppsPromo::ClearPromo(); 183 AppsPromo::ClearPromo();
191 PostNotification(0); 184 PostNotification(0);
192 } else { 185 } else {
193 // If the promo start is in the future, set a notification task to 186 // If the promo start is in the future, set a notification task to
194 // invalidate the NTP cache at the time of the promo start. 187 // invalidate the NTP cache at the time of the promo start.
195 double promo_start = prefs_->GetDouble(prefs::kNtpPromoStart); 188 double promo_start = prefs_->GetDouble(prefs::kNtpPromoStart);
196 double promo_end = prefs_->GetDouble(prefs::kNtpPromoEnd); 189 double promo_end = prefs_->GetDouble(prefs::kNtpPromoEnd);
197 ScheduleNotification(promo_start, promo_end); 190 ScheduleNotification(promo_start, promo_end);
198 } 191 }
199 } 192 }
200 193
201 void PromoResourceService::PostNotification(int64 delay_ms) { 194 void PromoResourceService::PostNotification(int64 delay_ms) {
202 if (web_resource_update_scheduled_) 195 if (web_resource_update_scheduled_)
203 return; 196 return;
204 if (delay_ms > 0) { 197 if (delay_ms > 0) {
205 web_resource_update_scheduled_ = true; 198 web_resource_update_scheduled_ = true;
206 MessageLoop::current()->PostDelayedTask( 199 MessageLoop::current()->PostDelayedTask(
207 FROM_HERE, 200 FROM_HERE,
208 base::Bind(&PromoResourceService::PromoResourceStateChange, 201 base::Bind(&PromoResourceService::PromoResourceStateChange,
209 weak_ptr_factory_.GetWeakPtr()), 202 weak_ptr_factory_.GetWeakPtr()),
210 base::TimeDelta::FromMilliseconds(delay_ms)); 203 base::TimeDelta::FromMilliseconds(delay_ms));
211 } else if (delay_ms == 0) { 204 } else if (delay_ms == 0) {
Dan Beam 2012/06/04 18:41:04 I think we should still post a task with 0 ms isnt
achuithb 2012/06/04 19:52:59 I tried that, and it crashes on Init, possibly bec
Dan Beam 2012/06/04 21:26:32 TODO() or comment, then?
achuithb 2012/06/04 23:06:08 Done.
212 PromoResourceStateChange(); 205 PromoResourceStateChange();
213 } 206 }
214 } 207 }
215 208
216 void PromoResourceService::PromoResourceStateChange() { 209 void PromoResourceService::PromoResourceStateChange() {
217 web_resource_update_scheduled_ = false; 210 web_resource_update_scheduled_ = false;
218 content::NotificationService* service = 211 content::NotificationService* service =
219 content::NotificationService::current(); 212 content::NotificationService::current();
220 service->Notify(chrome::NOTIFICATION_PROMO_RESOURCE_STATE_CHANGED, 213 service->Notify(chrome::NOTIFICATION_PROMO_RESOURCE_STATE_CHANGED,
221 content::Source<WebResourceService>(this), 214 content::Source<WebResourceService>(this),
222 content::NotificationService::NoDetails()); 215 content::NotificationService::NoDetails());
223 } 216 }
224 217
225 int PromoResourceService::GetPromoServiceVersion() { 218 int PromoResourceService::GetPromoServiceVersion() {
226 PrefService* local_state = g_browser_process->local_state(); 219 PrefService* local_state = g_browser_process->local_state();
227 return local_state->GetInteger(prefs::kNtpPromoVersion); 220 return local_state->GetInteger(prefs::kNtpPromoVersion);
228 } 221 }
229 222
230 std::string PromoResourceService::GetPromoLocale() { 223 std::string PromoResourceService::GetPromoLocale() {
231 PrefService* local_state = g_browser_process->local_state(); 224 PrefService* local_state = g_browser_process->local_state();
232 return local_state->GetString(prefs::kNtpPromoLocale); 225 return local_state->GetString(prefs::kNtpPromoLocale);
233 } 226 }
234 227
235 void PromoResourceService::UnpackNotificationSignal( 228 void PromoResourceService::UnpackNotificationSignal(
236 const DictionaryValue& parsed_json) { 229 const DictionaryValue& parsed_json) {
237 scoped_refptr<NotificationPromo> notification_promo = 230 NotificationPromo notification_promo(profile_);
238 NotificationPromo::Create(profile_, this); 231 notification_promo.InitFromJson(parsed_json);
239 notification_promo->InitFromJson(parsed_json); 232
233 if (notification_promo.new_notification()) {
234 ScheduleNotification(notification_promo.StartTimeForGroup(),
235 notification_promo.EndTime());
236 }
240 } 237 }
241 238
242 bool PromoResourceService::CanShowNotificationPromo(Profile* profile) { 239 bool PromoResourceService::CanShowNotificationPromo(Profile* profile) {
243 scoped_refptr<NotificationPromo> notification_promo = 240 NotificationPromo notification_promo(profile);
244 NotificationPromo::Create(profile, NULL); 241 notification_promo.InitFromPrefs();
245 notification_promo->InitFromPrefs(); 242 return notification_promo.CanShow();
246 return notification_promo->CanShow();
247 } 243 }
248 244
249 void PromoResourceService::UnpackWebStoreSignal( 245 void PromoResourceService::UnpackWebStoreSignal(
Dan Beam 2012/06/04 18:41:04 if we're not using the tips server, how is any of
achuithb 2012/06/04 19:52:59 Chatted about this; Tips server continues to be us
250 const DictionaryValue& parsed_json) { 246 const DictionaryValue& parsed_json) {
251 DictionaryValue* topic_dict; 247 DictionaryValue* topic_dict;
252 ListValue* answer_list; 248 ListValue* answer_list;
253 249
254 bool is_webstore_active = false; 250 bool is_webstore_active = false;
255 bool signal_found = false; 251 bool signal_found = false;
256 AppsPromo::PromoData promo_data; 252 AppsPromo::PromoData promo_data;
257 std::string promo_link = ""; 253 std::string promo_link = "";
258 std::string promo_logo = ""; 254 std::string promo_logo = "";
259 int target_builds = 0; 255 int target_builds = 0;
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
313 // NOTIFICATION_WEB_STORE_PROMO_LOADED notification. 309 // NOTIFICATION_WEB_STORE_PROMO_LOADED notification.
314 promo_data.link = GURL(promo_link); 310 promo_data.link = GURL(promo_link);
315 promo_data.logo = GURL(promo_logo); 311 promo_data.logo = GURL(promo_logo);
316 apps_promo_logo_fetcher_.reset( 312 apps_promo_logo_fetcher_.reset(
317 new AppsPromoLogoFetcher(profile_, promo_data)); 313 new AppsPromoLogoFetcher(profile_, promo_data));
318 signal_found = true; 314 signal_found = true;
319 break; 315 break;
320 } 316 }
321 } 317 }
322 318
323 if (!signal_found) { 319 if (!signal_found) {
Dan Beam 2012/06/04 18:41:04 move comment out and remove curlies, IMO
achuithb 2012/06/04 19:52:59 Hopefully we'll delete this code.
324 // If no web store promos target this build, then clear all the prefs. 320 // If no web store promos target this build, then clear all the prefs.
325 AppsPromo::ClearPromo(); 321 AppsPromo::ClearPromo();
326 } 322 }
327 323
328 AppsPromo::SetWebStoreSupportedForLocale(is_webstore_active); 324 AppsPromo::SetWebStoreSupportedForLocale(is_webstore_active);
329 325
330 return; 326 return;
331 } 327 }
332 328
333 void PromoResourceService::UnpackLogoSignal( 329 void PromoResourceService::UnpackLogoSignal(
Dan Beam 2012/06/04 18:41:04 same story here with legacy code probably not bein
achuithb 2012/06/04 19:52:59 Will send an email, etc.
334 const DictionaryValue& parsed_json) { 330 const DictionaryValue& parsed_json) {
335 DictionaryValue* topic_dict; 331 DictionaryValue* topic_dict;
336 ListValue* answer_list; 332 ListValue* answer_list;
337 double old_logo_start = 0; 333 double old_logo_start = 0;
338 double old_logo_end = 0; 334 double old_logo_end = 0;
339 double logo_start = 0; 335 double logo_start = 0;
340 double logo_end = 0; 336 double logo_end = 0;
341 337
342 // Check for preexisting start and end values. 338 // Check for preexisting start and end values.
343 if (prefs_->HasPrefPath(prefs::kNtpCustomLogoStart) && 339 if (prefs_->HasPrefPath(prefs::kNtpCustomLogoStart) &&
344 prefs_->HasPrefPath(prefs::kNtpCustomLogoEnd)) { 340 prefs_->HasPrefPath(prefs::kNtpCustomLogoEnd)) {
345 old_logo_start = prefs_->GetDouble(prefs::kNtpCustomLogoStart); 341 old_logo_start = prefs_->GetDouble(prefs::kNtpCustomLogoStart);
346 old_logo_end = prefs_->GetDouble(prefs::kNtpCustomLogoEnd); 342 old_logo_end = prefs_->GetDouble(prefs::kNtpCustomLogoEnd);
347 } 343 }
348 344
349 // Check for newly received start and end values. 345 // Check for newly received start and end values.
350 if (parsed_json.GetDictionary("topic", &topic_dict)) { 346 if (parsed_json.GetDictionary("topic", &topic_dict)) {
351 if (topic_dict->GetList("answers", &answer_list)) { 347 if (topic_dict->GetList("answers", &answer_list)) {
352 std::string logo_start_string = ""; 348 std::string logo_start_string = "";
353 std::string logo_end_string = ""; 349 std::string logo_end_string = "";
354 for (ListValue::const_iterator answer_iter = answer_list->begin(); 350 for (ListValue::const_iterator answer_iter = answer_list->begin();
355 answer_iter != answer_list->end(); ++answer_iter) { 351 answer_iter != answer_list->end(); ++answer_iter) {
356 if (!(*answer_iter)->IsType(Value::TYPE_DICTIONARY)) 352 if (!(*answer_iter)->IsType(Value::TYPE_DICTIONARY))
357 continue; 353 continue;
358 DictionaryValue* a_dic = 354 DictionaryValue* a_dic =
359 static_cast<DictionaryValue*>(*answer_iter); 355 static_cast<DictionaryValue*>(*answer_iter);
360 std::string logo_signal; 356 std::string logo_signal;
361 if (a_dic->GetString("name", &logo_signal)) { 357 if (a_dic->GetString("name", &logo_signal)) {
362 if (logo_signal == "custom_logo_start") { 358 if (logo_signal == "custom_logo_start") {
Dan Beam 2012/06/04 18:41:04 no curlies
achuithb 2012/06/04 19:52:59 Hopefully delete this
363 a_dic->GetString("inproduct", &logo_start_string); 359 a_dic->GetString("inproduct", &logo_start_string);
364 } else if (logo_signal == "custom_logo_end") { 360 } else if (logo_signal == "custom_logo_end") {
365 a_dic->GetString("inproduct", &logo_end_string); 361 a_dic->GetString("inproduct", &logo_end_string);
366 } 362 }
367 } 363 }
368 } 364 }
369 if (!logo_start_string.empty() && 365 if (!logo_start_string.empty() &&
370 logo_start_string.length() > 0 && 366 logo_start_string.length() > 0 &&
371 !logo_end_string.empty() && 367 !logo_end_string.empty() &&
372 logo_end_string.length() > 0) { 368 logo_end_string.length() > 0) {
373 base::Time start_time; 369 base::Time start_time;
374 base::Time end_time; 370 base::Time end_time;
375 if (base::Time::FromString(logo_start_string.c_str(), &start_time) && 371 if (base::Time::FromString(logo_start_string.c_str(), &start_time) &&
376 base::Time::FromString(logo_end_string.c_str(), &end_time)) { 372 base::Time::FromString(logo_end_string.c_str(), &end_time)) {
377 logo_start = start_time.ToDoubleT(); 373 logo_start = start_time.ToDoubleT();
378 logo_end = end_time.ToDoubleT(); 374 logo_end = end_time.ToDoubleT();
379 } 375 }
380 } 376 }
381 } 377 }
382 } 378 }
383 379
384 // If logo start or end times have changed, trigger a new web resource 380 // If logo start or end times have changed, trigger a new web resource
385 // notification, so that the logo on the NTP is updated. This check is 381 // notification, so that the logo on the NTP is updated. This check is
386 // outside the reading of the web resource data, because the absence of 382 // outside the reading of the web resource data, because the absence of
387 // dates counts as a triggering change if there were dates before. 383 // dates counts as a triggering change if there were dates before.
388 if (!(old_logo_start == logo_start) || 384 if (!(old_logo_start == logo_start) ||
Dan Beam 2012/06/04 18:41:04 demorgan's law + less ()
achuithb 2012/06/04 19:52:59 hopefully delete this.
389 !(old_logo_end == logo_end)) { 385 !(old_logo_end == logo_end)) {
390 prefs_->SetDouble(prefs::kNtpCustomLogoStart, logo_start); 386 prefs_->SetDouble(prefs::kNtpCustomLogoStart, logo_start);
391 prefs_->SetDouble(prefs::kNtpCustomLogoEnd, logo_end); 387 prefs_->SetDouble(prefs::kNtpCustomLogoEnd, logo_end);
392 content::NotificationService* service = 388 content::NotificationService* service =
393 content::NotificationService::current(); 389 content::NotificationService::current();
394 service->Notify(chrome::NOTIFICATION_PROMO_RESOURCE_STATE_CHANGED, 390 service->Notify(chrome::NOTIFICATION_PROMO_RESOURCE_STATE_CHANGED,
395 content::Source<WebResourceService>(this), 391 content::Source<WebResourceService>(this),
396 content::NotificationService::NoDetails()); 392 content::NotificationService::NoDetails());
397 } 393 }
398 } 394 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698