Home | History | Annotate | Download | only in suggestions
      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
      3 // found in the LICENSE file.
      4 
      5 #include "chrome/browser/search/suggestions/suggestions_store.h"
      6 
      7 #include <string>
      8 
      9 #include "base/base64.h"
     10 #include "base/prefs/pref_service.h"
     11 #include "chrome/common/pref_names.h"
     12 #include "components/pref_registry/pref_registry_syncable.h"
     13 
     14 namespace suggestions {
     15 
     16 SuggestionsStore::SuggestionsStore(PrefService* profile_prefs)
     17     : pref_service_(profile_prefs) {
     18   DCHECK(profile_prefs);
     19 }
     20 
     21 SuggestionsStore::~SuggestionsStore() {}
     22 
     23 bool SuggestionsStore::LoadSuggestions(SuggestionsProfile* suggestions) {
     24   DCHECK(suggestions);
     25 
     26   const std::string base64_suggestions_data =
     27       pref_service_->GetString(prefs::kSuggestionsData);
     28   if (base64_suggestions_data.empty()) {
     29     suggestions->Clear();
     30     return false;
     31   }
     32 
     33   // If the decode process fails, assume the pref value is corrupt and clear it.
     34   std::string suggestions_data;
     35   if (!base::Base64Decode(base64_suggestions_data, &suggestions_data) ||
     36       !suggestions->ParseFromString(suggestions_data)) {
     37     VLOG(1) << "Suggestions data in profile pref is corrupt, clearing it.";
     38     suggestions->Clear();
     39     ClearSuggestions();
     40     return false;
     41   }
     42 
     43   return true;
     44 }
     45 
     46 bool SuggestionsStore::StoreSuggestions(const SuggestionsProfile& suggestions) {
     47   std::string suggestions_data;
     48   if (!suggestions.SerializeToString(&suggestions_data)) return false;
     49 
     50   std::string base64_suggestions_data;
     51   base::Base64Encode(suggestions_data, &base64_suggestions_data);
     52 
     53   pref_service_->SetString(prefs::kSuggestionsData, base64_suggestions_data);
     54   return true;
     55 }
     56 
     57 void SuggestionsStore::ClearSuggestions() {
     58   pref_service_->ClearPref(prefs::kSuggestionsData);
     59 }
     60 
     61 // static
     62 void SuggestionsStore::RegisterProfilePrefs(
     63     user_prefs::PrefRegistrySyncable* registry) {
     64   registry->RegisterStringPref(
     65       prefs::kSuggestionsData, std::string(),
     66       user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
     67 }
     68 
     69 }  // namespace suggestions
     70