| Index: chrome/browser/search_engines/default_search_policy_handler.cc
|
| diff --git a/chrome/browser/search_engines/default_search_policy_handler.cc b/chrome/browser/search_engines/default_search_policy_handler.cc
|
| deleted file mode 100644
|
| index 2ef354b9eeb512b1aeb9ba9b1a7ed77f294598c9..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/search_engines/default_search_policy_handler.cc
|
| +++ /dev/null
|
| @@ -1,461 +0,0 @@
|
| -// Copyright 2013 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/search_engines/default_search_policy_handler.h"
|
| -
|
| -#include "base/prefs/pref_value_map.h"
|
| -#include "base/stl_util.h"
|
| -#include "base/strings/string_number_conversions.h"
|
| -#include "base/strings/string_util.h"
|
| -#include "chrome/browser/search_engines/default_search_manager.h"
|
| -#include "components/policy/core/browser/policy_error_map.h"
|
| -#include "components/policy/core/common/policy_map.h"
|
| -#include "components/search_engines/search_engines_pref_names.h"
|
| -#include "components/search_engines/search_terms_data.h"
|
| -#include "components/search_engines/template_url.h"
|
| -#include "grit/components_strings.h"
|
| -#include "policy/policy_constants.h"
|
| -
|
| -namespace policy {
|
| -
|
| -namespace {
|
| -// Extracts a list from a policy value and adds it to a pref dictionary.
|
| -void SetListInPref(const PolicyMap& policies,
|
| - const char* policy_name,
|
| - const char* key,
|
| - base::DictionaryValue* dict) {
|
| - DCHECK(dict);
|
| - const base::Value* policy_value = policies.GetValue(policy_name);
|
| - const base::ListValue* policy_list = NULL;
|
| - if (policy_value) {
|
| - bool is_list = policy_value->GetAsList(&policy_list);
|
| - DCHECK(is_list);
|
| - }
|
| - dict->Set(key, policy_list ? policy_list->DeepCopy() : new base::ListValue());
|
| -}
|
| -
|
| -// Extracts a string from a policy value and adds it to a pref dictionary.
|
| -void SetStringInPref(const PolicyMap& policies,
|
| - const char* policy_name,
|
| - const char* key,
|
| - base::DictionaryValue* dict) {
|
| - DCHECK(dict);
|
| - const base::Value* policy_value = policies.GetValue(policy_name);
|
| - std::string str;
|
| - if (policy_value) {
|
| - bool is_string = policy_value->GetAsString(&str);
|
| - DCHECK(is_string);
|
| - }
|
| - dict->SetString(key, str);
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -// List of policy types to preference names, for policies affecting the default
|
| -// search provider.
|
| -const PolicyToPreferenceMapEntry kDefaultSearchPolicyMap[] = {
|
| - { key::kDefaultSearchProviderEnabled,
|
| - prefs::kDefaultSearchProviderEnabled,
|
| - base::Value::TYPE_BOOLEAN },
|
| - { key::kDefaultSearchProviderName,
|
| - prefs::kDefaultSearchProviderName,
|
| - base::Value::TYPE_STRING },
|
| - { key::kDefaultSearchProviderKeyword,
|
| - prefs::kDefaultSearchProviderKeyword,
|
| - base::Value::TYPE_STRING },
|
| - { key::kDefaultSearchProviderSearchURL,
|
| - prefs::kDefaultSearchProviderSearchURL,
|
| - base::Value::TYPE_STRING },
|
| - { key::kDefaultSearchProviderSuggestURL,
|
| - prefs::kDefaultSearchProviderSuggestURL,
|
| - base::Value::TYPE_STRING },
|
| - { key::kDefaultSearchProviderInstantURL,
|
| - prefs::kDefaultSearchProviderInstantURL,
|
| - base::Value::TYPE_STRING },
|
| - { key::kDefaultSearchProviderIconURL,
|
| - prefs::kDefaultSearchProviderIconURL,
|
| - base::Value::TYPE_STRING },
|
| - { key::kDefaultSearchProviderEncodings,
|
| - prefs::kDefaultSearchProviderEncodings,
|
| - base::Value::TYPE_LIST },
|
| - { key::kDefaultSearchProviderAlternateURLs,
|
| - prefs::kDefaultSearchProviderAlternateURLs,
|
| - base::Value::TYPE_LIST },
|
| - { key::kDefaultSearchProviderSearchTermsReplacementKey,
|
| - prefs::kDefaultSearchProviderSearchTermsReplacementKey,
|
| - base::Value::TYPE_STRING },
|
| - { key::kDefaultSearchProviderImageURL,
|
| - prefs::kDefaultSearchProviderImageURL,
|
| - base::Value::TYPE_STRING },
|
| - { key::kDefaultSearchProviderNewTabURL,
|
| - prefs::kDefaultSearchProviderNewTabURL,
|
| - base::Value::TYPE_STRING },
|
| - { key::kDefaultSearchProviderSearchURLPostParams,
|
| - prefs::kDefaultSearchProviderSearchURLPostParams,
|
| - base::Value::TYPE_STRING },
|
| - { key::kDefaultSearchProviderSuggestURLPostParams,
|
| - prefs::kDefaultSearchProviderSuggestURLPostParams,
|
| - base::Value::TYPE_STRING },
|
| - { key::kDefaultSearchProviderInstantURLPostParams,
|
| - prefs::kDefaultSearchProviderInstantURLPostParams,
|
| - base::Value::TYPE_STRING },
|
| - { key::kDefaultSearchProviderImageURLPostParams,
|
| - prefs::kDefaultSearchProviderImageURLPostParams,
|
| - base::Value::TYPE_STRING },
|
| -};
|
| -
|
| -// List of policy types to preference names, for policies affecting the default
|
| -// search provider.
|
| -const PolicyToPreferenceMapEntry kDefaultSearchPolicyDataMap[] = {
|
| - {key::kDefaultSearchProviderName, DefaultSearchManager::kShortName,
|
| - base::Value::TYPE_STRING},
|
| - {key::kDefaultSearchProviderKeyword, DefaultSearchManager::kKeyword,
|
| - base::Value::TYPE_STRING},
|
| - {key::kDefaultSearchProviderSearchURL, DefaultSearchManager::kURL,
|
| - base::Value::TYPE_STRING},
|
| - {key::kDefaultSearchProviderSuggestURL,
|
| - DefaultSearchManager::kSuggestionsURL, base::Value::TYPE_STRING},
|
| - {key::kDefaultSearchProviderInstantURL, DefaultSearchManager::kInstantURL,
|
| - base::Value::TYPE_STRING},
|
| - {key::kDefaultSearchProviderIconURL, DefaultSearchManager::kFaviconURL,
|
| - base::Value::TYPE_STRING},
|
| - {key::kDefaultSearchProviderEncodings,
|
| - DefaultSearchManager::kInputEncodings, base::Value::TYPE_LIST},
|
| - {key::kDefaultSearchProviderAlternateURLs,
|
| - DefaultSearchManager::kAlternateURLs, base::Value::TYPE_LIST},
|
| - {key::kDefaultSearchProviderSearchTermsReplacementKey,
|
| - DefaultSearchManager::kSearchTermsReplacementKey,
|
| - base::Value::TYPE_STRING},
|
| - {key::kDefaultSearchProviderImageURL, DefaultSearchManager::kImageURL,
|
| - base::Value::TYPE_STRING},
|
| - {key::kDefaultSearchProviderNewTabURL, DefaultSearchManager::kNewTabURL,
|
| - base::Value::TYPE_STRING},
|
| - {key::kDefaultSearchProviderSearchURLPostParams,
|
| - DefaultSearchManager::kSearchURLPostParams, base::Value::TYPE_STRING},
|
| - {key::kDefaultSearchProviderSuggestURLPostParams,
|
| - DefaultSearchManager::kSuggestionsURLPostParams, base::Value::TYPE_STRING},
|
| - {key::kDefaultSearchProviderInstantURLPostParams,
|
| - DefaultSearchManager::kInstantURLPostParams, base::Value::TYPE_STRING},
|
| - {key::kDefaultSearchProviderImageURLPostParams,
|
| - DefaultSearchManager::kImageURLPostParams, base::Value::TYPE_STRING},
|
| -};
|
| -
|
| -// DefaultSearchEncodingsPolicyHandler implementation --------------------------
|
| -
|
| -DefaultSearchEncodingsPolicyHandler::DefaultSearchEncodingsPolicyHandler()
|
| - : TypeCheckingPolicyHandler(key::kDefaultSearchProviderEncodings,
|
| - base::Value::TYPE_LIST) {}
|
| -
|
| -DefaultSearchEncodingsPolicyHandler::~DefaultSearchEncodingsPolicyHandler() {
|
| -}
|
| -
|
| -void DefaultSearchEncodingsPolicyHandler::ApplyPolicySettings(
|
| - const PolicyMap& policies, PrefValueMap* prefs) {
|
| - // The DefaultSearchProviderEncodings policy has type list, but the related
|
| - // preference has type string. Convert one into the other here, using
|
| - // ';' as a separator.
|
| - const base::Value* value = policies.GetValue(policy_name());
|
| - const base::ListValue* list;
|
| - if (!value || !value->GetAsList(&list))
|
| - return;
|
| -
|
| - base::ListValue::const_iterator iter(list->begin());
|
| - base::ListValue::const_iterator end(list->end());
|
| - std::vector<std::string> string_parts;
|
| - for (; iter != end; ++iter) {
|
| - std::string s;
|
| - if ((*iter)->GetAsString(&s)) {
|
| - string_parts.push_back(s);
|
| - }
|
| - }
|
| - std::string encodings = JoinString(string_parts, ';');
|
| - prefs->SetValue(prefs::kDefaultSearchProviderEncodings,
|
| - base::Value::CreateStringValue(encodings));
|
| -}
|
| -
|
| -
|
| -// DefaultSearchPolicyHandler implementation -----------------------------------
|
| -
|
| -DefaultSearchPolicyHandler::DefaultSearchPolicyHandler() {
|
| - for (size_t i = 0; i < arraysize(kDefaultSearchPolicyMap); ++i) {
|
| - const char* policy_name = kDefaultSearchPolicyMap[i].policy_name;
|
| - if (policy_name == key::kDefaultSearchProviderEncodings) {
|
| - handlers_.push_back(new DefaultSearchEncodingsPolicyHandler());
|
| - } else {
|
| - handlers_.push_back(new SimplePolicyHandler(
|
| - policy_name,
|
| - kDefaultSearchPolicyMap[i].preference_path,
|
| - kDefaultSearchPolicyMap[i].value_type));
|
| - }
|
| - }
|
| -}
|
| -
|
| -DefaultSearchPolicyHandler::~DefaultSearchPolicyHandler() {
|
| - STLDeleteElements(&handlers_);
|
| -}
|
| -
|
| -bool DefaultSearchPolicyHandler::CheckPolicySettings(const PolicyMap& policies,
|
| - PolicyErrorMap* errors) {
|
| - if (!CheckIndividualPolicies(policies, errors))
|
| - return false;
|
| -
|
| - if (DefaultSearchProviderIsDisabled(policies)) {
|
| - // Add an error for all specified default search policies except
|
| - // DefaultSearchProviderEnabled.
|
| -
|
| - for (std::vector<TypeCheckingPolicyHandler*>::const_iterator handler =
|
| - handlers_.begin();
|
| - handler != handlers_.end(); ++handler) {
|
| - const char* policy_name = (*handler)->policy_name();
|
| - if (policy_name != key::kDefaultSearchProviderEnabled &&
|
| - HasDefaultSearchPolicy(policies, policy_name)) {
|
| - errors->AddError(policy_name, IDS_POLICY_DEFAULT_SEARCH_DISABLED);
|
| - }
|
| - }
|
| - return true;
|
| - }
|
| -
|
| - const base::Value* url;
|
| - std::string dummy;
|
| - if (DefaultSearchURLIsValid(policies, &url, &dummy) ||
|
| - !AnyDefaultSearchPoliciesSpecified(policies))
|
| - return true;
|
| - errors->AddError(key::kDefaultSearchProviderSearchURL, url ?
|
| - IDS_POLICY_INVALID_SEARCH_URL_ERROR : IDS_POLICY_NOT_SPECIFIED_ERROR);
|
| - return false;
|
| -}
|
| -
|
| -void DefaultSearchPolicyHandler::HandleDictionaryPref(const PolicyMap& policies,
|
| - PrefValueMap* prefs) {
|
| - if (DefaultSearchProviderIsDisabled(policies)) {
|
| - scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue);
|
| - dict->SetBoolean(DefaultSearchManager::kDisabledByPolicy, true);
|
| - DefaultSearchManager::AddPrefValueToMap(dict.release(), prefs);
|
| - return;
|
| - }
|
| -
|
| - // The search URL is required. The other entries are optional. Just make
|
| - // sure that they are all specified via policy, so that the regular prefs
|
| - // aren't used.
|
| - const base::Value* dummy;
|
| - std::string url;
|
| - if (!DefaultSearchURLIsValid(policies, &dummy, &url))
|
| - return;
|
| -
|
| - scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue);
|
| - for (size_t i = 0; i < arraysize(kDefaultSearchPolicyDataMap); ++i) {
|
| - const char* policy_name = kDefaultSearchPolicyDataMap[i].policy_name;
|
| - switch (kDefaultSearchPolicyDataMap[i].value_type) {
|
| - case base::Value::TYPE_STRING:
|
| - SetStringInPref(policies,
|
| - policy_name,
|
| - kDefaultSearchPolicyDataMap[i].preference_path,
|
| - dict.get());
|
| - break;
|
| - case base::Value::TYPE_LIST:
|
| - SetListInPref(policies,
|
| - policy_name,
|
| - kDefaultSearchPolicyDataMap[i].preference_path,
|
| - dict.get());
|
| - break;
|
| - default:
|
| - NOTREACHED();
|
| - break;
|
| - }
|
| - }
|
| -
|
| - // Set the fields which are not specified by the policy to default values.
|
| - dict->SetString(DefaultSearchManager::kID,
|
| - base::Int64ToString(kInvalidTemplateURLID));
|
| - dict->SetInteger(DefaultSearchManager::kPrepopulateID, 0);
|
| - dict->SetString(DefaultSearchManager::kSyncGUID, std::string());
|
| - dict->SetString(DefaultSearchManager::kOriginatingURL, std::string());
|
| - dict->SetBoolean(DefaultSearchManager::kSafeForAutoReplace, true);
|
| - dict->SetDouble(DefaultSearchManager::kDateCreated,
|
| - base::Time::Now().ToInternalValue());
|
| - dict->SetDouble(DefaultSearchManager::kLastModified,
|
| - base::Time::Now().ToInternalValue());
|
| - dict->SetInteger(DefaultSearchManager::kUsageCount, 0);
|
| - dict->SetBoolean(DefaultSearchManager::kCreatedByPolicy, true);
|
| -
|
| - // For the name and keyword, default to the host if not specified. If
|
| - // there is no host (as is the case with file URLs of the form:
|
| - // "file:///c:/..."), use "_" to guarantee that the keyword is non-empty.
|
| - std::string name, keyword;
|
| - dict->GetString(DefaultSearchManager::kKeyword, &keyword);
|
| - dict->GetString(DefaultSearchManager::kShortName, &name);
|
| - dict->GetString(DefaultSearchManager::kURL, &url);
|
| -
|
| - std::string host(GURL(url).host());
|
| - if (host.empty())
|
| - host = "_";
|
| - if (name.empty())
|
| - dict->SetString(DefaultSearchManager::kShortName, host);
|
| - if (keyword.empty())
|
| - dict->SetString(DefaultSearchManager::kKeyword, host);
|
| -
|
| - DefaultSearchManager::AddPrefValueToMap(dict.release(), prefs);
|
| -}
|
| -
|
| -void DefaultSearchPolicyHandler::ApplyPolicySettings(const PolicyMap& policies,
|
| - PrefValueMap* prefs) {
|
| - HandleDictionaryPref(policies, prefs);
|
| -
|
| - if (DefaultSearchProviderIsDisabled(policies)) {
|
| - prefs->SetBoolean(prefs::kDefaultSearchProviderEnabled, false);
|
| -
|
| - // If default search is disabled, the other fields are ignored.
|
| - prefs->SetString(prefs::kDefaultSearchProviderName, std::string());
|
| - prefs->SetString(prefs::kDefaultSearchProviderSearchURL, std::string());
|
| - prefs->SetString(prefs::kDefaultSearchProviderSuggestURL, std::string());
|
| - prefs->SetString(prefs::kDefaultSearchProviderIconURL, std::string());
|
| - prefs->SetString(prefs::kDefaultSearchProviderEncodings, std::string());
|
| - prefs->SetString(prefs::kDefaultSearchProviderKeyword, std::string());
|
| - prefs->SetString(prefs::kDefaultSearchProviderInstantURL, std::string());
|
| - prefs->SetString(prefs::kDefaultSearchProviderNewTabURL, std::string());
|
| - prefs->SetValue(prefs::kDefaultSearchProviderAlternateURLs,
|
| - new base::ListValue());
|
| - prefs->SetString(
|
| - prefs::kDefaultSearchProviderSearchTermsReplacementKey, std::string());
|
| - prefs->SetString(prefs::kDefaultSearchProviderImageURL, std::string());
|
| - prefs->SetString(
|
| - prefs::kDefaultSearchProviderSearchURLPostParams, std::string());
|
| - prefs->SetString(
|
| - prefs::kDefaultSearchProviderSuggestURLPostParams, std::string());
|
| - prefs->SetString(
|
| - prefs::kDefaultSearchProviderInstantURLPostParams, std::string());
|
| - prefs->SetString(
|
| - prefs::kDefaultSearchProviderImageURLPostParams, std::string());
|
| - } else {
|
| - // The search URL is required. The other entries are optional. Just make
|
| - // sure that they are all specified via policy, so that the regular prefs
|
| - // aren't used.
|
| - const base::Value* dummy;
|
| - std::string url;
|
| - if (DefaultSearchURLIsValid(policies, &dummy, &url)) {
|
| -
|
| - for (std::vector<TypeCheckingPolicyHandler*>::const_iterator handler =
|
| - handlers_.begin();
|
| - handler != handlers_.end(); ++handler) {
|
| - (*handler)->ApplyPolicySettings(policies, prefs);
|
| - }
|
| -
|
| - EnsureStringPrefExists(prefs, prefs::kDefaultSearchProviderSuggestURL);
|
| - EnsureStringPrefExists(prefs, prefs::kDefaultSearchProviderIconURL);
|
| - EnsureStringPrefExists(prefs, prefs::kDefaultSearchProviderEncodings);
|
| - EnsureStringPrefExists(prefs, prefs::kDefaultSearchProviderKeyword);
|
| - EnsureStringPrefExists(prefs, prefs::kDefaultSearchProviderInstantURL);
|
| - EnsureStringPrefExists(prefs, prefs::kDefaultSearchProviderNewTabURL);
|
| - EnsureListPrefExists(prefs, prefs::kDefaultSearchProviderAlternateURLs);
|
| - EnsureStringPrefExists(
|
| - prefs,
|
| - prefs::kDefaultSearchProviderSearchTermsReplacementKey);
|
| - EnsureStringPrefExists(prefs, prefs::kDefaultSearchProviderImageURL);
|
| - EnsureStringPrefExists(
|
| - prefs,
|
| - prefs::kDefaultSearchProviderSearchURLPostParams);
|
| - EnsureStringPrefExists(
|
| - prefs,
|
| - prefs::kDefaultSearchProviderSuggestURLPostParams);
|
| - EnsureStringPrefExists(
|
| - prefs,
|
| - prefs::kDefaultSearchProviderInstantURLPostParams);
|
| - EnsureStringPrefExists(
|
| - prefs,
|
| - prefs::kDefaultSearchProviderImageURLPostParams);
|
| -
|
| - // For the name and keyword, default to the host if not specified. If
|
| - // there is no host (file: URLs? Not sure), use "_" to guarantee that the
|
| - // keyword is non-empty.
|
| - std::string name, keyword;
|
| - std::string host(GURL(url).host());
|
| - if (host.empty())
|
| - host = "_";
|
| - if (!prefs->GetString(prefs::kDefaultSearchProviderName, &name) ||
|
| - name.empty()) {
|
| - prefs->SetString(prefs::kDefaultSearchProviderName, host);
|
| - }
|
| - if (!prefs->GetString(prefs::kDefaultSearchProviderKeyword, &keyword) ||
|
| - keyword.empty()) {
|
| - prefs->SetString(prefs::kDefaultSearchProviderKeyword, host);
|
| - }
|
| -
|
| - // And clear the IDs since these are not specified via policy.
|
| - prefs->SetString(prefs::kDefaultSearchProviderID, std::string());
|
| - prefs->SetString(prefs::kDefaultSearchProviderPrepopulateID,
|
| - std::string());
|
| - }
|
| - }
|
| -}
|
| -
|
| -bool DefaultSearchPolicyHandler::CheckIndividualPolicies(
|
| - const PolicyMap& policies,
|
| - PolicyErrorMap* errors) {
|
| - for (std::vector<TypeCheckingPolicyHandler*>::const_iterator handler =
|
| - handlers_.begin();
|
| - handler != handlers_.end(); ++handler) {
|
| - if (!(*handler)->CheckPolicySettings(policies, errors))
|
| - return false;
|
| - }
|
| - return true;
|
| -}
|
| -
|
| -bool DefaultSearchPolicyHandler::HasDefaultSearchPolicy(
|
| - const PolicyMap& policies,
|
| - const char* policy_name) {
|
| - return policies.Get(policy_name) != NULL;
|
| -}
|
| -
|
| -bool DefaultSearchPolicyHandler::AnyDefaultSearchPoliciesSpecified(
|
| - const PolicyMap& policies) {
|
| - for (std::vector<TypeCheckingPolicyHandler*>::const_iterator handler =
|
| - handlers_.begin();
|
| - handler != handlers_.end(); ++handler) {
|
| - if (policies.Get((*handler)->policy_name()))
|
| - return true;
|
| - }
|
| - return false;
|
| -}
|
| -
|
| -bool DefaultSearchPolicyHandler::DefaultSearchProviderIsDisabled(
|
| - const PolicyMap& policies) {
|
| - const base::Value* provider_enabled =
|
| - policies.GetValue(key::kDefaultSearchProviderEnabled);
|
| - bool enabled = true;
|
| - return provider_enabled && provider_enabled->GetAsBoolean(&enabled) &&
|
| - !enabled;
|
| -}
|
| -
|
| -bool DefaultSearchPolicyHandler::DefaultSearchURLIsValid(
|
| - const PolicyMap& policies,
|
| - const base::Value** url_value,
|
| - std::string* url_string) {
|
| - *url_value = policies.GetValue(key::kDefaultSearchProviderSearchURL);
|
| - if (!*url_value || !(*url_value)->GetAsString(url_string) ||
|
| - url_string->empty())
|
| - return false;
|
| - TemplateURLData data;
|
| - data.SetURL(*url_string);
|
| - SearchTermsData search_terms_data;
|
| - return TemplateURL(data).SupportsReplacement(search_terms_data);
|
| -}
|
| -
|
| -void DefaultSearchPolicyHandler::EnsureStringPrefExists(
|
| - PrefValueMap* prefs,
|
| - const std::string& path) {
|
| - std::string value;
|
| - if (!prefs->GetString(path, &value))
|
| - prefs->SetString(path, value);
|
| -}
|
| -
|
| -void DefaultSearchPolicyHandler::EnsureListPrefExists(
|
| - PrefValueMap* prefs,
|
| - const std::string& path) {
|
| - base::Value* value;
|
| - base::ListValue* list_value;
|
| - if (!prefs->GetValue(path, &value) || !value->GetAsList(&list_value))
|
| - prefs->SetValue(path, new base::ListValue());
|
| -}
|
| -
|
| -} // namespace policy
|
|
|