| Index: components/search_engines/template_url_data_util.cc
|
| diff --git a/components/search_engines/template_url_data_util.cc b/components/search_engines/template_url_data_util.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..77ad25fd96a71e8695c6704659b1c318e1b62309
|
| --- /dev/null
|
| +++ b/components/search_engines/template_url_data_util.cc
|
| @@ -0,0 +1,237 @@
|
| +// Copyright 2016 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 "components/search_engines/template_url_data_util.h"
|
| +
|
| +#include <string>
|
| +
|
| +#include "base/memory/ptr_util.h"
|
| +#include "base/strings/string_number_conversions.h"
|
| +#include "base/strings/utf_string_conversions.h"
|
| +#include "base/values.h"
|
| +#include "components/search_engines/default_search_manager.h"
|
| +#include "components/search_engines/prepopulated_engines.h"
|
| +#include "components/search_engines/template_url_data.h"
|
| +#include "url/gurl.h"
|
| +
|
| +std::unique_ptr<TemplateURLData> TemplateURLDataFromDictionary(
|
| + const base::DictionaryValue& dict) {
|
| + std::string search_url;
|
| + base::string16 keyword;
|
| + base::string16 short_name;
|
| + dict.GetString(DefaultSearchManager::kURL, &search_url);
|
| + dict.GetString(DefaultSearchManager::kKeyword, &keyword);
|
| + dict.GetString(DefaultSearchManager::kShortName, &short_name);
|
| + // Check required TemplateURLData fields first.
|
| + if (search_url.empty() || keyword.empty() || short_name.empty())
|
| + return std::unique_ptr<TemplateURLData>();
|
| +
|
| + auto result = base::MakeUnique<TemplateURLData>();
|
| + result->SetKeyword(keyword);
|
| + result->SetURL(search_url);
|
| +
|
| + std::string id;
|
| + dict.GetString(DefaultSearchManager::kID, &id);
|
| + base::StringToInt64(id, &result->id);
|
| +
|
| + result->SetShortName(short_name);
|
| + dict.GetInteger(DefaultSearchManager::kPrepopulateID,
|
| + &result->prepopulate_id);
|
| + dict.GetString(DefaultSearchManager::kSyncGUID, &result->sync_guid);
|
| + dict.GetString(DefaultSearchManager::kSuggestionsURL,
|
| + &result->suggestions_url);
|
| +
|
| + dict.GetString(DefaultSearchManager::kInstantURL, &result->instant_url);
|
| + dict.GetString(DefaultSearchManager::kImageURL, &result->image_url);
|
| + dict.GetString(DefaultSearchManager::kNewTabURL, &result->new_tab_url);
|
| + dict.GetString(DefaultSearchManager::kContextualSearchURL,
|
| + &result->contextual_search_url);
|
| + std::string favicon_url;
|
| + std::string originating_url;
|
| + dict.GetString(DefaultSearchManager::kFaviconURL, &favicon_url);
|
| + dict.GetString(DefaultSearchManager::kOriginatingURL, &originating_url);
|
| + result->favicon_url = GURL(favicon_url);
|
| + result->originating_url = GURL(originating_url);
|
| +
|
| + dict.GetString(DefaultSearchManager::kSearchURLPostParams,
|
| + &result->search_url_post_params);
|
| + dict.GetString(DefaultSearchManager::kSuggestionsURLPostParams,
|
| + &result->suggestions_url_post_params);
|
| + dict.GetString(DefaultSearchManager::kInstantURLPostParams,
|
| + &result->instant_url_post_params);
|
| + dict.GetString(DefaultSearchManager::kImageURLPostParams,
|
| + &result->image_url_post_params);
|
| + dict.GetBoolean(DefaultSearchManager::kSafeForAutoReplace,
|
| + &result->safe_for_autoreplace);
|
| +
|
| + std::string date_created_str;
|
| + std::string last_modified_str;
|
| + dict.GetString(DefaultSearchManager::kDateCreated, &date_created_str);
|
| + dict.GetString(DefaultSearchManager::kLastModified, &last_modified_str);
|
| +
|
| + int64_t date_created = 0;
|
| + if (base::StringToInt64(date_created_str, &date_created)) {
|
| + result->date_created = base::Time::FromInternalValue(date_created);
|
| + }
|
| +
|
| + int64_t last_modified = 0;
|
| + if (base::StringToInt64(date_created_str, &last_modified)) {
|
| + result->last_modified = base::Time::FromInternalValue(last_modified);
|
| + }
|
| +
|
| + dict.GetInteger(DefaultSearchManager::kUsageCount, &result->usage_count);
|
| +
|
| + const base::ListValue* alternate_urls = nullptr;
|
| + if (dict.GetList(DefaultSearchManager::kAlternateURLs, &alternate_urls)) {
|
| + for (const auto& it : *alternate_urls) {
|
| + std::string alternate_url;
|
| + if (it->GetAsString(&alternate_url))
|
| + result->alternate_urls.push_back(std::move(alternate_url));
|
| + }
|
| + }
|
| +
|
| + const base::ListValue* encodings = nullptr;
|
| + if (dict.GetList(DefaultSearchManager::kInputEncodings, &encodings)) {
|
| + for (const auto& it : *encodings) {
|
| + std::string encoding;
|
| + if (it->GetAsString(&encoding))
|
| + result->input_encodings.push_back(std::move(encoding));
|
| + }
|
| + }
|
| +
|
| + dict.GetString(DefaultSearchManager::kSearchTermsReplacementKey,
|
| + &result->search_terms_replacement_key);
|
| + dict.GetBoolean(DefaultSearchManager::kCreatedByPolicy,
|
| + &result->created_by_policy);
|
| + return result;
|
| +}
|
| +
|
| +std::unique_ptr<base::DictionaryValue> TemplateURLDataToDictionary(
|
| + const TemplateURLData& data) {
|
| + auto url_dict = base::MakeUnique<base::DictionaryValue>();
|
| + url_dict->SetString(DefaultSearchManager::kID, base::Int64ToString(data.id));
|
| + url_dict->SetString(DefaultSearchManager::kShortName, data.short_name());
|
| + url_dict->SetString(DefaultSearchManager::kKeyword, data.keyword());
|
| + url_dict->SetInteger(DefaultSearchManager::kPrepopulateID,
|
| + data.prepopulate_id);
|
| + url_dict->SetString(DefaultSearchManager::kSyncGUID, data.sync_guid);
|
| +
|
| + url_dict->SetString(DefaultSearchManager::kURL, data.url());
|
| + url_dict->SetString(DefaultSearchManager::kSuggestionsURL,
|
| + data.suggestions_url);
|
| + url_dict->SetString(DefaultSearchManager::kInstantURL, data.instant_url);
|
| + url_dict->SetString(DefaultSearchManager::kImageURL, data.image_url);
|
| + url_dict->SetString(DefaultSearchManager::kNewTabURL, data.new_tab_url);
|
| + url_dict->SetString(DefaultSearchManager::kContextualSearchURL,
|
| + data.contextual_search_url);
|
| + url_dict->SetString(DefaultSearchManager::kFaviconURL,
|
| + data.favicon_url.spec());
|
| + url_dict->SetString(DefaultSearchManager::kOriginatingURL,
|
| + data.originating_url.spec());
|
| +
|
| + url_dict->SetString(DefaultSearchManager::kSearchURLPostParams,
|
| + data.search_url_post_params);
|
| + url_dict->SetString(DefaultSearchManager::kSuggestionsURLPostParams,
|
| + data.suggestions_url_post_params);
|
| + url_dict->SetString(DefaultSearchManager::kInstantURLPostParams,
|
| + data.instant_url_post_params);
|
| + url_dict->SetString(DefaultSearchManager::kImageURLPostParams,
|
| + data.image_url_post_params);
|
| +
|
| + url_dict->SetBoolean(DefaultSearchManager::kSafeForAutoReplace,
|
| + data.safe_for_autoreplace);
|
| +
|
| + url_dict->SetString(DefaultSearchManager::kDateCreated,
|
| + base::Int64ToString(data.date_created.ToInternalValue()));
|
| + url_dict->SetString(
|
| + DefaultSearchManager::kLastModified,
|
| + base::Int64ToString(data.last_modified.ToInternalValue()));
|
| + url_dict->SetInteger(DefaultSearchManager::kUsageCount, data.usage_count);
|
| +
|
| + auto alternate_urls = base::MakeUnique<base::ListValue>();
|
| + for (const auto& alternate_url : data.alternate_urls)
|
| + alternate_urls->AppendString(alternate_url);
|
| +
|
| + url_dict->Set(DefaultSearchManager::kAlternateURLs,
|
| + std::move(alternate_urls));
|
| +
|
| + auto encodings = base::MakeUnique<base::ListValue>();
|
| + for (const auto& input_encoding : data.input_encodings)
|
| + encodings->AppendString(input_encoding);
|
| + url_dict->Set(DefaultSearchManager::kInputEncodings, std::move(encodings));
|
| +
|
| + url_dict->SetString(DefaultSearchManager::kSearchTermsReplacementKey,
|
| + data.search_terms_replacement_key);
|
| + url_dict->SetBoolean(DefaultSearchManager::kCreatedByPolicy,
|
| + data.created_by_policy);
|
| + return url_dict;
|
| +}
|
| +
|
| +std::unique_ptr<TemplateURLData> TemplateURLDataFromPrepopulatedEngine(
|
| + const TemplateURLPrepopulateData::PrepopulatedEngine& engine) {
|
| + base::ListValue alternate_urls;
|
| + if (engine.alternate_urls) {
|
| + for (size_t i = 0; i < engine.alternate_urls_size; ++i)
|
| + alternate_urls.AppendString(std::string(engine.alternate_urls[i]));
|
| + }
|
| +
|
| + return base::MakeUnique<TemplateURLData>(
|
| + base::WideToUTF16(engine.name), base::WideToUTF16(engine.keyword),
|
| + engine.search_url, engine.suggest_url, engine.instant_url,
|
| + engine.image_url, engine.new_tab_url, engine.contextual_search_url,
|
| + engine.search_url_post_params, engine.suggest_url_post_params,
|
| + engine.instant_url_post_params, engine.image_url_post_params,
|
| + engine.favicon_url, engine.encoding, alternate_urls,
|
| + engine.search_terms_replacement_key, engine.id);
|
| +}
|
| +
|
| +std::unique_ptr<TemplateURLData> TemplateURLDataFromOverrideDictionary(
|
| + const base::DictionaryValue& engine) {
|
| + base::string16 name;
|
| + base::string16 keyword;
|
| + std::string search_url;
|
| + std::string favicon_url;
|
| + std::string encoding;
|
| + int id = -1;
|
| + // The following fields are required for each search engine configuration.
|
| + if (engine.GetString("name", &name) && !name.empty() &&
|
| + engine.GetString("keyword", &keyword) && !keyword.empty() &&
|
| + engine.GetString("search_url", &search_url) && !search_url.empty() &&
|
| + engine.GetString("favicon_url", &favicon_url) && !favicon_url.empty() &&
|
| + engine.GetString("encoding", &encoding) && !encoding.empty() &&
|
| + engine.GetInteger("id", &id)) {
|
| + // These fields are optional.
|
| + std::string suggest_url;
|
| + std::string instant_url;
|
| + std::string image_url;
|
| + std::string new_tab_url;
|
| + std::string contextual_search_url;
|
| + std::string search_url_post_params;
|
| + std::string suggest_url_post_params;
|
| + std::string instant_url_post_params;
|
| + std::string image_url_post_params;
|
| + base::ListValue empty_list;
|
| + const base::ListValue* alternate_urls = &empty_list;
|
| + std::string search_terms_replacement_key;
|
| + engine.GetString("suggest_url", &suggest_url);
|
| + engine.GetString("instant_url", &instant_url);
|
| + engine.GetString("image_url", &image_url);
|
| + engine.GetString("new_tab_url", &new_tab_url);
|
| + engine.GetString("contextual_search_url", &contextual_search_url);
|
| + engine.GetString("search_url_post_params", &search_url_post_params);
|
| + engine.GetString("suggest_url_post_params", &suggest_url_post_params);
|
| + engine.GetString("instant_url_post_params", &instant_url_post_params);
|
| + engine.GetString("image_url_post_params", &image_url_post_params);
|
| + engine.GetList("alternate_urls", &alternate_urls);
|
| + engine.GetString("search_terms_replacement_key",
|
| + &search_terms_replacement_key);
|
| + return base::MakeUnique<TemplateURLData>(
|
| + name, keyword, search_url, suggest_url, instant_url, image_url,
|
| + new_tab_url, contextual_search_url, search_url_post_params,
|
| + suggest_url_post_params, instant_url_post_params, image_url_post_params,
|
| + favicon_url, encoding, *alternate_urls, search_terms_replacement_key,
|
| + id);
|
| + }
|
| + return std::unique_ptr<TemplateURLData>();
|
| +}
|
|
|