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#ifndef CHROME_BROWSER_SUPERVISED_USER_EXPERIMENTAL_SUPERVISED_USER_BLACKLIST_H_ 6#define CHROME_BROWSER_SUPERVISED_USER_EXPERIMENTAL_SUPERVISED_USER_BLACKLIST_H_ 7 8#include <string> 9#include <vector> 10 11#include "base/callback_forward.h" 12#include "base/macros.h" 13#include "base/memory/scoped_ptr.h" 14#include "base/memory/weak_ptr.h" 15#include "base/sha1.h" 16 17namespace base { 18class FilePath; 19} 20 21class GURL; 22 23// Compact list of (SHA1 hashes of) blocked hosts. 24// Checking for URLs is thread-safe, loading is not. 25class SupervisedUserBlacklist { 26 public: 27 struct Hash { 28 Hash() {} 29 explicit Hash(const std::string& host); 30 bool operator<(const Hash& rhs) const; 31 32 unsigned char data[base::kSHA1Length]; 33 }; 34 35 SupervisedUserBlacklist(); 36 ~SupervisedUserBlacklist(); 37 38 // Asynchronously read a blacklist from the given file, replacing any previous 39 // entries. |done_callback| will be run after reading finishes (successfully 40 // or not), but not if the SupervisedUserBlacklist is destroyed before that. 41 void ReadFromFile(const base::FilePath& path, 42 const base::Closure& done_callback); 43 44 bool HasURL(const GURL& url) const; 45 46 size_t GetEntryCount() const; 47 48 private: 49 void OnReadFromFileCompleted(const base::Closure& done_callback, 50 scoped_ptr<std::vector<Hash> > host_hashes); 51 52 std::vector<Hash> host_hashes_; 53 54 base::WeakPtrFactory<SupervisedUserBlacklist> weak_ptr_factory_; 55 56 DISALLOW_COPY_AND_ASSIGN(SupervisedUserBlacklist); 57}; 58 59#endif // CHROME_BROWSER_SUPERVISED_USER_EXPERIMENTAL_SUPERVISED_USER_BLACKLIST_H_ 60