text: // Copyright 2014 The Chromium Authors. All rights reserved.
  // Use of this source code is governed by a BSD-style license that can be
  // found in the LICENSE file.
  
  #ifndef CHROME_BROWSER_SEARCH_SUGGESTIONS_SUGGESTIONS_STORE_H_
  #define CHROME_BROWSER_SEARCH_SUGGESTIONS_SUGGESTIONS_STORE_H_
  
  #include "base/macros.h"
  #include "chrome/browser/search/suggestions/proto/suggestions.pb.h"
  
  class PrefService;
  
  namespace user_prefs {
  class PrefRegistrySyncable;
  }  // namespace user_prefs
  
  namespace suggestions {
  
  // A helper class for reading and writing the suggestions to the profile's
  // preference file.
  class SuggestionsStore {
   public:
    explicit SuggestionsStore(PrefService* profile_prefs);
    virtual ~SuggestionsStore();
  
    // Loads the suggestion data from the profile's preferences into
    // |suggestions|. If there is a problem with loading, the pref value is
    // cleared, false is returned and |suggestions| is cleared. If successful,
    // |suggestions| will contain the loaded data and true is returned.
    virtual bool LoadSuggestions(SuggestionsProfile* suggestions);
  
    // Stores the provided |suggestions| to the profile's preferences, using
    // a base64 encoding of its protobuf serialization.
    virtual bool StoreSuggestions(const SuggestionsProfile& suggestions);
  
    // Clears any suggestion data from the profile's preferences.
    virtual void ClearSuggestions();
  
    // Register SuggestionsStore related prefs in the Profile prefs.
    static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry);
  
   protected:
    // Test seam. For simplicity of mock creation.
    SuggestionsStore() {}
  
   private:
    // The pref service used to persist the suggestions data.
    PrefService* pref_service_;
  
    DISALLOW_COPY_AND_ASSIGN(SuggestionsStore);
  };
  
  }  // namespace suggestions
  
  #endif  // CHROME_BROWSER_SEARCH_SUGGESTIONS_SUGGESTIONS_STORE_H_
  