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

Side by Side Diff: components/suggestions/suggestions_store.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_store.h" 5 #include "components/suggestions/suggestions_store.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/base64.h" 9 #include "base/base64.h"
10 #include "base/prefs/pref_service.h" 10 #include "base/prefs/pref_service.h"
11 #include "base/time/time.h"
11 #include "components/pref_registry/pref_registry_syncable.h" 12 #include "components/pref_registry/pref_registry_syncable.h"
12 #include "components/suggestions/suggestions_pref_names.h" 13 #include "components/suggestions/suggestions_pref_names.h"
13 14
14 namespace suggestions { 15 namespace suggestions {
15 16
16 SuggestionsStore::SuggestionsStore(PrefService* profile_prefs) 17 SuggestionsStore::SuggestionsStore(PrefService* profile_prefs)
17 : pref_service_(profile_prefs) { 18 : pref_service_(profile_prefs) {
18 DCHECK(profile_prefs); 19 DCHECK(profile_prefs);
19 } 20 }
20 21
(...skipping 12 matching lines...) Expand all
33 // If the decode process fails, assume the pref value is corrupt and clear it. 34 // If the decode process fails, assume the pref value is corrupt and clear it.
34 std::string suggestions_data; 35 std::string suggestions_data;
35 if (!base::Base64Decode(base64_suggestions_data, &suggestions_data) || 36 if (!base::Base64Decode(base64_suggestions_data, &suggestions_data) ||
36 !suggestions->ParseFromString(suggestions_data)) { 37 !suggestions->ParseFromString(suggestions_data)) {
37 VLOG(1) << "Suggestions data in profile pref is corrupt, clearing it."; 38 VLOG(1) << "Suggestions data in profile pref is corrupt, clearing it.";
38 suggestions->Clear(); 39 suggestions->Clear();
39 ClearSuggestions(); 40 ClearSuggestions();
40 return false; 41 return false;
41 } 42 }
42 43
44 // Filter expired suggestions and update the stored suggestions if at least
45 // one was filtered. Return false if all suggestions are filtered.
46 int unfiltered_size = suggestions->suggestions_size();
47 FilterExpiredSuggestions(suggestions);
48 if (suggestions->suggestions_size() != unfiltered_size) {
49 if (!suggestions->suggestions_size()) {
50 suggestions->Clear();
51 ClearSuggestions();
52 return false;
53 } else {
54 StoreSuggestions(*suggestions);
55 }
56 }
57
43 return true; 58 return true;
44 } 59 }
45 60
61 void SuggestionsStore::FilterExpiredSuggestions(
62 SuggestionsProfile* suggestions) {
63 SuggestionsProfile filtered_suggestions;
64 int64 now_usec = (base::Time::NowFromSystemTime() - base::Time::UnixEpoch())
65 .ToInternalValue();
66
67 for (int i = 0; i < suggestions->suggestions_size(); ++i) {
68 ChromeSuggestion* suggestion = suggestions->mutable_suggestions(i);
69 if (!suggestion->has_expiry_ts() || suggestion->expiry_ts() > now_usec) {
70 filtered_suggestions.add_suggestions()->Swap(suggestion);
71 }
72 }
73 suggestions->Swap(&filtered_suggestions);
74 }
75
46 bool SuggestionsStore::StoreSuggestions(const SuggestionsProfile& suggestions) { 76 bool SuggestionsStore::StoreSuggestions(const SuggestionsProfile& suggestions) {
47 std::string suggestions_data; 77 std::string suggestions_data;
48 if (!suggestions.SerializeToString(&suggestions_data)) return false; 78 if (!suggestions.SerializeToString(&suggestions_data)) return false;
49 79
50 std::string base64_suggestions_data; 80 std::string base64_suggestions_data;
51 base::Base64Encode(suggestions_data, &base64_suggestions_data); 81 base::Base64Encode(suggestions_data, &base64_suggestions_data);
52 82
53 pref_service_->SetString(prefs::kSuggestionsData, base64_suggestions_data); 83 pref_service_->SetString(prefs::kSuggestionsData, base64_suggestions_data);
54 return true; 84 return true;
55 } 85 }
56 86
57 void SuggestionsStore::ClearSuggestions() { 87 void SuggestionsStore::ClearSuggestions() {
58 pref_service_->ClearPref(prefs::kSuggestionsData); 88 pref_service_->ClearPref(prefs::kSuggestionsData);
59 } 89 }
60 90
61 // static 91 // static
62 void SuggestionsStore::RegisterProfilePrefs( 92 void SuggestionsStore::RegisterProfilePrefs(
63 user_prefs::PrefRegistrySyncable* registry) { 93 user_prefs::PrefRegistrySyncable* registry) {
64 registry->RegisterStringPref( 94 registry->RegisterStringPref(
65 prefs::kSuggestionsData, std::string(), 95 prefs::kSuggestionsData, std::string(),
66 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 96 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
67 } 97 }
68 98
69 } // namespace suggestions 99 } // namespace suggestions
OLDNEW
« no previous file with comments | « components/suggestions/suggestions_store.h ('k') | components/suggestions/suggestions_store_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698