OLD | NEW |
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_number_conversions.h" |
10 #include "base/strings/string_util.h" | 10 #include "base/strings/string_util.h" |
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
221 const base::Value* url; | 221 const base::Value* url; |
222 std::string dummy; | 222 std::string dummy; |
223 if (DefaultSearchURLIsValid(policies, &url, &dummy) || | 223 if (DefaultSearchURLIsValid(policies, &url, &dummy) || |
224 !AnyDefaultSearchPoliciesSpecified(policies)) | 224 !AnyDefaultSearchPoliciesSpecified(policies)) |
225 return true; | 225 return true; |
226 errors->AddError(key::kDefaultSearchProviderSearchURL, url ? | 226 errors->AddError(key::kDefaultSearchProviderSearchURL, url ? |
227 IDS_POLICY_INVALID_SEARCH_URL_ERROR : IDS_POLICY_NOT_SPECIFIED_ERROR); | 227 IDS_POLICY_INVALID_SEARCH_URL_ERROR : IDS_POLICY_NOT_SPECIFIED_ERROR); |
228 return false; | 228 return false; |
229 } | 229 } |
230 | 230 |
231 void DefaultSearchPolicyHandler::HandleDictionaryPref(const PolicyMap& policies, | 231 void DefaultSearchPolicyHandler::ApplyPolicySettings(const PolicyMap& policies, |
232 PrefValueMap* prefs) { | 232 PrefValueMap* prefs) { |
233 if (DefaultSearchProviderIsDisabled(policies)) { | 233 if (DefaultSearchProviderIsDisabled(policies)) { |
234 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue); | 234 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue); |
235 dict->SetBoolean(DefaultSearchManager::kDisabledByPolicy, true); | 235 dict->SetBoolean(DefaultSearchManager::kDisabledByPolicy, true); |
236 DefaultSearchManager::AddPrefValueToMap(dict.release(), prefs); | 236 DefaultSearchManager::AddPrefValueToMap(dict.release(), prefs); |
237 return; | 237 return; |
238 } | 238 } |
239 | 239 |
240 // The search URL is required. The other entries are optional. Just make | 240 // The search URL is required. The other entries are optional. Just make |
241 // sure that they are all specified via policy, so that the regular prefs | 241 // sure that they are all specified via policy, so that the regular prefs |
242 // aren't used. | 242 // aren't used. |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
293 if (host.empty()) | 293 if (host.empty()) |
294 host = "_"; | 294 host = "_"; |
295 if (name.empty()) | 295 if (name.empty()) |
296 dict->SetString(DefaultSearchManager::kShortName, host); | 296 dict->SetString(DefaultSearchManager::kShortName, host); |
297 if (keyword.empty()) | 297 if (keyword.empty()) |
298 dict->SetString(DefaultSearchManager::kKeyword, host); | 298 dict->SetString(DefaultSearchManager::kKeyword, host); |
299 | 299 |
300 DefaultSearchManager::AddPrefValueToMap(dict.release(), prefs); | 300 DefaultSearchManager::AddPrefValueToMap(dict.release(), prefs); |
301 } | 301 } |
302 | 302 |
303 void DefaultSearchPolicyHandler::ApplyPolicySettings(const PolicyMap& policies, | |
304 PrefValueMap* prefs) { | |
305 HandleDictionaryPref(policies, prefs); | |
306 | |
307 if (DefaultSearchProviderIsDisabled(policies)) { | |
308 prefs->SetBoolean(prefs::kDefaultSearchProviderEnabled, false); | |
309 | |
310 // If default search is disabled, the other fields are ignored. | |
311 prefs->SetString(prefs::kDefaultSearchProviderName, std::string()); | |
312 prefs->SetString(prefs::kDefaultSearchProviderSearchURL, std::string()); | |
313 prefs->SetString(prefs::kDefaultSearchProviderSuggestURL, std::string()); | |
314 prefs->SetString(prefs::kDefaultSearchProviderIconURL, std::string()); | |
315 prefs->SetString(prefs::kDefaultSearchProviderEncodings, std::string()); | |
316 prefs->SetString(prefs::kDefaultSearchProviderKeyword, std::string()); | |
317 prefs->SetString(prefs::kDefaultSearchProviderInstantURL, std::string()); | |
318 prefs->SetString(prefs::kDefaultSearchProviderNewTabURL, std::string()); | |
319 prefs->SetValue(prefs::kDefaultSearchProviderAlternateURLs, | |
320 new base::ListValue()); | |
321 prefs->SetString( | |
322 prefs::kDefaultSearchProviderSearchTermsReplacementKey, std::string()); | |
323 prefs->SetString(prefs::kDefaultSearchProviderImageURL, std::string()); | |
324 prefs->SetString( | |
325 prefs::kDefaultSearchProviderSearchURLPostParams, std::string()); | |
326 prefs->SetString( | |
327 prefs::kDefaultSearchProviderSuggestURLPostParams, std::string()); | |
328 prefs->SetString( | |
329 prefs::kDefaultSearchProviderInstantURLPostParams, std::string()); | |
330 prefs->SetString( | |
331 prefs::kDefaultSearchProviderImageURLPostParams, std::string()); | |
332 } else { | |
333 // The search URL is required. The other entries are optional. Just make | |
334 // sure that they are all specified via policy, so that the regular prefs | |
335 // aren't used. | |
336 const base::Value* dummy; | |
337 std::string url; | |
338 if (DefaultSearchURLIsValid(policies, &dummy, &url)) { | |
339 | |
340 for (std::vector<TypeCheckingPolicyHandler*>::const_iterator handler = | |
341 handlers_.begin(); | |
342 handler != handlers_.end(); ++handler) { | |
343 (*handler)->ApplyPolicySettings(policies, prefs); | |
344 } | |
345 | |
346 EnsureStringPrefExists(prefs, prefs::kDefaultSearchProviderSuggestURL); | |
347 EnsureStringPrefExists(prefs, prefs::kDefaultSearchProviderIconURL); | |
348 EnsureStringPrefExists(prefs, prefs::kDefaultSearchProviderEncodings); | |
349 EnsureStringPrefExists(prefs, prefs::kDefaultSearchProviderKeyword); | |
350 EnsureStringPrefExists(prefs, prefs::kDefaultSearchProviderInstantURL); | |
351 EnsureStringPrefExists(prefs, prefs::kDefaultSearchProviderNewTabURL); | |
352 EnsureListPrefExists(prefs, prefs::kDefaultSearchProviderAlternateURLs); | |
353 EnsureStringPrefExists( | |
354 prefs, | |
355 prefs::kDefaultSearchProviderSearchTermsReplacementKey); | |
356 EnsureStringPrefExists(prefs, prefs::kDefaultSearchProviderImageURL); | |
357 EnsureStringPrefExists( | |
358 prefs, | |
359 prefs::kDefaultSearchProviderSearchURLPostParams); | |
360 EnsureStringPrefExists( | |
361 prefs, | |
362 prefs::kDefaultSearchProviderSuggestURLPostParams); | |
363 EnsureStringPrefExists( | |
364 prefs, | |
365 prefs::kDefaultSearchProviderInstantURLPostParams); | |
366 EnsureStringPrefExists( | |
367 prefs, | |
368 prefs::kDefaultSearchProviderImageURLPostParams); | |
369 | |
370 // For the name and keyword, default to the host if not specified. If | |
371 // there is no host (file: URLs? Not sure), use "_" to guarantee that the | |
372 // keyword is non-empty. | |
373 std::string name, keyword; | |
374 std::string host(GURL(url).host()); | |
375 if (host.empty()) | |
376 host = "_"; | |
377 if (!prefs->GetString(prefs::kDefaultSearchProviderName, &name) || | |
378 name.empty()) { | |
379 prefs->SetString(prefs::kDefaultSearchProviderName, host); | |
380 } | |
381 if (!prefs->GetString(prefs::kDefaultSearchProviderKeyword, &keyword) || | |
382 keyword.empty()) { | |
383 prefs->SetString(prefs::kDefaultSearchProviderKeyword, host); | |
384 } | |
385 | |
386 // And clear the IDs since these are not specified via policy. | |
387 prefs->SetString(prefs::kDefaultSearchProviderID, std::string()); | |
388 prefs->SetString(prefs::kDefaultSearchProviderPrepopulateID, | |
389 std::string()); | |
390 } | |
391 } | |
392 content::NotificationService::current()->Notify( | |
393 chrome::NOTIFICATION_DEFAULT_SEARCH_POLICY_CHANGED, | |
394 content::NotificationService::AllSources(), | |
395 content::NotificationService::NoDetails()); | |
396 } | |
397 | |
398 bool DefaultSearchPolicyHandler::CheckIndividualPolicies( | 303 bool DefaultSearchPolicyHandler::CheckIndividualPolicies( |
399 const PolicyMap& policies, | 304 const PolicyMap& policies, |
400 PolicyErrorMap* errors) { | 305 PolicyErrorMap* errors) { |
401 for (std::vector<TypeCheckingPolicyHandler*>::const_iterator handler = | 306 for (std::vector<TypeCheckingPolicyHandler*>::const_iterator handler = |
402 handlers_.begin(); | 307 handlers_.begin(); |
403 handler != handlers_.end(); ++handler) { | 308 handler != handlers_.end(); ++handler) { |
404 if (!(*handler)->CheckPolicySettings(policies, errors)) | 309 if (!(*handler)->CheckPolicySettings(policies, errors)) |
405 return false; | 310 return false; |
406 } | 311 } |
407 return true; | 312 return true; |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
459 void DefaultSearchPolicyHandler::EnsureListPrefExists( | 364 void DefaultSearchPolicyHandler::EnsureListPrefExists( |
460 PrefValueMap* prefs, | 365 PrefValueMap* prefs, |
461 const std::string& path) { | 366 const std::string& path) { |
462 base::Value* value; | 367 base::Value* value; |
463 base::ListValue* list_value; | 368 base::ListValue* list_value; |
464 if (!prefs->GetValue(path, &value) || !value->GetAsList(&list_value)) | 369 if (!prefs->GetValue(path, &value) || !value->GetAsList(&list_value)) |
465 prefs->SetValue(path, new base::ListValue()); | 370 prefs->SetValue(path, new base::ListValue()); |
466 } | 371 } |
467 | 372 |
468 } // namespace policy | 373 } // namespace policy |
OLD | NEW |