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

Side by Side Diff: chrome/browser/search_engines/search_provider_install_data_unittest.cc

Issue 17127002: Correctly integrate StoragePartition into TestingProfile. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: address comments. merge to ToT. Murder a DB thread and more TestBrowserThreads. Created 7 years, 5 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 <string> 5 #include <string>
6 6
7 #include "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/memory/ref_counted.h"
10 #include "base/message_loop.h" 9 #include "base/message_loop.h"
10 #include "base/run_loop.h"
11 #include "base/strings/utf_string_conversions.h" 11 #include "base/strings/utf_string_conversions.h"
12 #include "chrome/browser/search_engines/search_provider_install_data.h" 12 #include "chrome/browser/search_engines/search_provider_install_data.h"
13 #include "chrome/browser/search_engines/template_url.h" 13 #include "chrome/browser/search_engines/template_url.h"
14 #include "chrome/browser/search_engines/template_url_prepopulate_data.h" 14 #include "chrome/browser/search_engines/template_url_prepopulate_data.h"
15 #include "chrome/browser/search_engines/template_url_service.h" 15 #include "chrome/browser/search_engines/template_url_service.h"
16 #include "chrome/browser/search_engines/template_url_service_test_util.h" 16 #include "chrome/browser/search_engines/template_url_service_test_util.h"
17 #include "chrome/common/chrome_notification_types.h" 17 #include "chrome/common/chrome_notification_types.h"
18 #include "chrome/common/pref_names.h" 18 #include "chrome/common/pref_names.h"
19 #include "chrome/test/base/testing_pref_service_syncable.h" 19 #include "chrome/test/base/testing_pref_service_syncable.h"
20 #include "chrome/test/base/testing_profile.h" 20 #include "chrome/test/base/testing_profile.h"
21 #include "content/public/browser/notification_service.h" 21 #include "content/public/browser/notification_service.h"
22 #include "content/public/browser/notification_source.h" 22 #include "content/public/browser/notification_source.h"
23 #include "content/public/test/test_browser_thread.h" 23 #include "content/public/test/test_browser_thread.h"
24 #include "testing/gtest/include/gtest/gtest.h" 24 #include "testing/gtest/include/gtest/gtest.h"
25 25
26 using content::BrowserThread; 26 using content::BrowserThread;
27 27
28 namespace { 28 namespace {
29 29
30 // TestGetInstallState -------------------------------------------------------- 30 // TestGetInstallState --------------------------------------------------------
31 31
32 // Test the SearchProviderInstallData::GetInstallState. 32 // Test the SearchProviderInstallData::GetInstallState.
33 class TestGetInstallState : 33 class TestGetInstallState {
34 public base::RefCountedThreadSafe<TestGetInstallState> {
35 public: 34 public:
36 explicit TestGetInstallState(SearchProviderInstallData* install_data); 35 explicit TestGetInstallState(SearchProviderInstallData* install_data);
36 ~TestGetInstallState();
37 37
38 void set_search_provider_host( 38 // Runs all of the test cases.
39 const std::string& search_provider_host) { 39 void RunTests(const std::string& search_provider_host,
40 search_provider_host_ = search_provider_host; 40 const std::string& default_search_provider_host);
41 }
42
43 void set_default_search_provider_host(
44 const std::string& default_search_provider_host) {
45 default_search_provider_host_ = default_search_provider_host;
46 }
47
48 // Runs the test. Returns true if all passed. False if any failed.
49 bool RunTests();
50 41
51 private: 42 private:
52 friend class base::RefCountedThreadSafe<TestGetInstallState>;
53 ~TestGetInstallState();
54
55 // Starts the test run on the IO thread.
56 void StartTestOnIOThread();
57
58 // Callback for when SearchProviderInstallData is ready to have 43 // Callback for when SearchProviderInstallData is ready to have
59 // GetInstallState called. Runs all of the test cases. 44 // GetInstallState called. Runs all of the test cases.
60 void DoInstallStateTests(); 45 void DoInstallStateTests(const std::string& search_provider_host,
46 const std::string& default_search_provider_host);
61 47
62 // Does a verification for one url and its expected state. 48 // Does a verification for one url and its expected state.
63 void VerifyInstallState(SearchProviderInstallData::State expected_state, 49 void VerifyInstallState(SearchProviderInstallData::State expected_state,
64 const std::string& url); 50 const std::string& url);
65 51
66 SearchProviderInstallData* install_data_; 52 SearchProviderInstallData* install_data_;
67 base::MessageLoop* main_loop_;
68
69 // A host which should be a search provider but not the default.
70 std::string search_provider_host_;
71
72 // A host which should be a search provider but not the default.
73 std::string default_search_provider_host_;
74
75 // Used to indicate if DoInstallStateTests passed all test.
76 bool passed_;
77 53
78 DISALLOW_COPY_AND_ASSIGN(TestGetInstallState); 54 DISALLOW_COPY_AND_ASSIGN(TestGetInstallState);
79 }; 55 };
80 56
81 TestGetInstallState::TestGetInstallState( 57 TestGetInstallState::TestGetInstallState(
82 SearchProviderInstallData* install_data) 58 SearchProviderInstallData* install_data)
83 : install_data_(install_data), 59 : install_data_(install_data) {
84 main_loop_(NULL),
85 passed_(false) {
86 }
87
88 bool TestGetInstallState::RunTests() {
89 passed_ = true;
90
91 main_loop_ = base::MessageLoop::current();
92
93 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::IO)->PostTask(
94 FROM_HERE,
95 base::Bind(&TestGetInstallState::StartTestOnIOThread, this));
96 // Run the current message loop. When the test is finished on the I/O thread,
97 // it invokes Quit, which unblocks this.
98 base::MessageLoop::current()->Run();
99 main_loop_ = NULL;
100
101 // Let the testing code know what the result is.
102 return passed_;
103 } 60 }
104 61
105 TestGetInstallState::~TestGetInstallState() { 62 TestGetInstallState::~TestGetInstallState() {
106 } 63 }
107 64
108 void TestGetInstallState::StartTestOnIOThread() { 65 void TestGetInstallState::RunTests(
66 const std::string& search_provider_host,
67 const std::string& default_search_provider_host) {
109 install_data_->CallWhenLoaded( 68 install_data_->CallWhenLoaded(
110 base::Bind(&TestGetInstallState::DoInstallStateTests, this)); 69 base::Bind(&TestGetInstallState::DoInstallStateTests,
70 base::Unretained(this),
71 search_provider_host, default_search_provider_host));
72 base::RunLoop().RunUntilIdle();
111 } 73 }
112 74
113 void TestGetInstallState::DoInstallStateTests() { 75 void TestGetInstallState::DoInstallStateTests(
76 const std::string& search_provider_host,
77 const std::string& default_search_provider_host) {
78 SCOPED_TRACE("search provider: " + search_provider_host +
79 ", default search provider: " + default_search_provider_host);
114 // Installed but not default. 80 // Installed but not default.
115 VerifyInstallState(SearchProviderInstallData::INSTALLED_BUT_NOT_DEFAULT, 81 VerifyInstallState(SearchProviderInstallData::INSTALLED_BUT_NOT_DEFAULT,
116 "http://" + search_provider_host_ + "/"); 82 "http://" + search_provider_host + "/");
117 VerifyInstallState(SearchProviderInstallData::INSTALLED_BUT_NOT_DEFAULT, 83 VerifyInstallState(SearchProviderInstallData::INSTALLED_BUT_NOT_DEFAULT,
118 "http://" + search_provider_host_ + ":80/"); 84 "http://" + search_provider_host + ":80/");
119 85
120 // Not installed. 86 // Not installed.
121 VerifyInstallState(SearchProviderInstallData::NOT_INSTALLED, 87 VerifyInstallState(SearchProviderInstallData::NOT_INSTALLED,
122 "http://" + search_provider_host_ + ":96/"); 88 "http://" + search_provider_host + ":96/");
123 89
124 // Not installed due to different scheme. 90 // Not installed due to different scheme.
125 VerifyInstallState(SearchProviderInstallData::NOT_INSTALLED, 91 VerifyInstallState(SearchProviderInstallData::NOT_INSTALLED,
126 "https://" + search_provider_host_ + "/"); 92 "https://" + search_provider_host + "/");
127 93
128 // Not installed. 94 // Not installed.
129 VerifyInstallState(SearchProviderInstallData::NOT_INSTALLED, 95 VerifyInstallState(SearchProviderInstallData::NOT_INSTALLED,
130 "http://a" + search_provider_host_ + "/"); 96 "http://a" + search_provider_host + "/");
131 97
132 // Installed as default. 98 // Installed as default.
133 if (!default_search_provider_host_.empty()) { 99 if (!default_search_provider_host.empty()) {
134 VerifyInstallState(SearchProviderInstallData::INSTALLED_AS_DEFAULT, 100 VerifyInstallState(SearchProviderInstallData::INSTALLED_AS_DEFAULT,
135 "http://" + default_search_provider_host_ + "/"); 101 "http://" + default_search_provider_host + "/");
136 } 102 }
137
138 // All done.
139 main_loop_->PostTask(FROM_HERE, base::MessageLoop::QuitClosure());
140 } 103 }
141 104
142 void TestGetInstallState::VerifyInstallState( 105 void TestGetInstallState::VerifyInstallState(
143 SearchProviderInstallData::State expected_state, 106 SearchProviderInstallData::State expected_state,
144 const std::string& url) { 107 const std::string& url) {
145 108
146 SearchProviderInstallData::State actual_state = 109 SearchProviderInstallData::State actual_state =
147 install_data_->GetInstallState(GURL(url)); 110 install_data_->GetInstallState(GURL(url));
148 if (expected_state == actual_state) 111 EXPECT_EQ(expected_state, actual_state)
149 return; 112 << "GetInstallState for " << url << " failed. Expected "
150 113 << expected_state << ". Actual " << actual_state << ".";
151 passed_ = false;
152 LOG(ERROR) << "GetInstallState for " << url << " failed. Expected " <<
153 expected_state << ". Actual " << actual_state << ".";
154 } 114 }
155 115
156 }; // namespace 116 }; // namespace
157 117
158 118
159 // SearchProviderInstallDataTest ---------------------------------------------- 119 // SearchProviderInstallDataTest ----------------------------------------------
160 120
161 // Provides basic test set-up/tear-down functionality needed by all tests 121 // Provides basic test set-up/tear-down functionality needed by all tests
162 // that use TemplateURLServiceTestUtil. 122 // that use TemplateURLServiceTestUtil.
163 class SearchProviderInstallDataTest : public testing::Test { 123 class SearchProviderInstallDataTest : public testing::Test {
(...skipping 22 matching lines...) Expand all
186 : install_data_(NULL) { 146 : install_data_(NULL) {
187 } 147 }
188 148
189 void SearchProviderInstallDataTest::SetUp() { 149 void SearchProviderInstallDataTest::SetUp() {
190 testing::Test::SetUp(); 150 testing::Test::SetUp();
191 #if defined(OS_ANDROID) 151 #if defined(OS_ANDROID)
192 TemplateURLPrepopulateData::InitCountryCode( 152 TemplateURLPrepopulateData::InitCountryCode(
193 std::string() /* unknown country code */); 153 std::string() /* unknown country code */);
194 #endif 154 #endif
195 util_.SetUp(); 155 util_.SetUp();
196 util_.StartIOThread();
197 install_data_ = new SearchProviderInstallData(util_.profile(), 156 install_data_ = new SearchProviderInstallData(util_.profile(),
198 content::NOTIFICATION_RENDERER_PROCESS_TERMINATED, 157 content::NOTIFICATION_RENDERER_PROCESS_TERMINATED,
199 content::Source<SearchProviderInstallDataTest>(this)); 158 content::Source<SearchProviderInstallDataTest>(this));
200 } 159 }
201 160
202 void SearchProviderInstallDataTest::TearDown() { 161 void SearchProviderInstallDataTest::TearDown() {
203 BrowserThread::DeleteSoon(BrowserThread::IO, FROM_HERE, install_data_); 162 BrowserThread::DeleteSoon(BrowserThread::IO, FROM_HERE, install_data_);
204 install_data_ = NULL; 163 install_data_ = NULL;
205 164
206 // Make sure that the install data class on the UI thread gets cleaned up. 165 // Make sure that the install data class on the UI thread gets cleaned up.
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
250 209
251 // Actual tests --------------------------------------------------------------- 210 // Actual tests ---------------------------------------------------------------
252 211
253 TEST_F(SearchProviderInstallDataTest, GetInstallState) { 212 TEST_F(SearchProviderInstallDataTest, GetInstallState) {
254 // Set up the database. 213 // Set up the database.
255 util_.ChangeModelToLoadState(); 214 util_.ChangeModelToLoadState();
256 std::string host = "www.unittest.com"; 215 std::string host = "www.unittest.com";
257 AddNewTemplateURL("http://" + host + "/path", ASCIIToUTF16("unittest")); 216 AddNewTemplateURL("http://" + host + "/path", ASCIIToUTF16("unittest"));
258 217
259 // Wait for the changes to be saved. 218 // Wait for the changes to be saved.
260 TemplateURLServiceTestUtil::BlockTillServiceProcessesRequests(); 219 base::RunLoop().RunUntilIdle();
261 220
262 // Verify the search providers install state (with no default set). 221 // Verify the search providers install state (with no default set).
263 scoped_refptr<TestGetInstallState> test_get_install_state( 222 TestGetInstallState test_get_install_state(install_data_);
264 new TestGetInstallState(install_data_)); 223 test_get_install_state.RunTests(host, std::string());
265 test_get_install_state->set_search_provider_host(host);
266 EXPECT_TRUE(test_get_install_state->RunTests());
267 224
268 // Set-up a default and try it all one more time. 225 // Set-up a default and try it all one more time.
269 std::string default_host = "www.mmm.com"; 226 std::string default_host = "www.mmm.com";
270 TemplateURL* default_url = 227 TemplateURL* default_url =
271 AddNewTemplateURL("http://" + default_host + "/", ASCIIToUTF16("mmm")); 228 AddNewTemplateURL("http://" + default_host + "/", ASCIIToUTF16("mmm"));
272 util_.model()->SetDefaultSearchProvider(default_url); 229 util_.model()->SetDefaultSearchProvider(default_url);
273 test_get_install_state->set_default_search_provider_host(default_host); 230 test_get_install_state.RunTests(host, default_host);
274 EXPECT_TRUE(test_get_install_state->RunTests());
275 } 231 }
276 232
277
Peter Kasting 2013/07/12 01:20:20 Nit: Either remove all the cases of double-blank-l
awong 2013/07/16 21:27:28 Done.
278 TEST_F(SearchProviderInstallDataTest, ManagedDefaultSearch) { 233 TEST_F(SearchProviderInstallDataTest, ManagedDefaultSearch) {
279 // Set up the database. 234 // Set up the database.
280 util_.ChangeModelToLoadState(); 235 util_.ChangeModelToLoadState();
281 std::string host = "www.unittest.com"; 236 std::string host = "www.unittest.com";
282 AddNewTemplateURL("http://" + host + "/path", ASCIIToUTF16("unittest")); 237 AddNewTemplateURL("http://" + host + "/path", ASCIIToUTF16("unittest"));
283 238
284 // Set a managed preference that establishes a default search provider. 239 // Set a managed preference that establishes a default search provider.
285 std::string host2 = "www.managedtest.com"; 240 std::string host2 = "www.managedtest.com";
286 std::string url2 = "http://" + host2 + "/p{searchTerms}"; 241 std::string url2 = "http://" + host2 + "/p{searchTerms}";
287 SimulateDefaultSearchIsManaged(url2); 242 SimulateDefaultSearchIsManaged(url2);
288 EXPECT_TRUE(util_.model()->is_default_search_managed()); 243 EXPECT_TRUE(util_.model()->is_default_search_managed());
289 244
290 // Wait for the changes to be saved. 245 // Wait for the changes to be saved.
291 util_.BlockTillServiceProcessesRequests(); 246 base::RunLoop().RunUntilIdle();
292 247
293 // Verify the search providers install state. The default search should be 248 // Verify the search providers install state. The default search should be
294 // the managed one we previously set. 249 // the managed one we previously set.
295 scoped_refptr<TestGetInstallState> test_get_install_state( 250 TestGetInstallState test_get_install_state(install_data_);
296 new TestGetInstallState(install_data_)); 251 test_get_install_state.RunTests(host, host2);
297 test_get_install_state->set_search_provider_host(host);
298 test_get_install_state->set_default_search_provider_host(host2);
299 EXPECT_TRUE(test_get_install_state->RunTests());
300 } 252 }
301 253
302 254
303 TEST_F(SearchProviderInstallDataTest, GoogleBaseUrlChange) { 255 TEST_F(SearchProviderInstallDataTest, GoogleBaseUrlChange) {
304 scoped_refptr<TestGetInstallState> test_get_install_state( 256 TestGetInstallState test_get_install_state(install_data_);
305 new TestGetInstallState(install_data_));
306 257
307 // Set up the database. 258 // Set up the database.
308 util_.ChangeModelToLoadState(); 259 util_.ChangeModelToLoadState();
309 std::string google_host = "w.com"; 260 std::string google_host = "w.com";
310 util_.SetGoogleBaseURL(GURL("http://" + google_host + "/")); 261 util_.SetGoogleBaseURL(GURL("http://" + google_host + "/"));
311 // Wait for the I/O thread to process the update notification. 262 // Wait for the I/O thread to process the update notification.
312 TemplateURLServiceTestUtil::BlockTillIOThreadProcessesRequests(); 263 base::RunLoop().RunUntilIdle();
313 264
314 AddNewTemplateURL("{google:baseURL}?q={searchTerms}", ASCIIToUTF16("t")); 265 AddNewTemplateURL("{google:baseURL}?q={searchTerms}", ASCIIToUTF16("t"));
315 TemplateURL* default_url = 266 TemplateURL* default_url =
316 AddNewTemplateURL("http://d.com/", ASCIIToUTF16("d")); 267 AddNewTemplateURL("http://d.com/", ASCIIToUTF16("d"));
317 util_.model()->SetDefaultSearchProvider(default_url); 268 util_.model()->SetDefaultSearchProvider(default_url);
318 269
319 // Wait for the changes to be saved. 270 // Wait for the changes to be saved.
320 TemplateURLServiceTestUtil::BlockTillServiceProcessesRequests(); 271 base::RunLoop().RunUntilIdle();
321 272
322 // Verify the search providers install state (with no default set). 273 // Verify the search providers install state (with no default set).
323 test_get_install_state->set_search_provider_host(google_host); 274 test_get_install_state.RunTests(google_host, std::string());
324 EXPECT_TRUE(test_get_install_state->RunTests());
325 275
326 // Change the Google base url. 276 // Change the Google base url.
327 google_host = "foo.com"; 277 google_host = "foo.com";
328 util_.SetGoogleBaseURL(GURL("http://" + google_host + "/")); 278 util_.SetGoogleBaseURL(GURL("http://" + google_host + "/"));
329 // Wait for the I/O thread to process the update notification. 279 // Wait for the I/O thread to process the update notification.
330 TemplateURLServiceTestUtil::BlockTillIOThreadProcessesRequests(); 280 base::RunLoop().RunUntilIdle();
331 281
332 // Verify that the change got picked up. 282 // Verify that the change got picked up.
333 test_get_install_state->set_search_provider_host(google_host); 283 test_get_install_state.RunTests(google_host, std::string());
334 EXPECT_TRUE(test_get_install_state->RunTests());
335 } 284 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698