1d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch// Copyright (c) 2013 The Chromium Authors. All rights reserved. 2d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 3d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch// found in the LICENSE file. 4d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 5d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch#include "chrome/browser/policy/configuration_policy_handler_android.h" 6d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 7d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch#include "base/prefs/pref_value_map.h" 8d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch#include "base/values.h" 9d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch#include "chrome/common/net/url_fixer_upper.h" 10d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch#include "chrome/common/pref_names.h" 11a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "components/policy/core/browser/policy_error_map.h" 12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "components/policy/core/common/policy_map.h" 13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "grit/component_strings.h" 14d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch#include "policy/policy_constants.h" 15d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch#include "url/gurl.h" 16d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 17d3868032626d59662ff73b372b5d584c1d144c53Ben Murdochnamespace policy { 18d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 19d3868032626d59662ff73b372b5d584c1d144c53Ben Murdochnamespace { 20d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 21d3868032626d59662ff73b372b5d584c1d144c53Ben Murdochbool GetBookmark(const base::Value& value, 22d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch std::string* name, 23d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch std::string* url) { 24d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch const base::DictionaryValue* dict = NULL; 25d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch if (!value.GetAsDictionary(&dict)) 26d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch return false; 27d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch std::string url_string; 28d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch if (!dict->GetStringWithoutPathExpansion(ManagedBookmarksPolicyHandler::kName, 29d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch name) || 30d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch !dict->GetStringWithoutPathExpansion(ManagedBookmarksPolicyHandler::kUrl, 31d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch &url_string)) { 32d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch return false; 33d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch } 34d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch GURL gurl = URLFixerUpper::FixupURL(url_string, ""); 35d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch if (!gurl.is_valid()) 36d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch return false; 37d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch *url = gurl.spec(); 38d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch return true; 39d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch} 40d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 41d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch} // namespace 42d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 43d3868032626d59662ff73b372b5d584c1d144c53Ben Murdochconst char ManagedBookmarksPolicyHandler::kName[] = "name"; 44d3868032626d59662ff73b372b5d584c1d144c53Ben Murdochconst char ManagedBookmarksPolicyHandler::kUrl[] = "url"; 45d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 46d3868032626d59662ff73b372b5d584c1d144c53Ben MurdochManagedBookmarksPolicyHandler::ManagedBookmarksPolicyHandler() 47d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch : TypeCheckingPolicyHandler(key::kManagedBookmarks, 48d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch base::Value::TYPE_LIST) {} 49d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 50d3868032626d59662ff73b372b5d584c1d144c53Ben MurdochManagedBookmarksPolicyHandler::~ManagedBookmarksPolicyHandler() {} 51d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 52d3868032626d59662ff73b372b5d584c1d144c53Ben Murdochbool ManagedBookmarksPolicyHandler::CheckPolicySettings( 53d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch const PolicyMap& policies, 54d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch PolicyErrorMap* errors) { 55d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch const base::Value* value = NULL; 56d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch if (!CheckAndGetValue(policies, errors, &value)) 57d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch return false; 58d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 59d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch if (!value) 60d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch return true; 61d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 62d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch const base::ListValue* list = NULL; 63d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch value->GetAsList(&list); 64d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch DCHECK(list); 65d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 66d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch for (base::ListValue::const_iterator it = list->begin(); 67d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch it != list->end(); ++it) { 68d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch std::string name; 69d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch std::string url; 70d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch if (!*it || !GetBookmark(**it, &name, &url)) { 71d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch size_t index = it - list->begin(); 72d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch errors->AddError(policy_name(), IDS_POLICY_INVALID_BOOKMARK, index); 73d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch } 74d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch } 75d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 76d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch return true; 77d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch} 78d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 79d3868032626d59662ff73b372b5d584c1d144c53Ben Murdochvoid ManagedBookmarksPolicyHandler::ApplyPolicySettings( 80d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch const PolicyMap& policies, 81d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch PrefValueMap* prefs) { 82d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch const base::Value* value = policies.GetValue(policy_name()); 83d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch const base::ListValue* list = NULL; 84d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch if (!value || !value->GetAsList(&list)) 85d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch return; 86d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 87d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch base::ListValue* bookmarks = new base::ListValue(); 88d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch for (base::ListValue::const_iterator it = list->begin(); 89d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch it != list->end(); ++it) { 90d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch std::string name; 91d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch std::string url; 92d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch if (*it && GetBookmark(**it, &name, &url)) { 93d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch base::DictionaryValue* dict = new base::DictionaryValue(); 94d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch dict->SetString(kName, name); 95d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch dict->SetString(kUrl, url); 96d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch bookmarks->Append(dict); 97d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch } 98d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch } 99d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 100d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch prefs->SetValue(prefs::kManagedBookmarks, bookmarks); 101d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch} 102d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 103d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch} // namespace policy 104