OLD | NEW |
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 "chrome/browser/autocomplete/history_url_provider.h" | 5 #include "chrome/browser/autocomplete/history_url_provider.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "base/message_loop.h" | 9 #include "base/message_loop.h" |
10 #include "base/path_service.h" | 10 #include "base/path_service.h" |
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
180 bool prevent_inline_autocomplete, | 180 bool prevent_inline_autocomplete, |
181 const std::string* expected_urls, | 181 const std::string* expected_urls, |
182 size_t num_results) { | 182 size_t num_results) { |
183 AutocompleteInput::Type type; | 183 AutocompleteInput::Type type; |
184 return RunTest(text, desired_tld, prevent_inline_autocomplete, | 184 return RunTest(text, desired_tld, prevent_inline_autocomplete, |
185 expected_urls, num_results, &type); | 185 expected_urls, num_results, &type); |
186 } | 186 } |
187 | 187 |
188 void RunAdjustOffsetTest(const string16 text, size_t expected_offset); | 188 void RunAdjustOffsetTest(const string16 text, size_t expected_offset); |
189 | 189 |
190 MessageLoopForUI message_loop_; | 190 base::MessageLoopForUI message_loop_; |
191 content::TestBrowserThread ui_thread_; | 191 content::TestBrowserThread ui_thread_; |
192 content::TestBrowserThread file_thread_; | 192 content::TestBrowserThread file_thread_; |
193 ACMatches matches_; | 193 ACMatches matches_; |
194 scoped_ptr<TestingProfile> profile_; | 194 scoped_ptr<TestingProfile> profile_; |
195 HistoryService* history_service_; | 195 HistoryService* history_service_; |
196 scoped_refptr<HistoryURLProvider> autocomplete_; | 196 scoped_refptr<HistoryURLProvider> autocomplete_; |
197 // Should the matches be sorted and duplicates removed? | 197 // Should the matches be sorted and duplicates removed? |
198 bool sort_matches_; | 198 bool sort_matches_; |
199 }; | 199 }; |
200 | 200 |
201 class HistoryURLProviderTestNoDB : public HistoryURLProviderTest { | 201 class HistoryURLProviderTestNoDB : public HistoryURLProviderTest { |
202 protected: | 202 protected: |
203 virtual void SetUp() { | 203 virtual void SetUp() { |
204 SetUpImpl(true); | 204 SetUpImpl(true); |
205 } | 205 } |
206 }; | 206 }; |
207 | 207 |
208 void HistoryURLProviderTest::OnProviderUpdate(bool updated_matches) { | 208 void HistoryURLProviderTest::OnProviderUpdate(bool updated_matches) { |
209 if (autocomplete_->done()) | 209 if (autocomplete_->done()) |
210 MessageLoop::current()->Quit(); | 210 base::MessageLoop::current()->Quit(); |
211 } | 211 } |
212 | 212 |
213 void HistoryURLProviderTest::SetUpImpl(bool no_db) { | 213 void HistoryURLProviderTest::SetUpImpl(bool no_db) { |
214 profile_.reset(new TestingProfile()); | 214 profile_.reset(new TestingProfile()); |
215 profile_->CreateHistoryService(true, no_db); | 215 profile_->CreateHistoryService(true, no_db); |
216 history_service_ = | 216 history_service_ = |
217 HistoryServiceFactory::GetForProfile(profile_.get(), | 217 HistoryServiceFactory::GetForProfile(profile_.get(), |
218 Profile::EXPLICIT_ACCESS); | 218 Profile::EXPLICIT_ACCESS); |
219 | 219 |
220 autocomplete_ = new HistoryURLProvider(this, profile_.get(), "en-US,en,ko"); | 220 autocomplete_ = new HistoryURLProvider(this, profile_.get(), "en-US,en,ko"); |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
259 bool prevent_inline_autocomplete, | 259 bool prevent_inline_autocomplete, |
260 const std::string* expected_urls, | 260 const std::string* expected_urls, |
261 size_t num_results, | 261 size_t num_results, |
262 AutocompleteInput::Type* identified_input_type) { | 262 AutocompleteInput::Type* identified_input_type) { |
263 AutocompleteInput input(text, string16::npos, desired_tld, GURL(), | 263 AutocompleteInput input(text, string16::npos, desired_tld, GURL(), |
264 prevent_inline_autocomplete, false, true, | 264 prevent_inline_autocomplete, false, true, |
265 AutocompleteInput::ALL_MATCHES); | 265 AutocompleteInput::ALL_MATCHES); |
266 *identified_input_type = input.type(); | 266 *identified_input_type = input.type(); |
267 autocomplete_->Start(input, false); | 267 autocomplete_->Start(input, false); |
268 if (!autocomplete_->done()) | 268 if (!autocomplete_->done()) |
269 MessageLoop::current()->Run(); | 269 base::MessageLoop::current()->Run(); |
270 | 270 |
271 matches_ = autocomplete_->matches(); | 271 matches_ = autocomplete_->matches(); |
272 if (sort_matches_) { | 272 if (sort_matches_) { |
273 for (ACMatches::iterator i = matches_.begin(); i != matches_.end(); ++i) | 273 for (ACMatches::iterator i = matches_.begin(); i != matches_.end(); ++i) |
274 i->ComputeStrippedDestinationURL(profile_.get()); | 274 i->ComputeStrippedDestinationURL(profile_.get()); |
275 std::sort(matches_.begin(), matches_.end(), | 275 std::sort(matches_.begin(), matches_.end(), |
276 &AutocompleteMatch::DestinationSortFunc); | 276 &AutocompleteMatch::DestinationSortFunc); |
277 matches_.erase(std::unique(matches_.begin(), matches_.end(), | 277 matches_.erase(std::unique(matches_.begin(), matches_.end(), |
278 &AutocompleteMatch::DestinationsEqual), | 278 &AutocompleteMatch::DestinationsEqual), |
279 matches_.end()); | 279 matches_.end()); |
280 std::sort(matches_.begin(), matches_.end(), | 280 std::sort(matches_.begin(), matches_.end(), |
281 &AutocompleteMatch::MoreRelevant); | 281 &AutocompleteMatch::MoreRelevant); |
282 } | 282 } |
283 ASSERT_EQ(num_results, matches_.size()) << "Input text: " << text | 283 ASSERT_EQ(num_results, matches_.size()) << "Input text: " << text |
284 << "\nTLD: \"" << desired_tld << "\""; | 284 << "\nTLD: \"" << desired_tld << "\""; |
285 for (size_t i = 0; i < num_results; ++i) | 285 for (size_t i = 0; i < num_results; ++i) |
286 EXPECT_EQ(expected_urls[i], matches_[i].destination_url.spec()); | 286 EXPECT_EQ(expected_urls[i], matches_[i].destination_url.spec()); |
287 } | 287 } |
288 | 288 |
289 void HistoryURLProviderTest::RunAdjustOffsetTest(const string16 text, | 289 void HistoryURLProviderTest::RunAdjustOffsetTest(const string16 text, |
290 size_t expected_offset) { | 290 size_t expected_offset) { |
291 AutocompleteInput input(text, string16::npos, string16(), GURL(), false, | 291 AutocompleteInput input(text, string16::npos, string16(), GURL(), false, |
292 false, true, AutocompleteInput::ALL_MATCHES); | 292 false, true, AutocompleteInput::ALL_MATCHES); |
293 autocomplete_->Start(input, false); | 293 autocomplete_->Start(input, false); |
294 if (!autocomplete_->done()) | 294 if (!autocomplete_->done()) |
295 MessageLoop::current()->Run(); | 295 base::MessageLoop::current()->Run(); |
296 | 296 |
297 matches_ = autocomplete_->matches(); | 297 matches_ = autocomplete_->matches(); |
298 ASSERT_GE(matches_.size(), 1U) << "Input text: " << text; | 298 ASSERT_GE(matches_.size(), 1U) << "Input text: " << text; |
299 EXPECT_EQ(expected_offset, matches_[0].inline_autocomplete_offset); | 299 EXPECT_EQ(expected_offset, matches_[0].inline_autocomplete_offset); |
300 } | 300 } |
301 | 301 |
302 TEST_F(HistoryURLProviderTest, PromoteShorterURLs) { | 302 TEST_F(HistoryURLProviderTest, PromoteShorterURLs) { |
303 // Test that hosts get synthesized below popular pages. | 303 // Test that hosts get synthesized below popular pages. |
304 const std::string expected_nonsynth[] = { | 304 const std::string expected_nonsynth[] = { |
305 "http://slashdot.org/favorite_page.html", | 305 "http://slashdot.org/favorite_page.html", |
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
540 // HistoryURLProvider shouldn't be done (waiting on async results). | 540 // HistoryURLProvider shouldn't be done (waiting on async results). |
541 EXPECT_FALSE(autocomplete_->done()); | 541 EXPECT_FALSE(autocomplete_->done()); |
542 | 542 |
543 // We should get back an entry for pandora. | 543 // We should get back an entry for pandora. |
544 matches_ = autocomplete_->matches(); | 544 matches_ = autocomplete_->matches(); |
545 ASSERT_GT(matches_.size(), 0u); | 545 ASSERT_GT(matches_.size(), 0u); |
546 EXPECT_EQ(GURL("http://pandora.com/"), matches_[0].destination_url); | 546 EXPECT_EQ(GURL("http://pandora.com/"), matches_[0].destination_url); |
547 int pandora_relevance = matches_[0].relevance; | 547 int pandora_relevance = matches_[0].relevance; |
548 | 548 |
549 // Run the message loop. When |autocomplete_| finishes the loop is quit. | 549 // Run the message loop. When |autocomplete_| finishes the loop is quit. |
550 MessageLoop::current()->Run(); | 550 base::MessageLoop::current()->Run(); |
551 EXPECT_TRUE(autocomplete_->done()); | 551 EXPECT_TRUE(autocomplete_->done()); |
552 matches_ = autocomplete_->matches(); | 552 matches_ = autocomplete_->matches(); |
553 ASSERT_GT(matches_.size(), 0u); | 553 ASSERT_GT(matches_.size(), 0u); |
554 EXPECT_EQ(GURL("http://pandora.com/"), matches_[0].destination_url); | 554 EXPECT_EQ(GURL("http://pandora.com/"), matches_[0].destination_url); |
555 EXPECT_EQ(pandora_relevance, matches_[0].relevance); | 555 EXPECT_EQ(pandora_relevance, matches_[0].relevance); |
556 } | 556 } |
557 | 557 |
558 TEST_F(HistoryURLProviderTestNoDB, NavigateWithoutDB) { | 558 TEST_F(HistoryURLProviderTestNoDB, NavigateWithoutDB) { |
559 // Ensure that we will still produce matches for navigation when there is no | 559 // Ensure that we will still produce matches for navigation when there is no |
560 // database. | 560 // database. |
561 std::string navigation_1[] = {"http://test.com/"}; | 561 std::string navigation_1[] = {"http://test.com/"}; |
562 RunTest(ASCIIToUTF16("test.com"), string16(), false, navigation_1, | 562 RunTest(ASCIIToUTF16("test.com"), string16(), false, navigation_1, |
563 arraysize(navigation_1)); | 563 arraysize(navigation_1)); |
564 | 564 |
565 std::string navigation_2[] = {"http://slash/"}; | 565 std::string navigation_2[] = {"http://slash/"}; |
566 RunTest(ASCIIToUTF16("slash"), string16(), false, navigation_2, | 566 RunTest(ASCIIToUTF16("slash"), string16(), false, navigation_2, |
567 arraysize(navigation_2)); | 567 arraysize(navigation_2)); |
568 | 568 |
569 RunTest(ASCIIToUTF16("this is a query"), string16(), false, NULL, 0); | 569 RunTest(ASCIIToUTF16("this is a query"), string16(), false, NULL, 0); |
570 } | 570 } |
571 | 571 |
572 TEST_F(HistoryURLProviderTest, DontAutocompleteOnTrailingWhitespace) { | 572 TEST_F(HistoryURLProviderTest, DontAutocompleteOnTrailingWhitespace) { |
573 AutocompleteInput input(ASCIIToUTF16("slash "), string16::npos, string16(), | 573 AutocompleteInput input(ASCIIToUTF16("slash "), string16::npos, string16(), |
574 GURL(), false, false, true, | 574 GURL(), false, false, true, |
575 AutocompleteInput::ALL_MATCHES); | 575 AutocompleteInput::ALL_MATCHES); |
576 autocomplete_->Start(input, false); | 576 autocomplete_->Start(input, false); |
577 if (!autocomplete_->done()) | 577 if (!autocomplete_->done()) |
578 MessageLoop::current()->Run(); | 578 base::MessageLoop::current()->Run(); |
579 | 579 |
580 // None of the matches should attempt to autocomplete. | 580 // None of the matches should attempt to autocomplete. |
581 matches_ = autocomplete_->matches(); | 581 matches_ = autocomplete_->matches(); |
582 for (size_t i = 0; i < matches_.size(); ++i) | 582 for (size_t i = 0; i < matches_.size(); ++i) |
583 EXPECT_EQ(string16::npos, matches_[i].inline_autocomplete_offset); | 583 EXPECT_EQ(string16::npos, matches_[i].inline_autocomplete_offset); |
584 } | 584 } |
585 | 585 |
586 TEST_F(HistoryURLProviderTest, TreatEmailsAsSearches) { | 586 TEST_F(HistoryURLProviderTest, TreatEmailsAsSearches) { |
587 // Visiting foo.com should not make this string be treated as a navigation. | 587 // Visiting foo.com should not make this string be treated as a navigation. |
588 // That means the result should be scored around 1200 ("what you typed") | 588 // That means the result should be scored around 1200 ("what you typed") |
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
736 const char* const test_cases[] = { | 736 const char* const test_cases[] = { |
737 "//c", | 737 "//c", |
738 "\\@st" | 738 "\\@st" |
739 }; | 739 }; |
740 for (size_t i = 0; i < arraysize(test_cases); ++i) { | 740 for (size_t i = 0; i < arraysize(test_cases); ++i) { |
741 AutocompleteInput input(ASCIIToUTF16(test_cases[i]), string16::npos, | 741 AutocompleteInput input(ASCIIToUTF16(test_cases[i]), string16::npos, |
742 string16(), GURL(), false, false, true, | 742 string16(), GURL(), false, false, true, |
743 AutocompleteInput::ALL_MATCHES); | 743 AutocompleteInput::ALL_MATCHES); |
744 autocomplete_->Start(input, false); | 744 autocomplete_->Start(input, false); |
745 if (!autocomplete_->done()) | 745 if (!autocomplete_->done()) |
746 MessageLoop::current()->Run(); | 746 base::MessageLoop::current()->Run(); |
747 } | 747 } |
748 } | 748 } |
749 | 749 |
750 TEST_F(HistoryURLProviderTest, CullSearchResults) { | 750 TEST_F(HistoryURLProviderTest, CullSearchResults) { |
751 // Set up a default search engine. | 751 // Set up a default search engine. |
752 TemplateURLData data; | 752 TemplateURLData data; |
753 data.SetKeyword(ASCIIToUTF16("TestEngine")); | 753 data.SetKeyword(ASCIIToUTF16("TestEngine")); |
754 data.SetURL("http://testsearch.com/?q={searchTerms}"); | 754 data.SetURL("http://testsearch.com/?q={searchTerms}"); |
755 TemplateURLService* template_url_service = | 755 TemplateURLService* template_url_service = |
756 TemplateURLServiceFactory::GetForProfile(profile_.get()); | 756 TemplateURLServiceFactory::GetForProfile(profile_.get()); |
(...skipping 27 matching lines...) Expand all Loading... |
784 RunTest(ASCIIToUTF16("foobar"), string16(), true, | 784 RunTest(ASCIIToUTF16("foobar"), string16(), true, |
785 expected_when_searching_query, arraysize(expected_when_searching_query)); | 785 expected_when_searching_query, arraysize(expected_when_searching_query)); |
786 | 786 |
787 // We should not see search URLs when typing the search engine name. | 787 // We should not see search URLs when typing the search engine name. |
788 const std::string expected_when_searching_site[] = { | 788 const std::string expected_when_searching_site[] = { |
789 test_cases[0].url | 789 test_cases[0].url |
790 }; | 790 }; |
791 RunTest(ASCIIToUTF16("testsearch"), string16(), true, | 791 RunTest(ASCIIToUTF16("testsearch"), string16(), true, |
792 expected_when_searching_site, arraysize(expected_when_searching_site)); | 792 expected_when_searching_site, arraysize(expected_when_searching_site)); |
793 } | 793 } |
OLD | NEW |