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