11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Copyright 2014 The Chromium Authors. All rights reserved. 21320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Use of this source code is governed by a BSD-style license that can be 31320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// found in the LICENSE file. 41320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#ifndef CHROME_BROWSER_SUPERVISED_USER_EXPERIMENTAL_SUPERVISED_USER_BLACKLIST_H_ 61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#define CHROME_BROWSER_SUPERVISED_USER_EXPERIMENTAL_SUPERVISED_USER_BLACKLIST_H_ 71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include <string> 91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include <vector> 101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/callback_forward.h" 121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/macros.h" 131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/memory/scoped_ptr.h" 141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/memory/weak_ptr.h" 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/sha1.h" 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace base { 181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass FilePath; 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass GURL; 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Compact list of (SHA1 hashes of) blocked hosts. 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Checking for URLs is thread-safe, loading is not. 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass SupervisedUserBlacklist { 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public: 271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci struct Hash { 281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Hash() {} 291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci explicit Hash(const std::string& host); 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool operator<(const Hash& rhs) const; 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci unsigned char data[base::kSHA1Length]; 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }; 341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SupervisedUserBlacklist(); 361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ~SupervisedUserBlacklist(); 371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Asynchronously read a blacklist from the given file, replacing any previous 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // entries. |done_callback| will be run after reading finishes (successfully 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // or not), but not if the SupervisedUserBlacklist is destroyed before that. 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void ReadFromFile(const base::FilePath& path, 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const base::Closure& done_callback); 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool HasURL(const GURL& url) const; 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci size_t GetEntryCount() const; 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private: 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void OnReadFromFileCompleted(const base::Closure& done_callback, 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<std::vector<Hash> > host_hashes); 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::vector<Hash> host_hashes_; 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::WeakPtrFactory<SupervisedUserBlacklist> weak_ptr_factory_; 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DISALLOW_COPY_AND_ASSIGN(SupervisedUserBlacklist); 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}; 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif // CHROME_BROWSER_SUPERVISED_USER_EXPERIMENTAL_SUPERVISED_USER_BLACKLIST_H_ 60