Index: chrome/browser/search_engines/template_url_service.cc |
diff --git a/chrome/browser/search_engines/template_url_service.cc b/chrome/browser/search_engines/template_url_service.cc |
index 1fa3c2a79824b900baea8869d9dd6f379504ac43..7fd08cf18983944598e39d82d4af30188afc1653 100644 |
--- a/chrome/browser/search_engines/template_url_service.cc |
+++ b/chrome/browser/search_engines/template_url_service.cc |
@@ -33,6 +33,7 @@ |
#include "chrome/browser/search_engines/search_host_to_urls_map.h" |
#include "chrome/browser/search_engines/search_terms_data.h" |
#include "chrome/browser/search_engines/template_url.h" |
+#include "chrome/browser/search_engines/template_url_keys.h" |
#include "chrome/browser/search_engines/template_url_prepopulate_data.h" |
#include "chrome/browser/search_engines/template_url_service_observer.h" |
#include "chrome/browser/search_engines/util.h" |
@@ -56,7 +57,6 @@ typedef SearchHostToURLsMap::TemplateURLSet TemplateURLSet; |
typedef TemplateURLService::SyncDataMap SyncDataMap; |
namespace { |
- |
erikwright (departed)
2014/04/22 15:47:24
nit: restore blank line.
Cait (Slow)
2014/04/22 19:54:13
Done.
|
bool TemplateURLsHaveSamePrefs(const TemplateURL* url1, |
const TemplateURL* url2) { |
if (url1 == url2) |
@@ -676,6 +676,7 @@ bool TemplateURLService::CanMakeDefault(const TemplateURL* url) { |
void TemplateURLService::SetUserSelectedDefaultSearchProvider( |
TemplateURL* url) { |
SetDefaultSearchProvider(url); |
+ WriteDataToPrefsDictionary(url); |
} |
TemplateURL* TemplateURLService::GetDefaultSearchProvider() { |
@@ -2752,3 +2753,156 @@ void TemplateURLService:: |
new_dse = FindNewDefaultSearchProvider(); |
SetDefaultSearchProviderNoNotify(new_dse); |
} |
+ |
+bool TemplateURLService::ReadDataFromPrefsDictionary(TemplateURL** url) { |
+ PrefService* prefs = GetPrefs(); |
+ if (!prefs) |
+ return false; |
+ |
+ const base::DictionaryValue* url_dict = |
+ prefs->GetDictionary(prefs::kDefaultSearchProviderData); |
+ if (!url_dict) |
+ return false; |
+ |
+ TemplateURLData data; |
+ 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; |
+ |
+ *url = new TemplateURL(profile_, data); |
+ |
+ return true; |
+} |
+ |
+void TemplateURLService::WriteDataToPrefsDictionary(const TemplateURL* url) { |
+ PrefService* prefs = GetPrefs(); |
+ if (!prefs) |
+ return; |
+ |
+ base::DictionaryValue* url_dict = new base::DictionaryValue; |
+ url_dict->SetString(default_search::kID, base::Int64ToString(url->id())); |
gab
2014/04/17 00:37:54
Can you push this latest update to argon18? I can'
|
+ url_dict->SetString(default_search::kShortName, url->short_name()); |
+ url_dict->SetString(default_search::kKeyword, url->keyword()); |
+ url_dict->SetInteger(default_search::kPrepopulateID, url->prepopulate_id()); |
+ url_dict->SetString(default_search::kSyncGUID, url->sync_guid()); |
+ |
+ url_dict->SetString(default_search::kURL, url->url()); |
+ url_dict->SetString(default_search::kSuggestionsURL, url->suggestions_url()); |
+ url_dict->SetString(default_search::kInstantURL, url->instant_url()); |
+ url_dict->SetString(default_search::kImageURL, url->image_url()); |
+ url_dict->SetString(default_search::kNewTabURL, url->new_tab_url()); |
+ url_dict->SetString(default_search::kFaviconURL, url->favicon_url().spec()); |
+ url_dict->SetString(default_search::kOriginatingURL, |
+ url->originating_url().spec()); |
+ |
+ url_dict->SetString(default_search::kSearchURLPostParams, |
+ url->search_url_post_params()); |
+ url_dict->SetString(default_search::kSuggestionsURLPostParams, |
+ url->suggestions_url_post_params()); |
+ url_dict->SetString(default_search::kInstantURLPostParams, |
+ url->instant_url_post_params()); |
+ url_dict->SetString(default_search::kImageURLPostParams, |
+ url->image_url_post_params()); |
+ |
+ url_dict->SetBoolean(default_search::kSafeForAutoReplace, |
+ url->safe_for_autoreplace()); |
+ |
+ url_dict->SetDouble(default_search::kDateCreated, |
+ url->date_created().ToInternalValue()); |
+ url_dict->SetDouble(default_search::kLastModified, |
+ url->last_modified().ToInternalValue()); |
+ url_dict->SetInteger(default_search::kUsageCount, |
+ url->usage_count()); |
+ |
+ base::ListValue alternate_urls; |
+ for (size_t i = 0; i < url->alternate_urls().size(); ++i) |
+ alternate_urls.AppendString(url->alternate_urls()[i]); |
+ url_dict->Set(default_search::kAlternateURLs, &alternate_urls); |
erikwright (departed)
2014/04/22 15:47:24
Doesn't Set() take ownership of alternate_urls?
Cait (Slow)
2014/04/22 19:54:13
Done.
|
+ |
+ base::ListValue encodings; |
+ for (size_t i = 0; i < url->input_encodings().size(); ++i) |
+ encodings.AppendString(url->input_encodings()[i]); |
+ url_dict->Set(default_search::kInputEncodings, &encodings); |
+ |
+ url_dict->SetString(default_search::kSearchTermsReplacementKey, |
+ url->search_terms_replacement_key()); |
+ |
+ url_dict->SetBoolean(default_search::kCreatedByPolicy, |
+ url->created_by_policy()); |
+ |
+ prefs->Set(prefs::kDefaultSearchProviderData, *url_dict); |
+} |