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

Side by Side Diff: components/suggestions/suggestions_service.cc

Issue 423133003: [Suggestions Service] Add support for expiring the SuggestionsStore (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: unittest fixes Created 6 years, 4 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
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "components/suggestions/suggestions_service.h" 5 #include "components/suggestions/suggestions_service.h"
6 6
7 #include <sstream> 7 #include <sstream>
8 #include <string> 8 #include <string>
9 9
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
94 const char kSuggestionsFieldTrialName[] = "ChromeSuggestions"; 94 const char kSuggestionsFieldTrialName[] = "ChromeSuggestions";
95 const char kSuggestionsFieldTrialURLParam[] = "url"; 95 const char kSuggestionsFieldTrialURLParam[] = "url";
96 const char kSuggestionsFieldTrialCommonParamsParam[] = "common_params"; 96 const char kSuggestionsFieldTrialCommonParamsParam[] = "common_params";
97 const char kSuggestionsFieldTrialBlacklistPathParam[] = "blacklist_path"; 97 const char kSuggestionsFieldTrialBlacklistPathParam[] = "blacklist_path";
98 const char kSuggestionsFieldTrialBlacklistUrlParam[] = "blacklist_url_param"; 98 const char kSuggestionsFieldTrialBlacklistUrlParam[] = "blacklist_url_param";
99 const char kSuggestionsFieldTrialStateParam[] = "state"; 99 const char kSuggestionsFieldTrialStateParam[] = "state";
100 const char kSuggestionsFieldTrialControlParam[] = "control"; 100 const char kSuggestionsFieldTrialControlParam[] = "control";
101 const char kSuggestionsFieldTrialStateEnabled[] = "enabled"; 101 const char kSuggestionsFieldTrialStateEnabled[] = "enabled";
102 const char kSuggestionsFieldTrialTimeoutMs[] = "timeout_ms"; 102 const char kSuggestionsFieldTrialTimeoutMs[] = "timeout_ms";
103 103
104 // The default expiry timeout is 72 hours.
105 const int64 kDefaultExpiryUsec = 72 * base::Time::kMicrosecondsPerHour;
106
104 namespace { 107 namespace {
105 108
106 std::string GetBlacklistUrlPrefix() { 109 std::string GetBlacklistUrlPrefix() {
107 std::stringstream blacklist_url_prefix_stream; 110 std::stringstream blacklist_url_prefix_stream;
108 blacklist_url_prefix_stream 111 blacklist_url_prefix_stream
109 << GetExperimentParam(kSuggestionsFieldTrialURLParam) 112 << GetExperimentParam(kSuggestionsFieldTrialURLParam)
110 << GetExperimentParam(kSuggestionsFieldTrialBlacklistPathParam) << "?" 113 << GetExperimentParam(kSuggestionsFieldTrialBlacklistPathParam) << "?"
111 << GetExperimentParam(kSuggestionsFieldTrialCommonParamsParam) << "&" 114 << GetExperimentParam(kSuggestionsFieldTrialCommonParamsParam) << "&"
112 << GetExperimentParam(kSuggestionsFieldTrialBlacklistUrlParam) << "="; 115 << GetExperimentParam(kSuggestionsFieldTrialBlacklistUrlParam) << "=";
113 return blacklist_url_prefix_stream.str(); 116 return blacklist_url_prefix_stream.str();
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after
297 // Handle a successful blacklisting. 300 // Handle a successful blacklisting.
298 GURL blacklisted_url; 301 GURL blacklisted_url;
299 if (GetBlacklistedUrl(*source, &blacklisted_url)) { 302 if (GetBlacklistedUrl(*source, &blacklisted_url)) {
300 blacklist_store_->RemoveUrl(blacklisted_url); 303 blacklist_store_->RemoveUrl(blacklisted_url);
301 } 304 }
302 305
303 std::string suggestions_data; 306 std::string suggestions_data;
304 bool success = request->GetResponseAsString(&suggestions_data); 307 bool success = request->GetResponseAsString(&suggestions_data);
305 DCHECK(success); 308 DCHECK(success);
306 309
307 // Compute suggestions, and dispatch then to requestors. On error still 310 // Compute suggestions, and dispatch them to requestors. On error still
308 // dispatch empty suggestions. 311 // dispatch empty suggestions.
309 SuggestionsProfile suggestions; 312 SuggestionsProfile suggestions;
310 if (suggestions_data.empty()) { 313 if (suggestions_data.empty()) {
311 LogResponseState(RESPONSE_EMPTY); 314 LogResponseState(RESPONSE_EMPTY);
312 suggestions_store_->ClearSuggestions(); 315 suggestions_store_->ClearSuggestions();
313 } else if (suggestions.ParseFromString(suggestions_data)) { 316 } else if (suggestions.ParseFromString(suggestions_data)) {
314 LogResponseState(RESPONSE_VALID); 317 LogResponseState(RESPONSE_VALID);
315 thumbnail_manager_->Initialize(suggestions); 318 thumbnail_manager_->Initialize(suggestions);
319
320 int64 now_usec = (base::Time::NowFromSystemTime() - base::Time::UnixEpoch())
321 .ToInternalValue();
322 SetDefaultExpiryTimestamp(&suggestions, now_usec + kDefaultExpiryUsec);
316 suggestions_store_->StoreSuggestions(suggestions); 323 suggestions_store_->StoreSuggestions(suggestions);
317 } else { 324 } else {
318 LogResponseState(RESPONSE_INVALID); 325 LogResponseState(RESPONSE_INVALID);
319 suggestions_store_->LoadSuggestions(&suggestions); 326 suggestions_store_->LoadSuggestions(&suggestions);
320 } 327 }
321 328
322 FilterAndServe(&suggestions); 329 FilterAndServe(&suggestions);
323 ScheduleBlacklistUpload(true); 330 ScheduleBlacklistUpload(true);
324 } 331 }
325 332
333 void SuggestionsService::SetDefaultExpiryTimestamp(
334 SuggestionsProfile* suggestions, int64 default_timestamp_usec) {
335 for (int i = 0; i < suggestions->suggestions_size(); ++i) {
336 ChromeSuggestion* suggestion = suggestions->mutable_suggestions(i);
337 // Do not set expiry if the server has already provided a more specific
338 // expiry time for this suggestion.
339 if (!suggestion->has_expiry_ts()) {
340 suggestion->set_expiry_ts(default_timestamp_usec);
341 }
342 }
343 }
344
326 void SuggestionsService::Shutdown() { 345 void SuggestionsService::Shutdown() {
327 // Cancel pending request and timeout closure, then serve existing requestors 346 // Cancel pending request and timeout closure, then serve existing requestors
328 // from cache. 347 // from cache.
329 pending_request_.reset(NULL); 348 pending_request_.reset(NULL);
330 pending_timeout_closure_.reset(NULL); 349 pending_timeout_closure_.reset(NULL);
331 ServeFromCache(); 350 ServeFromCache();
332 } 351 }
333 352
334 void SuggestionsService::ServeFromCache() { 353 void SuggestionsService::ServeFromCache() {
335 SuggestionsProfile suggestions; 354 SuggestionsProfile suggestions;
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
379 if (last_request_successful) { 398 if (last_request_successful) {
380 blacklist_delay_sec_ = kBlacklistDefaultDelaySec; 399 blacklist_delay_sec_ = kBlacklistDefaultDelaySec;
381 } else { 400 } else {
382 int candidate_delay = blacklist_delay_sec_ * kBlacklistBackoffMultiplier; 401 int candidate_delay = blacklist_delay_sec_ * kBlacklistBackoffMultiplier;
383 if (candidate_delay < kBlacklistMaxDelaySec) 402 if (candidate_delay < kBlacklistMaxDelaySec)
384 blacklist_delay_sec_ = candidate_delay; 403 blacklist_delay_sec_ = candidate_delay;
385 } 404 }
386 } 405 }
387 406
388 } // namespace suggestions 407 } // namespace suggestions
OLDNEW
« no previous file with comments | « components/suggestions/suggestions_service.h ('k') | components/suggestions/suggestions_service_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698