Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(50)

Unified Diff: chrome/browser/search_engines/default_search_policy_handler.cc

Issue 355853002: Componentize TemplateURLPrepopulateData, DefaultSearchManager and DefaultSearchPolicyHandler (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Missing comma in gyp Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698