1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Copyright 2014 The Chromium Authors. All rights reserved.
2116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
3116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// found in the LICENSE file.
4116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#ifndef COMPONENTS_SUGGESTIONS_BLACKLIST_STORE_H_
65f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define COMPONENTS_SUGGESTIONS_BLACKLIST_STORE_H_
7116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/macros.h"
95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "components/suggestions/proto/suggestions.pb.h"
10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "url/gurl.h"
11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
12116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass PrefService;
13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
14116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace user_prefs {
15116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass PrefRegistrySyncable;
16116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}  // namespace user_prefs
17116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
18116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace suggestions {
19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
20116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// A helper class for reading, writing and modifying a small blacklist stored
21116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// in the Profile preferences. It also handles SuggestionsProfile
22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// filtering based on the stored blacklist.
23116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass BlacklistStore {
24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public:
25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  explicit BlacklistStore(PrefService* profile_prefs);
26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual ~BlacklistStore();
27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Returns true if successful or |url| was already in the blacklist.
29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual bool BlacklistUrl(const GURL& url);
30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Sets |url| to the first URL from the blacklist. Returns false if the
32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // blacklist is empty.
33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual bool GetFirstUrlFromBlacklist(GURL* url);
34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Removes |url| from the stored blacklist. Returns true if successful or if
36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // |url| is not in the blacklist.
37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual bool RemoveUrl(const GURL& url);
38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Applies the blacklist to |suggestions|.
40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void FilterSuggestions(SuggestionsProfile* suggestions);
41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Register BlacklistStore related prefs in the Profile prefs.
43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry);
44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch protected:
46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Test seam. For simplicity of mock creation.
47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  BlacklistStore() {}
48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Loads the blacklist data from the Profile preferences into
50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // |blacklist|. If there is a problem with loading, the pref value is
51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // cleared, false is returned and |blacklist| is cleared. If successful,
52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // |blacklist| will contain the loaded data and true is returned.
53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  bool LoadBlacklist(SuggestionsBlacklist* blacklist);
54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Stores the provided |blacklist| to the Profile preferences, using
56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // a base64 encoding of its protobuf serialization.
57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  bool StoreBlacklist(const SuggestionsBlacklist& blacklist);
58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Clears any blacklist data from the profile's preferences.
60116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  void ClearBlacklist();
61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch private:
63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // The pref service used to persist the suggestions blacklist.
64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  PrefService* pref_service_;
65116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
66116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  DISALLOW_COPY_AND_ASSIGN(BlacklistStore);
67116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch};
68116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
69116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}  // namespace suggestions
70116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif  // COMPONENTS_SUGGESTIONS_BLACKLIST_STORE_H_
72