Revert of Store default search provider data in dictionary pref....

Revert of Store default search provider data in dictionary pref. (https://codereview.chromium.org/229763005/)

Reason for revert:
Speculative revert for introducing lots of leaks. See: http://build.chromium.org/p/chromium.memory/builders/Linux%20ASan%20LSan%20Tests%20%282%29/builds/2026

Original issue's description:
> Store default search provider data in dictionary pref, and add DefaultSearchManager class to handle the reading and writing of this pref (DefaultSearchManager will eventually all default search related concerns).
> 
> This pref will be used to persist data about user-selected 
> default search providers. In future CLs, support will be added for default search providers set by policy and sync.
> 
> 
> BUG=365762
> 
> Committed: https://src.chromium.org/viewvc/chrome?view=rev&revision=266479

BUG=365762
TBR=gab, erikwright, Peter Kasting, Cait Phillips
NOTREECHECKS=true
NOTRY=true

Review URL: https://codereview.chromium.org/258933009

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@266559 0039d316-1c4b-4281-b951-d872f2087c98
parent 5c7badd9
// Copyright 2014 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_service.h"
#include "chrome/browser/search_engines/util.h"
#include "chrome/common/pref_names.h"
#include "components/user_prefs/pref_registry_syncable.h"
namespace {
// A dictionary to hold all data related to the Default Search Engine.
// Eventually, this should replace all the data stored in the
// default_search_provider.* prefs.
const char kDefaultSearchProviderData[] =
"default_search_provider_data.template_url_data";
} // namespace
const char DefaultSearchManager::kID[] = "id";
const char DefaultSearchManager::kShortName[] = "short_name";
const char DefaultSearchManager::kKeyword[] = "keyword";
const char DefaultSearchManager::kPrepopulateID[] = "prepopulate_id";
const char DefaultSearchManager::kSyncGUID[] = "synced_guid";
const char DefaultSearchManager::kURL[] = "url";
const char DefaultSearchManager::kSuggestionsURL[] = "suggestions_url";
const char DefaultSearchManager::kInstantURL[] = "instant_url";
const char DefaultSearchManager::kImageURL[] = "image_url";
const char DefaultSearchManager::kNewTabURL[] = "new_tab_url";
const char DefaultSearchManager::kFaviconURL[] = "favicon_url";
const char DefaultSearchManager::kOriginatingURL[] = "originating_url";
const char DefaultSearchManager::kSearchURLPostParams[] =
"search_url_post_params";
const char DefaultSearchManager::kSuggestionsURLPostParams[] =
"suggestions_url_post_params";
const char DefaultSearchManager::kInstantURLPostParams[] =
"instant_url_post_params";
const char DefaultSearchManager::kImageURLPostParams[] =
"image_url_post_params";
const char DefaultSearchManager::kSafeForAutoReplace[] = "safe_for_autoreplace";
const char DefaultSearchManager::kInputEncodings[] = "input_encodings";
const char DefaultSearchManager::kDateCreated[] = "date_created";
const char DefaultSearchManager::kLastModified[] = "last_modified";
const char DefaultSearchManager::kUsageCount[] = "usage_count";
const char DefaultSearchManager::kAlternateURLs[] = "alternate_urls";
const char DefaultSearchManager::kSearchTermsReplacementKey[] =
"search_terms_replacement_key";
const char DefaultSearchManager::kCreatedByPolicy[] = "created_by_policy";
DefaultSearchManager::DefaultSearchManager(PrefService* pref_service)
: pref_service_(pref_service) {
DCHECK(pref_service_);
}
DefaultSearchManager::~DefaultSearchManager() {
}
// static
void DefaultSearchManager::RegisterProfilePrefs(
user_prefs::PrefRegistrySyncable* registry) {
registry->RegisterDictionaryPref(
kDefaultSearchProviderData,
user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
}
bool DefaultSearchManager::GetDefaultSearchEngine(TemplateURLData* data) {
const base::DictionaryValue* url_dict =
pref_service_->GetDictionary(kDefaultSearchProviderData);
if (url_dict->empty())
return false;
std::string search_url;
base::string16 keyword;
url_dict->GetString(kURL, &search_url);
url_dict->GetString(kKeyword, &keyword);
if (search_url.empty())
return false;
if (keyword.empty())
keyword = TemplateURLService::GenerateKeyword(GURL(search_url));
data->SetKeyword(keyword);
data->SetURL(search_url);
std::string id;
url_dict->GetString(kID, &id);
base::StringToInt64(id, &data->id);
url_dict->GetString(kShortName, &data->short_name);
url_dict->GetInteger(kPrepopulateID, &data->prepopulate_id);
url_dict->GetString(kSyncGUID, &data->sync_guid);
url_dict->GetString(kSuggestionsURL, &data->suggestions_url);
url_dict->GetString(kInstantURL, &data->instant_url);
url_dict->GetString(kImageURL, &data->image_url);
url_dict->GetString(kNewTabURL, &data->new_tab_url);
std::string favicon_url;
std::string originating_url;
url_dict->GetString(kFaviconURL, &favicon_url);
url_dict->GetString(kOriginatingURL, &originating_url);
data->favicon_url = GURL(favicon_url);
data->originating_url = GURL(originating_url);
url_dict->GetString(kSearchURLPostParams, &data->search_url_post_params);
url_dict->GetString(kSuggestionsURLPostParams,
&data->suggestions_url_post_params);
url_dict->GetString(kInstantURLPostParams, &data->instant_url_post_params);
url_dict->GetString(kImageURLPostParams, &data->image_url_post_params);
url_dict->GetBoolean(kSafeForAutoReplace, &data->safe_for_autoreplace);
double date_created = 0.0;
double last_modified = 0.0;
url_dict->GetDouble(kDateCreated, &date_created);
url_dict->GetDouble(kLastModified, &last_modified);
data->date_created = base::Time::FromInternalValue(date_created);
data->last_modified = base::Time::FromInternalValue(last_modified);
url_dict->GetInteger(kUsageCount, &data->usage_count);
const base::ListValue* alternate_urls = new base::ListValue;
url_dict->GetList(kAlternateURLs, &alternate_urls);
data->alternate_urls.clear();
for (base::ListValue::const_iterator it = alternate_urls->begin();
it != alternate_urls->end(); ++it) {
std::string alternate_url;
if ((*it)->GetAsString(&alternate_url))
data->alternate_urls.push_back(alternate_url);
}
const base::ListValue* encodings = new base::ListValue;
url_dict->GetList(kInputEncodings, &encodings);
data->input_encodings.clear();
for (base::ListValue::const_iterator it = encodings->begin();
it != encodings->end(); ++it) {
std::string encoding;
if ((*it)->GetAsString(&encoding))
data->input_encodings.push_back(encoding);
}
url_dict->GetString(kSearchTermsReplacementKey,
&data->search_terms_replacement_key);
url_dict->GetBoolean(kCreatedByPolicy, &data->created_by_policy);
data->show_in_default_list = true;
return true;
}
void DefaultSearchManager::SetUserSelectedDefaultSearchEngine(
const TemplateURLData& data) {
base::DictionaryValue* url_dict = new base::DictionaryValue;
url_dict->SetString(kID, base::Int64ToString(data.id));
url_dict->SetString(kShortName, data.short_name);
url_dict->SetString(kKeyword, data.keyword());
url_dict->SetInteger(kPrepopulateID, data.prepopulate_id);
url_dict->SetString(kSyncGUID, data.sync_guid);
url_dict->SetString(kURL, data.url());
url_dict->SetString(kSuggestionsURL, data.suggestions_url);
url_dict->SetString(kInstantURL, data.instant_url);
url_dict->SetString(kImageURL, data.image_url);
url_dict->SetString(kNewTabURL, data.new_tab_url);
url_dict->SetString(kFaviconURL, data.favicon_url.spec());
url_dict->SetString(kOriginatingURL, data.originating_url.spec());
url_dict->SetString(kSearchURLPostParams, data.search_url_post_params);
url_dict->SetString(kSuggestionsURLPostParams,
data.suggestions_url_post_params);
url_dict->SetString(kInstantURLPostParams, data.instant_url_post_params);
url_dict->SetString(kImageURLPostParams, data.image_url_post_params);
url_dict->SetBoolean(kSafeForAutoReplace, data.safe_for_autoreplace);
url_dict->SetDouble(kDateCreated, data.date_created.ToInternalValue());
url_dict->SetDouble(kLastModified, data.last_modified.ToInternalValue());
url_dict->SetInteger(kUsageCount, data.usage_count);
base::ListValue* alternate_urls = new base::ListValue;
for (std::vector<std::string>::const_iterator it =
data.alternate_urls.begin();
it != data.alternate_urls.end(); ++it) {
alternate_urls->AppendString(*it);
}
url_dict->Set(kAlternateURLs, alternate_urls);
base::ListValue* encodings = new base::ListValue;
for (std::vector<std::string>::const_iterator it =
data.input_encodings.begin();
it != data.input_encodings.end(); ++it) {
encodings->AppendString(*it);
}
url_dict->Set(kInputEncodings, encodings);
url_dict->SetString(kSearchTermsReplacementKey,
data.search_terms_replacement_key);
url_dict->SetBoolean(kCreatedByPolicy, data.created_by_policy);
pref_service_->Set(kDefaultSearchProviderData, *url_dict);
}
void DefaultSearchManager::ClearUserSelectedDefaultSearchEngine() {
pref_service_->ClearPref(kDefaultSearchProviderData);
}
// Copyright 2014 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.
#ifndef CHROME_BROWSER_SEARCH_ENGINES_DEFAULT_SEARCH_MANAGER_H_
#define CHROME_BROWSER_SEARCH_ENGINES_DEFAULT_SEARCH_MANAGER_H_
#include "base/macros.h"
namespace user_prefs {
class PrefRegistrySyncable;
}
class PrefService;
struct TemplateURLData;
// DefaultSearchManager handles the loading and writing of the user's default
// search engine selection to and from prefs.
class DefaultSearchManager {
public:
static const char kID[];
static const char kShortName[];
static const char kKeyword[];
static const char kPrepopulateID[];
static const char kSyncGUID[];
static const char kURL[];
static const char kSuggestionsURL[];
static const char kInstantURL[];
static const char kImageURL[];
static const char kNewTabURL[];
static const char kFaviconURL[];
static const char kOriginatingURL[];
static const char kSearchURLPostParams[];
static const char kSuggestionsURLPostParams[];
static const char kInstantURLPostParams[];
static const char kImageURLPostParams[];
static const char kSafeForAutoReplace[];
static const char kInputEncodings[];
static const char kDateCreated[];
static const char kLastModified[];
static const char kUsageCount[];
static const char kAlternateURLs[];
static const char kSearchTermsReplacementKey[];
static const char kCreatedByPolicy[];
explicit DefaultSearchManager(PrefService* pref_service);
~DefaultSearchManager();
// Register prefs needed for tracking the default search provider.
static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry);
// Read default search provider data from |pref_service_|.
bool GetDefaultSearchEngine(TemplateURLData* url);
// Write default search provider data to |pref_service_|.
void SetUserSelectedDefaultSearchEngine(const TemplateURLData& data);
// Clear the user's default search provider choice from |pref_service_|.
void ClearUserSelectedDefaultSearchEngine();
private:
PrefService* pref_service_;
DISALLOW_COPY_AND_ASSIGN(DefaultSearchManager);
};
#endif // CHROME_BROWSER_SEARCH_ENGINES_DEFAULT_SEARCH_MANAGER_H_
// Copyright 2014 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 "base/files/scoped_temp_dir.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/search_engines/default_search_manager.h"
#include "chrome/browser/search_engines/template_url.h"
#include "chrome/test/base/testing_pref_service_syncable.h"
#include "components/user_prefs/pref_registry_syncable.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace {
// Checks that the two TemplateURLs are similar. It does not check the id, the
// date_created or the last_modified time. Neither pointer should be NULL.
void ExpectSimilar(const TemplateURLData* expected,
const TemplateURLData* actual) {
ASSERT_TRUE(expected != NULL);
ASSERT_TRUE(actual != NULL);
EXPECT_EQ(expected->short_name, actual->short_name);
EXPECT_EQ(expected->keyword(), actual->keyword());
EXPECT_EQ(expected->url(), actual->url());
EXPECT_EQ(expected->suggestions_url, actual->suggestions_url);
EXPECT_EQ(expected->favicon_url, actual->favicon_url);
EXPECT_EQ(expected->alternate_urls, actual->alternate_urls);
EXPECT_EQ(expected->show_in_default_list, actual->show_in_default_list);
EXPECT_EQ(expected->safe_for_autoreplace, actual->safe_for_autoreplace);
EXPECT_EQ(expected->input_encodings, actual->input_encodings);
EXPECT_EQ(expected->search_terms_replacement_key,
actual->search_terms_replacement_key);
}
} // namespace
class DefaultSearchManagerTest : public testing::Test {
public:
DefaultSearchManagerTest() {};
virtual void SetUp() OVERRIDE {
pref_service_.reset(new TestingPrefServiceSyncable);
DefaultSearchManager::RegisterProfilePrefs(pref_service_->registry());
}
PrefService* pref_service() { return pref_service_.get(); }
private:
scoped_ptr<TestingPrefServiceSyncable> pref_service_;
DISALLOW_COPY_AND_ASSIGN(DefaultSearchManagerTest);
};
// Test that a TemplateURLData object is properly written and read from Prefs.
TEST_F(DefaultSearchManagerTest, ReadAndWritePref) {
DefaultSearchManager manager(pref_service());
TemplateURLData data;
data.short_name = base::UTF8ToUTF16("name1");
data.SetKeyword(base::UTF8ToUTF16("key1"));
data.SetURL("http://foo1/{searchTerms}");
data.suggestions_url = "http://sugg1";
data.alternate_urls.push_back("http://foo1/alt");
data.favicon_url = GURL("http://icon1");
data.safe_for_autoreplace = true;
data.show_in_default_list = true;
base::SplitString("UTF-8;UTF-16", ';', &data.input_encodings);
data.date_created = base::Time();
data.last_modified = base::Time();
manager.SetUserSelectedDefaultSearchEngine(data);
TemplateURLData read_data;
manager.GetDefaultSearchEngine(&read_data);
ExpectSimilar(&data, &read_data);
}
// Test that there is no default value set in the pref.
TEST_F(DefaultSearchManagerTest, ReadDefaultPref) {
DefaultSearchManager manager(pref_service());
TemplateURLData read_data;
EXPECT_FALSE(manager.GetDefaultSearchEngine(&read_data));
}
...@@ -289,8 +289,7 @@ TemplateURLService::TemplateURLService(Profile* profile) ...@@ -289,8 +289,7 @@ TemplateURLService::TemplateURLService(Profile* profile)
models_associated_(false), models_associated_(false),
processing_syncer_changes_(false), processing_syncer_changes_(false),
pending_synced_default_search_(false), pending_synced_default_search_(false),
dsp_change_origin_(DSP_CHANGE_OTHER), dsp_change_origin_(DSP_CHANGE_OTHER) {
default_search_manager_(new DefaultSearchManager(GetPrefs())) {
DCHECK(profile_); DCHECK(profile_);
Init(NULL, 0); Init(NULL, 0);
} }
...@@ -679,12 +678,6 @@ bool TemplateURLService::CanMakeDefault(const TemplateURL* url) { ...@@ -679,12 +678,6 @@ bool TemplateURLService::CanMakeDefault(const TemplateURL* url) {
void TemplateURLService::SetUserSelectedDefaultSearchProvider( void TemplateURLService::SetUserSelectedDefaultSearchProvider(
TemplateURL* url) { TemplateURL* url) {
SetDefaultSearchProvider(url); SetDefaultSearchProvider(url);
if (default_search_manager_) {
if (url)
default_search_manager_->SetUserSelectedDefaultSearchEngine(url->data());
else
default_search_manager_->ClearUserSelectedDefaultSearchEngine();
}
} }
TemplateURL* TemplateURLService::GetDefaultSearchProvider() { TemplateURL* TemplateURLService::GetDefaultSearchProvider() {
......
...@@ -16,7 +16,6 @@ ...@@ -16,7 +16,6 @@
#include "base/memory/scoped_ptr.h" #include "base/memory/scoped_ptr.h"
#include "base/observer_list.h" #include "base/observer_list.h"
#include "base/prefs/pref_change_registrar.h" #include "base/prefs/pref_change_registrar.h"
#include "chrome/browser/search_engines/default_search_manager.h"
#include "chrome/browser/search_engines/template_url_id.h" #include "chrome/browser/search_engines/template_url_id.h"
#include "chrome/browser/webdata/web_data_service.h" #include "chrome/browser/webdata/web_data_service.h"
#include "components/keyed_service/core/keyed_service.h" #include "components/keyed_service/core/keyed_service.h"
...@@ -777,10 +776,6 @@ class TemplateURLService : public WebDataServiceConsumer, ...@@ -777,10 +776,6 @@ class TemplateURLService : public WebDataServiceConsumer,
// Stores a list of callbacks to be run after TemplateURLService has loaded. // Stores a list of callbacks to be run after TemplateURLService has loaded.
base::CallbackList<void(void)> on_loaded_callbacks_; base::CallbackList<void(void)> on_loaded_callbacks_;
// Helper class to manage the default search engine. This will be NULL when
// using the testing-specific constructor.
scoped_ptr<DefaultSearchManager> default_search_manager_;
DISALLOW_COPY_AND_ASSIGN(TemplateURLService); DISALLOW_COPY_AND_ASSIGN(TemplateURLService);
}; };
......
...@@ -10,7 +10,6 @@ ...@@ -10,7 +10,6 @@
#include "chrome/browser/google/google_url_tracker_factory.h" #include "chrome/browser/google/google_url_tracker_factory.h"
#include "chrome/browser/history/history_service_factory.h" #include "chrome/browser/history/history_service_factory.h"
#include "chrome/browser/profiles/incognito_helpers.h" #include "chrome/browser/profiles/incognito_helpers.h"
#include "chrome/browser/search_engines/default_search_manager.h"
#include "chrome/browser/search_engines/template_url_service.h" #include "chrome/browser/search_engines/template_url_service.h"
#include "chrome/browser/webdata/web_data_service_factory.h" #include "chrome/browser/webdata/web_data_service_factory.h"
#include "chrome/common/pref_names.h" #include "chrome/common/pref_names.h"
...@@ -52,7 +51,6 @@ KeyedService* TemplateURLServiceFactory::BuildServiceInstanceFor( ...@@ -52,7 +51,6 @@ KeyedService* TemplateURLServiceFactory::BuildServiceInstanceFor(
void TemplateURLServiceFactory::RegisterProfilePrefs( void TemplateURLServiceFactory::RegisterProfilePrefs(
user_prefs::PrefRegistrySyncable* registry) { user_prefs::PrefRegistrySyncable* registry) {
DefaultSearchManager::RegisterProfilePrefs(registry);
registry->RegisterStringPref(prefs::kSyncedDefaultSearchProviderGUID, registry->RegisterStringPref(prefs::kSyncedDefaultSearchProviderGUID,
std::string(), std::string(),
user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
......
...@@ -1957,8 +1957,6 @@ ...@@ -1957,8 +1957,6 @@
'browser/search/suggestions/suggestions_service_factory.h', 'browser/search/suggestions/suggestions_service_factory.h',
'browser/search/suggestions/suggestions_source.cc', 'browser/search/suggestions/suggestions_source.cc',
'browser/search/suggestions/suggestions_source.h', 'browser/search/suggestions/suggestions_source.h',
'browser/search_engines/default_search_manager.cc',
'browser/search_engines/default_search_manager.h',
'browser/search_engines/default_search_policy_handler.cc', 'browser/search_engines/default_search_policy_handler.cc',
'browser/search_engines/default_search_policy_handler.h', 'browser/search_engines/default_search_policy_handler.h',
'browser/search_engines/search_engine_type.h', 'browser/search_engines/search_engine_type.h',
......
...@@ -1243,7 +1243,6 @@ ...@@ -1243,7 +1243,6 @@
'browser/search/most_visited_iframe_source_unittest.cc', 'browser/search/most_visited_iframe_source_unittest.cc',
'browser/search/search_unittest.cc', 'browser/search/search_unittest.cc',
'browser/search/suggestions/suggestions_service_unittest.cc', 'browser/search/suggestions/suggestions_service_unittest.cc',
'browser/search_engines/default_search_manager_unittest.cc',
'browser/search_engines/default_search_policy_handler_unittest.cc', 'browser/search_engines/default_search_policy_handler_unittest.cc',
'browser/search_engines/search_host_to_urls_map_unittest.cc', 'browser/search_engines/search_host_to_urls_map_unittest.cc',
'browser/search_engines/search_provider_install_data_unittest.cc', 'browser/search_engines/search_provider_install_data_unittest.cc',
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment