1 // Copyright (c) 2018 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include <chrome/browser/android/locale/locale_template_url_loader.h>
6 #include <stddef.h>
7
8 #include "base/strings/string_util.h"
9 #include "base/strings/utf_string_conversions.h"
10 #include "chrome/browser/search_engines/template_url_service_test_util.h"
11 #include "components/search_engines/prepopulated_engines.h"
12 #include "components/search_engines/template_url.h"
13 #include "components/search_engines/template_url_data_util.h"
14 #include "components/search_engines/template_url_prepopulate_data.h"
15 #include "components/search_engines/template_url_service.h"
16 #include "content/public/test/browser_task_environment.h"
17 #include "testing/gmock/include/gmock/gmock.h"
18 #include "testing/gtest/include/gtest/gtest.h"
19
20 class MockLocaleTemplateUrlLoader : public LocaleTemplateUrlLoader {
21 public:
MockLocaleTemplateUrlLoader(std::string locale,TemplateURLService * service)22 MockLocaleTemplateUrlLoader(std::string locale, TemplateURLService* service)
23 : LocaleTemplateUrlLoader(locale, service) {}
24
~MockLocaleTemplateUrlLoader()25 ~MockLocaleTemplateUrlLoader() override {}
26
27 protected:
GetLocalPrepopulatedEngines()28 std::vector<std::unique_ptr<TemplateURLData>> GetLocalPrepopulatedEngines()
29 override {
30 std::vector<std::unique_ptr<TemplateURLData>> result;
31 result.push_back(TemplateURLDataFromPrepopulatedEngine(
32 TemplateURLPrepopulateData::so_360));
33 result.push_back(TemplateURLDataFromPrepopulatedEngine(
34 TemplateURLPrepopulateData::naver));
35 result.push_back(TemplateURLDataFromPrepopulatedEngine(
36 TemplateURLPrepopulateData::google));
37 return result;
38 }
39
GetDesignatedSearchEngineForChina()40 int GetDesignatedSearchEngineForChina() override {
41 return TemplateURLPrepopulateData::naver.id;
42 }
43 };
44
45 class LocaleTemplateUrlLoaderTest : public testing::Test {
46 public:
LocaleTemplateUrlLoaderTest()47 LocaleTemplateUrlLoaderTest() {}
48
49 void SetUp() override;
50 void TearDown() override;
loader()51 LocaleTemplateUrlLoader* loader() { return loader_.get(); }
test_util()52 TemplateURLServiceTestUtil* test_util() { return test_util_.get(); }
model()53 TemplateURLService* model() { return test_util_->model(); }
54
55 private:
56 content::BrowserTaskEnvironment
57 task_environment_; // To set up BrowserThreads.
58 std::unique_ptr<LocaleTemplateUrlLoader> loader_;
59 std::unique_ptr<TemplateURLServiceTestUtil> test_util_;
60
61 DISALLOW_COPY_AND_ASSIGN(LocaleTemplateUrlLoaderTest);
62 };
63
SetUp()64 void LocaleTemplateUrlLoaderTest::SetUp() {
65 test_util_.reset(new TemplateURLServiceTestUtil);
66 loader_.reset(new MockLocaleTemplateUrlLoader("jp", model()));
67 }
68
TearDown()69 void LocaleTemplateUrlLoaderTest::TearDown() {
70 loader_.reset();
71 test_util_.reset();
72 }
73
TEST_F(LocaleTemplateUrlLoaderTest,AddLocalSearchEngines)74 TEST_F(LocaleTemplateUrlLoaderTest, AddLocalSearchEngines) {
75 test_util()->VerifyLoad();
76 auto naver = base::ASCIIToUTF16("naver.com");
77 auto keyword_so = base::ASCIIToUTF16("so.com");
78 ASSERT_EQ(nullptr, model()->GetTemplateURLForKeyword(naver));
79 ASSERT_EQ(nullptr, model()->GetTemplateURLForKeyword(keyword_so));
80
81 ASSERT_TRUE(loader()->LoadTemplateUrls(nullptr));
82
83 EXPECT_EQ(TemplateURLPrepopulateData::naver.id,
84 model()->GetTemplateURLForKeyword(naver)->prepopulate_id());
85 EXPECT_EQ(TemplateURLPrepopulateData::so_360.id,
86 model()->GetTemplateURLForKeyword(keyword_so)->prepopulate_id());
87
88 // Ensure multiple calls to Load do not duplicate the search engines.
89 size_t existing_size = model()->GetTemplateURLs().size();
90 ASSERT_TRUE(loader()->LoadTemplateUrls(nullptr));
91 EXPECT_EQ(existing_size, model()->GetTemplateURLs().size());
92 }
93
TEST_F(LocaleTemplateUrlLoaderTest,RemoveLocalSearchEngines)94 TEST_F(LocaleTemplateUrlLoaderTest, RemoveLocalSearchEngines) {
95 test_util()->VerifyLoad();
96 ASSERT_TRUE(loader()->LoadTemplateUrls(nullptr));
97 // Make sure locale engines are loaded.
98 auto keyword_naver = base::ASCIIToUTF16("naver.com");
99 auto keyword_so = base::ASCIIToUTF16("so.com");
100 ASSERT_EQ(TemplateURLPrepopulateData::naver.id,
101 model()->GetTemplateURLForKeyword(keyword_naver)->prepopulate_id());
102 ASSERT_EQ(TemplateURLPrepopulateData::so_360.id,
103 model()->GetTemplateURLForKeyword(keyword_so)->prepopulate_id());
104
105 loader()->RemoveTemplateUrls(nullptr);
106
107 ASSERT_EQ(nullptr, model()->GetTemplateURLForKeyword(keyword_naver));
108 ASSERT_EQ(nullptr, model()->GetTemplateURLForKeyword(keyword_so));
109 }
110
TEST_F(LocaleTemplateUrlLoaderTest,OverrideDefaultSearch)111 TEST_F(LocaleTemplateUrlLoaderTest, OverrideDefaultSearch) {
112 test_util()->VerifyLoad();
113 ASSERT_EQ(TemplateURLPrepopulateData::google.id,
114 model()->GetDefaultSearchProvider()->prepopulate_id());
115 // Load local search engines first.
116 ASSERT_TRUE(loader()->LoadTemplateUrls(nullptr));
117
118 ASSERT_EQ(TemplateURLPrepopulateData::google.id,
119 model()->GetDefaultSearchProvider()->prepopulate_id());
120
121 // Set one of the local search engine as default.
122 loader()->OverrideDefaultSearchProvider(nullptr);
123 ASSERT_EQ(TemplateURLPrepopulateData::naver.id,
124 model()->GetDefaultSearchProvider()->prepopulate_id());
125
126 // Revert the default search engine tweak.
127 loader()->SetGoogleAsDefaultSearch(nullptr);
128 ASSERT_EQ(TemplateURLPrepopulateData::google.id,
129 model()->GetDefaultSearchProvider()->prepopulate_id());
130 }
131