Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(567)

Side by Side Diff: chrome/browser/extensions/api/settings_overrides/settings_overrides_browsertest.cc

Issue 2479113002: Make extensions DSE persistent in browser prefs (Closed)
Patch Set: Tests updated(rewritten) after review Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/macros.h" 5 #include "base/macros.h"
6 #include "base/run_loop.h" 6 #include "base/run_loop.h"
7 #include "base/strings/utf_string_conversions.h" 7 #include "base/strings/utf_string_conversions.h"
8 #include "build/build_config.h" 8 #include "build/build_config.h"
9 #include "chrome/browser/extensions/extension_browsertest.h" 9 #include "chrome/browser/extensions/extension_browsertest.h"
10 #include "chrome/browser/prefs/session_startup_pref.h" 10 #include "chrome/browser/prefs/session_startup_pref.h"
11 #include "chrome/browser/profiles/profile.h" 11 #include "chrome/browser/profiles/profile.h"
12 #include "chrome/browser/search_engines/template_url_service_factory.h" 12 #include "chrome/browser/search_engines/template_url_service_factory.h"
13 #include "chrome/common/extensions/manifest_handlers/settings_overrides_handler. h"
13 #include "chrome/common/pref_names.h" 14 #include "chrome/common/pref_names.h"
15 #include "chrome/test/base/search_test_utils.h"
14 #include "components/prefs/pref_service.h" 16 #include "components/prefs/pref_service.h"
17 #include "components/search_engines/default_search_manager.h"
18 #include "components/search_engines/search_engines_test_util.h"
15 #include "components/search_engines/template_url.h" 19 #include "components/search_engines/template_url.h"
20 #include "components/search_engines/template_url_prepopulate_data.h"
16 #include "components/search_engines/template_url_service.h" 21 #include "components/search_engines/template_url_service.h"
17 #include "components/version_info/version_info.h" 22 #include "components/version_info/version_info.h"
18 #include "extensions/common/features/feature_channel.h" 23 #include "extensions/common/features/feature_channel.h"
19 24
20 namespace { 25 namespace {
26 // TemplateURLData with search engines settings from settings override extension
27 // manifest.
vasilii 2016/12/06 19:16:42 Mention that it's the particular extension from ch
Alexander Yashkin 2016/12/09 08:19:51 Done
28 std::unique_ptr<TemplateURLData> TestExtensionSearchEngine(PrefService* prefs,
29 const int* prep_id) {
30 auto result = base::MakeUnique<TemplateURLData>();
31 result->SetShortName(base::ASCIIToUTF16("name.de"));
32 result->SetKeyword(base::ASCIIToUTF16("keyword.de"));
33 result->SetURL("http://www.foo.de/s?q={searchTerms}&id=10");
34 result->favicon_url = GURL("http://www.foo.de/favicon.ico?id=10");
35 result->suggestions_url = "http://www.foo.de/suggest?q={searchTerms}&id=10";
36 result->instant_url = "http://www.foo.de/instant?q={searchTerms}&id=10";
37 result->image_url = "http://www.foo.de/image?q={searchTerms}&id=10";
38 result->search_url_post_params = "search_lang=de";
39 result->suggestions_url_post_params = "suggest_lang=de";
40 result->instant_url_post_params = "instant_lang=de";
41 result->image_url_post_params = "image_lang=de";
42 result->alternate_urls.push_back("http://www.moo.de/s?q={searchTerms}&id=10");
43 result->alternate_urls.push_back("http://www.noo.de/s?q={searchTerms}&id=10");
44 result->input_encodings.push_back("UTF-8");
21 45
22 class TemplateURLServiceObserver { 46 if (prep_id) {
23 public: 47 std::unique_ptr<TemplateURLData> prep_engine(
24 TemplateURLServiceObserver(TemplateURLService* service, 48 TemplateURLPrepopulateData::GetPrepopulatedEngine(prefs, *prep_id));
25 base::RunLoop* loop) 49 // Values below do not exist in extension manifest and are taken from
26 : runner_(loop) { 50 // prepopulated engine with prepopulated_id set in extension manifest.
27 DCHECK(loop); 51 result->search_terms_replacement_key =
28 template_url_sub_ = service->RegisterOnLoadedCallback( 52 prep_engine->search_terms_replacement_key;
29 base::Bind(&TemplateURLServiceObserver::StopLoop, 53 result->contextual_search_url = prep_engine->contextual_search_url;
30 base::Unretained(this))); 54 result->new_tab_url = prep_engine->new_tab_url;
31 service->Load();
32 } 55 }
33 ~TemplateURLServiceObserver() {} 56 return result;
34 57 }
35 private:
36 void StopLoop() {
37 runner_->Quit();
38 }
39 base::RunLoop* runner_;
40 std::unique_ptr<TemplateURLService::Subscription> template_url_sub_;
41
42 DISALLOW_COPY_AND_ASSIGN(TemplateURLServiceObserver);
43 };
44 58
45 testing::AssertionResult VerifyTemplateURLServiceLoad( 59 testing::AssertionResult VerifyTemplateURLServiceLoad(
46 TemplateURLService* service) { 60 TemplateURLService* service) {
47 if (service->loaded()) 61 if (service->loaded())
48 return testing::AssertionSuccess(); 62 return testing::AssertionSuccess();
49 base::RunLoop runner; 63 search_test_utils::WaitForTemplateURLServiceToLoad(service);
50 TemplateURLServiceObserver observer(service, &runner);
51 runner.Run();
52 if (service->loaded()) 64 if (service->loaded())
53 return testing::AssertionSuccess(); 65 return testing::AssertionSuccess();
54 return testing::AssertionFailure() << "TemplateURLService isn't loaded"; 66 return testing::AssertionFailure() << "TemplateURLService isn't loaded";
55 } 67 }
56 68
57 IN_PROC_BROWSER_TEST_F(ExtensionBrowserTest, OverrideSettings) { 69 IN_PROC_BROWSER_TEST_F(ExtensionBrowserTest, OverrideHomePageSettings) {
58 PrefService* prefs = profile()->GetPrefs(); 70 PrefService* prefs = profile()->GetPrefs();
59 ASSERT_TRUE(prefs); 71 ASSERT_TRUE(prefs);
60 prefs->SetString(prefs::kHomePage, "http://google.com/"); 72 prefs->SetString(prefs::kHomePage, "http://google.com/");
61 prefs->SetBoolean(prefs::kHomePageIsNewTabPage, true); 73 prefs->SetBoolean(prefs::kHomePageIsNewTabPage, true);
74 #if defined(OS_WIN) || defined(OS_MACOSX)
75 const extensions::Extension* extension = LoadExtensionWithInstallParam(
76 test_data_dir_.AppendASCII("settings_override"), kFlagEnableFileAccess,
77 "10");
78 ASSERT_TRUE(extension);
79 EXPECT_EQ("http://www.homepage.de/?param=10",
80 prefs->GetString(prefs::kHomePage));
81 EXPECT_FALSE(prefs->GetBoolean(prefs::kHomePageIsNewTabPage));
82 UnloadExtension(extension->id());
83 EXPECT_EQ("http://google.com/", prefs->GetString(prefs::kHomePage));
84 EXPECT_TRUE(prefs->GetBoolean(prefs::kHomePageIsNewTabPage));
85 #else
86 const extensions::Extension* extension =
87 LoadExtensionWithFlags(test_data_dir_.AppendASCII("settings_override"),
88 kFlagIgnoreManifestWarnings);
89 ASSERT_TRUE(extension);
90 ASSERT_EQ(1u, extension->install_warnings().size());
91 EXPECT_EQ(std::string("'chrome_settings_overrides' "
92 "is not allowed for specified platform."),
93 extension->install_warnings().front().message);
94 #endif
95 }
96
97 IN_PROC_BROWSER_TEST_F(ExtensionBrowserTest, OverrideStartupPagesSettings) {
98 PrefService* prefs = profile()->GetPrefs();
99 ASSERT_TRUE(prefs);
62 const GURL urls[] = {GURL("http://foo"), GURL("http://bar")}; 100 const GURL urls[] = {GURL("http://foo"), GURL("http://bar")};
63 SessionStartupPref startup_pref(SessionStartupPref::LAST); 101 SessionStartupPref startup_pref(SessionStartupPref::LAST);
64 startup_pref.urls.assign(urls, urls + arraysize(urls)); 102 startup_pref.urls.assign(urls, urls + arraysize(urls));
65 SessionStartupPref::SetStartupPref(prefs, startup_pref); 103 SessionStartupPref::SetStartupPref(prefs, startup_pref);
66 TemplateURLService* url_service =
67 TemplateURLServiceFactory::GetForProfile(profile());
68 ASSERT_TRUE(url_service);
69 EXPECT_TRUE(VerifyTemplateURLServiceLoad(url_service));
70 TemplateURL* default_provider = url_service->GetDefaultSearchProvider();
71 ASSERT_TRUE(default_provider);
72 EXPECT_EQ(TemplateURL::NORMAL, default_provider->type());
73
74 #if defined(OS_MACOSX)
75 // On Mac, this API is limited to trunk.
76 extensions::ScopedCurrentChannel scoped_channel(
77 version_info::Channel::UNKNOWN);
78 #endif // OS_MACOSX
79 104
80 #if defined(OS_WIN) || defined(OS_MACOSX) 105 #if defined(OS_WIN) || defined(OS_MACOSX)
81 const extensions::Extension* extension = LoadExtensionWithInstallParam( 106 const extensions::Extension* extension = LoadExtensionWithInstallParam(
82 test_data_dir_.AppendASCII("settings_override"), 107 test_data_dir_.AppendASCII("settings_override"),
83 kFlagEnableFileAccess, 108 kFlagEnableFileAccess,
84 "10"); 109 "10");
85 ASSERT_TRUE(extension); 110 ASSERT_TRUE(extension);
86 EXPECT_EQ("http://www.homepage.de/?param=10",
87 prefs->GetString(prefs::kHomePage));
88 EXPECT_FALSE(prefs->GetBoolean(prefs::kHomePageIsNewTabPage));
89 startup_pref = SessionStartupPref::GetStartupPref(prefs); 111 startup_pref = SessionStartupPref::GetStartupPref(prefs);
90 EXPECT_EQ(SessionStartupPref::URLS, startup_pref.type); 112 EXPECT_EQ(SessionStartupPref::URLS, startup_pref.type);
91 EXPECT_EQ(std::vector<GURL>(1, GURL("http://www.startup.de/?param=10")), 113 EXPECT_EQ(std::vector<GURL>(1, GURL("http://www.startup.de/?param=10")),
92 startup_pref.urls); 114 startup_pref.urls);
93 TemplateURL* extension_provider = url_service->GetDefaultSearchProvider();
94 EXPECT_EQ(TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION,
95 extension_provider->type());
96 EXPECT_EQ(base::ASCIIToUTF16("name.de"), extension_provider->short_name());
97 EXPECT_EQ(base::ASCIIToUTF16("keyword.de"), extension_provider->keyword());
98 EXPECT_EQ("http://www.foo.de/s?q={searchTerms}&id=10",
99 extension_provider->url());
100 EXPECT_EQ(GURL("http://www.foo.de/favicon.ico?id=10"),
101 extension_provider->favicon_url());
102 EXPECT_EQ("http://www.foo.de/suggest?q={searchTerms}&id=10",
103 extension_provider->suggestions_url());
104 EXPECT_EQ("http://www.foo.de/instant?q={searchTerms}&id=10",
105 extension_provider->instant_url());
106 EXPECT_EQ("http://www.foo.de/image?q={searchTerms}&id=10",
107 extension_provider->image_url());
108 EXPECT_EQ("search_lang=de", extension_provider->search_url_post_params());
109 EXPECT_EQ("suggest_lang=de",
110 extension_provider->suggestions_url_post_params());
111 EXPECT_EQ("instant_lang=de", extension_provider->instant_url_post_params());
112 EXPECT_EQ("image_lang=de", extension_provider->image_url_post_params());
113 const std::string alternate_urls[] = {
114 "http://www.moo.de/s?q={searchTerms}&id=10",
115 "http://www.noo.de/s?q={searchTerms}&id=10"};
116 EXPECT_EQ(std::vector<std::string>(
117 alternate_urls, alternate_urls + arraysize(alternate_urls)),
118 extension_provider->alternate_urls());
119 EXPECT_EQ(std::vector<std::string>(1, "UTF-8"),
120 extension_provider->input_encodings());
121 EXPECT_EQ(default_provider->new_tab_url(), extension_provider->new_tab_url());
122
123 UnloadExtension(extension->id()); 115 UnloadExtension(extension->id());
124 EXPECT_EQ("http://google.com/", prefs->GetString(prefs::kHomePage));
125 EXPECT_TRUE(prefs->GetBoolean(prefs::kHomePageIsNewTabPage));
126 startup_pref = SessionStartupPref::GetStartupPref(prefs); 116 startup_pref = SessionStartupPref::GetStartupPref(prefs);
127 EXPECT_EQ(SessionStartupPref::LAST, startup_pref.type); 117 EXPECT_EQ(SessionStartupPref::LAST, startup_pref.type);
128 EXPECT_EQ(std::vector<GURL>(urls, urls + arraysize(urls)), startup_pref.urls); 118 EXPECT_EQ(std::vector<GURL>(urls, urls + arraysize(urls)), startup_pref.urls);
119 #else
120 const extensions::Extension* extension =
121 LoadExtensionWithFlags(test_data_dir_.AppendASCII("settings_override"),
122 kFlagIgnoreManifestWarnings);
123 ASSERT_TRUE(extension);
124 ASSERT_EQ(1u, extension->install_warnings().size());
125 EXPECT_EQ(std::string("'chrome_settings_overrides' "
126 "is not allowed for specified platform."),
127 extension->install_warnings().front().message);
128 #endif
129 }
130
131 IN_PROC_BROWSER_TEST_F(ExtensionBrowserTest, OverrideDSE) {
132 PrefService* prefs = profile()->GetPrefs();
133 ASSERT_TRUE(prefs);
134 TemplateURLService* url_service =
135 TemplateURLServiceFactory::GetForProfile(profile());
136 ASSERT_TRUE(url_service);
137 EXPECT_TRUE(VerifyTemplateURLServiceLoad(url_service));
138 TemplateURL* default_provider = url_service->GetDefaultSearchProvider();
139 ASSERT_TRUE(default_provider);
140 EXPECT_EQ(TemplateURL::NORMAL, default_provider->type());
141
142 #if defined(OS_WIN) || defined(OS_MACOSX)
143 const extensions::Extension* extension = LoadExtensionWithInstallParam(
144 test_data_dir_.AppendASCII("settings_override"), kFlagEnableFileAccess,
145 "10");
146 ASSERT_TRUE(extension);
147 TemplateURL* current_dse = url_service->GetDefaultSearchProvider();
148 EXPECT_EQ(TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION, current_dse->type());
149
150 const int* prep_id = extensions::SettingsOverrides::Get(extension)
151 ->search_engine->prepopulated_id.get();
152 auto extension_dse = TestExtensionSearchEngine(prefs, prep_id);
vasilii 2016/12/06 19:16:42 std::unique_ptr<TemplateURLData> would help readab
Alexander Yashkin 2016/12/09 08:19:51 Done
153 ExpectSimilar(&current_dse->data(), extension_dse.get());
vasilii 2016/12/06 19:16:42 extension_dse is the expected one. Thus, it's the
Alexander Yashkin 2016/12/09 08:19:52 Done
154
155 UnloadExtension(extension->id());
129 EXPECT_EQ(default_provider, url_service->GetDefaultSearchProvider()); 156 EXPECT_EQ(default_provider, url_service->GetDefaultSearchProvider());
130 #else 157 #else
131 const extensions::Extension* extension = 158 const extensions::Extension* extension =
132 LoadExtensionWithFlags(test_data_dir_.AppendASCII("settings_override"), 159 LoadExtensionWithFlags(test_data_dir_.AppendASCII("settings_override"),
133 kFlagIgnoreManifestWarnings); 160 kFlagIgnoreManifestWarnings);
134 ASSERT_TRUE(extension); 161 ASSERT_TRUE(extension);
135 ASSERT_EQ(1u, extension->install_warnings().size()); 162 ASSERT_EQ(1u, extension->install_warnings().size());
136 EXPECT_EQ(std::string( 163 EXPECT_EQ(std::string(
137 "'chrome_settings_overrides' " 164 "'chrome_settings_overrides' "
138 "is not allowed for specified platform."), 165 "is not allowed for specified platform."),
139 extension->install_warnings().front().message); 166 extension->install_warnings().front().message);
140 #endif 167 #endif
141 } 168 }
142 169
170 #if defined(OS_WIN) || defined(OS_MACOSX)
171 // Install and load extension into test profile.
172 IN_PROC_BROWSER_TEST_F(ExtensionBrowserTest, PRE_OverridenDSEPersists) {
173 PrefService* prefs = profile()->GetPrefs();
174 ASSERT_TRUE(prefs);
175 TemplateURLService* url_service =
176 TemplateURLServiceFactory::GetForProfile(profile());
177 ASSERT_TRUE(url_service);
178 EXPECT_TRUE(VerifyTemplateURLServiceLoad(url_service));
179 TemplateURL* default_provider = url_service->GetDefaultSearchProvider();
180 ASSERT_TRUE(default_provider);
181 // Check that default provider is normal before extension is
182 // installed and loaded.
183 EXPECT_EQ(TemplateURL::NORMAL, default_provider->type());
184 EXPECT_NE(base::ASCIIToUTF16("name.de"), default_provider->short_name());
185 EXPECT_NE(base::ASCIIToUTF16("keyword.de"), default_provider->keyword());
186
187 // Install extension that overrides DSE.
188 const extensions::Extension* extension = LoadExtensionWithInstallParam(
189 test_data_dir_.AppendASCII("search_provider_override"),
190 kFlagEnableFileAccess, "10");
191 ASSERT_TRUE(extension);
192 }
193
194 // PRE_OverridenDSEPersists already installed extension with overriden DSE into
195 // profile. Current test checks that after extension is installed,
196 // default_search_manager correctly determines extension overriden DSE
197 // from profile.
198 IN_PROC_BROWSER_TEST_F(ExtensionBrowserTest, OverridenDSEPersists) {
199 Profile* profile = browser()->profile();
200 DefaultSearchManager default_manager(
201 profile->GetPrefs(), DefaultSearchManager::ObserverCallback());
202
203 DefaultSearchManager::Source source;
204 TemplateURLData* dse = default_manager.GetDefaultSearchEngine(&source);
205
206 ASSERT_TRUE(dse);
207 const int prep_id = 1; // Prepopulated engine from search_provider_override
208 // test extension.
vasilii 2016/12/06 19:16:42 I guess you obtain |prep_id| the same way as above
Alexander Yashkin 2016/12/09 08:19:51 I can get prep_id by loading extension and checkin
vasilii 2016/12/13 17:16:39 Acknowledged.
209 auto extension_dse = TestExtensionSearchEngine(profile->GetPrefs(), &prep_id);
210 ExpectSimilar(dse, extension_dse.get());
211 EXPECT_EQ(DefaultSearchManager::FROM_EXTENSION, source);
212 }
213 #endif
214
143 } // namespace 215 } // namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698