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

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: more 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){
manzagop (departed) 2014/08/04 19:50:26 nit: space before the curly bracket
gayane -on leave until 09-2017 2014/08/05 14:39:15 Done.
49 StoreSuggestions(*suggestions);
50 }
51 if (!suggestions->suggestions_size()){
manzagop (departed) 2014/08/04 19:50:26 Perhaps in this case we should call ClearSuggestio
manzagop (departed) 2014/08/04 19:50:26 nit: same here.
gayane -on leave until 09-2017 2014/08/05 14:39:15 Done.
gayane -on leave until 09-2017 2014/08/05 14:39:15 Done.
52 suggestions->Clear();
53 return false;
54 }
55
43 return true; 56 return true;
44 } 57 }
45 58
59 void SuggestionsStore::FilterExpiredSuggestions(
60 SuggestionsProfile* suggestions) {
61 SuggestionsProfile filtered_suggestions;
62 int64 now_usec = (base::Time::NowFromSystemTime() - base::Time::UnixEpoch())
63 .ToInternalValue();
64
65 for (int i = 0; i < suggestions->suggestions_size(); ++i) {
66 ChromeSuggestion* suggestion = suggestions->mutable_suggestions(i);
67 if (!suggestion->has_expiry_ts() || suggestion->expiry_ts() > now_usec) {
68 filtered_suggestions.add_suggestions()->Swap(suggestion);
69 }
70 }
71 suggestions->Swap(&filtered_suggestions);
72 }
73
46 bool SuggestionsStore::StoreSuggestions(const SuggestionsProfile& suggestions) { 74 bool SuggestionsStore::StoreSuggestions(const SuggestionsProfile& suggestions) {
47 std::string suggestions_data; 75 std::string suggestions_data;
48 if (!suggestions.SerializeToString(&suggestions_data)) return false; 76 if (!suggestions.SerializeToString(&suggestions_data)) return false;
49 77
50 std::string base64_suggestions_data; 78 std::string base64_suggestions_data;
51 base::Base64Encode(suggestions_data, &base64_suggestions_data); 79 base::Base64Encode(suggestions_data, &base64_suggestions_data);
52 80
53 pref_service_->SetString(prefs::kSuggestionsData, base64_suggestions_data); 81 pref_service_->SetString(prefs::kSuggestionsData, base64_suggestions_data);
54 return true; 82 return true;
55 } 83 }
56 84
57 void SuggestionsStore::ClearSuggestions() { 85 void SuggestionsStore::ClearSuggestions() {
58 pref_service_->ClearPref(prefs::kSuggestionsData); 86 pref_service_->ClearPref(prefs::kSuggestionsData);
59 } 87 }
60 88
61 // static 89 // static
62 void SuggestionsStore::RegisterProfilePrefs( 90 void SuggestionsStore::RegisterProfilePrefs(
63 user_prefs::PrefRegistrySyncable* registry) { 91 user_prefs::PrefRegistrySyncable* registry) {
64 registry->RegisterStringPref( 92 registry->RegisterStringPref(
65 prefs::kSuggestionsData, std::string(), 93 prefs::kSuggestionsData, std::string(),
66 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 94 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
67 } 95 }
68 96
69 } // namespace suggestions 97 } // namespace suggestions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698