Index: chrome/browser/managed_mode/managed_mode_site_list.cc |
diff --git a/chrome/browser/managed_mode/managed_mode_site_list.cc b/chrome/browser/managed_mode/managed_mode_site_list.cc |
deleted file mode 100644 |
index e254381b14081568eba97526c12e51b1fd63a5fc..0000000000000000000000000000000000000000 |
--- a/chrome/browser/managed_mode/managed_mode_site_list.cc |
+++ /dev/null |
@@ -1,255 +0,0 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "chrome/browser/managed_mode/managed_mode_site_list.h" |
- |
-#include "base/json/json_file_value_serializer.h" |
-#include "base/logging.h" |
-#include "base/strings/utf_string_conversions.h" |
-#include "base/values.h" |
-#include "extensions/common/extension.h" |
- |
-using base::DictionaryValue; |
-using base::ListValue; |
-using base::Value; |
- |
-const int kSitelistFormatVersion = 1; |
- |
-const char kCategoriesKey[] = "categories"; |
-const char kHostnameHashesKey[] = "hostname_hashes"; |
-const char kNameKey[] = "name"; |
-const char kSitesKey[] = "sites"; |
-const char kSitelistFormatVersionKey[] = "version"; |
-const char kThumbnailKey[] = "thumbnail"; |
-const char kThumbnailUrlKey[] = "thumbnail_url"; |
-const char kUrlKey[] = "url"; |
-const char kWhitelistKey[] = "whitelist"; |
- |
-namespace { |
- |
-struct CategoryInfo { |
- const char* identifier; |
- const char* name; |
-}; |
- |
-// These are placeholders for now. |
-CategoryInfo g_categories[] = { |
- {"com.google.chrome.animals", "Animals and Plants"}, |
- {"com.google.chrome.arts", "Arts"}, |
- {"com.google.chrome.business", "Business"}, |
- {"com.google.chrome.computers", "Computers"}, |
- {"com.google.chrome.education", "Education"}, |
- {"com.google.chrome.entertainment", "Entertainment"}, |
- {"com.google.chrome.games", "Games"}, |
- {"com.google.chrome.health", "Health"}, |
- {"com.google.chrome.home", "Home"}, |
- {"com.google.chrome.international", "International"}, |
- {"com.google.chrome.news", "News"}, |
- {"com.google.chrome.people", "People and Society"}, |
- {"com.google.chrome.places", "Places"}, |
- {"com.google.chrome.pre-school", "Pre-School"}, |
- {"com.google.chrome.reference", "Reference"}, |
- {"com.google.chrome.science", "Science"}, |
- {"com.google.chrome.shopping", "Shopping"}, |
- {"com.google.chrome.sports", "Sports and Hobbies"}, |
- {"com.google.chrome.teens", "Teens"} |
-}; |
- |
-// Category 0 is "not listed"; actual category IDs start at 1. |
-int GetCategoryId(const std::string& category) { |
- for (size_t i = 0; i < arraysize(g_categories); ++i) { |
- if (g_categories[i].identifier == category) |
- return i + 1; |
- } |
- return 0; |
-} |
- |
-// Takes a DictionaryValue entry from the JSON file and fills the whitelist |
-// (via URL patterns or hostname hashes) and the URL in the corresponding Site |
-// struct. |
-void AddWhitelistEntries(const base::DictionaryValue* site_dict, |
- ManagedModeSiteList::Site* site) { |
- std::vector<std::string>* patterns = &site->patterns; |
- |
- bool found = false; |
- const base::ListValue* whitelist = NULL; |
- if (site_dict->GetList(kWhitelistKey, &whitelist)) { |
- found = true; |
- for (base::ListValue::const_iterator whitelist_it = whitelist->begin(); |
- whitelist_it != whitelist->end(); ++whitelist_it) { |
- std::string pattern; |
- if (!(*whitelist_it)->GetAsString(&pattern)) { |
- LOG(ERROR) << "Invalid whitelist entry"; |
- continue; |
- } |
- |
- patterns->push_back(pattern); |
- } |
- } |
- |
- std::vector<std::string>* hashes = &site->hostname_hashes; |
- const base::ListValue* hash_list = NULL; |
- if (site_dict->GetList(kHostnameHashesKey, &hash_list)) { |
- found = true; |
- for (base::ListValue::const_iterator hash_list_it = hash_list->begin(); |
- hash_list_it != hash_list->end(); ++hash_list_it) { |
- std::string hash; |
- if (!(*hash_list_it)->GetAsString(&hash)) { |
- LOG(ERROR) << "Invalid whitelist entry"; |
- continue; |
- } |
- |
- hashes->push_back(hash); |
- } |
- } |
- |
- if (found) |
- return; |
- |
- // Fall back to using a whitelist based on the URL. |
- std::string url_str; |
- if (!site_dict->GetString(kUrlKey, &url_str)) { |
- LOG(ERROR) << "Whitelist is invalid"; |
- return; |
- } |
- |
- GURL url(url_str); |
- if (!url.is_valid()) { |
- LOG(ERROR) << "URL " << url_str << " is invalid"; |
- return; |
- } |
- |
- patterns->push_back(url.host()); |
-} |
- |
-} // namespace |
- |
-ManagedModeSiteList::Site::Site(const base::string16& name, |
- int category_id) |
- : name(name), |
- category_id(category_id) {} |
- |
-ManagedModeSiteList::Site::~Site() {} |
- |
-ManagedModeSiteList::ManagedModeSiteList( |
- const std::string& extension_id, |
- const base::FilePath& path) |
- : extension_id_(extension_id), |
- path_(path) { |
-} |
- |
-ManagedModeSiteList::~ManagedModeSiteList() { |
-} |
- |
-ManagedModeSiteList* ManagedModeSiteList::Clone() { |
- return new ManagedModeSiteList(extension_id_, path_); |
-} |
- |
-// static |
-void ManagedModeSiteList::GetCategoryNames( |
- std::vector<base::string16>* categories) { |
- // TODO(bauerb): Collect custom categories from extensions. |
- for (size_t i = 0; i < arraysize(g_categories); ++i) { |
- categories->push_back(base::ASCIIToUTF16(g_categories[i].name)); |
- } |
-} |
- |
-void ManagedModeSiteList::GetSites(std::vector<Site>* sites) { |
- if (!LazyLoad()) |
- return; |
- |
- for (base::ListValue::iterator entry_it = sites_->begin(); |
- entry_it != sites_->end(); ++entry_it) { |
- base::DictionaryValue* entry = NULL; |
- if (!(*entry_it)->GetAsDictionary(&entry)) { |
- LOG(ERROR) << "Entry is invalid"; |
- continue; |
- } |
- |
- base::string16 name; |
- entry->GetString(kNameKey, &name); |
- |
- // TODO(bauerb): We need to distinguish between "no category assigned" and |
- // "not on any site list". |
- int category_id = 0; |
- const base::ListValue* categories = NULL; |
- if (entry->GetList(kCategoriesKey, &categories)) { |
- for (base::ListValue::const_iterator it = categories->begin(); |
- it != categories->end(); ++it) { |
- std::string category; |
- if (!(*it)->GetAsString(&category)) { |
- LOG(ERROR) << "Invalid category"; |
- continue; |
- } |
- category_id = GetCategoryId(category); |
- break; |
- } |
- } |
- sites->push_back(Site(name, category_id)); |
- AddWhitelistEntries(entry, &sites->back()); |
- } |
-} |
- |
-bool ManagedModeSiteList::LazyLoad() { |
- if (sites_.get()) |
- return true; |
- |
- JSONFileValueSerializer serializer(path_); |
- std::string error; |
- scoped_ptr<base::Value> value(serializer.Deserialize(NULL, &error)); |
- if (!value.get()) { |
- LOG(ERROR) << "Couldn't load site list " << path_.value() << ": " |
- << error; |
- return false; |
- } |
- |
- base::DictionaryValue* dict = NULL; |
- if (!value->GetAsDictionary(&dict)) { |
- LOG(ERROR) << "Site list " << path_.value() << " is invalid"; |
- return false; |
- } |
- |
- int version = 0; |
- if (!dict->GetInteger(kSitelistFormatVersionKey, &version)) { |
- LOG(ERROR) << "Site list " << path_.value() << " has invalid version"; |
- return false; |
- } |
- |
- if (version > kSitelistFormatVersion) { |
- LOG(ERROR) << "Site list " << path_.value() << " has a too new format"; |
- return false; |
- } |
- |
- base::ListValue* sites = NULL; |
- if (dict->GetList(kSitesKey, &sites)) |
- sites_.reset(sites->DeepCopy()); |
- |
- base::DictionaryValue* categories = NULL; |
- if (dict->GetDictionary(kCategoriesKey, &categories)) |
- categories_.reset(categories->DeepCopy()); |
- |
- return true; |
-} |
- |
-void ManagedModeSiteList::CopyThumbnailUrl(const base::DictionaryValue* source, |
- base::DictionaryValue* dest) { |
- if (!source->HasKey(kThumbnailKey)) |
- return; |
- |
- std::string thumbnail; |
- if (!source->GetString(kThumbnailKey, &thumbnail)) { |
- LOG(ERROR) << "Invalid thumbnail"; |
- return; |
- } |
- |
- GURL base_url = |
- extensions::Extension::GetBaseURLFromExtensionId(extension_id_); |
- GURL thumbnail_url = base_url.Resolve(thumbnail); |
- if (!thumbnail_url.is_valid()) { |
- LOG(ERROR) << "Invalid thumbnail"; |
- return; |
- } |
- |
- dest->SetString(kThumbnailUrlKey, thumbnail_url.spec()); |
-} |