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

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

Issue 2623833005: Revert of Make extensions DSE persistent in browser prefs (Closed)
Patch Set: Created 3 years, 11 months 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/search.h"
13 #include "chrome/browser/search_engines/template_url_service_factory.h" 12 #include "chrome/browser/search_engines/template_url_service_factory.h"
14 #include "chrome/browser/search_engines/ui_thread_search_terms_data.h"
15 #include "chrome/common/pref_names.h" 13 #include "chrome/common/pref_names.h"
16 #include "chrome/test/base/search_test_utils.h"
17 #include "components/prefs/pref_service.h" 14 #include "components/prefs/pref_service.h"
18 #include "components/search_engines/default_search_manager.h"
19 #include "components/search_engines/search_engines_test_util.h"
20 #include "components/search_engines/template_url.h" 15 #include "components/search_engines/template_url.h"
21 #include "components/search_engines/template_url_prepopulate_data.h"
22 #include "components/search_engines/template_url_service.h" 16 #include "components/search_engines/template_url_service.h"
23 #include "components/version_info/version_info.h" 17 #include "components/version_info/version_info.h"
24 #include "extensions/common/features/feature_channel.h" 18 #include "extensions/common/features/feature_channel.h"
25 19
26 namespace { 20 namespace {
27 #if defined(OS_WIN) || defined(OS_MACOSX)
28 // Prepopulated id hardcoded in test_extension.
29 const int kTestExtensionPrepopulatedId = 1;
30 // TemplateURLData with search engines settings from test extension manifest.
31 // chrome/test/data/extensions/settings_override/manifest.json
32 std::unique_ptr<TemplateURLData> TestExtensionSearchEngine(PrefService* prefs) {
33 auto result = base::MakeUnique<TemplateURLData>();
34 result->SetShortName(base::ASCIIToUTF16("name.de"));
35 result->SetKeyword(base::ASCIIToUTF16("keyword.de"));
36 result->SetURL("http://www.foo.de/s?q={searchTerms}&id=10");
37 result->favicon_url = GURL("http://www.foo.de/favicon.ico?id=10");
38 result->suggestions_url = "http://www.foo.de/suggest?q={searchTerms}&id=10";
39 result->instant_url = "http://www.foo.de/instant?q={searchTerms}&id=10";
40 result->image_url = "http://www.foo.de/image?q={searchTerms}&id=10";
41 result->search_url_post_params = "search_lang=de";
42 result->suggestions_url_post_params = "suggest_lang=de";
43 result->instant_url_post_params = "instant_lang=de";
44 result->image_url_post_params = "image_lang=de";
45 result->alternate_urls.push_back("http://www.moo.de/s?q={searchTerms}&id=10");
46 result->alternate_urls.push_back("http://www.noo.de/s?q={searchTerms}&id=10");
47 result->input_encodings.push_back("UTF-8");
48 21
49 std::unique_ptr<TemplateURLData> prepopulated = 22 class TemplateURLServiceObserver {
50 TemplateURLPrepopulateData::GetPrepopulatedEngine( 23 public:
51 prefs, kTestExtensionPrepopulatedId); 24 TemplateURLServiceObserver(TemplateURLService* service,
52 // Values below do not exist in extension manifest and are taken from 25 base::RunLoop* loop)
53 // prepopulated engine with prepopulated_id set in extension manifest. 26 : runner_(loop) {
54 result->search_terms_replacement_key = 27 DCHECK(loop);
55 prepopulated->search_terms_replacement_key; 28 template_url_sub_ = service->RegisterOnLoadedCallback(
56 result->contextual_search_url = prepopulated->contextual_search_url; 29 base::Bind(&TemplateURLServiceObserver::StopLoop,
57 result->new_tab_url = prepopulated->new_tab_url; 30 base::Unretained(this)));
58 return result; 31 service->Load();
59 } 32 }
33 ~TemplateURLServiceObserver() {}
34
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 };
60 44
61 testing::AssertionResult VerifyTemplateURLServiceLoad( 45 testing::AssertionResult VerifyTemplateURLServiceLoad(
62 TemplateURLService* service) { 46 TemplateURLService* service) {
63 if (service->loaded()) 47 if (service->loaded())
64 return testing::AssertionSuccess(); 48 return testing::AssertionSuccess();
65 search_test_utils::WaitForTemplateURLServiceToLoad(service); 49 base::RunLoop runner;
50 TemplateURLServiceObserver observer(service, &runner);
51 runner.Run();
66 if (service->loaded()) 52 if (service->loaded())
67 return testing::AssertionSuccess(); 53 return testing::AssertionSuccess();
68 return testing::AssertionFailure() << "TemplateURLService isn't loaded"; 54 return testing::AssertionFailure() << "TemplateURLService isn't loaded";
69 } 55 }
70 56
71 IN_PROC_BROWSER_TEST_F(ExtensionBrowserTest, OverrideHomePageSettings) { 57 IN_PROC_BROWSER_TEST_F(ExtensionBrowserTest, OverrideSettings) {
72 PrefService* prefs = profile()->GetPrefs(); 58 PrefService* prefs = profile()->GetPrefs();
73 ASSERT_TRUE(prefs); 59 ASSERT_TRUE(prefs);
74 prefs->SetString(prefs::kHomePage, "http://google.com/"); 60 prefs->SetString(prefs::kHomePage, "http://google.com/");
75 prefs->SetBoolean(prefs::kHomePageIsNewTabPage, true); 61 prefs->SetBoolean(prefs::kHomePageIsNewTabPage, true);
76
77 const extensions::Extension* extension = LoadExtensionWithInstallParam(
78 test_data_dir_.AppendASCII("settings_override"), kFlagEnableFileAccess,
79 "10");
80 ASSERT_TRUE(extension);
81 EXPECT_EQ("http://www.homepage.de/?param=10",
82 prefs->GetString(prefs::kHomePage));
83 EXPECT_FALSE(prefs->GetBoolean(prefs::kHomePageIsNewTabPage));
84 UnloadExtension(extension->id());
85 EXPECT_EQ("http://google.com/", prefs->GetString(prefs::kHomePage));
86 EXPECT_TRUE(prefs->GetBoolean(prefs::kHomePageIsNewTabPage));
87 }
88
89 IN_PROC_BROWSER_TEST_F(ExtensionBrowserTest, OverrideStartupPagesSettings) {
90 PrefService* prefs = profile()->GetPrefs();
91 ASSERT_TRUE(prefs);
92 const GURL urls[] = {GURL("http://foo"), GURL("http://bar")}; 62 const GURL urls[] = {GURL("http://foo"), GURL("http://bar")};
93 SessionStartupPref startup_pref(SessionStartupPref::LAST); 63 SessionStartupPref startup_pref(SessionStartupPref::LAST);
94 startup_pref.urls.assign(urls, urls + arraysize(urls)); 64 startup_pref.urls.assign(urls, urls + arraysize(urls));
95 SessionStartupPref::SetStartupPref(prefs, startup_pref); 65 SessionStartupPref::SetStartupPref(prefs, startup_pref);
96
97 const extensions::Extension* extension = LoadExtensionWithInstallParam(
98 test_data_dir_.AppendASCII("settings_override"),
99 kFlagEnableFileAccess,
100 "10");
101 ASSERT_TRUE(extension);
102 startup_pref = SessionStartupPref::GetStartupPref(prefs);
103 EXPECT_EQ(SessionStartupPref::URLS, startup_pref.type);
104 EXPECT_EQ(std::vector<GURL>(1, GURL("http://www.startup.de/?param=10")),
105 startup_pref.urls);
106 UnloadExtension(extension->id());
107 startup_pref = SessionStartupPref::GetStartupPref(prefs);
108 EXPECT_EQ(SessionStartupPref::LAST, startup_pref.type);
109 EXPECT_EQ(std::vector<GURL>(urls, urls + arraysize(urls)), startup_pref.urls);
110 }
111
112 IN_PROC_BROWSER_TEST_F(ExtensionBrowserTest, OverrideDSE) {
113 PrefService* prefs = profile()->GetPrefs();
114 ASSERT_TRUE(prefs);
115 TemplateURLService* url_service = 66 TemplateURLService* url_service =
116 TemplateURLServiceFactory::GetForProfile(profile()); 67 TemplateURLServiceFactory::GetForProfile(profile());
117 ASSERT_TRUE(url_service); 68 ASSERT_TRUE(url_service);
118 EXPECT_TRUE(VerifyTemplateURLServiceLoad(url_service)); 69 EXPECT_TRUE(VerifyTemplateURLServiceLoad(url_service));
119 TemplateURL* default_provider = url_service->GetDefaultSearchProvider(); 70 TemplateURL* default_provider = url_service->GetDefaultSearchProvider();
120 ASSERT_TRUE(default_provider); 71 ASSERT_TRUE(default_provider);
121 EXPECT_EQ(TemplateURL::NORMAL, default_provider->type()); 72 EXPECT_EQ(TemplateURL::NORMAL, default_provider->type());
122 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
80 #if defined(OS_WIN) || defined(OS_MACOSX)
123 const extensions::Extension* extension = LoadExtensionWithInstallParam( 81 const extensions::Extension* extension = LoadExtensionWithInstallParam(
124 test_data_dir_.AppendASCII("settings_override"), kFlagEnableFileAccess, 82 test_data_dir_.AppendASCII("settings_override"),
83 kFlagEnableFileAccess,
125 "10"); 84 "10");
126 ASSERT_TRUE(extension); 85 ASSERT_TRUE(extension);
127 TemplateURL* current_dse = url_service->GetDefaultSearchProvider(); 86 EXPECT_EQ("http://www.homepage.de/?param=10",
128 EXPECT_EQ(TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION, current_dse->type()); 87 prefs->GetString(prefs::kHomePage));
129 88 EXPECT_FALSE(prefs->GetBoolean(prefs::kHomePageIsNewTabPage));
130 std::unique_ptr<TemplateURLData> extension_dse = 89 startup_pref = SessionStartupPref::GetStartupPref(prefs);
131 TestExtensionSearchEngine(prefs); 90 EXPECT_EQ(SessionStartupPref::URLS, startup_pref.type);
132 ExpectSimilar(extension_dse.get(), &current_dse->data()); 91 EXPECT_EQ(std::vector<GURL>(1, GURL("http://www.startup.de/?param=10")),
92 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());
133 122
134 UnloadExtension(extension->id()); 123 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);
127 EXPECT_EQ(SessionStartupPref::LAST, startup_pref.type);
128 EXPECT_EQ(std::vector<GURL>(urls, urls + arraysize(urls)), startup_pref.urls);
135 EXPECT_EQ(default_provider, url_service->GetDefaultSearchProvider()); 129 EXPECT_EQ(default_provider, url_service->GetDefaultSearchProvider());
136 }
137
138 // Install and load extension into test profile.
139 IN_PROC_BROWSER_TEST_F(ExtensionBrowserTest, PRE_OverridenDSEPersists) {
140 PrefService* prefs = profile()->GetPrefs();
141 ASSERT_TRUE(prefs);
142 TemplateURLService* url_service =
143 TemplateURLServiceFactory::GetForProfile(profile());
144 ASSERT_TRUE(url_service);
145 EXPECT_TRUE(VerifyTemplateURLServiceLoad(url_service));
146 TemplateURL* default_provider = url_service->GetDefaultSearchProvider();
147 ASSERT_TRUE(default_provider);
148 // Check that default provider is normal before extension is
149 // installed and loaded.
150 EXPECT_EQ(TemplateURL::NORMAL, default_provider->type());
151 EXPECT_NE(base::ASCIIToUTF16("name.de"), default_provider->short_name());
152 EXPECT_NE(base::ASCIIToUTF16("keyword.de"), default_provider->keyword());
153
154 // Install extension that overrides DSE.
155 const extensions::Extension* extension = LoadExtensionWithInstallParam(
156 test_data_dir_.AppendASCII("settings_override"), kFlagEnableFileAccess,
157 "10");
158 ASSERT_TRUE(extension);
159 }
160
161 // PRE_OverridenDSEPersists already installed extension with overriden DSE into
162 // profile. Current test checks that after extension is installed,
163 // default_search_manager correctly determines extension overriden DSE
164 // from profile.
165 IN_PROC_BROWSER_TEST_F(ExtensionBrowserTest, OverridenDSEPersists) {
166 Profile* profile = browser()->profile();
167 DefaultSearchManager default_manager(
168 profile->GetPrefs(), DefaultSearchManager::ObserverCallback());
169
170 DefaultSearchManager::Source source;
171 TemplateURLData* current_dse =
172 default_manager.GetDefaultSearchEngine(&source);
173
174 ASSERT_TRUE(current_dse);
175 std::unique_ptr<TemplateURLData> extension_dse =
176 TestExtensionSearchEngine(profile->GetPrefs());
177 ExpectSimilar(extension_dse.get(), current_dse);
178 EXPECT_EQ(DefaultSearchManager::FROM_EXTENSION, source);
179
180 // Check that new tab url is correctly overriden by extension.
181 TemplateURL ext_turl(*extension_dse,
182 TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION);
183
184 std::string new_tab_url_ext = ext_turl.new_tab_url_ref().ReplaceSearchTerms(
185 TemplateURLRef::SearchTermsArgs(base::string16()),
186 UIThreadSearchTermsData(profile));
187
188 EXPECT_EQ(new_tab_url_ext, search::GetNewTabPageURL(profile).spec());
189 }
190 #else 130 #else
191 IN_PROC_BROWSER_TEST_F(ExtensionBrowserTest, SettingsOverridesDisallowed) {
192 const extensions::Extension* extension = 131 const extensions::Extension* extension =
193 LoadExtensionWithFlags(test_data_dir_.AppendASCII("settings_override"), 132 LoadExtensionWithFlags(test_data_dir_.AppendASCII("settings_override"),
194 kFlagIgnoreManifestWarnings); 133 kFlagIgnoreManifestWarnings);
195 ASSERT_TRUE(extension); 134 ASSERT_TRUE(extension);
196 ASSERT_EQ(1u, extension->install_warnings().size()); 135 ASSERT_EQ(1u, extension->install_warnings().size());
197 EXPECT_EQ(std::string("'chrome_settings_overrides' " 136 EXPECT_EQ(std::string(
198 "is not allowed for specified platform."), 137 "'chrome_settings_overrides' "
138 "is not allowed for specified platform."),
199 extension->install_warnings().front().message); 139 extension->install_warnings().front().message);
140 #endif
200 } 141 }
201 #endif
202 142
203 } // namespace 143 } // namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698