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

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: 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..3a02671bfc978e499169c12ea126983ffcce14f1 100644
--- a/chrome/browser/search_engines/default_search_policy_handler.cc
+++ b/chrome/browser/search_engines/default_search_policy_handler.cc
@@ -6,6 +6,7 @@
#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/search_terms_data.h"
@@ -19,6 +20,37 @@
namespace policy {
+// Keys for kDefaultSearchProviderData Pref.
+const char kID[] = "id";
+const char kShortName[] = "short_name";
+const char kKeyword[] = "keyword";
+const char kPrepopulateID[] = "prepopulate_id";
+const char kSyncGUID[] = "sync_guid";
+
+const char kURL[] = "url";
+const char kSuggestionsURL[] = "suggestions_url";
+const char kInstantURL[] = "instant_url";
+const char kImageURL[] = "image_url";
+const char kNewTabURL[] = "new_tab_url";
+const char kFaviconURL[] = "favicon_url";
+const char kOriginatingURL[] = "originating_url";
+
+const char kSearchURLPostParams[] = "search_url_post_params";
+const char kSuggestionsURLPostParams[] = "suggestions_url_post_params";
+const char kInstantURLPostParams[] = "instant_url_post_params";
+const char kImageURLPostParams[] = "image_url_post_params";
+
+const char kSafeForAutoReplace[] = "safe_for_autoreplace";
+const char kInputEncodings[] = "input_encodings";
+
+const char kDateCreated[] = "date_created";
+const char kLastModified[] = "last_modified";
+
+const char kUsageCount[] = "usage_count";
+const char kAlternateURLs[] = "alternate_urls";
+const char kSearchTermsReplacementKey[] = "search_terms_replacement_key";
+const char kCreatedByPolicy[] = "created_by_policy";
gab 2014/04/15 20:52:33 We should avoid duplicating these again here (IIRC
Cait (Slow) 2014/04/16 21:14:11 Done.
+
// List of policy types to preference names, for policies affecting the default
// search provider.
const PolicyToPreferenceMapEntry kDefaultSearchPolicyMap[] = {
@@ -72,6 +104,57 @@ 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,
+ kShortName,
+ base::Value::TYPE_STRING },
+ { key::kDefaultSearchProviderKeyword,
+ kKeyword,
+ base::Value::TYPE_STRING },
+ { key::kDefaultSearchProviderSearchURL,
+ kURL,
+ base::Value::TYPE_STRING },
+ { key::kDefaultSearchProviderSuggestURL,
+ kSuggestionsURL,
+ base::Value::TYPE_STRING },
+ { key::kDefaultSearchProviderInstantURL,
+ kInstantURL,
+ base::Value::TYPE_STRING },
+ { key::kDefaultSearchProviderIconURL,
+ kFaviconURL,
+ base::Value::TYPE_STRING },
+ { key::kDefaultSearchProviderEncodings,
+ kInputEncodings,
+ base::Value::TYPE_LIST },
+ { key::kDefaultSearchProviderAlternateURLs,
+ kAlternateURLs,
+ base::Value::TYPE_LIST },
+ { key::kDefaultSearchProviderSearchTermsReplacementKey,
+ kSearchTermsReplacementKey,
+ base::Value::TYPE_STRING },
+ { key::kDefaultSearchProviderImageURL,
+ kImageURL,
+ base::Value::TYPE_STRING },
+ { key::kDefaultSearchProviderNewTabURL,
+ kNewTabURL,
+ base::Value::TYPE_STRING },
+ { key::kDefaultSearchProviderSearchURLPostParams,
+ kSearchURLPostParams,
+ base::Value::TYPE_STRING },
+ { key::kDefaultSearchProviderSuggestURLPostParams,
+ kSuggestionsURLPostParams,
+ base::Value::TYPE_STRING },
+ { key::kDefaultSearchProviderInstantURLPostParams,
+ kInstantURLPostParams,
+ base::Value::TYPE_STRING },
+ { key::kDefaultSearchProviderImageURLPostParams,
+ kImageURLPostParams,
+ base::Value::TYPE_STRING },
+};
+
+
gab 2014/04/15 20:52:33 nit: rm extra empty line
Cait (Slow) 2014/04/16 21:14:11 Done.
// DefaultSearchEncodingsPolicyHandler implementation --------------------------
DefaultSearchEncodingsPolicyHandler::DefaultSearchEncodingsPolicyHandler()
@@ -157,8 +240,87 @@ bool DefaultSearchPolicyHandler::CheckPolicySettings(const PolicyMap& policies,
return false;
}
+void SetListInPref(const PolicyMap& policies, base::DictionaryValue* dict,
gab 2014/04/15 20:52:33 out-param last
Cait (Slow) 2014/04/16 21:14:11 Done.
+ const char* policy_name, const char* key) {
+ const base::Value* value = policies.GetValue(policy_name);
+ const base::ListValue* list = new base::ListValue();
+ if (value)
+ value->GetAsList(&list);
gab 2014/04/15 20:52:33 I would prefer to check that this is indeed a list
Cait (Slow) 2014/04/16 21:14:11 Done.
+ dict->Set(key, list->DeepCopy());
+}
+
+void SetStringInPref(const PolicyMap& policies, base::DictionaryValue* dict,
+ const char* policy_name, const char* key) {
+ const base::Value* value = policies.GetValue(policy_name);
+ std::string str = std::string();
gab 2014/04/15 20:52:33 No need to explicitly initialize: std::string str
Cait (Slow) 2014/04/16 21:14:11 Done.
+ if (value)
+ value->GetAsString(&str);
gab 2014/04/15 20:52:33 DCHECK return value.
Cait (Slow) 2014/04/16 21:14:11 Done.
+ dict->SetString(key, str);
+}
+
+void DefaultSearchPolicyHandler::HandleDictionaryPref(const PolicyMap& policies,
+ PrefValueMap* prefs) {
+ TemplateURLData data;
+ if (DefaultSearchProviderIsDisabled(policies)) {
+ // Set data to default values.
gab 2014/04/15 20:52:33 TODO?
Cait (Slow) 2014/04/16 21:14:11 Done.
+ } 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))
+ return;
+
+ 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, dict, policy_name,
+ kDefaultSearchPolicyDataMap[i].preference_path);
+ break;
+ case base::Value::TYPE_LIST:
+ SetListInPref(policies, dict, policy_name,
+ kDefaultSearchPolicyDataMap[i].preference_path);
+ break;
+ }
gab 2014/04/15 20:52:33 Clang will complain about not all cases being hand
Cait (Slow) 2014/04/16 21:14:11 Done.
+ }
+ dict->SetString(kID, base::Int64ToString(kInvalidTemplateURLID));
+ dict->SetInteger(kPrepopulateID, 0);
+ dict->SetString(kSyncGUID, std::string());
+ dict->SetString(kOriginatingURL, std::string());
gab 2014/04/15 20:52:33 Add comments where necessary above/below for the r
Cait (Slow) 2014/04/16 21:14:11 These may go away if we decide there's no point in
+
+ dict->SetBoolean(kSafeForAutoReplace, true);
+
+ dict->SetDouble(kDateCreated, base::Time::Now().ToInternalValue());
+ dict->SetDouble(kLastModified, base::Time::Now().ToInternalValue());
+ dict->SetInteger(kUsageCount, 0);
+ dict->SetBoolean(kCreatedByPolicy, true);
+
+ // 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;
+ dict->GetString(kKeyword, &keyword);
+ dict->GetString(kShortName, &name);
+ dict->GetString(kURL, &url);
+ std::string host(GURL(url).host());
+ if (host.empty())
+ host = "_";
+ if (name.empty())
+ dict->SetString(kShortName, host);
+ if (keyword.empty())
+ dict->SetString(kKeyword, host);
+
+ prefs->SetValue(prefs::kDefaultSearchProviderData, dict);
+ }
+}
+
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