blob: 5d236ac80e16850b47d8210b248423779549c3d2 [file] [log] [blame]
// Copyright (c) 2018 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/android/locale/locale_template_url_loader.h>
#include <stddef.h>
#include "base/strings/string_util.h"
#include "base/strings/utf_string_conversions.h"
#include "chrome/browser/search_engines/template_url_service_test_util.h"
#include "components/search_engines/prepopulated_engines.h"
#include "components/search_engines/template_url.h"
#include "components/search_engines/template_url_data_util.h"
#include "components/search_engines/template_url_prepopulate_data.h"
#include "components/search_engines/template_url_service.h"
#include "content/public/test/test_browser_thread_bundle.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
class MockLocaleTemplateUrlLoader : public LocaleTemplateUrlLoader {
public:
MockLocaleTemplateUrlLoader(std::string locale, TemplateURLService* service)
: LocaleTemplateUrlLoader(locale, service) {}
~MockLocaleTemplateUrlLoader() override {}
protected:
std::vector<std::unique_ptr<TemplateURLData>> GetLocalPrepopulatedEngines()
override {
std::vector<std::unique_ptr<TemplateURLData>> result;
result.push_back(TemplateURLDataFromPrepopulatedEngine(
TemplateURLPrepopulateData::so_360));
result.push_back(TemplateURLDataFromPrepopulatedEngine(
TemplateURLPrepopulateData::naver));
result.push_back(TemplateURLDataFromPrepopulatedEngine(
TemplateURLPrepopulateData::google));
return result;
}
int GetDesignatedSearchEngineForChina() override {
return TemplateURLPrepopulateData::naver.id;
}
};
class LocaleTemplateUrlLoaderTest : public testing::Test {
public:
LocaleTemplateUrlLoaderTest() {}
void SetUp() override;
void TearDown() override;
LocaleTemplateUrlLoader* loader() { return loader_.get(); }
TemplateURLServiceTestUtil* test_util() { return test_util_.get(); }
TemplateURLService* model() { return test_util_->model(); }
private:
content::TestBrowserThreadBundle thread_bundle_; // To set up BrowserThreads.
std::unique_ptr<LocaleTemplateUrlLoader> loader_;
std::unique_ptr<TemplateURLServiceTestUtil> test_util_;
DISALLOW_COPY_AND_ASSIGN(LocaleTemplateUrlLoaderTest);
};
void LocaleTemplateUrlLoaderTest::SetUp() {
test_util_.reset(new TemplateURLServiceTestUtil);
loader_.reset(new MockLocaleTemplateUrlLoader("jp", model()));
}
void LocaleTemplateUrlLoaderTest::TearDown() {
loader_.reset();
test_util_.reset();
}
TEST_F(LocaleTemplateUrlLoaderTest, AddLocalSearchEngines) {
test_util()->VerifyLoad();
auto naver = base::ASCIIToUTF16("naver.com");
auto keyword_so = base::ASCIIToUTF16("so.com");
ASSERT_EQ(nullptr, model()->GetTemplateURLForKeyword(naver));
ASSERT_EQ(nullptr, model()->GetTemplateURLForKeyword(keyword_so));
ASSERT_TRUE(
loader()->LoadTemplateUrls(nullptr, JavaParamRef<jobject>(nullptr)));
EXPECT_EQ(TemplateURLPrepopulateData::naver.id,
model()->GetTemplateURLForKeyword(naver)->prepopulate_id());
EXPECT_EQ(TemplateURLPrepopulateData::so_360.id,
model()->GetTemplateURLForKeyword(keyword_so)->prepopulate_id());
// Ensure multiple calls to Load do not duplicate the search engines.
size_t existing_size = model()->GetTemplateURLs().size();
ASSERT_TRUE(
loader()->LoadTemplateUrls(nullptr, JavaParamRef<jobject>(nullptr)));
EXPECT_EQ(existing_size, model()->GetTemplateURLs().size());
}
TEST_F(LocaleTemplateUrlLoaderTest, RemoveLocalSearchEngines) {
test_util()->VerifyLoad();
ASSERT_TRUE(
loader()->LoadTemplateUrls(nullptr, JavaParamRef<jobject>(nullptr)));
// Make sure locale engines are loaded.
auto keyword_naver = base::ASCIIToUTF16("naver.com");
auto keyword_so = base::ASCIIToUTF16("so.com");
ASSERT_EQ(TemplateURLPrepopulateData::naver.id,
model()->GetTemplateURLForKeyword(keyword_naver)->prepopulate_id());
ASSERT_EQ(TemplateURLPrepopulateData::so_360.id,
model()->GetTemplateURLForKeyword(keyword_so)->prepopulate_id());
loader()->RemoveTemplateUrls(nullptr, JavaParamRef<jobject>(nullptr));
ASSERT_EQ(nullptr, model()->GetTemplateURLForKeyword(keyword_naver));
ASSERT_EQ(nullptr, model()->GetTemplateURLForKeyword(keyword_so));
}
TEST_F(LocaleTemplateUrlLoaderTest, OverrideDefaultSearch) {
test_util()->VerifyLoad();
ASSERT_EQ(TemplateURLPrepopulateData::google.id,
model()->GetDefaultSearchProvider()->prepopulate_id());
// Load local search engines first.
ASSERT_TRUE(
loader()->LoadTemplateUrls(nullptr, JavaParamRef<jobject>(nullptr)));
ASSERT_EQ(TemplateURLPrepopulateData::google.id,
model()->GetDefaultSearchProvider()->prepopulate_id());
// Set one of the local search engine as default.
loader()->OverrideDefaultSearchProvider(nullptr,
JavaParamRef<jobject>(nullptr));
ASSERT_EQ(TemplateURLPrepopulateData::naver.id,
model()->GetDefaultSearchProvider()->prepopulate_id());
// Revert the default search engine tweak.
loader()->SetGoogleAsDefaultSearch(nullptr, JavaParamRef<jobject>(nullptr));
ASSERT_EQ(TemplateURLPrepopulateData::google.id,
model()->GetDefaultSearchProvider()->prepopulate_id());
}
TEST_F(LocaleTemplateUrlLoaderTest, ChangedGoogleBaseURL) {
test_util()->VerifyLoad();
auto google_keyword = base::ASCIIToUTF16("google.com");
ASSERT_THAT(model()->GetTemplateURLForKeyword(google_keyword),
testing::NotNull());
test_util()->SetGoogleBaseURL(GURL("http://google.de"));
// After changing the base URL, the previous google keyword will no longer
// match.
ASSERT_EQ(nullptr, model()->GetTemplateURLForKeyword(google_keyword));
ASSERT_TRUE(
loader()->LoadTemplateUrls(nullptr, JavaParamRef<jobject>(nullptr)));
auto template_urls = model()->GetTemplateURLs();
ASSERT_EQ(1, std::count_if(template_urls.begin(), template_urls.end(),
[](TemplateURL* template_url) {
return template_url->prepopulate_id() ==
TemplateURLPrepopulateData::google.id;
}));
}