1f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#ifndef CHROME_BROWSER_SUPERVISED_USER_SUPERVISED_USER_SITE_LIST_H_ 6f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#define CHROME_BROWSER_SUPERVISED_USER_SUPERVISED_USER_SITE_LIST_H_ 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <string> 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <vector> 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/ref_counted.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/scoped_ptr.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/scoped_vector.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class Profile; 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace base { 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class DictionaryValue; 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ListValue; 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// This class represents a "site list" that is part of a content pack. It is 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// loaded from a JSON file inside the extension bundle, which defines the sites 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// on the list. 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Every site has -- among other attributes -- a whitelist of URLs that are 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// required to use it. All sites from all installed content packs together with 28f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// their respective whitelists are combined in the SupervisedUserURLFilter, 29f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// which can tell for a given URL if it is part of the whitelist for any site. 30f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Effectively, SupervisedUserURLFilter then acts as a big whitelist which is 31f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// the union of the whitelists in all sites in all content packs. See 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// http://goo.gl/cBCB8 for a diagram. 33f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class SupervisedUserSiteList { 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) struct Site { 36a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) Site(const base::string16& name, int category_id); 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ~Site(); 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The human-readable name for the site. 40a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 name; 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // An identifier for the category. Categories are hardcoded and start with 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // 1, but apart from the offset correspond to the return values from 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // GetCategoryNames() below. 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int category_id; 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // A list of URL patterns that should be whitelisted for the site. 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::vector<std::string> patterns; 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // A list of SHA1 hashes of hostnames that should be whitelisted 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // for the site. 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::vector<std::string> hostname_hashes; 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 55f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SupervisedUserSiteList(const std::string& extension_id, 56f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const base::FilePath& path); 57f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ~SupervisedUserSiteList(); 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Creates a copy of the site list. 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Caller takes ownership of the returned value. 61f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SupervisedUserSiteList* Clone(); 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns a list of all categories. 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // TODO(bauerb): The list is hardcoded for now, but if we allow custom 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // categories, this should live in some registry. 665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) static void GetCategoryNames(std::vector<base::string16>* categories); 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns a list of all sites in this site list. 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void GetSites(std::vector<Site>* sites); 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool LazyLoad(); 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void CopyThumbnailUrl(const base::DictionaryValue* source, 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::DictionaryValue* dest); 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string extension_id_; 77f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::FilePath path_; 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<base::DictionaryValue> categories_; 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<base::ListValue> sites_; 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 81f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(SupervisedUserSiteList); 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 84f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#endif // CHROME_BROWSER_SUPERVISED_USER_SUPERVISED_USER_SITE_LIST_H_ 85