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

Side by Side Diff: chrome/browser/autocomplete/search_provider_unittest.cc

Issue 17391005: Remove Instant hooks from SearchProvider. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 6 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 2012 The Chromium Authors. All rights reserved. 1 // Copyright 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/search_provider.h" 5 #include "chrome/browser/autocomplete/search_provider.h"
6 6
7 #include "base/metrics/field_trial.h" 7 #include "base/metrics/field_trial.h"
8 #include "base/prefs/pref_service.h" 8 #include "base/prefs/pref_service.h"
9 #include "base/run_loop.h" 9 #include "base/run_loop.h"
10 #include "base/strings/string_util.h" 10 #include "base/strings/string_util.h"
11 #include "base/strings/utf_string_conversions.h" 11 #include "base/strings/utf_string_conversions.h"
12 #include "base/time.h" 12 #include "base/time.h"
13 #include "build/build_config.h" 13 #include "build/build_config.h"
14 #include "chrome/browser/autocomplete/autocomplete_classifier_factory.h" 14 #include "chrome/browser/autocomplete/autocomplete_classifier_factory.h"
15 #include "chrome/browser/autocomplete/autocomplete_controller.h" 15 #include "chrome/browser/autocomplete/autocomplete_controller.h"
16 #include "chrome/browser/autocomplete/autocomplete_input.h" 16 #include "chrome/browser/autocomplete/autocomplete_input.h"
17 #include "chrome/browser/autocomplete/autocomplete_match.h" 17 #include "chrome/browser/autocomplete/autocomplete_match.h"
18 #include "chrome/browser/autocomplete/autocomplete_provider.h" 18 #include "chrome/browser/autocomplete/autocomplete_provider.h"
19 #include "chrome/browser/autocomplete/autocomplete_provider_listener.h" 19 #include "chrome/browser/autocomplete/autocomplete_provider_listener.h"
20 #include "chrome/browser/autocomplete/history_url_provider.h" 20 #include "chrome/browser/autocomplete/history_url_provider.h"
21 #include "chrome/browser/history/history_service.h" 21 #include "chrome/browser/history/history_service.h"
22 #include "chrome/browser/history/history_service_factory.h" 22 #include "chrome/browser/history/history_service_factory.h"
23 #include "chrome/browser/omnibox/omnibox_field_trial.h" 23 #include "chrome/browser/omnibox/omnibox_field_trial.h"
24 #include "chrome/browser/search/search.h" 24 #include "chrome/browser/search/search.h"
25 #include "chrome/browser/search_engines/template_url.h" 25 #include "chrome/browser/search_engines/template_url.h"
26 #include "chrome/browser/search_engines/template_url_service.h" 26 #include "chrome/browser/search_engines/template_url_service.h"
27 #include "chrome/browser/search_engines/template_url_service_factory.h" 27 #include "chrome/browser/search_engines/template_url_service_factory.h"
28 #include "chrome/common/instant_types.h"
29 #include "chrome/common/metrics/entropy_provider.h" 28 #include "chrome/common/metrics/entropy_provider.h"
30 #include "chrome/common/pref_names.h" 29 #include "chrome/common/pref_names.h"
31 #include "chrome/test/base/testing_browser_process.h" 30 #include "chrome/test/base/testing_browser_process.h"
32 #include "chrome/test/base/testing_profile.h" 31 #include "chrome/test/base/testing_profile.h"
33 #include "content/public/test/test_browser_thread.h" 32 #include "content/public/test/test_browser_thread.h"
34 #include "net/url_request/test_url_fetcher_factory.h" 33 #include "net/url_request/test_url_fetcher_factory.h"
35 #include "net/url_request/url_request_status.h" 34 #include "net/url_request/url_request_status.h"
36 #include "testing/gtest/include/gtest/gtest.h" 35 #include "testing/gtest/include/gtest/gtest.h"
37 36
38 using content::BrowserThread; 37 using content::BrowserThread;
(...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after
279 // URLFetchers runs. 278 // URLFetchers runs.
280 message_loop_.RunUntilIdle(); 279 message_loop_.RunUntilIdle();
281 } 280 }
282 281
283 void SearchProviderTest::QueryForInputAndSetWYTMatch( 282 void SearchProviderTest::QueryForInputAndSetWYTMatch(
284 const string16& text, 283 const string16& text,
285 AutocompleteMatch* wyt_match) { 284 AutocompleteMatch* wyt_match) {
286 QueryForInput(text, false, false); 285 QueryForInput(text, false, false);
287 profile_.BlockUntilHistoryProcessesPendingRequests(); 286 profile_.BlockUntilHistoryProcessesPendingRequests();
288 ASSERT_NO_FATAL_FAILURE(FinishDefaultSuggestQuery()); 287 ASSERT_NO_FATAL_FAILURE(FinishDefaultSuggestQuery());
289 EXPECT_NE(chrome::IsInstantExtendedAPIEnabled(), provider_->done());
290 if (!wyt_match) 288 if (!wyt_match)
291 return; 289 return;
292 ASSERT_GE(provider_->matches().size(), 1u); 290 ASSERT_GE(provider_->matches().size(), 1u);
293 EXPECT_TRUE(FindMatchWithDestination(GURL( 291 EXPECT_TRUE(FindMatchWithDestination(GURL(
294 default_t_url_->url_ref().ReplaceSearchTerms( 292 default_t_url_->url_ref().ReplaceSearchTerms(
295 TemplateURLRef::SearchTermsArgs(text))), 293 TemplateURLRef::SearchTermsArgs(text))),
296 wyt_match)); 294 wyt_match));
297 } 295 }
298 296
299 void SearchProviderTest::TearDown() { 297 void SearchProviderTest::TearDown() {
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after
503 for (size_t i = 0; i < arraysize(inputs); ++i) { 501 for (size_t i = 0; i < arraysize(inputs); ++i) {
504 QueryForInput(ASCIIToUTF16(inputs[i]), false, false); 502 QueryForInput(ASCIIToUTF16(inputs[i]), false, false);
505 // Make sure the default providers suggest service was not queried. 503 // Make sure the default providers suggest service was not queried.
506 ASSERT_TRUE(test_factory_.GetFetcherByID( 504 ASSERT_TRUE(test_factory_.GetFetcherByID(
507 SearchProvider::kDefaultProviderURLFetcherID) == NULL); 505 SearchProvider::kDefaultProviderURLFetcherID) == NULL);
508 // Run till the history results complete. 506 // Run till the history results complete.
509 RunTillProviderDone(); 507 RunTillProviderDone();
510 } 508 }
511 } 509 }
512 510
513 // Make sure FinalizeInstantQuery works.
514 TEST_F(SearchProviderTest, FinalizeInstantQuery) {
515 chrome::EnableInstantExtendedAPIForTesting();
516
517 ASSERT_NO_FATAL_FAILURE(QueryForInputAndSetWYTMatch(ASCIIToUTF16("foo"),
518 NULL));
519
520 // Tell the provider Instant is done.
521 provider_->FinalizeInstantQuery(ASCIIToUTF16("foo"),
522 InstantSuggestion(ASCIIToUTF16("bar"),
523 INSTANT_COMPLETE_NOW,
524 INSTANT_SUGGESTION_SEARCH,
525 string16(),
526 kNoMatchIndex));
527
528 // The provider should now be done.
529 EXPECT_TRUE(provider_->done());
530
531 // There should be two matches, one for what you typed, the other for
532 // 'foobar'.
533 EXPECT_EQ(2u, provider_->matches().size());
534 GURL instant_url(default_t_url_->url_ref().ReplaceSearchTerms(
535 TemplateURLRef::SearchTermsArgs(ASCIIToUTF16("foobar"))));
536 AutocompleteMatch instant_match;
537 EXPECT_TRUE(FindMatchWithDestination(instant_url, &instant_match));
538
539 // And the 'foobar' match should not have a description, it'll be set later.
540 EXPECT_TRUE(instant_match.description.empty());
541
542 // Make sure the what you typed match has no description.
543 AutocompleteMatch wyt_match;
544 EXPECT_TRUE(FindMatchWithDestination(
545 GURL(default_t_url_->url_ref().ReplaceSearchTerms(
546 TemplateURLRef::SearchTermsArgs(ASCIIToUTF16("foo")))),
547 &wyt_match));
548 EXPECT_TRUE(wyt_match.description.empty());
549
550 // Instant search suggestions are never inline autocompleted, so they should
551 // score less than the WYT match.
552 EXPECT_LT(instant_match.relevance, wyt_match.relevance);
553 }
554
555 // Make sure FinalizeInstantQuery works with URL suggestions.
556 TEST_F(SearchProviderTest, FinalizeInstantURL) {
557 chrome::EnableInstantExtendedAPIForTesting();
558
559 ASSERT_NO_FATAL_FAILURE(QueryForInputAndSetWYTMatch(ASCIIToUTF16("ex"),
560 NULL));
561
562 // Tell the provider Instant is done.
563 provider_->FinalizeInstantQuery(ASCIIToUTF16("ex"),
564 InstantSuggestion(
565 ASCIIToUTF16("http://example.com/"),
566 INSTANT_COMPLETE_NOW,
567 INSTANT_SUGGESTION_URL,
568 string16(),
569 kNoMatchIndex));
570
571 // The provider should now be done.
572 EXPECT_TRUE(provider_->done());
573
574 // There should be two matches, one for what you typed, the other for
575 // "http://example.com/".
576 EXPECT_EQ(2u, provider_->matches().size());
577 GURL instant_url("http://example.com");
578 AutocompleteMatch instant_match;
579 EXPECT_TRUE(FindMatchWithDestination(instant_url, &instant_match));
580
581 // The Instant match should not have a description, it'll be set later.
582 EXPECT_TRUE(instant_match.description.empty());
583
584 // Make sure the what you typed match has no description.
585 AutocompleteMatch wyt_match;
586 EXPECT_TRUE(FindMatchWithDestination(
587 GURL(default_t_url_->url_ref().ReplaceSearchTerms(
588 TemplateURLRef::SearchTermsArgs(ASCIIToUTF16("ex")))),
589 &wyt_match));
590 EXPECT_TRUE(wyt_match.description.empty());
591
592 // The Instant URL should be more relevant.
593 EXPECT_GT(instant_match.relevance, wyt_match.relevance);
594 }
595
596 // An Instant URL suggestion should behave the same way whether the input text
597 // is classified as UNKNOWN or as an URL. Otherwise if the user types
598 // "example.co" url-what-you-typed will displace the Instant suggestion for
599 // "example.com".
600 TEST_F(SearchProviderTest, FinalizeInstantURLWithURLText) {
601 chrome::EnableInstantExtendedAPIForTesting();
602
603 ASSERT_NO_FATAL_FAILURE(QueryForInputAndSetWYTMatch(
604 ASCIIToUTF16("example.co"), NULL));
605
606 // Tell the provider Instant is done.
607 provider_->FinalizeInstantQuery(ASCIIToUTF16("example.co"),
608 InstantSuggestion(
609 ASCIIToUTF16("http://example.com/"),
610 INSTANT_COMPLETE_NOW,
611 INSTANT_SUGGESTION_URL,
612 string16(),
613 kNoMatchIndex));
614
615 // The provider should now be done.
616 EXPECT_TRUE(provider_->done());
617
618 // There should be two matches, one for what you typed, the other for
619 // "http://example.com/".
620 EXPECT_EQ(2u, provider_->matches().size());
621 GURL instant_url("http://example.com");
622 AutocompleteMatch instant_match;
623 EXPECT_TRUE(FindMatchWithDestination(instant_url, &instant_match));
624
625 // The Instant match should not have a description, it'll be set later.
626 EXPECT_TRUE(instant_match.description.empty());
627
628 // The Instant URL should be more relevant than a URL_WHAT_YOU_TYPED match.
629 EXPECT_GT(instant_match.relevance,
630 HistoryURLProvider::kScoreForWhatYouTypedResult);
631 }
632
633 // Make sure that if FinalizeInstantQuery is invoked before suggest results
634 // return, the suggest text from FinalizeInstantQuery is remembered.
635 TEST_F(SearchProviderTest, RememberInstantQuery) {
636 chrome::EnableInstantExtendedAPIForTesting();
637
638 QueryForInput(ASCIIToUTF16("foo"), false, false);
639
640 // Finalize the Instant query immediately.
641 provider_->FinalizeInstantQuery(ASCIIToUTF16("foo"),
642 InstantSuggestion(ASCIIToUTF16("bar"),
643 INSTANT_COMPLETE_NOW,
644 INSTANT_SUGGESTION_SEARCH,
645 string16(),
646 kNoMatchIndex));
647
648 // There should be two matches, one for what you typed, the other for
649 // 'foobar'.
650 EXPECT_EQ(2u, provider_->matches().size());
651 GURL instant_url(default_t_url_->url_ref().ReplaceSearchTerms(
652 TemplateURLRef::SearchTermsArgs(ASCIIToUTF16("foobar"))));
653 AutocompleteMatch instant_match;
654 EXPECT_TRUE(FindMatchWithDestination(instant_url, &instant_match));
655
656 // Wait until history and the suggest query complete.
657 profile_.BlockUntilHistoryProcessesPendingRequests();
658 ASSERT_NO_FATAL_FAILURE(FinishDefaultSuggestQuery());
659
660 // Provider should be done.
661 EXPECT_TRUE(provider_->done());
662
663 // There should be two matches, one for what you typed, the other for
664 // 'foobar'.
665 EXPECT_EQ(2u, provider_->matches().size());
666 EXPECT_TRUE(FindMatchWithDestination(instant_url, &instant_match));
667
668 // And the 'foobar' match should not have a description, it'll be set later.
669 EXPECT_TRUE(instant_match.description.empty());
670 }
671
672 // Make sure that if trailing whitespace is added to the text supplied to
673 // AutocompleteInput the default suggest text is cleared.
674 TEST_F(SearchProviderTest, DifferingText) {
675 chrome::EnableInstantExtendedAPIForTesting();
676
677 ASSERT_NO_FATAL_FAILURE(QueryForInputAndSetWYTMatch(ASCIIToUTF16("foo"),
678 NULL));
679
680 // Finalize the Instant query immediately.
681 provider_->FinalizeInstantQuery(ASCIIToUTF16("foo"),
682 InstantSuggestion(ASCIIToUTF16("bar"),
683 INSTANT_COMPLETE_NOW,
684 INSTANT_SUGGESTION_SEARCH,
685 string16(),
686 kNoMatchIndex));
687
688 // Query with the same input text, but trailing whitespace.
689 AutocompleteMatch instant_match;
690 ASSERT_NO_FATAL_FAILURE(QueryForInputAndSetWYTMatch(ASCIIToUTF16("foo "),
691 &instant_match));
692
693 // There should only one match, for what you typed.
694 EXPECT_EQ(1u, provider_->matches().size());
695 EXPECT_FALSE(instant_match.destination_url.is_empty());
696 }
697
698 TEST_F(SearchProviderTest, DontAutocompleteURLLikeTerms) { 511 TEST_F(SearchProviderTest, DontAutocompleteURLLikeTerms) {
699 AutocompleteClassifierFactory::GetInstance()->SetTestingFactoryAndUse( 512 AutocompleteClassifierFactory::GetInstance()->SetTestingFactoryAndUse(
700 &profile_, &AutocompleteClassifierFactory::BuildInstanceFor); 513 &profile_, &AutocompleteClassifierFactory::BuildInstanceFor);
701 GURL url = AddSearchToHistory(default_t_url_, 514 GURL url = AddSearchToHistory(default_t_url_,
702 ASCIIToUTF16("docs.google.com"), 1); 515 ASCIIToUTF16("docs.google.com"), 1);
703 516
704 // Add the term as a url. 517 // Add the term as a url.
705 HistoryServiceFactory::GetForProfile(&profile_, Profile::EXPLICIT_ACCESS)-> 518 HistoryServiceFactory::GetForProfile(&profile_, Profile::EXPLICIT_ACCESS)->
706 AddPageWithDetails(GURL("http://docs.google.com"), string16(), 1, 1, 519 AddPageWithDetails(GURL("http://docs.google.com"), string16(), 1, 1,
707 base::Time::Now(), false, history::SOURCE_BROWSED); 520 base::Time::Now(), false, history::SOURCE_BROWSED);
(...skipping 1455 matching lines...) Expand 10 before | Expand all | Expand 10 after
2163 } else { 1976 } else {
2164 ASSERT_NE(sug_end, sug_it) << "Failed to find " << suggestion; 1977 ASSERT_NE(sug_end, sug_it) << "Failed to find " << suggestion;
2165 EXPECT_EQ(ASCIIToUTF16(suggestion), sug_it->suggestion()); 1978 EXPECT_EQ(ASCIIToUTF16(suggestion), sug_it->suggestion());
2166 ++sug_it; 1979 ++sug_it;
2167 } 1980 }
2168 } 1981 }
2169 EXPECT_EQ(sug_end, sug_it); 1982 EXPECT_EQ(sug_end, sug_it);
2170 EXPECT_EQ(nav_end, nav_it); 1983 EXPECT_EQ(nav_end, nav_it);
2171 } 1984 }
2172 } 1985 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698