| Index: chrome/browser/search_engines/default_search_manager.cc
|
| diff --git a/chrome/browser/search_engines/default_search_manager.cc b/chrome/browser/search_engines/default_search_manager.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..d9dc140db0e55905de3060d6be6fe2a243c2be9b
|
| --- /dev/null
|
| +++ b/chrome/browser/search_engines/default_search_manager.cc
|
| @@ -0,0 +1,192 @@
|
| +// Copyright (c) 2012 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_manager.h"
|
| +
|
| +#include <algorithm>
|
| +#include <utility>
|
| +
|
| +#include "base/compiler_specific.h"
|
| +#include "base/i18n/case_conversion.h"
|
| +#include "base/prefs/pref_service.h"
|
| +#include "base/stl_util.h"
|
| +#include "base/strings/string_number_conversions.h"
|
| +#include "base/strings/string_split.h"
|
| +#include "base/strings/string_util.h"
|
| +#include "base/strings/utf_string_conversions.h"
|
| +#include "base/time/time.h"
|
| +#include "chrome/browser/profiles/profile.h"
|
| +#include "chrome/browser/search_engines/template_url.h"
|
| +#include "chrome/browser/search_engines/template_url_keys.h"
|
| +#include "chrome/browser/search_engines/util.h"
|
| +#include "chrome/common/pref_names.h"
|
| +
|
| +DefaultSearchManager::DefaultSearchManager()
|
| + : default_search_provider_(NULL) {
|
| + // TODO(caitkp): Read from prefs on init.
|
| +}
|
| +
|
| +void DefaultSearchManager::SetUserSelectedDefaultSearchProvider(
|
| + PrefService* prefs,
|
| + TemplateURLData* url_data) {
|
| + SetDefaultSearchProvider(url_data);
|
| + SaveToPrefService(prefs, url_data);
|
| +}
|
| +
|
| +TemplateURLData* DefaultSearchManager::GetDefaultSearchProvider() {
|
| + return default_search_provider_;
|
| +}
|
| +
|
| +void DefaultSearchManager::SetDefaultSearchProvider(TemplateURLData* url_data) {
|
| + default_search_provider_ = url_data;
|
| +}
|
| +
|
| +bool DefaultSearchManager::ReadFromPrefService(PrefService* prefs,
|
| + TemplateURLData* data) {
|
| + if (!prefs)
|
| + return false;
|
| +
|
| + const base::DictionaryValue* url_dict =
|
| + prefs->GetDictionary(prefs::kDefaultSearchProviderData);
|
| + if (!url_dict)
|
| + return false;
|
| +
|
| + std::string search_url;
|
| + base::string16 keyword;
|
| +
|
| + url_dict->GetString(default_search::kKeyword, &keyword);
|
| + url_dict->GetString(default_search::kURL, &search_url);
|
| +
|
| + DCHECK(!keyword.empty());
|
| + DCHECK(!search_url.empty());
|
| +
|
| + data->SetKeyword(keyword);
|
| + data->SetURL(search_url);
|
| +
|
| + std::string id;
|
| + url_dict->GetString(default_search::kID, &id);
|
| + base::StringToInt64(id, &data->id);
|
| + url_dict->GetString(default_search::kShortName, &data->short_name);
|
| + url_dict->GetInteger(default_search::kPrepopulateID, &data->prepopulate_id);
|
| + url_dict->GetString(default_search::kSyncGUID, &data->sync_guid);
|
| +
|
| + url_dict->GetString(default_search::kSuggestionsURL, &data->suggestions_url);
|
| + url_dict->GetString(default_search::kInstantURL, &data->instant_url);
|
| + url_dict->GetString(default_search::kImageURL, &data->image_url);
|
| + url_dict->GetString(default_search::kNewTabURL, &data->new_tab_url);
|
| +
|
| + std::string favicon_url;
|
| + std::string originating_url;
|
| + url_dict->GetString(default_search::kFaviconURL, &favicon_url);
|
| + url_dict->GetString(default_search::kOriginatingURL, &originating_url);
|
| + data->favicon_url = GURL(favicon_url);
|
| + data->originating_url = GURL(originating_url);
|
| +
|
| + url_dict->GetString(default_search::kSearchURLPostParams,
|
| + &data->search_url_post_params);
|
| + url_dict->GetString(default_search::kSuggestionsURLPostParams,
|
| + &data->suggestions_url_post_params);
|
| + url_dict->GetString(default_search::kInstantURLPostParams,
|
| + &data->instant_url_post_params);
|
| + url_dict->GetString(default_search::kImageURLPostParams,
|
| + &data->image_url_post_params);
|
| +
|
| + url_dict->GetBoolean(default_search::kSafeForAutoReplace,
|
| + &data->safe_for_autoreplace);
|
| +
|
| + double date_created = 0.0;
|
| + double last_modified = 0.0;
|
| + url_dict->GetDouble(default_search::kDateCreated, &date_created);
|
| + url_dict->GetDouble(default_search::kLastModified, &last_modified);
|
| + data->date_created = base::Time::FromInternalValue(date_created);
|
| + data->last_modified = base::Time::FromInternalValue(last_modified);
|
| +
|
| + url_dict->GetInteger(default_search::kUsageCount, &data->usage_count);
|
| +
|
| + const base::ListValue* alternate_urls = new base::ListValue;
|
| + url_dict->GetList(default_search::kAlternateURLs, &alternate_urls);
|
| + data->alternate_urls.clear();
|
| + for (size_t i = 0; i < alternate_urls->GetSize(); ++i) {
|
| + std::string alternate_url;
|
| + if (alternate_urls->GetString(i, &alternate_url))
|
| + data->alternate_urls.push_back(alternate_url);
|
| + }
|
| +
|
| + const base::ListValue* encodings = new base::ListValue;
|
| + url_dict->GetList(default_search::kInputEncodings, &encodings);
|
| + data->input_encodings.clear();
|
| + for (size_t i = 0; i < encodings->GetSize(); ++i) {
|
| + std::string encoding;
|
| + if (encodings->GetString(i, &encoding))
|
| + data->input_encodings.push_back(encoding);
|
| + }
|
| +
|
| + url_dict->GetString(default_search::kSearchTermsReplacementKey,
|
| + &data->search_terms_replacement_key);
|
| +
|
| + url_dict->GetBoolean(default_search::kCreatedByPolicy,
|
| + &data->created_by_policy);
|
| +
|
| + data->show_in_default_list = true;
|
| +
|
| + return true;
|
| +}
|
| +
|
| +void DefaultSearchManager::SaveToPrefService(PrefService* prefs,
|
| + const TemplateURLData* data) {
|
| + if (!prefs)
|
| + return;
|
| +
|
| + base::DictionaryValue* url_dict = new base::DictionaryValue;
|
| + url_dict->SetString(default_search::kID, base::Int64ToString(data->id));
|
| + url_dict->SetString(default_search::kShortName, data->short_name);
|
| + url_dict->SetString(default_search::kKeyword, data->keyword());
|
| + url_dict->SetInteger(default_search::kPrepopulateID, data->prepopulate_id);
|
| + url_dict->SetString(default_search::kSyncGUID, data->sync_guid);
|
| +
|
| + url_dict->SetString(default_search::kURL, data->url());
|
| + url_dict->SetString(default_search::kSuggestionsURL, data->suggestions_url);
|
| + url_dict->SetString(default_search::kInstantURL, data->instant_url);
|
| + url_dict->SetString(default_search::kImageURL, data->image_url);
|
| + url_dict->SetString(default_search::kNewTabURL, data->new_tab_url);
|
| + url_dict->SetString(default_search::kFaviconURL, data->favicon_url.spec());
|
| + url_dict->SetString(default_search::kOriginatingURL,
|
| + data->originating_url.spec());
|
| +
|
| + url_dict->SetString(default_search::kSearchURLPostParams,
|
| + data->search_url_post_params);
|
| + url_dict->SetString(default_search::kSuggestionsURLPostParams,
|
| + data->suggestions_url_post_params);
|
| + url_dict->SetString(default_search::kInstantURLPostParams,
|
| + data->instant_url_post_params);
|
| + url_dict->SetString(default_search::kImageURLPostParams,
|
| + data->image_url_post_params);
|
| +
|
| + url_dict->SetBoolean(default_search::kSafeForAutoReplace,
|
| + data->safe_for_autoreplace);
|
| +
|
| + url_dict->SetDouble(default_search::kDateCreated,
|
| + data->date_created.ToInternalValue());
|
| + url_dict->SetDouble(default_search::kLastModified,
|
| + data->last_modified.ToInternalValue());
|
| + url_dict->SetInteger(default_search::kUsageCount, data->usage_count);
|
| +
|
| + base::ListValue* alternate_urls = new base::ListValue;
|
| + for (size_t i = 0; i < data->alternate_urls.size(); ++i)
|
| + alternate_urls->AppendString(data->alternate_urls[i]);
|
| + url_dict->Set(default_search::kAlternateURLs, alternate_urls);
|
| +
|
| + base::ListValue* encodings = new base::ListValue;
|
| + for (size_t i = 0; i < data->input_encodings.size(); ++i)
|
| + encodings->AppendString(data->input_encodings[i]);
|
| + url_dict->Set(default_search::kInputEncodings, encodings);
|
| +
|
| + url_dict->SetString(default_search::kSearchTermsReplacementKey,
|
| + data->search_terms_replacement_key);
|
| +
|
| + url_dict->SetBoolean(default_search::kCreatedByPolicy,
|
| + data->created_by_policy);
|
| +
|
| + prefs->Set(prefs::kDefaultSearchProviderData, *url_dict);
|
| +}
|
|
|