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_SUPERVISED_USER_SITE_LIST_H_ 6 #define CHROME_BROWSER_SUPERVISED_USER_SUPERVISED_USER_SITE_LIST_H_ 7 8 #include <string> 9 #include <vector> 10 11 #include "base/files/file_path.h" 12 #include "base/memory/ref_counted.h" 13 #include "base/memory/scoped_ptr.h" 14 #include "base/memory/scoped_vector.h" 15 16 class Profile; 17 18 namespace base { 19 class DictionaryValue; 20 class ListValue; 21 } 22 23 // This class represents a "site list" that is part of a content pack. It is 24 // loaded from a JSON file inside the extension bundle, which defines the sites 25 // on the list. 26 // Every site has -- among other attributes -- a whitelist of URLs that are 27 // required to use it. All sites from all installed content packs together with 28 // their respective whitelists are combined in the SupervisedUserURLFilter, 29 // which can tell for a given URL if it is part of the whitelist for any site. 30 // Effectively, SupervisedUserURLFilter then acts as a big whitelist which is 31 // the union of the whitelists in all sites in all content packs. See 32 // http://goo.gl/cBCB8 for a diagram. 33 class SupervisedUserSiteList { 34 public: 35 struct Site { 36 Site(const base::string16& name, int category_id); 37 ~Site(); 38 39 // The human-readable name for the site. 40 base::string16 name; 41 42 // An identifier for the category. Categories are hardcoded and start with 43 // 1, but apart from the offset correspond to the return values from 44 // GetCategoryNames() below. 45 int category_id; 46 47 // A list of URL patterns that should be whitelisted for the site. 48 std::vector<std::string> patterns; 49 50 // A list of SHA1 hashes of hostnames that should be whitelisted 51 // for the site. 52 std::vector<std::string> hostname_hashes; 53 }; 54 55 SupervisedUserSiteList(const std::string& extension_id, 56 const base::FilePath& path); 57 ~SupervisedUserSiteList(); 58 59 // Creates a copy of the site list. 60 // Caller takes ownership of the returned value. 61 SupervisedUserSiteList* Clone(); 62 63 // Returns a list of all categories. 64 // TODO(bauerb): The list is hardcoded for now, but if we allow custom 65 // categories, this should live in some registry. 66 static void GetCategoryNames(std::vector<base::string16>* categories); 67 68 // Returns a list of all sites in this site list. 69 void GetSites(std::vector<Site>* sites); 70 71 private: 72 bool LazyLoad(); 73 void CopyThumbnailUrl(const base::DictionaryValue* source, 74 base::DictionaryValue* dest); 75 76 std::string extension_id_; 77 base::FilePath path_; 78 scoped_ptr<base::DictionaryValue> categories_; 79 scoped_ptr<base::ListValue> sites_; 80 81 DISALLOW_COPY_AND_ASSIGN(SupervisedUserSiteList); 82 }; 83 84 #endif // CHROME_BROWSER_SUPERVISED_USER_SUPERVISED_USER_SITE_LIST_H_ 85