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

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

Issue 237653002: Import policy data into default search dictionary pref. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Nits and rebase on ToT Created 6 years, 8 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
index 05018780f290709fb9d8a183e13a7f935d0b8894..b89cec44f55aa2618186269452ac7635b6b320e9 100644
--- a/chrome/browser/search_engines/default_search_policy_handler.cc
+++ b/chrome/browser/search_engines/default_search_policy_handler.cc
@@ -6,8 +6,10 @@
#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/chrome_notification_types.h"
+#include "chrome/browser/search_engines/default_search_manager.h"
#include "chrome/browser/search_engines/search_terms_data.h"
#include "chrome/browser/search_engines/template_url.h"
#include "chrome/common/pref_names.h"
@@ -19,6 +21,39 @@
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[] = {
@@ -72,6 +107,42 @@ const PolicyToPreferenceMapEntry kDefaultSearchPolicyMap[] = {
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()
@@ -157,8 +228,82 @@ bool DefaultSearchPolicyHandler::CheckPolicySettings(const PolicyMap& policies,
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);

Powered by Google App Engine
This is Rietveld 408576698