Commit 5cd0f54e authored by Pavel Yatsuk's avatar Pavel Yatsuk Committed by Commit Bot

[SEC] Preserve Play API search engine from being replaced by prepopulated data

When search engine has valid prepopulate_id, DefaultSearchManager will
replace it with the entry from prepopulated list. This is not desired
behavior for Play API search engines as it will reset
created_from_play_api flag and search engine name and URLs.

This CL prevents DefaultSearchManager from modifying Play API search
engine.

BUG=1048713
R=pkasting@chromium.org,krb@chromium.org

Change-Id: I5e9a5e523f419b8a28953ce8f26003c1d207a451
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2037830Reviewed-by: default avatarTommy Li <tommycli@chromium.org>
Reviewed-by: default avatarPeter Kasting <pkasting@chromium.org>
Commit-Queue: Pavel Yatsuk <pavely@chromium.org>
Cr-Commit-Position: refs/heads/master@{#739180}
parent 7a8180fa
......@@ -204,6 +204,14 @@ void DefaultSearchManager::MergePrefsDataWithPrepopulated() {
if (!prefs_default_search_ || !prefs_default_search_->prepopulate_id)
return;
// TODO(crbug.com/1049784): Parameters for search engine created from play api
// should be preserved even if corresponding prepopulated search engine
// exists. This logic will be revisited as part of implementation of
// crbug.com/1049784, which will enable updating play api search engine
// parameters with prepopulated data.
if (prefs_default_search_->created_from_play_api)
return;
std::vector<std::unique_ptr<TemplateURLData>> prepopulated_urls =
TemplateURLPrepopulateData::GetPrepopulatedEngines(pref_service_,
nullptr);
......
......@@ -266,3 +266,32 @@ TEST_F(DefaultSearchManagerTest, DefaultSearchSetByExtension) {
ExpectSimilar(data.get(), manager.GetDefaultSearchEngine(&source));
EXPECT_EQ(DefaultSearchManager::FROM_USER, source);
}
// Verify that DefaultSearchManager preserves search engine parameters for
// search engine created from Play API data.
TEST_F(DefaultSearchManagerTest, DefaultSearchSetByPlayAPI) {
DefaultSearchManager manager(pref_service(),
DefaultSearchManager::ObserverCallback());
const TemplateURLData* prepopulated_data =
manager.GetDefaultSearchEngine(nullptr);
// The test tries to set DSE to the one with prepopulate_id, matching existing
// prepopulated search engine.
std::unique_ptr<TemplateURLData> data = GenerateDummyTemplateURLData(
base::UTF16ToUTF8(prepopulated_data->keyword()));
data->prepopulate_id = prepopulated_data->prepopulate_id;
data->favicon_url = prepopulated_data->favicon_url;
// If the new search engine was not created form Play API data its parameters
// should be overwritten with prepopulated data.
manager.SetUserSelectedDefaultSearchEngine(*data);
const TemplateURLData* read_data = manager.GetDefaultSearchEngine(nullptr);
ExpectSimilar(prepopulated_data, read_data);
// If the new search engine was created form Play API data its parameters
// should be preserved.
data->created_from_play_api = true;
manager.SetUserSelectedDefaultSearchEngine(*data);
read_data = manager.GetDefaultSearchEngine(nullptr);
ExpectSimilar(data.get(), read_data);
}
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