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

Side by Side 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/search_engines/default_search_policy_handler.h" 5 #include "chrome/browser/search_engines/default_search_policy_handler.h"
6 6
7 #include "base/prefs/pref_value_map.h" 7 #include "base/prefs/pref_value_map.h"
8 #include "base/stl_util.h" 8 #include "base/stl_util.h"
9 #include "base/strings/string_number_conversions.h"
9 #include "base/strings/string_util.h" 10 #include "base/strings/string_util.h"
10 #include "chrome/browser/chrome_notification_types.h" 11 #include "chrome/browser/chrome_notification_types.h"
11 #include "chrome/browser/search_engines/search_terms_data.h" 12 #include "chrome/browser/search_engines/search_terms_data.h"
12 #include "chrome/browser/search_engines/template_url.h" 13 #include "chrome/browser/search_engines/template_url.h"
13 #include "chrome/common/pref_names.h" 14 #include "chrome/common/pref_names.h"
14 #include "components/policy/core/browser/policy_error_map.h" 15 #include "components/policy/core/browser/policy_error_map.h"
15 #include "components/policy/core/common/policy_map.h" 16 #include "components/policy/core/common/policy_map.h"
16 #include "content/public/browser/notification_service.h" 17 #include "content/public/browser/notification_service.h"
17 #include "grit/component_strings.h" 18 #include "grit/component_strings.h"
18 #include "policy/policy_constants.h" 19 #include "policy/policy_constants.h"
19 20
20 namespace policy { 21 namespace policy {
21 22
23 // Keys for kDefaultSearchProviderData Pref.
24 const char kID[] = "id";
25 const char kShortName[] = "short_name";
26 const char kKeyword[] = "keyword";
27 const char kPrepopulateID[] = "prepopulate_id";
28 const char kSyncGUID[] = "sync_guid";
29
30 const char kURL[] = "url";
31 const char kSuggestionsURL[] = "suggestions_url";
32 const char kInstantURL[] = "instant_url";
33 const char kImageURL[] = "image_url";
34 const char kNewTabURL[] = "new_tab_url";
35 const char kFaviconURL[] = "favicon_url";
36 const char kOriginatingURL[] = "originating_url";
37
38 const char kSearchURLPostParams[] = "search_url_post_params";
39 const char kSuggestionsURLPostParams[] = "suggestions_url_post_params";
40 const char kInstantURLPostParams[] = "instant_url_post_params";
41 const char kImageURLPostParams[] = "image_url_post_params";
42
43 const char kSafeForAutoReplace[] = "safe_for_autoreplace";
44 const char kInputEncodings[] = "input_encodings";
45
46 const char kDateCreated[] = "date_created";
47 const char kLastModified[] = "last_modified";
48
49 const char kUsageCount[] = "usage_count";
50 const char kAlternateURLs[] = "alternate_urls";
51 const char kSearchTermsReplacementKey[] = "search_terms_replacement_key";
52 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.
53
22 // List of policy types to preference names, for policies affecting the default 54 // List of policy types to preference names, for policies affecting the default
23 // search provider. 55 // search provider.
24 const PolicyToPreferenceMapEntry kDefaultSearchPolicyMap[] = { 56 const PolicyToPreferenceMapEntry kDefaultSearchPolicyMap[] = {
25 { key::kDefaultSearchProviderEnabled, 57 { key::kDefaultSearchProviderEnabled,
26 prefs::kDefaultSearchProviderEnabled, 58 prefs::kDefaultSearchProviderEnabled,
27 base::Value::TYPE_BOOLEAN }, 59 base::Value::TYPE_BOOLEAN },
28 { key::kDefaultSearchProviderName, 60 { key::kDefaultSearchProviderName,
29 prefs::kDefaultSearchProviderName, 61 prefs::kDefaultSearchProviderName,
30 base::Value::TYPE_STRING }, 62 base::Value::TYPE_STRING },
31 { key::kDefaultSearchProviderKeyword, 63 { key::kDefaultSearchProviderKeyword,
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
65 prefs::kDefaultSearchProviderSuggestURLPostParams, 97 prefs::kDefaultSearchProviderSuggestURLPostParams,
66 base::Value::TYPE_STRING }, 98 base::Value::TYPE_STRING },
67 { key::kDefaultSearchProviderInstantURLPostParams, 99 { key::kDefaultSearchProviderInstantURLPostParams,
68 prefs::kDefaultSearchProviderInstantURLPostParams, 100 prefs::kDefaultSearchProviderInstantURLPostParams,
69 base::Value::TYPE_STRING }, 101 base::Value::TYPE_STRING },
70 { key::kDefaultSearchProviderImageURLPostParams, 102 { key::kDefaultSearchProviderImageURLPostParams,
71 prefs::kDefaultSearchProviderImageURLPostParams, 103 prefs::kDefaultSearchProviderImageURLPostParams,
72 base::Value::TYPE_STRING }, 104 base::Value::TYPE_STRING },
73 }; 105 };
74 106
107 // List of policy types to preference names, for policies affecting the default
108 // search provider.
109 const PolicyToPreferenceMapEntry kDefaultSearchPolicyDataMap[] = {
110 { key::kDefaultSearchProviderName,
111 kShortName,
112 base::Value::TYPE_STRING },
113 { key::kDefaultSearchProviderKeyword,
114 kKeyword,
115 base::Value::TYPE_STRING },
116 { key::kDefaultSearchProviderSearchURL,
117 kURL,
118 base::Value::TYPE_STRING },
119 { key::kDefaultSearchProviderSuggestURL,
120 kSuggestionsURL,
121 base::Value::TYPE_STRING },
122 { key::kDefaultSearchProviderInstantURL,
123 kInstantURL,
124 base::Value::TYPE_STRING },
125 { key::kDefaultSearchProviderIconURL,
126 kFaviconURL,
127 base::Value::TYPE_STRING },
128 { key::kDefaultSearchProviderEncodings,
129 kInputEncodings,
130 base::Value::TYPE_LIST },
131 { key::kDefaultSearchProviderAlternateURLs,
132 kAlternateURLs,
133 base::Value::TYPE_LIST },
134 { key::kDefaultSearchProviderSearchTermsReplacementKey,
135 kSearchTermsReplacementKey,
136 base::Value::TYPE_STRING },
137 { key::kDefaultSearchProviderImageURL,
138 kImageURL,
139 base::Value::TYPE_STRING },
140 { key::kDefaultSearchProviderNewTabURL,
141 kNewTabURL,
142 base::Value::TYPE_STRING },
143 { key::kDefaultSearchProviderSearchURLPostParams,
144 kSearchURLPostParams,
145 base::Value::TYPE_STRING },
146 { key::kDefaultSearchProviderSuggestURLPostParams,
147 kSuggestionsURLPostParams,
148 base::Value::TYPE_STRING },
149 { key::kDefaultSearchProviderInstantURLPostParams,
150 kInstantURLPostParams,
151 base::Value::TYPE_STRING },
152 { key::kDefaultSearchProviderImageURLPostParams,
153 kImageURLPostParams,
154 base::Value::TYPE_STRING },
155 };
156
157
gab 2014/04/15 20:52:33 nit: rm extra empty line
Cait (Slow) 2014/04/16 21:14:11 Done.
75 // DefaultSearchEncodingsPolicyHandler implementation -------------------------- 158 // DefaultSearchEncodingsPolicyHandler implementation --------------------------
76 159
77 DefaultSearchEncodingsPolicyHandler::DefaultSearchEncodingsPolicyHandler() 160 DefaultSearchEncodingsPolicyHandler::DefaultSearchEncodingsPolicyHandler()
78 : TypeCheckingPolicyHandler(key::kDefaultSearchProviderEncodings, 161 : TypeCheckingPolicyHandler(key::kDefaultSearchProviderEncodings,
79 base::Value::TYPE_LIST) {} 162 base::Value::TYPE_LIST) {}
80 163
81 DefaultSearchEncodingsPolicyHandler::~DefaultSearchEncodingsPolicyHandler() { 164 DefaultSearchEncodingsPolicyHandler::~DefaultSearchEncodingsPolicyHandler() {
82 } 165 }
83 166
84 void DefaultSearchEncodingsPolicyHandler::ApplyPolicySettings( 167 void DefaultSearchEncodingsPolicyHandler::ApplyPolicySettings(
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
150 const base::Value* url; 233 const base::Value* url;
151 std::string dummy; 234 std::string dummy;
152 if (DefaultSearchURLIsValid(policies, &url, &dummy) || 235 if (DefaultSearchURLIsValid(policies, &url, &dummy) ||
153 !AnyDefaultSearchPoliciesSpecified(policies)) 236 !AnyDefaultSearchPoliciesSpecified(policies))
154 return true; 237 return true;
155 errors->AddError(key::kDefaultSearchProviderSearchURL, url ? 238 errors->AddError(key::kDefaultSearchProviderSearchURL, url ?
156 IDS_POLICY_INVALID_SEARCH_URL_ERROR : IDS_POLICY_NOT_SPECIFIED_ERROR); 239 IDS_POLICY_INVALID_SEARCH_URL_ERROR : IDS_POLICY_NOT_SPECIFIED_ERROR);
157 return false; 240 return false;
158 } 241 }
159 242
243 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.
244 const char* policy_name, const char* key) {
245 const base::Value* value = policies.GetValue(policy_name);
246 const base::ListValue* list = new base::ListValue();
247 if (value)
248 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.
249 dict->Set(key, list->DeepCopy());
250 }
251
252 void SetStringInPref(const PolicyMap& policies, base::DictionaryValue* dict,
253 const char* policy_name, const char* key) {
254 const base::Value* value = policies.GetValue(policy_name);
255 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.
256 if (value)
257 value->GetAsString(&str);
gab 2014/04/15 20:52:33 DCHECK return value.
Cait (Slow) 2014/04/16 21:14:11 Done.
258 dict->SetString(key, str);
259 }
260
261 void DefaultSearchPolicyHandler::HandleDictionaryPref(const PolicyMap& policies,
262 PrefValueMap* prefs) {
263 TemplateURLData data;
264 if (DefaultSearchProviderIsDisabled(policies)) {
265 // Set data to default values.
gab 2014/04/15 20:52:33 TODO?
Cait (Slow) 2014/04/16 21:14:11 Done.
266 } else {
267 // The search URL is required. The other entries are optional. Just make
268 // sure that they are all specified via policy, so that the regular prefs
269 // aren't used.
270 const base::Value* dummy;
271 std::string url;
272 if (!DefaultSearchURLIsValid(policies, &dummy, &url))
273 return;
274
275 base::DictionaryValue* dict = new base::DictionaryValue;
276 for (size_t i = 0; i < arraysize(kDefaultSearchPolicyDataMap); ++i) {
277 const char* policy_name = kDefaultSearchPolicyDataMap[i].policy_name;
278 switch (kDefaultSearchPolicyDataMap[i].value_type) {
279 case base::Value::TYPE_STRING:
280 SetStringInPref(policies, dict, policy_name,
281 kDefaultSearchPolicyDataMap[i].preference_path);
282 break;
283 case base::Value::TYPE_LIST:
284 SetListInPref(policies, dict, policy_name,
285 kDefaultSearchPolicyDataMap[i].preference_path);
286 break;
287 }
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.
288 }
289 dict->SetString(kID, base::Int64ToString(kInvalidTemplateURLID));
290 dict->SetInteger(kPrepopulateID, 0);
291 dict->SetString(kSyncGUID, std::string());
292 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
293
294 dict->SetBoolean(kSafeForAutoReplace, true);
295
296 dict->SetDouble(kDateCreated, base::Time::Now().ToInternalValue());
297 dict->SetDouble(kLastModified, base::Time::Now().ToInternalValue());
298 dict->SetInteger(kUsageCount, 0);
299 dict->SetBoolean(kCreatedByPolicy, true);
300
301 // For the name and keyword, default to the host if not specified. If
302 // there is no host (file: URLs? Not sure), use "_" to guarantee that the
303 // keyword is non-empty.
304 std::string name, keyword;
305 dict->GetString(kKeyword, &keyword);
306 dict->GetString(kShortName, &name);
307 dict->GetString(kURL, &url);
308 std::string host(GURL(url).host());
309 if (host.empty())
310 host = "_";
311 if (name.empty())
312 dict->SetString(kShortName, host);
313 if (keyword.empty())
314 dict->SetString(kKeyword, host);
315
316 prefs->SetValue(prefs::kDefaultSearchProviderData, dict);
317 }
318 }
319
160 void DefaultSearchPolicyHandler::ApplyPolicySettings(const PolicyMap& policies, 320 void DefaultSearchPolicyHandler::ApplyPolicySettings(const PolicyMap& policies,
161 PrefValueMap* prefs) { 321 PrefValueMap* prefs) {
322 HandleDictionaryPref(policies, prefs);
323
162 if (DefaultSearchProviderIsDisabled(policies)) { 324 if (DefaultSearchProviderIsDisabled(policies)) {
163 prefs->SetBoolean(prefs::kDefaultSearchProviderEnabled, false); 325 prefs->SetBoolean(prefs::kDefaultSearchProviderEnabled, false);
164 326
165 // If default search is disabled, the other fields are ignored. 327 // If default search is disabled, the other fields are ignored.
166 prefs->SetString(prefs::kDefaultSearchProviderName, std::string()); 328 prefs->SetString(prefs::kDefaultSearchProviderName, std::string());
167 prefs->SetString(prefs::kDefaultSearchProviderSearchURL, std::string()); 329 prefs->SetString(prefs::kDefaultSearchProviderSearchURL, std::string());
168 prefs->SetString(prefs::kDefaultSearchProviderSuggestURL, std::string()); 330 prefs->SetString(prefs::kDefaultSearchProviderSuggestURL, std::string());
169 prefs->SetString(prefs::kDefaultSearchProviderIconURL, std::string()); 331 prefs->SetString(prefs::kDefaultSearchProviderIconURL, std::string());
170 prefs->SetString(prefs::kDefaultSearchProviderEncodings, std::string()); 332 prefs->SetString(prefs::kDefaultSearchProviderEncodings, std::string());
171 prefs->SetString(prefs::kDefaultSearchProviderKeyword, std::string()); 333 prefs->SetString(prefs::kDefaultSearchProviderKeyword, std::string());
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
314 void DefaultSearchPolicyHandler::EnsureListPrefExists( 476 void DefaultSearchPolicyHandler::EnsureListPrefExists(
315 PrefValueMap* prefs, 477 PrefValueMap* prefs,
316 const std::string& path) { 478 const std::string& path) {
317 base::Value* value; 479 base::Value* value;
318 base::ListValue* list_value; 480 base::ListValue* list_value;
319 if (!prefs->GetValue(path, &value) || !value->GetAsList(&list_value)) 481 if (!prefs->GetValue(path, &value) || !value->GetAsList(&list_value))
320 prefs->SetValue(path, new base::ListValue()); 482 prefs->SetValue(path, new base::ListValue());
321 } 483 }
322 484
323 } // namespace policy 485 } // namespace policy
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698