Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / search_engines / default_search_pref_migration_unittest.cc
1 // Copyright 2014 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/search_engines/default_search_pref_migration.h"
6
7 #include <string>
8
9 #include "base/compiler_specific.h"
10 #include "base/files/scoped_temp_dir.h"
11 #include "base/logging.h"
12 #include "base/macros.h"
13 #include "base/prefs/pref_service.h"
14 #include "base/strings/string16.h"
15 #include "base/strings/utf_string_conversions.h"
16 #include "chrome/test/base/testing_pref_service_syncable.h"
17 #include "chrome/test/base/testing_profile.h"
18 #include "components/search_engines/template_url.h"
19 #include "components/search_engines/template_url_service.h"
20 #include "testing/gtest/include/gtest/gtest.h"
21
22 class DefaultSearchPrefMigrationTest : public testing::Test {
23  public:
24   DefaultSearchPrefMigrationTest();
25
26   // testing::Test:
27   virtual void SetUp() OVERRIDE;
28
29   scoped_ptr<TemplateURL> CreateKeyword(const std::string& short_name,
30                                         const std::string& keyword,
31                                         const std::string& url);
32
33   TestingProfile* profile() { return profile_.get(); }
34
35   DefaultSearchManager* default_search_manager() {
36     return default_search_manager_.get();
37   }
38
39  private:
40   base::ScopedTempDir temp_dir_;
41   scoped_ptr<TestingProfile> profile_;
42   scoped_ptr<DefaultSearchManager> default_search_manager_;
43
44   DISALLOW_COPY_AND_ASSIGN(DefaultSearchPrefMigrationTest);
45 };
46
47 DefaultSearchPrefMigrationTest::DefaultSearchPrefMigrationTest() {
48 }
49
50 void DefaultSearchPrefMigrationTest::SetUp() {
51   ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
52   profile_.reset(new TestingProfile(temp_dir_.path()));
53   default_search_manager_.reset(new DefaultSearchManager(
54       profile_->GetPrefs(), DefaultSearchManager::ObserverCallback()));
55 }
56
57 scoped_ptr<TemplateURL> DefaultSearchPrefMigrationTest::CreateKeyword(
58     const std::string& short_name,
59     const std::string& keyword,
60     const std::string& url) {
61   TemplateURLData data;
62   data.short_name = base::ASCIIToUTF16(short_name);
63   data.SetKeyword(base::ASCIIToUTF16(keyword));
64   data.SetURL(url);
65   scoped_ptr<TemplateURL> t_url(new TemplateURL(data));
66   return t_url.Pass();
67 }
68
69 TEST_F(DefaultSearchPrefMigrationTest, MigrateUserSelectedValue) {
70   scoped_ptr<TemplateURL> t_url(
71       CreateKeyword("name1", "key1", "http://foo1/{searchTerms}"));
72   // Store a value in the legacy location.
73   TemplateURLService::SaveDefaultSearchProviderToPrefs(t_url.get(),
74                                                        profile()->GetPrefs());
75
76   // Run the migration.
77   ConfigureDefaultSearchPrefMigrationToDictionaryValue(profile()->GetPrefs());
78
79   // Test that it was migrated.
80   DefaultSearchManager::Source source;
81   const TemplateURLData* modern_default =
82       default_search_manager()->GetDefaultSearchEngine(&source);
83   ASSERT_TRUE(modern_default);
84   EXPECT_EQ(DefaultSearchManager::FROM_USER, source);
85   EXPECT_EQ(t_url->short_name(), modern_default->short_name);
86   EXPECT_EQ(t_url->keyword(), modern_default->keyword());
87   EXPECT_EQ(t_url->url(), modern_default->url());
88 }
89
90 TEST_F(DefaultSearchPrefMigrationTest, MigrateOnlyOnce) {
91   scoped_ptr<TemplateURL> t_url(
92       CreateKeyword("name1", "key1", "http://foo1/{searchTerms}"));
93   // Store a value in the legacy location.
94   TemplateURLService::SaveDefaultSearchProviderToPrefs(t_url.get(),
95                                                        profile()->GetPrefs());
96
97   // Run the migration.
98   ConfigureDefaultSearchPrefMigrationToDictionaryValue(profile()->GetPrefs());
99
100   // Test that it was migrated.
101   DefaultSearchManager::Source source;
102   const TemplateURLData* modern_default =
103       default_search_manager()->GetDefaultSearchEngine(&source);
104   ASSERT_TRUE(modern_default);
105   EXPECT_EQ(DefaultSearchManager::FROM_USER, source);
106   EXPECT_EQ(t_url->short_name(), modern_default->short_name);
107   EXPECT_EQ(t_url->keyword(), modern_default->keyword());
108   EXPECT_EQ(t_url->url(), modern_default->url());
109   default_search_manager()->ClearUserSelectedDefaultSearchEngine();
110
111   // Run the migration.
112   ConfigureDefaultSearchPrefMigrationToDictionaryValue(profile()->GetPrefs());
113
114   // Test that it was NOT migrated.
115   modern_default = default_search_manager()->GetDefaultSearchEngine(&source);
116   ASSERT_TRUE(modern_default);
117   EXPECT_EQ(DefaultSearchManager::FROM_FALLBACK, source);
118 }
119
120 TEST_F(DefaultSearchPrefMigrationTest, ModernValuePresent) {
121   scoped_ptr<TemplateURL> t_url(
122       CreateKeyword("name1", "key1", "http://foo1/{searchTerms}"));
123   scoped_ptr<TemplateURL> t_url2(
124       CreateKeyword("name2", "key2", "http://foo2/{searchTerms}"));
125   // Store a value in the legacy location.
126   TemplateURLService::SaveDefaultSearchProviderToPrefs(t_url.get(),
127                                                        profile()->GetPrefs());
128
129   // Store another value in the modern location.
130   default_search_manager()->SetUserSelectedDefaultSearchEngine(t_url2->data());
131
132   // Run the migration.
133   ConfigureDefaultSearchPrefMigrationToDictionaryValue(profile()->GetPrefs());
134
135   // Test that no migration occurred. The modern value is left intact.
136   DefaultSearchManager::Source source;
137   const TemplateURLData* modern_default =
138       default_search_manager()->GetDefaultSearchEngine(&source);
139   ASSERT_TRUE(modern_default);
140   EXPECT_EQ(DefaultSearchManager::FROM_USER, source);
141   EXPECT_EQ(t_url2->short_name(), modern_default->short_name);
142   EXPECT_EQ(t_url2->keyword(), modern_default->keyword());
143   EXPECT_EQ(t_url2->url(), modern_default->url());
144 }
145
146 TEST_F(DefaultSearchPrefMigrationTest,
147        AutomaticallySelectedValueIsNotMigrated) {
148   DefaultSearchManager::Source source;
149   TemplateURLData prepopulated_default(
150       *default_search_manager()->GetDefaultSearchEngine(&source));
151   EXPECT_EQ(DefaultSearchManager::FROM_FALLBACK, source);
152
153   TemplateURL prepopulated_turl(prepopulated_default);
154
155   // Store a value in the legacy location.
156   TemplateURLService::SaveDefaultSearchProviderToPrefs(&prepopulated_turl,
157                                                        profile()->GetPrefs());
158
159   // Run the migration.
160   ConfigureDefaultSearchPrefMigrationToDictionaryValue(profile()->GetPrefs());
161
162   // Test that the legacy value is not migrated, as it is not user-selected.
163   default_search_manager()->GetDefaultSearchEngine(&source);
164   EXPECT_EQ(DefaultSearchManager::FROM_FALLBACK, source);
165 }