search_provider_unittest.cc revision c2e0dbddbe15c98d52c4786dac06cb8952a8ae6d
12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/autocomplete/search_provider.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/metrics/field_trial.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/run_loop.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/string_util.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/time.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/utf_string_conversions.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "build/build_config.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/autocomplete/autocomplete_classifier_factory.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/autocomplete/autocomplete_controller.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/autocomplete/autocomplete_input.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/autocomplete/autocomplete_match.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/autocomplete/autocomplete_provider.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/autocomplete/autocomplete_provider_listener.h" 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/autocomplete/history_url_provider.h" 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/history/history_service.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/history/history_service_factory.h" 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/omnibox/omnibox_field_trial.h" 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/search/search.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/search_engines/template_url.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/search_engines/template_url_service.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/search_engines/template_url_service_factory.h" 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/common/metrics/entropy_provider.h" 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h" 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/testing_browser_process.h" 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/testing_profile.h" 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/test/test_browser_thread.h" 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/url_request/test_url_fetcher_factory.h" 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/url_request/url_request_status.h" 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserThread; 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The following environment is configured for these tests: 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// . The TemplateURL default_t_url_ is set as the default provider. 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// . The TemplateURL keyword_t_url_ is added to the TemplateURLService. This 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TemplateURL has a valid suggest and search URL. 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// . The URL created by using the search term term1_ with default_t_url_ is 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// added to history. 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// . The URL created by using the search term keyword_term_ with keyword_t_url_ 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// is added to history. 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// . test_factory_ is set as the URLFetcherFactory. 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SearchProviderTest : public testing::Test, 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public AutocompleteProviderListener { 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SearchProviderTest() 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : default_t_url_(NULL), 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) term1_(UTF8ToUTF16("term1")), 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keyword_t_url_(NULL), 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keyword_term_(UTF8ToUTF16("keyword")), 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_thread_(BrowserThread::UI, &message_loop_), 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) io_thread_(BrowserThread::IO), 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quit_when_done_(false) { 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) io_thread_.Start(); 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static void SetUpTestCase(); 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static void TearDownTestCase(); 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // See description above class for what this registers. 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUp(); 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void TearDown(); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) struct ResultInfo { 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ResultInfo() : result_type(AutocompleteMatch::NUM_TYPES) { 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ResultInfo(GURL gurl, 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AutocompleteMatch::Type result_type, 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) string16 fill_into_edit) 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : gurl(gurl), 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result_type(result_type), 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) fill_into_edit(fill_into_edit) { 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const GURL gurl; 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const AutocompleteMatch::Type result_type; 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const string16 fill_into_edit; 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) struct TestData { 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const string16 input; 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const size_t num_results; 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const ResultInfo output[3]; 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void RunTest(TestData* cases, int num_cases, bool prefer_keyword); 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Needed for AutocompleteFieldTrial::ActivateStaticTrials(); 95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) static base::FieldTrialList* field_trial_list_; 96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Default value used for testing. 98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) static const std::string kNotApplicable; 99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Adds a search for |term|, using the engine |t_url| to the history, and 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // returns the URL for that search. 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL AddSearchToHistory(TemplateURL* t_url, string16 term, int visit_count); 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Looks for a match in |provider_| with |contents| equal to |contents|. 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sets |match| to it if found. Returns whether |match| was set. 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool FindMatchWithContents(const string16& contents, 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch* match); 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Looks for a match in |provider_| with destination |url|. Sets |match| to 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // it if found. Returns whether |match| was set. 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool FindMatchWithDestination(const GURL& url, AutocompleteMatch* match); 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // AutocompleteProviderListener: 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If we're waiting for the provider to finish, this exits the message loop. 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnProviderUpdate(bool updated_matches) OVERRIDE; 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Waits until the provider instantiates a URLFetcher and returns it. 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) net::TestURLFetcher* WaitUntilURLFetcherIsReady(int fetcher_id); 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Runs a nested message loop until provider_ is done. The message loop is 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // exited by way of OnProviderUpdate. 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RunTillProviderDone(); 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Invokes Start on provider_, then runs all pending tasks. 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void QueryForInput(const string16& text, 126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool prevent_inline_autocomplete, 127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool prefer_keyword); 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Calls QueryForInput(), finishes any suggest query, then if |wyt_match| is 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // non-NULL, sets it to the "what you typed" entry for |text|. 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void QueryForInputAndSetWYTMatch(const string16& text, 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch* wyt_match); 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Notifies the URLFetcher for the suggest query corresponding to the default 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // search provider that it's done. 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Be sure and wrap calls to this in ASSERT_NO_FATAL_FAILURE. 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void FinishDefaultSuggestQuery(); 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // See description above class for details of these fields. 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TemplateURL* default_t_url_; 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const string16 term1_; 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL term1_url_; 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TemplateURL* keyword_t_url_; 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const string16 keyword_term_; 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL keyword_url_; 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MessageLoopForUI message_loop_; 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::TestBrowserThread ui_thread_; 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::TestBrowserThread io_thread_; 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // URLFetcherFactory implementation registered. 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::TestURLFetcherFactory test_factory_; 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Profile we use. 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestingProfile profile_; 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The provider. 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<SearchProvider> provider_; 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If true, OnProviderUpdate exits out of the current message loop. 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool quit_when_done_; 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(SearchProviderTest); 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::FieldTrialList* SearchProviderTest::field_trial_list_ = NULL; 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static 170c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const std::string SearchProviderTest::kNotApplicable = "Not Applicable"; 171c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// static 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void SearchProviderTest::SetUpTestCase() { 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Set up Suggest experiments. 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) field_trial_list_ = new base::FieldTrialList( 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new metrics::SHA1EntropyProvider("foo")); 177c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::FieldTrial* trial = base::FieldTrialList::CreateFieldTrial( 178c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "AutocompleteDynamicTrial_0", "DefaultGroup"); 179c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) trial->group(); 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void SearchProviderTest::TearDownTestCase() { 1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Make sure the global instance of FieldTrialList is gone. 1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delete field_trial_list_; 1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SearchProviderTest::SetUp() { 1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Make sure that fetchers are automatically ungregistered upon destruction. 1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) test_factory_.set_remove_fetcher_on_delete(true); 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We need both the history service and template url model loaded. 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_.CreateHistoryService(true, false); 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TemplateURLServiceFactory::GetInstance()->SetTestingFactoryAndUse( 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &profile_, &TemplateURLServiceFactory::BuildInstanceFor); 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TemplateURLService* turl_model = 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TemplateURLServiceFactory::GetForProfile(&profile_); 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) turl_model->Load(); 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Reset the default TemplateURL. 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TemplateURLData data; 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data.short_name = ASCIIToUTF16("t"); 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data.SetURL("http://defaultturl/{searchTerms}"); 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data.suggestions_url = "http://defaultturl2/{searchTerms}"; 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) data.instant_url = "http://does/not/exist"; 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default_t_url_ = new TemplateURL(&profile_, data); 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) turl_model->Add(default_t_url_); 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) turl_model->SetDefaultSearchProvider(default_t_url_); 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TemplateURLID default_provider_id = default_t_url_->id(); 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NE(0, default_provider_id); 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add url1, with search term term1_. 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) term1_url_ = AddSearchToHistory(default_t_url_, term1_, 1); 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create another TemplateURL. 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data.short_name = ASCIIToUTF16("k"); 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data.SetKeyword(ASCIIToUTF16("k")); 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data.SetURL("http://keyword/{searchTerms}"); 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data.suggestions_url = "http://suggest_keyword/{searchTerms}"; 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keyword_t_url_ = new TemplateURL(&profile_, data); 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) turl_model->Add(keyword_t_url_); 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NE(0, keyword_t_url_->id()); 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add a page and search term for keyword_t_url_. 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keyword_url_ = AddSearchToHistory(keyword_t_url_, keyword_term_, 1); 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Keywords are updated by the InMemoryHistoryBackend only after the message 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // has been processed on the history thread. Block until history processes all 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // requests to ensure the InMemoryDatabase is the state we expect it. 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_.BlockUntilHistoryProcessesPendingRequests(); 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) provider_ = new SearchProvider(this, &profile_); 235c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) provider_->kMinimumTimeBetweenSuggestQueriesMs = 0; 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SearchProviderTest::OnProviderUpdate(bool updated_matches) { 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (quit_when_done_ && provider_->done()) { 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quit_when_done_ = false; 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message_loop_.Quit(); 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)net::TestURLFetcher* SearchProviderTest::WaitUntilURLFetcherIsReady( 2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int fetcher_id) { 2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) net::TestURLFetcher* url_fetcher = test_factory_.GetFetcherByID(fetcher_id); 2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (; !url_fetcher; url_fetcher = test_factory_.GetFetcherByID(fetcher_id)) 2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) message_loop_.RunUntilIdle(); 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return url_fetcher; 2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SearchProviderTest::RunTillProviderDone() { 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (provider_->done()) 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quit_when_done_ = true; 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_ANDROID) 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Android doesn't have Run(), only Start(). 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message_loop_.Start(); 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::RunLoop run_loop; 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) run_loop.Run(); 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SearchProviderTest::QueryForInput(const string16& text, 268c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool prevent_inline_autocomplete, 269c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool prefer_keyword) { 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Start a query. 2712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AutocompleteInput input(text, string16::npos, string16(), GURL(), 2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) prevent_inline_autocomplete, 273c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefer_keyword, true, AutocompleteInput::ALL_MATCHES); 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) provider_->Start(input, false); 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // RunUntilIdle so that the task scheduled by SearchProvider to create the 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // URLFetchers runs. 2782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) message_loop_.RunUntilIdle(); 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SearchProviderTest::QueryForInputAndSetWYTMatch( 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const string16& text, 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch* wyt_match) { 284c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) QueryForInput(text, false, false); 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_.BlockUntilHistoryProcessesPendingRequests(); 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(FinishDefaultSuggestQuery()); 287c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_NE(chrome::IsInstantEnabled(&profile_), provider_->done()); 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!wyt_match) 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_GE(provider_->matches().size(), 1u); 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(FindMatchWithDestination(GURL( 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default_t_url_->url_ref().ReplaceSearchTerms( 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TemplateURLRef::SearchTermsArgs(text))), 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) wyt_match)); 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SearchProviderTest::TearDown() { 2982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) message_loop_.RunUntilIdle(); 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Shutdown the provider before the profile. 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) provider_ = NULL; 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void SearchProviderTest::RunTest(TestData* cases, 3052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int num_cases, 3062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool prefer_keyword) { 3072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ACMatches matches; 3082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (int i = 0; i < num_cases; ++i) { 3092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AutocompleteInput input(cases[i].input, string16::npos, string16(), GURL(), 3102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) false, prefer_keyword, true, 3112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AutocompleteInput::ALL_MATCHES); 3122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) provider_->Start(input, false); 3132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) matches = provider_->matches(); 3142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) string16 diagnostic_details = ASCIIToUTF16("Input was: ") + cases[i].input + 3152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASCIIToUTF16("; prefer_keyword was: ") + 3162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) (prefer_keyword ? ASCIIToUTF16("true") : ASCIIToUTF16("false")); 3172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(cases[i].num_results, matches.size()) << diagnostic_details; 3182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (matches.size() == cases[i].num_results) { 3192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (size_t j = 0; j < cases[i].num_results; ++j) { 3202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(cases[i].output[j].gurl, matches[j].destination_url) << 3212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) diagnostic_details; 3222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(cases[i].output[j].result_type, matches[j].type) << 3232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) diagnostic_details; 3242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(cases[i].output[j].fill_into_edit, 3252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) matches[j].fill_into_edit) << 3262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) diagnostic_details; 3272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GURL SearchProviderTest::AddSearchToHistory(TemplateURL* t_url, 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16 term, 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int visit_count) { 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HistoryService* history = 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HistoryServiceFactory::GetForProfile(&profile_, 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile::EXPLICIT_ACCESS); 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL search(t_url->url_ref().ReplaceSearchTerms( 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TemplateURLRef::SearchTermsArgs(term))); 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static base::Time last_added_time; 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_added_time = std::max(base::Time::Now(), 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_added_time + base::TimeDelta::FromMicroseconds(1)); 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) history->AddPageWithDetails(search, string16(), visit_count, visit_count, 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_added_time, false, history::SOURCE_BROWSED); 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) history->SetKeywordSearchTermsForURL(search, t_url->id(), term); 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return search; 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool SearchProviderTest::FindMatchWithContents(const string16& contents, 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch* match) { 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (ACMatches::const_iterator i = provider_->matches().begin(); 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i != provider_->matches().end(); ++i) { 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (i->contents == contents) { 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *match = *i; 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool SearchProviderTest::FindMatchWithDestination(const GURL& url, 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch* match) { 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (ACMatches::const_iterator i = provider_->matches().begin(); 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i != provider_->matches().end(); ++i) { 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (i->destination_url == url) { 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *match = *i; 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SearchProviderTest::FinishDefaultSuggestQuery() { 3742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) net::TestURLFetcher* default_fetcher = WaitUntilURLFetcherIsReady( 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SearchProvider::kDefaultProviderURLFetcherID); 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(default_fetcher); 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Tell the SearchProvider the default suggest query is done. 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default_fetcher->set_response_code(200); 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default_fetcher->delegate()->OnURLFetchComplete(default_fetcher); 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests ----------------------------------------------------------------------- 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Make sure we query history for the default provider and a URLFetcher is 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// created for the default provider suggest results. 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SearchProviderTest, QueryDefaultProvider) { 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16 term = term1_.substr(0, term1_.length() - 1); 389c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) QueryForInput(term, false, false); 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure the default providers suggest service was queried. 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::TestURLFetcher* fetcher = test_factory_.GetFetcherByID( 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SearchProvider::kDefaultProviderURLFetcherID); 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(fetcher); 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // And the URL matches what we expected. 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL expected_url(default_t_url_->suggestions_url_ref().ReplaceSearchTerms( 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TemplateURLRef::SearchTermsArgs(term))); 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(fetcher->GetOriginalURL() == expected_url); 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Tell the SearchProvider the suggest query is done. 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fetcher->set_response_code(200); 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fetcher->delegate()->OnURLFetchComplete(fetcher); 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fetcher = NULL; 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Run till the history results complete. 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunTillProviderDone(); 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The SearchProvider is done. Make sure it has a result for the history 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // term term1. 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch term1_match; 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(FindMatchWithDestination(term1_url_, &term1_match)); 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Term1 should not have a description, it's set later. 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(term1_match.description.empty()); 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch wyt_match; 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(FindMatchWithDestination( 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL(default_t_url_->url_ref().ReplaceSearchTerms( 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TemplateURLRef::SearchTermsArgs(term))), &wyt_match)); 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(wyt_match.description.empty()); 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The match for term1 should be more relevant than the what you typed result. 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GT(term1_match.relevance, wyt_match.relevance); 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SearchProviderTest, HonorPreventInlineAutocomplete) { 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16 term = term1_.substr(0, term1_.length() - 1); 428c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) QueryForInput(term, true, false); 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(provider_->matches().empty()); 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(AutocompleteMatch::SEARCH_WHAT_YOU_TYPED, 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) provider_->matches()[0].type); 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Issues a query that matches the registered keyword and makes sure history 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// is queried as well as URLFetchers getting created. 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SearchProviderTest, QueryKeywordProvider) { 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16 term = keyword_term_.substr(0, keyword_term_.length() - 1); 439c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) QueryForInput(keyword_t_url_->keyword() + UTF8ToUTF16(" ") + term, 440c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false, 441c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false); 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure the default providers suggest service was queried. 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::TestURLFetcher* default_fetcher = test_factory_.GetFetcherByID( 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SearchProvider::kDefaultProviderURLFetcherID); 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(default_fetcher); 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Tell the SearchProvider the default suggest query is done. 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default_fetcher->set_response_code(200); 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default_fetcher->delegate()->OnURLFetchComplete(default_fetcher); 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default_fetcher = NULL; 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure the keyword providers suggest service was queried. 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::TestURLFetcher* keyword_fetcher = test_factory_.GetFetcherByID( 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SearchProvider::kKeywordProviderURLFetcherID); 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(keyword_fetcher); 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // And the URL matches what we expected. 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL expected_url(keyword_t_url_->suggestions_url_ref().ReplaceSearchTerms( 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TemplateURLRef::SearchTermsArgs(term))); 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(keyword_fetcher->GetOriginalURL() == expected_url); 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Tell the SearchProvider the keyword suggest query is done. 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keyword_fetcher->set_response_code(200); 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keyword_fetcher->delegate()->OnURLFetchComplete(keyword_fetcher); 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keyword_fetcher = NULL; 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Run till the history results complete. 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunTillProviderDone(); 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The SearchProvider is done. Make sure it has a result for the history 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // term keyword. 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch match; 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(FindMatchWithDestination(keyword_url_, &match)); 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The match should have an associated keyword. 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(match.keyword.empty()); 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The fill into edit should contain the keyword. 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(keyword_t_url_->keyword() + char16(' ') + keyword_term_, 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) match.fill_into_edit); 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SearchProviderTest, DontSendPrivateDataToSuggest) { 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // None of the following input strings should be sent to the suggest server, 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // because they may contain private data. 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* inputs[] = { 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "username:password", 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "http://username:password", 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "https://username:password", 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "username:password@hostname", 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "http://username:password@hostname/", 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "file://filename", 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "data://data", 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "unknownscheme:anything", 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "http://hostname/?query=q", 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "http://hostname/path#ref", 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "https://hostname/path", 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < arraysize(inputs); ++i) { 502c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) QueryForInput(ASCIIToUTF16(inputs[i]), false, false); 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure the default providers suggest service was not queried. 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(test_factory_.GetFetcherByID( 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SearchProvider::kDefaultProviderURLFetcherID) == NULL); 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Run till the history results complete. 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunTillProviderDone(); 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Make sure FinalizeInstantQuery works. 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SearchProviderTest, FinalizeInstantQuery) { 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrefService* service = profile_.GetPrefs(); 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service->SetBoolean(prefs::kInstantEnabled, true); 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(QueryForInputAndSetWYTMatch(ASCIIToUTF16("foo"), 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL)); 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Tell the provider Instant is done. 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) provider_->FinalizeInstantQuery(ASCIIToUTF16("foo"), 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InstantSuggestion(ASCIIToUTF16("bar"), 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) INSTANT_COMPLETE_NOW, 5232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) INSTANT_SUGGESTION_SEARCH, 5242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) string16())); 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The provider should now be done. 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(provider_->done()); 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // There should be two matches, one for what you typed, the other for 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 'foobar'. 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2u, provider_->matches().size()); 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL instant_url(default_t_url_->url_ref().ReplaceSearchTerms( 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TemplateURLRef::SearchTermsArgs(ASCIIToUTF16("foobar")))); 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch instant_match; 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(FindMatchWithDestination(instant_url, &instant_match)); 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // And the 'foobar' match should not have a description, it'll be set later. 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(instant_match.description.empty()); 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure the what you typed match has no description. 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch wyt_match; 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(FindMatchWithDestination( 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL(default_t_url_->url_ref().ReplaceSearchTerms( 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TemplateURLRef::SearchTermsArgs(ASCIIToUTF16("foo")))), 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &wyt_match)); 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(wyt_match.description.empty()); 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The Instant search should be more relevant. 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GT(instant_match.relevance, wyt_match.relevance); 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Make sure FinalizeInstantQuery works with URL suggestions. 5532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(SearchProviderTest, FinalizeInstantURL) { 5542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrefService* service = profile_.GetPrefs(); 5552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) service->SetBoolean(prefs::kInstantEnabled, true); 5562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(QueryForInputAndSetWYTMatch(ASCIIToUTF16("ex"), 5582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NULL)); 5592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Tell the provider Instant is done. 5612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) provider_->FinalizeInstantQuery(ASCIIToUTF16("ex"), 5622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) InstantSuggestion( 5632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASCIIToUTF16("http://example.com/"), 5642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) INSTANT_COMPLETE_NOW, 5652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) INSTANT_SUGGESTION_URL, 5662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) string16())); 5672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The provider should now be done. 5692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(provider_->done()); 5702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // There should be two matches, one for what you typed, the other for 5722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // "http://example.com/". 5732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2u, provider_->matches().size()); 5742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GURL instant_url("http://example.com"); 5752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AutocompleteMatch instant_match; 5762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(FindMatchWithDestination(instant_url, &instant_match)); 5772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The Instant match should not have a description, it'll be set later. 5792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(instant_match.description.empty()); 5802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Make sure the what you typed match has no description. 5822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AutocompleteMatch wyt_match; 5832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(FindMatchWithDestination( 5842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GURL(default_t_url_->url_ref().ReplaceSearchTerms( 5852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TemplateURLRef::SearchTermsArgs(ASCIIToUTF16("ex")))), 5862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &wyt_match)); 5872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(wyt_match.description.empty()); 5882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The Instant URL should be more relevant. 5902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_GT(instant_match.relevance, wyt_match.relevance); 5912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// An Instant URL suggestion should behave the same way whether the input text 5942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// is classified as UNKNOWN or as an URL. Otherwise if the user types 5952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// "example.co" url-what-you-typed will displace the Instant suggestion for 5962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// "example.com". 5972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(SearchProviderTest, FinalizeInstantURLWithURLText) { 5982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrefService* service = profile_.GetPrefs(); 5992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) service->SetBoolean(prefs::kInstantEnabled, true); 6002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(QueryForInputAndSetWYTMatch( 6022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASCIIToUTF16("example.co"), NULL)); 6032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Tell the provider Instant is done. 6052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) provider_->FinalizeInstantQuery(ASCIIToUTF16("example.co"), 6062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) InstantSuggestion( 6072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASCIIToUTF16("http://example.com/"), 6082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) INSTANT_COMPLETE_NOW, 6092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) INSTANT_SUGGESTION_URL, 6102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) string16())); 6112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The provider should now be done. 6132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(provider_->done()); 6142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // There should be two matches, one for what you typed, the other for 6162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // "http://example.com/". 6172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2u, provider_->matches().size()); 6182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GURL instant_url("http://example.com"); 6192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AutocompleteMatch instant_match; 6202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(FindMatchWithDestination(instant_url, &instant_match)); 6212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The Instant match should not have a description, it'll be set later. 6232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(instant_match.description.empty()); 6242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The Instant URL should be more relevant than a URL_WHAT_YOU_TYPED match. 6262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_GT(instant_match.relevance, 6272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) HistoryURLProvider::kScoreForWhatYouTypedResult); 6282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Make sure that if FinalizeInstantQuery is invoked before suggest results 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// return, the suggest text from FinalizeInstantQuery is remembered. 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SearchProviderTest, RememberInstantQuery) { 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrefService* service = profile_.GetPrefs(); 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service->SetBoolean(prefs::kInstantEnabled, true); 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 636c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) QueryForInput(ASCIIToUTF16("foo"), false, false); 6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Finalize the Instant query immediately. 6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) provider_->FinalizeInstantQuery(ASCIIToUTF16("foo"), 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InstantSuggestion(ASCIIToUTF16("bar"), 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) INSTANT_COMPLETE_NOW, 6422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) INSTANT_SUGGESTION_SEARCH, 6432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) string16())); 6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // There should be two matches, one for what you typed, the other for 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 'foobar'. 6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2u, provider_->matches().size()); 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL instant_url(default_t_url_->url_ref().ReplaceSearchTerms( 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TemplateURLRef::SearchTermsArgs(ASCIIToUTF16("foobar")))); 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch instant_match; 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(FindMatchWithDestination(instant_url, &instant_match)); 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Wait until history and the suggest query complete. 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_.BlockUntilHistoryProcessesPendingRequests(); 6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(FinishDefaultSuggestQuery()); 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Provider should be done. 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(provider_->done()); 6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // There should be two matches, one for what you typed, the other for 6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 'foobar'. 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2u, provider_->matches().size()); 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(FindMatchWithDestination(instant_url, &instant_match)); 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // And the 'foobar' match should not have a description, it'll be set later. 6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(instant_match.description.empty()); 6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Make sure that if trailing whitespace is added to the text supplied to 6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// AutocompleteInput the default suggest text is cleared. 6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SearchProviderTest, DifferingText) { 6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrefService* service = profile_.GetPrefs(); 6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service->SetBoolean(prefs::kInstantEnabled, true); 6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(QueryForInputAndSetWYTMatch(ASCIIToUTF16("foo"), 6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL)); 6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Finalize the Instant query immediately. 6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) provider_->FinalizeInstantQuery(ASCIIToUTF16("foo"), 6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InstantSuggestion(ASCIIToUTF16("bar"), 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) INSTANT_COMPLETE_NOW, 6822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) INSTANT_SUGGESTION_SEARCH, 6832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) string16())); 6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Query with the same input text, but trailing whitespace. 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch instant_match; 6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(QueryForInputAndSetWYTMatch(ASCIIToUTF16("foo "), 6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &instant_match)); 6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // There should only one match, for what you typed. 6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1u, provider_->matches().size()); 6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(instant_match.destination_url.is_empty()); 6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SearchProviderTest, DontAutocompleteURLLikeTerms) { 6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteClassifierFactory::GetInstance()->SetTestingFactoryAndUse( 6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &profile_, &AutocompleteClassifierFactory::BuildInstanceFor); 6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url = AddSearchToHistory(default_t_url_, 6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("docs.google.com"), 1); 7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add the term as a url. 7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HistoryServiceFactory::GetForProfile(&profile_, Profile::EXPLICIT_ACCESS)-> 7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddPageWithDetails(GURL("http://docs.google.com"), string16(), 1, 1, 7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time::Now(), false, history::SOURCE_BROWSED); 7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_.BlockUntilHistoryProcessesPendingRequests(); 7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch wyt_match; 7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(QueryForInputAndSetWYTMatch(ASCIIToUTF16("docs"), 7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &wyt_match)); 7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // There should be two matches, one for what you typed, the other for 7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 'docs.google.com'. The search term should have a lower priority than the 7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // what you typed match. 7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2u, provider_->matches().size()); 7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch term_match; 7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(FindMatchWithDestination(url, &term_match)); 7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GT(wyt_match.relevance, term_match.relevance); 7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A multiword search with one visit should not autocomplete until multiple 7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// words are typed. 7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SearchProviderTest, DontAutocompleteUntilMultipleWordsTyped) { 7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL term_url(AddSearchToHistory(default_t_url_, ASCIIToUTF16("one search"), 7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1)); 7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_.BlockUntilHistoryProcessesPendingRequests(); 7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch wyt_match; 7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(QueryForInputAndSetWYTMatch(ASCIIToUTF16("on"), 7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &wyt_match)); 7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2u, provider_->matches().size()); 7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch term_match; 7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(FindMatchWithDestination(term_url, &term_match)); 7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GT(wyt_match.relevance, term_match.relevance); 7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(QueryForInputAndSetWYTMatch(ASCIIToUTF16("one se"), 7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &wyt_match)); 7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2u, provider_->matches().size()); 7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(FindMatchWithDestination(term_url, &term_match)); 7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GT(term_match.relevance, wyt_match.relevance); 7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A multiword search with more than one visit should autocomplete immediately. 7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SearchProviderTest, AutocompleteMultipleVisitsImmediately) { 7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL term_url(AddSearchToHistory(default_t_url_, ASCIIToUTF16("two searches"), 7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2)); 7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_.BlockUntilHistoryProcessesPendingRequests(); 7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch wyt_match; 7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(QueryForInputAndSetWYTMatch(ASCIIToUTF16("tw"), 7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &wyt_match)); 7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2u, provider_->matches().size()); 7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch term_match; 7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(FindMatchWithDestination(term_url, &term_match)); 7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GT(term_match.relevance, wyt_match.relevance); 7555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Autocompletion should work at a word boundary after a space. 7585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SearchProviderTest, AutocompleteAfterSpace) { 7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL term_url(AddSearchToHistory(default_t_url_, ASCIIToUTF16("two searches"), 7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2)); 7615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_.BlockUntilHistoryProcessesPendingRequests(); 7625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch wyt_match; 7645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(QueryForInputAndSetWYTMatch(ASCIIToUTF16("two "), 7655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &wyt_match)); 7665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2u, provider_->matches().size()); 7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch term_match; 7685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(FindMatchWithDestination(term_url, &term_match)); 7695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GT(term_match.relevance, wyt_match.relevance); 7705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Newer multiword searches should score more highly than older ones. 7735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SearchProviderTest, ScoreNewerSearchesHigher) { 7745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL term_url_a(AddSearchToHistory(default_t_url_, 7755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("three searches aaa"), 1)); 7765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL term_url_b(AddSearchToHistory(default_t_url_, 7775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("three searches bbb"), 1)); 7785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_.BlockUntilHistoryProcessesPendingRequests(); 7795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch wyt_match; 7815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(QueryForInputAndSetWYTMatch(ASCIIToUTF16("three se"), 7825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &wyt_match)); 7835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(3u, provider_->matches().size()); 7845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch term_match_a; 7855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(FindMatchWithDestination(term_url_a, &term_match_a)); 7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch term_match_b; 7875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(FindMatchWithDestination(term_url_b, &term_match_b)); 7885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GT(term_match_b.relevance, term_match_a.relevance); 7895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GT(term_match_a.relevance, wyt_match.relevance); 7905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// An autocompleted multiword search should not be replaced by a different 7935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// autocompletion while the user is still typing a valid prefix. 7945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SearchProviderTest, DontReplacePreviousAutocompletion) { 7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL term_url_a(AddSearchToHistory(default_t_url_, 7965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("four searches aaa"), 2)); 7975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL term_url_b(AddSearchToHistory(default_t_url_, 7985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("four searches bbb"), 1)); 7995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_.BlockUntilHistoryProcessesPendingRequests(); 8005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch wyt_match; 8025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(QueryForInputAndSetWYTMatch(ASCIIToUTF16("fo"), 8035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &wyt_match)); 8045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(3u, provider_->matches().size()); 8055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch term_match_a; 8065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(FindMatchWithDestination(term_url_a, &term_match_a)); 8075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch term_match_b; 8085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(FindMatchWithDestination(term_url_b, &term_match_b)); 8095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GT(term_match_a.relevance, wyt_match.relevance); 8105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GT(wyt_match.relevance, term_match_b.relevance); 8115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(QueryForInputAndSetWYTMatch(ASCIIToUTF16("four se"), 8135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &wyt_match)); 8145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(3u, provider_->matches().size()); 8155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(FindMatchWithDestination(term_url_a, &term_match_a)); 8165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(FindMatchWithDestination(term_url_b, &term_match_b)); 8175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GT(term_match_a.relevance, wyt_match.relevance); 8185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GT(wyt_match.relevance, term_match_b.relevance); 8195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Non-completable multiword searches should not crowd out single-word searches. 8225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SearchProviderTest, DontCrowdOutSingleWords) { 8235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL term_url(AddSearchToHistory(default_t_url_, ASCIIToUTF16("five"), 1)); 8245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddSearchToHistory(default_t_url_, ASCIIToUTF16("five searches bbb"), 1); 8255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddSearchToHistory(default_t_url_, ASCIIToUTF16("five searches ccc"), 1); 8265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddSearchToHistory(default_t_url_, ASCIIToUTF16("five searches ddd"), 1); 8275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddSearchToHistory(default_t_url_, ASCIIToUTF16("five searches eee"), 1); 8285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_.BlockUntilHistoryProcessesPendingRequests(); 8295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch wyt_match; 8315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(QueryForInputAndSetWYTMatch(ASCIIToUTF16("fi"), 8325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &wyt_match)); 8335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(AutocompleteProvider::kMaxMatches + 1, provider_->matches().size()); 8345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch term_match; 8355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(FindMatchWithDestination(term_url, &term_match)); 8365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GT(term_match.relevance, wyt_match.relevance); 8375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Inline autocomplete matches regardless of case differences from the input. 8405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SearchProviderTest, InlineMixedCaseMatches) { 8415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL term_url(AddSearchToHistory(default_t_url_, ASCIIToUTF16("FOO"), 1)); 8425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_.BlockUntilHistoryProcessesPendingRequests(); 8435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch wyt_match; 8455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(QueryForInputAndSetWYTMatch(ASCIIToUTF16("f"), 8465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &wyt_match)); 8475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2u, provider_->matches().size()); 8485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch term_match; 8495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(FindMatchWithDestination(term_url, &term_match)); 8505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GT(term_match.relevance, wyt_match.relevance); 8515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1u, term_match.inline_autocomplete_offset); 8525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("FOO"), term_match.fill_into_edit); 8535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Verifies AutocompleteControllers return results (including keyword 8562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// results) in the right order and set descriptions for them correctly. 8572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(SearchProviderTest, KeywordOrderingAndDescriptions) { 8585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add an entry that corresponds to a keyword search with 'term2'. 8595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddSearchToHistory(keyword_t_url_, ASCIIToUTF16("term2"), 1); 8605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_.BlockUntilHistoryProcessesPendingRequests(); 8615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteController controller(&profile_, NULL, 8635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteProvider::TYPE_SEARCH); 8642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) controller.Start(AutocompleteInput( 8652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASCIIToUTF16("k t"), string16::npos, string16(), GURL(), false, false, 8662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) true, AutocompleteInput::ALL_MATCHES)); 8675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const AutocompleteResult& result = controller.result(); 8685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // There should be three matches, one for the keyword history, one for 8702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // keyword provider's what-you-typed, and one for the default provider's 8712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // what you typed, in that order. 8722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(3u, result.size()); 8732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(AutocompleteMatch::SEARCH_HISTORY, result.match_at(0).type); 8742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(AutocompleteMatch::SEARCH_OTHER_ENGINE, result.match_at(1).type); 8752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(AutocompleteMatch::SEARCH_WHAT_YOU_TYPED, result.match_at(2).type); 8762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_GT(result.match_at(0).relevance, result.match_at(1).relevance); 8772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_GT(result.match_at(1).relevance, result.match_at(2).relevance); 8782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The two keyword results should come with the keyword we expect. 8802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("k"), result.match_at(0).keyword); 8812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("k"), result.match_at(1).keyword); 8822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The default provider has a different keyword. (We don't explicitly 8832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // set it during this test, so all we do is assert that it's different.) 8842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_NE(result.match_at(0).keyword, result.match_at(2).keyword); 8852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The top result will always have a description. The third result, 8872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // coming from a different provider than the first two, should also. 8882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Whether the second result has one doesn't matter much. (If it was 8892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // missing, people would infer that it's the same search provider as 8902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // the one above it.) 8912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(result.match_at(0).description.empty()); 8922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(result.match_at(2).description.empty()); 8932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_NE(result.match_at(0).description, result.match_at(2).description); 8942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 8955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(SearchProviderTest, KeywordVerbatim) { 8972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestData cases[] = { 8982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Test a simple keyword input. 8992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ASCIIToUTF16("k foo"), 2, 9002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ResultInfo(GURL("http://keyword/foo"), 9012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AutocompleteMatch::SEARCH_OTHER_ENGINE, 9022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASCIIToUTF16("k foo")), 9032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ResultInfo(GURL("http://defaultturl/k%20foo"), 9042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AutocompleteMatch::SEARCH_WHAT_YOU_TYPED, 9052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASCIIToUTF16("k foo") ) } }, 9062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Make sure extra whitespace after the keyword doesn't change the 9082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // keyword verbatim query. 9092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ASCIIToUTF16("k foo"), 2, 9102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ResultInfo(GURL("http://keyword/foo"), 9112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AutocompleteMatch::SEARCH_OTHER_ENGINE, 9122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASCIIToUTF16("k foo")), 9132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ResultInfo(GURL("http://defaultturl/k%20%20%20foo"), 9142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AutocompleteMatch::SEARCH_WHAT_YOU_TYPED, 9152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASCIIToUTF16("k foo")) } }, 9162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Leading whitespace should be stripped before SearchProvider gets the 9172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // input; hence there are no tests here about how it handles those inputs. 9182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // But whitespace elsewhere in the query string should matter to both 9202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // matches. 9212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ASCIIToUTF16("k foo bar"), 2, 9222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ResultInfo(GURL("http://keyword/foo%20%20bar"), 9232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AutocompleteMatch::SEARCH_OTHER_ENGINE, 9242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASCIIToUTF16("k foo bar")), 9252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ResultInfo(GURL("http://defaultturl/k%20%20foo%20%20bar"), 9262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AutocompleteMatch::SEARCH_WHAT_YOU_TYPED, 9272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASCIIToUTF16("k foo bar")) } }, 9282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Note in the above test case we don't test trailing whitespace because 9292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // SearchProvider still doesn't handle this well. See related bugs: 9302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // 102690, 99239, 164635. 9312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Keywords can be prefixed by certain things that should get ignored 9332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // when constructing the keyword match. 9342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ASCIIToUTF16("www.k foo"), 2, 9352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ResultInfo(GURL("http://keyword/foo"), 9362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AutocompleteMatch::SEARCH_OTHER_ENGINE, 9372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASCIIToUTF16("k foo")), 9382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ResultInfo(GURL("http://defaultturl/www.k%20foo"), 9392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AutocompleteMatch::SEARCH_WHAT_YOU_TYPED, 9402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASCIIToUTF16("www.k foo")) } }, 9412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ASCIIToUTF16("http://k foo"), 2, 9422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ResultInfo(GURL("http://keyword/foo"), 9432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AutocompleteMatch::SEARCH_OTHER_ENGINE, 9442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASCIIToUTF16("k foo")), 9452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ResultInfo(GURL("http://defaultturl/http%3A//k%20foo"), 9462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AutocompleteMatch::SEARCH_WHAT_YOU_TYPED, 9472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASCIIToUTF16("http://k foo")) } }, 9482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ASCIIToUTF16("http://www.k foo"), 2, 9492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ResultInfo(GURL("http://keyword/foo"), 9502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AutocompleteMatch::SEARCH_OTHER_ENGINE, 9512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASCIIToUTF16("k foo")), 9522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ResultInfo(GURL("http://defaultturl/http%3A//www.k%20foo"), 9532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AutocompleteMatch::SEARCH_WHAT_YOU_TYPED, 9542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASCIIToUTF16("http://www.k foo")) } }, 9552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // A keyword with no remaining input shouldn't get a keyword 9572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // verbatim match. 9582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ASCIIToUTF16("k"), 1, 9592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ResultInfo(GURL("http://defaultturl/k"), 9602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AutocompleteMatch::SEARCH_WHAT_YOU_TYPED, 9612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASCIIToUTF16("k")) } }, 9622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ASCIIToUTF16("k "), 1, 9632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ResultInfo(GURL("http://defaultturl/k%20"), 9642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AutocompleteMatch::SEARCH_WHAT_YOU_TYPED, 9652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASCIIToUTF16("k ")) } } 9662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The fact that verbatim queries to keyword are handled by KeywordProvider 9682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // not SearchProvider is tested in 9692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // chrome/browser/extensions/api/omnibox/omnibox_apitest.cc. 9702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 9715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Test not in keyword mode. 9732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RunTest(cases, arraysize(cases), false); 9742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Test in keyword mode. (Both modes should give the same result.) 9762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RunTest(cases, arraysize(cases), true); 9775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Verifies Navsuggest results don't set a TemplateURL, which Instant relies on. 9802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Also verifies that just the *first* navigational result is listed as a match 9812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// if suggested relevance scores were not sent. 9822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(SearchProviderTest, NavSuggestNoSuggestedRelevanceScores) { 983c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) QueryForInput(ASCIIToUTF16("a.c"), false, false); 9845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure the default providers suggest service was queried. 9865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::TestURLFetcher* fetcher = test_factory_.GetFetcherByID( 9875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SearchProvider::kDefaultProviderURLFetcherID); 9885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(fetcher); 9895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Tell the SearchProvider the suggest query is done. 9915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fetcher->set_response_code(200); 9925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fetcher->SetResponseString( 9935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "[\"a.c\",[\"a.com\", \"a.com/b\"],[\"a\", \"b\"],[]," 9945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\"]}]"); 9955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fetcher->delegate()->OnURLFetchComplete(fetcher); 9965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fetcher = NULL; 9975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Run till the history results complete. 9995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunTillProviderDone(); 10005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure the only match is 'a.com' and it doesn't have a template_url. 10025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch nav_match; 10035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(FindMatchWithDestination(GURL("http://a.com"), &nav_match)); 10045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(nav_match.keyword.empty()); 10055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(FindMatchWithDestination(GURL("http://a.com/b"), &nav_match)); 10065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Verifies that the most relevant suggest results are added properly. 10095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SearchProviderTest, SuggestRelevance) { 1010c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) QueryForInput(ASCIIToUTF16("a"), false, false); 10115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure the default provider's suggest service was queried. 10135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::TestURLFetcher* fetcher = test_factory_.GetFetcherByID( 10145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SearchProvider::kDefaultProviderURLFetcherID); 10155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(fetcher); 10165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Tell the SearchProvider the suggest query is done. 10185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fetcher->set_response_code(200); 10195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fetcher->SetResponseString("[\"a\",[\"a1\", \"a2\", \"a3\", \"a4\"]]"); 10205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fetcher->delegate()->OnURLFetchComplete(fetcher); 10215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fetcher = NULL; 10225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Run till the history results complete. 10245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunTillProviderDone(); 10255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check the expected verbatim and (first 3) suggestions' relative relevances. 10275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch verbatim, match_a1, match_a2, match_a3, match_a4; 10285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(FindMatchWithContents(ASCIIToUTF16("a"), &verbatim)); 10295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(FindMatchWithContents(ASCIIToUTF16("a1"), &match_a1)); 10305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(FindMatchWithContents(ASCIIToUTF16("a2"), &match_a2)); 10315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(FindMatchWithContents(ASCIIToUTF16("a3"), &match_a3)); 10325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(FindMatchWithContents(ASCIIToUTF16("a4"), &match_a4)); 10335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GT(verbatim.relevance, match_a1.relevance); 10345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GT(match_a1.relevance, match_a2.relevance); 10355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GT(match_a2.relevance, match_a3.relevance); 10365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Verifies that suggest results with relevance scores are added 10392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// properly when using the default fetcher. When adding a new test 10402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// case to this test, please consider adding it to the tests in 10412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// KeywordFetcherSuggestRelevance below. 10422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(SearchProviderTest, DefaultFetcherSuggestRelevance) { 10435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct { 10445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string json; 10455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string matches[4]; 10465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } cases[] = { 10475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Ensure that suggestrelevance scores reorder matches. 10485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "[\"a\",[\"b\", \"c\"],[],[],{\"google:suggestrelevance\":[1, 2]}]", 10495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "a", "c", "b", kNotApplicable } }, 10505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "[\"a\",[\"http://b.com\", \"http://c.com\"],[],[]," 10515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\"]," 10525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:suggestrelevance\":[1, 2]}]", 10532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "a", "c.com", "b.com", kNotApplicable } }, 10542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Without suggested relevance scores, we should only allow one 10562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // navsuggest result to be be displayed. 10572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "[\"a\",[\"http://b.com\", \"http://c.com\"],[],[]," 10582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\"]}]", 10592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "a", "b.com", kNotApplicable, kNotApplicable } }, 10605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Ensure that verbatimrelevance scores reorder or suppress verbatim. 10625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Negative values will have no effect; the calculated value will be used. 10635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "[\"a\",[\"a1\"],[],[],{\"google:verbatimrelevance\":9999," 10645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:suggestrelevance\":[9998]}]", 10655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "a", "a1", kNotApplicable, kNotApplicable } }, 10665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "[\"a\",[\"a1\"],[],[],{\"google:verbatimrelevance\":9998," 10675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:suggestrelevance\":[9999]}]", 10685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "a1", "a", kNotApplicable, kNotApplicable } }, 10695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "[\"a\",[\"a1\"],[],[],{\"google:verbatimrelevance\":0," 10705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:suggestrelevance\":[9999]}]", 10715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "a1", kNotApplicable, kNotApplicable, kNotApplicable } }, 10725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "[\"a\",[\"a1\"],[],[],{\"google:verbatimrelevance\":-1," 10735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:suggestrelevance\":[9999]}]", 10745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "a1", "a", kNotApplicable, kNotApplicable } }, 10755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "[\"a\",[\"http://a.com\"],[],[]," 10765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\"]," 10775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:verbatimrelevance\":9999," 10785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:suggestrelevance\":[9998]}]", 10795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "a", "a.com", kNotApplicable, kNotApplicable } }, 10805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "[\"a\",[\"http://a.com\"],[],[]," 10815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\"]," 10825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:verbatimrelevance\":9998," 10835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:suggestrelevance\":[9999]}]", 10845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "a.com", "a", kNotApplicable, kNotApplicable } }, 10855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "[\"a\",[\"http://a.com\"],[],[]," 10865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\"]," 10875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:verbatimrelevance\":0," 10885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:suggestrelevance\":[9999]}]", 10895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "a.com", kNotApplicable, kNotApplicable, kNotApplicable } }, 10905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "[\"a\",[\"http://a.com\"],[],[]," 10915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\"]," 10925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:verbatimrelevance\":-1," 10935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:suggestrelevance\":[9999]}]", 10945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "a.com", "a", kNotApplicable, kNotApplicable } }, 10955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Ensure that both types of relevance scores reorder matches together. 10975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "[\"a\",[\"a1\", \"a2\"],[],[],{\"google:suggestrelevance\":[9999, 9997]," 10985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:verbatimrelevance\":9998}]", 10995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "a1", "a", "a2", kNotApplicable } }, 11005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Ensure that only inlinable matches may be ranked as the highest result. 11025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Ignore all suggested relevance scores if this constraint is violated. 11035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "[\"a\",[\"b\"],[],[],{\"google:suggestrelevance\":[9999]}]", 11045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "a", "b", kNotApplicable, kNotApplicable } }, 11055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "[\"a\",[\"b\"],[],[],{\"google:suggestrelevance\":[9999]," 11065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:verbatimrelevance\":0}]", 11075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "a", "b", kNotApplicable, kNotApplicable } }, 11085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "[\"a\",[\"http://b.com\"],[],[]," 11095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\"]," 11105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:suggestrelevance\":[9999]}]", 11115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "a", "b.com", kNotApplicable, kNotApplicable } }, 11125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "[\"a\",[\"http://b.com\"],[],[]," 11135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\"]," 11145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:suggestrelevance\":[9999]," 11155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:verbatimrelevance\":0}]", 11165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "a", "b.com", kNotApplicable, kNotApplicable } }, 11175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Ensure that the top result is ranked as highly as calculated verbatim. 11195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Ignore the suggested verbatim relevance if this constraint is violated. 11205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "[\"a\",[\"a1\"],[],[],{\"google:verbatimrelevance\":0}]", 11215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "a", "a1", kNotApplicable, kNotApplicable } }, 11225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "[\"a\",[\"a1\"],[],[],{\"google:verbatimrelevance\":1}]", 11235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "a", "a1", kNotApplicable, kNotApplicable } }, 11245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "[\"a\",[\"a1\"],[],[],{\"google:suggestrelevance\":[1]," 11255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:verbatimrelevance\":0}]", 11265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "a", "a1", kNotApplicable, kNotApplicable } }, 11275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "[\"a\",[\"a1\", \"a2\"],[],[],{\"google:suggestrelevance\":[1, 2]," 11285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:verbatimrelevance\":0}]", 11295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "a", "a2", "a1", kNotApplicable } }, 11305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "[\"a\",[\"a1\", \"a2\"],[],[],{\"google:suggestrelevance\":[1, 3]," 11315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:verbatimrelevance\":2}]", 11325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "a", "a2", "a1", kNotApplicable } }, 11335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "[\"a\",[\"http://a.com\"],[],[]," 11345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\"]," 11355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:suggestrelevance\":[1]," 11365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:verbatimrelevance\":0}]", 11375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "a", "a.com", kNotApplicable, kNotApplicable } }, 11385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "[\"a\",[\"http://a1.com\", \"http://a2.com\"],[],[]," 11395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\"]," 11405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:suggestrelevance\":[1, 2]," 11415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:verbatimrelevance\":0}]", 11422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "a", "a2.com", "a1.com", kNotApplicable } }, 11435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Ensure that all suggestions are considered, regardless of order. 11455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "[\"a\",[\"b\", \"c\", \"d\", \"e\", \"f\", \"g\", \"h\"],[],[]," 11465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "{\"google:suggestrelevance\":[1, 2, 3, 4, 5, 6, 7]}]", 11475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "a", "h", "g", "f" } }, 11485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "[\"a\",[\"http://b.com\", \"http://c.com\", \"http://d.com\"," 11495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"http://e.com\", \"http://f.com\", \"http://g.com\"," 11505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"http://h.com\"],[],[]," 11515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\"," 11525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"NAVIGATION\", \"NAVIGATION\"," 11535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"NAVIGATION\", \"NAVIGATION\"," 11545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"NAVIGATION\"]," 11555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:suggestrelevance\":[1, 2, 3, 4, 5, 6, 7]}]", 11562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "a", "h.com", "g.com", "f.com" } }, 11575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Ensure that incorrectly sized suggestion relevance lists are ignored. 11595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "[\"a\",[\"a1\", \"a2\"],[],[],{\"google:suggestrelevance\":[1]}]", 11605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "a", "a1", "a2", kNotApplicable } }, 11615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "[\"a\",[\"a1\"],[],[],{\"google:suggestrelevance\":[9999, 1]}]", 11625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "a", "a1", kNotApplicable, kNotApplicable } }, 11635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "[\"a\",[\"http://a1.com\", \"http://a2.com\"],[],[]," 11645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\"]," 11655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:suggestrelevance\":[1]}]", 11665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "a", "a1.com", kNotApplicable, kNotApplicable } }, 11675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "[\"a\",[\"http://a1.com\"],[],[]," 11685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\"]," 11695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:suggestrelevance\":[9999, 1]}]", 11705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "a", "a1.com", kNotApplicable, kNotApplicable } }, 11715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Ensure that all 'verbatim' results are merged with their maximum score. 11735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "[\"a\",[\"a\", \"a1\", \"a2\"],[],[]," 11745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "{\"google:suggestrelevance\":[9998, 9997, 9999]}]", 11755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "a2", "a", "a1", kNotApplicable } }, 11765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "[\"a\",[\"a\", \"a1\", \"a2\"],[],[]," 11775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "{\"google:suggestrelevance\":[9998, 9997, 9999]," 11785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:verbatimrelevance\":0}]", 11795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "a2", "a", "a1", kNotApplicable } }, 11805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Ensure that verbatim is always generated without other suggestions. 11825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(msw): Ensure verbatimrelevance is respected (except suppression). 11835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "[\"a\",[],[],[],{\"google:verbatimrelevance\":1}]", 11845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "a", kNotApplicable, kNotApplicable, kNotApplicable } }, 11855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "[\"a\",[],[],[],{\"google:verbatimrelevance\":0}]", 11865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "a", kNotApplicable, kNotApplicable, kNotApplicable } }, 11875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 11885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); i++) { 1190c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) QueryForInput(ASCIIToUTF16("a"), false, false); 11912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) net::TestURLFetcher* fetcher = WaitUntilURLFetcherIsReady( 11925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SearchProvider::kDefaultProviderURLFetcherID); 11932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(fetcher); 11945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fetcher->set_response_code(200); 11955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fetcher->SetResponseString(cases[i].json); 11965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fetcher->delegate()->OnURLFetchComplete(fetcher); 11975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunTillProviderDone(); 11985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string description = "for input with json=" + cases[i].json; 12005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ACMatches& matches = provider_->matches(); 12015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The top match must inline and score as highly as calculated verbatim. 12022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_NE(string16::npos, matches[0].inline_autocomplete_offset) << 12032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) description; 12042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_GE(matches[0].relevance, 1300) << description; 12055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t j = 0; 12075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Ensure that the returned matches equal the expectations. 12085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (; j < matches.size(); ++j) 12092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(ASCIIToUTF16(cases[i].matches[j]), 12102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) matches[j].contents) << description; 12115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Ensure that no expected matches are missing. 12125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (; j < ARRAYSIZE_UNSAFE(cases[i].matches); ++j) 12132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(kNotApplicable, cases[i].matches[j]) << 12142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "Case # " << i << " " << description; 12155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Verifies that suggest results with relevance scores are added 12192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// properly when using the keyword fetcher. This is similar to the 12202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// test DefaultFetcherSuggestRelevance above but this uses inputs that 12212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// trigger keyword suggestions (i.e., "k a" rather than "a") and has 12222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// different expectations (because now the results are a mix of 1223c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// keyword suggestions and default provider suggestions). When a new 12242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// test is added to this TEST_F, please consider if it would be 12252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// appropriate to add to DefaultFetcherSuggestRelevance as well. 12262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(SearchProviderTest, KeywordFetcherSuggestRelevance) { 12272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) struct { 12282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string json; 12292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const struct { 12302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string contents; 12312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const bool from_keyword; 12322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } matches[5]; 12332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } cases[] = { 12342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Ensure that suggest relevance scores reorder matches and that 12352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // the keyword verbatim (lacking a suggested verbatim score) beats 12362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // the default provider verbatim. 12372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "[\"a\",[\"b\", \"c\"],[],[],{\"google:suggestrelevance\":[1, 2]}]", 12382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { { "a", true }, 12392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "k a", false }, 12402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "c", true }, 12412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "b", true }, 12422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { kNotApplicable, false } } }, 12432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Again, check that relevance scores reorder matches, just this 12442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // time with navigation matches. This also checks that with 12452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // suggested relevance scores we allow multiple navsuggest results. 12462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // It's odd that navsuggest results that come from a keyword 12472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // provider are marked as not a keyword result. I think this 12482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // comes from them not going to a keyword search engine). 12492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // TODO(mpearson): Investigate the implications (if any) of 12502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // tagging these results appropriately. If so, do it because it 12512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // makes more sense. 1252c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "[\"a\",[\"http://b.com\", \"http://c.com\", \"d\"],[],[]," 1253c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\", \"QUERY\"]," 1254c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"google:suggestrelevance\":[1301, 1302, 1303]}]", 12552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { { "a", true }, 1256c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "d", true }, 12572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "c.com", false }, 12582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "b.com", false }, 1259c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "k a", false }, } }, 12602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Without suggested relevance scores, we should only allow one 12622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // navsuggest result to be be displayed. 12632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "[\"a\",[\"http://b.com\", \"http://c.com\"],[],[]," 12642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\"]}]", 12652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { { "a", true }, 12662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "b.com", false }, 12672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "k a", false }, 12682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { kNotApplicable, false }, 12692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { kNotApplicable, false } } }, 12702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Ensure that verbatimrelevance scores reorder or suppress verbatim. 12722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Negative values will have no effect; the calculated value will be used. 12732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "[\"a\",[\"a1\"],[],[],{\"google:verbatimrelevance\":9999," 12742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"google:suggestrelevance\":[9998]}]", 12752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { { "a", true }, 12762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "a1", true }, 12772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "k a", false }, 12782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { kNotApplicable, false }, 12792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { kNotApplicable, false } } }, 12802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "[\"a\",[\"a1\"],[],[],{\"google:verbatimrelevance\":9998," 12812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"google:suggestrelevance\":[9999]}]", 12822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { { "a1", true }, 12832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "a", true }, 12842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "k a", false }, 12852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { kNotApplicable, false }, 12862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { kNotApplicable, false } } }, 12872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "[\"a\",[\"a1\"],[],[],{\"google:verbatimrelevance\":0," 12882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"google:suggestrelevance\":[9999]}]", 12892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { { "a1", true }, 12902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "k a", false }, 12912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { kNotApplicable, false }, 12922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { kNotApplicable, false }, 12932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { kNotApplicable, false } } }, 12942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "[\"a\",[\"a1\"],[],[],{\"google:verbatimrelevance\":-1," 12952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"google:suggestrelevance\":[9999]}]", 12962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { { "a1", true }, 12972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "a", true }, 12982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "k a", false }, 12992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { kNotApplicable, false }, 13002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { kNotApplicable, false } } }, 13012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "[\"a\",[\"http://a.com\"],[],[]," 13022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\"]," 13032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"google:verbatimrelevance\":9999," 13042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"google:suggestrelevance\":[9998]}]", 13052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { { "a", true }, 13062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "a.com", false }, 13072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "k a", false }, 13082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { kNotApplicable, false }, 13092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { kNotApplicable, false } } }, 13102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 13112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Ensure that both types of relevance scores reorder matches together. 13122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "[\"a\",[\"a1\", \"a2\"],[],[],{\"google:suggestrelevance\":[9999, 9997]," 13132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"google:verbatimrelevance\":9998}]", 13142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { { "a1", true }, 13152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "a", true }, 13162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "a2", true }, 13172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "k a", false }, 13182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { kNotApplicable, false } } }, 13192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 13202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Ensure that only inlinable matches may be ranked as the highest result. 13212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Ignore all suggested relevance scores if this constraint is violated. 13222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "[\"a\",[\"b\"],[],[],{\"google:suggestrelevance\":[9999]}]", 13232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { { "a", true }, 13242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "b", true }, 13252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "k a", false }, 13262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { kNotApplicable, false }, 13272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { kNotApplicable, false } } }, 13282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "[\"a\",[\"b\"],[],[],{\"google:suggestrelevance\":[9999]," 13292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"google:verbatimrelevance\":0}]", 13302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { { "a", true }, 13312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "b", true }, 13322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "k a", false }, 13332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { kNotApplicable, false }, 13342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { kNotApplicable, false } } }, 13352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "[\"a\",[\"http://b.com\"],[],[]," 13362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\"]," 13372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"google:suggestrelevance\":[9999]}]", 13382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { { "a", true }, 13392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "b.com", false }, 13402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "k a", false }, 13412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { kNotApplicable, false }, 13422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { kNotApplicable, false } } }, 13432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "[\"a\",[\"http://b.com\"],[],[]," 13442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\"]," 13452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"google:suggestrelevance\":[9999]," 13462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"google:verbatimrelevance\":0}]", 13472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { { "a", true }, 13482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "b.com", false }, 13492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "k a", false }, 13502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { kNotApplicable, false }, 13512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { kNotApplicable, false } } }, 13522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 13532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Ensure that the top result is ranked as highly as calculated verbatim. 13542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Ignore the suggested verbatim relevance if this constraint is violated. 13552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Note that keyword suggestions by default (not in suggested relevance 13562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // mode) score more highly than the default verbatim. 13572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "[\"a\",[\"a1\"],[],[],{\"google:verbatimrelevance\":0}]", 13582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { { "a", true }, 13592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "a1", true }, 13602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "k a", false }, 13612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { kNotApplicable, false }, 13622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { kNotApplicable, false } } }, 13632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "[\"a\",[\"a1\"],[],[],{\"google:verbatimrelevance\":1}]", 13642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { { "a", true }, 13652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "a1", true }, 13662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "k a", false }, 13672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { kNotApplicable, false }, 13682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { kNotApplicable, false } } }, 13692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Continuing the same category of tests, but make sure we keep the 13702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // suggested relevance scores even as we discard the verbatim relevance 13712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // scores. 13722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "[\"a\",[\"a1\"],[],[],{\"google:suggestrelevance\":[1]," 13732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"google:verbatimrelevance\":0}]", 13742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { { "a", true }, 13752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "k a", false }, 13762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "a1", true }, 13772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { kNotApplicable, false }, 13782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { kNotApplicable, false } } }, 13792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "[\"a\",[\"a1\", \"a2\"],[],[],{\"google:suggestrelevance\":[1, 2]," 13802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"google:verbatimrelevance\":0}]", 13812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { { "a", true }, 13822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "k a", false }, 13832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "a2", true }, 13842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "a1", true }, 13852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { kNotApplicable, false } } }, 13862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "[\"a\",[\"a1\", \"a2\"],[],[],{\"google:suggestrelevance\":[1, 3]," 13872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"google:verbatimrelevance\":2}]", 13882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { { "a", true }, 13892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "k a", false }, 13902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "a2", true }, 13912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "a1", true }, 13922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { kNotApplicable, false } } }, 13932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 13942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Ensure that all suggestions are considered, regardless of order. 13952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "[\"a\",[\"b\", \"c\", \"d\", \"e\", \"f\", \"g\", \"h\"],[],[]," 13962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{\"google:suggestrelevance\":[1, 2, 3, 4, 5, 6, 7]}]", 13972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { { "a", true }, 13982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "k a", false }, 13992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "h", true }, 14002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "g", true }, 14012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "f", true } } }, 14022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "[\"a\",[\"http://b.com\", \"http://c.com\", \"http://d.com\"," 14032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"http://e.com\", \"http://f.com\", \"http://g.com\"," 14042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"http://h.com\"],[],[]," 14052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\"," 14062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"NAVIGATION\", \"NAVIGATION\"," 14072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"NAVIGATION\", \"NAVIGATION\"," 14082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"NAVIGATION\"]," 14092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"google:suggestrelevance\":[1, 2, 3, 4, 5, 6, 7]}]", 14102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { { "a", true }, 14112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "k a", false }, 14122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "h.com", false }, 14132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "g.com", false }, 14142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "f.com", false } } }, 14152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 14162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Ensure that incorrectly sized suggestion relevance lists are ignored. 14172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Note that keyword suggestions by default (not in suggested relevance 14182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // mode) score more highly than the default verbatim. 14192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "[\"a\",[\"a1\", \"a2\"],[],[],{\"google:suggestrelevance\":[1]}]", 14202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { { "a", true }, 14212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "a1", true }, 14222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "a2", true }, 14232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "k a", false }, 14242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { kNotApplicable, false } } }, 14252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "[\"a\",[\"a1\"],[],[],{\"google:suggestrelevance\":[9999, 1]}]", 14262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { { "a", true }, 14272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "a1", true }, 14282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "k a", false }, 14292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { kNotApplicable, false }, 14302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { kNotApplicable, false } } }, 14312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // In this case, ignored the suggested relevance scores means we keep 14322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // only one navsuggest result. 14332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "[\"a\",[\"http://a1.com\", \"http://a2.com\"],[],[]," 14342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\"]," 14352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"google:suggestrelevance\":[1]}]", 14362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { { "a", true }, 14372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "a1.com", false }, 14382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "k a", false }, 14392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { kNotApplicable, false }, 14402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { kNotApplicable, false } } }, 14412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "[\"a\",[\"http://a1.com\"],[],[]," 14422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\"]," 14432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"google:suggestrelevance\":[9999, 1]}]", 14442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { { "a", true }, 14452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "a1.com", false }, 14462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "k a", false }, 14472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { kNotApplicable, false }, 14482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { kNotApplicable, false } } }, 14492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 14502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Ensure that all 'verbatim' results are merged with their maximum score. 14512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "[\"a\",[\"a\", \"a1\", \"a2\"],[],[]," 14522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{\"google:suggestrelevance\":[9998, 9997, 9999]}]", 14532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { { "a2", true }, 14542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "a", true }, 14552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "a1", true }, 14562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "k a", false }, 14572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { kNotApplicable, false } } }, 14582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "[\"a\",[\"a\", \"a1\", \"a2\"],[],[]," 14592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{\"google:suggestrelevance\":[9998, 9997, 9999]," 14602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"google:verbatimrelevance\":0}]", 14612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { { "a2", true }, 14622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "a", true }, 14632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "a1", true }, 14642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "k a", false }, 14652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { kNotApplicable, false } } }, 14662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 14672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Ensure that verbatim is always generated without other suggestions. 14682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // TODO(mpearson): Ensure the value of verbatimrelevance is respected 14692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // (except when suggested relevances are ignored). 14702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "[\"a\",[],[],[],{\"google:verbatimrelevance\":1}]", 14712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { { "a", true }, 14722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "k a", false }, 14732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { kNotApplicable, false }, 14742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { kNotApplicable, false }, 14752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { kNotApplicable, false } } }, 14762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "[\"a\",[],[],[],{\"google:verbatimrelevance\":0}]", 14772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { { "a", true }, 14782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "k a", false }, 14792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { kNotApplicable, false }, 14802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { kNotApplicable, false }, 14812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { kNotApplicable, false } } }, 1482c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1483c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Check that navsuggestions will be demoted below queries. 1484c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // (Navsuggestions are not allowed to appear first.) In the process, 1485c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // make sure the navsuggestions still remain in the same order. 1486c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // First, check the situation where navsuggest scores more than verbatim 1487c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // and there are no query suggestions. 1488c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "[\"a\",[\"http://a1.com\", \"http://a2.com\"],[],[]," 1489c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\"]," 1490c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"google:verbatimrelevance\":9990," 1491c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"google:suggestrelevance\":[9998, 9999]}]", 1492c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { { "a", true }, 1493c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "a2.com", false }, 1494c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "a1.com", false }, 1495c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "k a", false }, 1496c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { kNotApplicable, false } } }, 1497c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "[\"a\",[\"http://a1.com\", \"http://a2.com\"],[],[]," 1498c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\"]," 1499c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"google:verbatimrelevance\":9990," 1500c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"google:suggestrelevance\":[9999, 9998]}]", 1501c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { { "a", true }, 1502c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "a1.com", false }, 1503c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "a2.com", false }, 1504c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "k a", false }, 1505c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { kNotApplicable, false } } }, 1506c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Check when navsuggest scores more than verbatim and there is query 1507c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // suggestion but it scores lower. 1508c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "[\"a\",[\"http://a1.com\", \"http://a2.com\", \"a3\"],[],[]," 1509c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\", \"QUERY\"]," 1510c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"google:verbatimrelevance\":9990," 1511c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"google:suggestrelevance\":[9998, 9999, 1300]}]", 1512c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { { "a", true }, 1513c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "a2.com", false }, 1514c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "a1.com", false }, 1515c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "a3", true }, 1516c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "k a", false } } }, 1517c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "[\"a\",[\"http://a1.com\", \"http://a2.com\", \"a3\"],[],[]," 1518c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\", \"QUERY\"]," 1519c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"google:verbatimrelevance\":9990," 1520c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"google:suggestrelevance\":[9999, 9998, 1300]}]", 1521c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { { "a", true }, 1522c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "a1.com", false }, 1523c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "a2.com", false }, 1524c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "a3", true }, 1525c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "k a", false } } }, 1526c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Check when navsuggest scores more than a query suggestion. There is 1527c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // a verbatim but it scores lower. 1528c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "[\"a\",[\"http://a1.com\", \"http://a2.com\", \"a3\"],[],[]," 1529c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\", \"QUERY\"]," 1530c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"google:verbatimrelevance\":9990," 1531c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"google:suggestrelevance\":[9998, 9999, 9997]}]", 1532c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { { "a3", true }, 1533c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "a2.com", false }, 1534c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "a1.com", false }, 1535c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "a", true }, 1536c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "k a", false } } }, 1537c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "[\"a\",[\"http://a1.com\", \"http://a2.com\", \"a3\"],[],[]," 1538c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\", \"QUERY\"]," 1539c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"google:verbatimrelevance\":9990," 1540c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"google:suggestrelevance\":[9999, 9998, 9997]}]", 1541c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { { "a3", true }, 1542c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "a1.com", false }, 1543c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "a2.com", false }, 1544c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "a", true }, 1545c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "k a", false } } }, 1546c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "[\"a\",[\"http://a1.com\", \"http://a2.com\", \"a3\"],[],[]," 1547c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\", \"QUERY\"]," 1548c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"google:verbatimrelevance\":0," 1549c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"google:suggestrelevance\":[9998, 9999, 9997]}]", 1550c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { { "a3", true }, 1551c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "a2.com", false }, 1552c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "a1.com", false }, 1553c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "k a", false }, 1554c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { kNotApplicable, false } } }, 1555c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "[\"a\",[\"http://a1.com\", \"http://a2.com\", \"a3\"],[],[]," 1556c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\", \"QUERY\"]," 1557c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"google:verbatimrelevance\":0," 1558c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"google:suggestrelevance\":[9999, 9998, 9997]}]", 1559c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { { "a3", true }, 1560c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "a1.com", false }, 1561c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "a2.com", false }, 1562c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "k a", false }, 1563c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { kNotApplicable, false } } }, 1564c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Check when there is neither verbatim nor a query suggestion that, 1565c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // because we can demote navsuggestions below a query suggestion, 1566c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // we abandon suggested relevance scores entirely. One consequence is 1567c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // that this means we restore the keyword verbatim match. Note 1568c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // that in this case of abandoning suggested relevance scores, we still 1569c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // keep the navsuggestions in order by their original scores (just 1570c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // not at their original scores), and continue to allow multiple 1571c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // navsuggestions to appear. 1572c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "[\"a\",[\"http://a1.com\", \"http://a2.com\"],[],[]," 1573c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\"]," 1574c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"google:verbatimrelevance\":0," 1575c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"google:suggestrelevance\":[9998, 9999]}]", 1576c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { { "a", true }, 1577c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "a2.com", false }, 1578c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "a1.com", false }, 1579c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "k a", false }, 1580c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { kNotApplicable, false } } }, 1581c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "[\"a\",[\"http://a1.com\", \"http://a2.com\"],[],[]," 1582c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\"]," 1583c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"google:verbatimrelevance\":0," 1584c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"google:suggestrelevance\":[9999, 9998]}]", 1585c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { { "a", true }, 1586c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "a1.com", false }, 1587c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "a2.com", false }, 1588c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "k a", false }, 1589c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { kNotApplicable, false } } }, 1590c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // More checks that everything works when it's not necessary to demote. 1591c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "[\"a\",[\"http://a1.com\", \"http://a2.com\", \"a3\"],[],[]," 1592c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\", \"QUERY\"]," 1593c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"google:verbatimrelevance\":9990," 1594c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"google:suggestrelevance\":[9997, 9998, 9999]}]", 1595c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { { "a3", true }, 1596c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "a2.com", false }, 1597c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "a1.com", false }, 1598c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "a", true }, 1599c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "k a", false } } }, 1600c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "[\"a\",[\"http://a1.com\", \"http://a2.com\", \"a3\"],[],[]," 1601c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\", \"QUERY\"]," 1602c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"google:verbatimrelevance\":9990," 1603c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"google:suggestrelevance\":[9998, 9997, 9999]}]", 1604c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { { "a3", true }, 1605c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "a1.com", false }, 1606c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "a2.com", false }, 1607c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "a", true }, 1608c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "k a", false } } }, 16092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 16102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 16112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); i++) { 1612c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) QueryForInput(ASCIIToUTF16("k a"), false, true); 16132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 16142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Set up a default fetcher with no results. 16152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) net::TestURLFetcher* default_fetcher = WaitUntilURLFetcherIsReady( 16162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SearchProvider::kDefaultProviderURLFetcherID); 16172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(default_fetcher); 16182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) default_fetcher->set_response_code(200); 16192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) default_fetcher->delegate()->OnURLFetchComplete(default_fetcher); 16202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) default_fetcher = NULL; 16212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 16222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Set up a keyword fetcher with provided results. 16232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) net::TestURLFetcher* keyword_fetcher = WaitUntilURLFetcherIsReady( 16242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SearchProvider::kKeywordProviderURLFetcherID); 16252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(keyword_fetcher); 16262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) keyword_fetcher->set_response_code(200); 16272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) keyword_fetcher->SetResponseString(cases[i].json); 16282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) keyword_fetcher->delegate()->OnURLFetchComplete(keyword_fetcher); 16292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) keyword_fetcher = NULL; 16302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RunTillProviderDone(); 16312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 16322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string description = "for input with json=" + cases[i].json; 16332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const ACMatches& matches = provider_->matches(); 16342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The top match must inline and score as highly as calculated verbatim. 16352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_NE(string16::npos, matches[0].inline_autocomplete_offset) << 16362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) description; 16372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_GE(matches[0].relevance, 1300) << description; 16382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 16392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) size_t j = 0; 16402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Ensure that the returned matches equal the expectations. 16412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (; j < matches.size(); ++j) { 16422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(ASCIIToUTF16(cases[i].matches[j].contents), 16432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) matches[j].contents) << description; 16442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(cases[i].matches[j].from_keyword, 16452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) matches[j].keyword == ASCIIToUTF16("k")) << description; 16462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 16472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Ensure that no expected matches are missing. 16482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (; j < ARRAYSIZE_UNSAFE(cases[i].matches); ++j) 16492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(kNotApplicable, cases[i].matches[j].contents) << 16502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "Case # " << i << " " << description; 16512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 16522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 16532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 16542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Verifies suggest relevance behavior for URL input. 16552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(SearchProviderTest, DefaultProviderSuggestRelevanceScoringUrlInput) { 16565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct { 16575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string input; 16585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string json; 16595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string match_contents[4]; 16605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const AutocompleteMatch::Type match_types[4]; 16615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } cases[] = { 16625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Ensure topmost NAVIGATION matches are allowed for URL input. 16635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "a.com", "[\"a.com\",[\"http://a.com/a\"],[],[]," 16645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\"]," 16655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:suggestrelevance\":[9999]}]", 16665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "a.com/a", "a.com", kNotApplicable, kNotApplicable }, 16675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { AutocompleteMatch::NAVSUGGEST, AutocompleteMatch::SEARCH_WHAT_YOU_TYPED, 16685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch::NUM_TYPES, AutocompleteMatch::NUM_TYPES } }, 16695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Ensure topmost SUGGEST matches are not allowed for URL input. 16715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // SearchProvider disregards search and verbatim suggested relevances. 16725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "a.com", "[\"a.com\",[\"a.com info\"],[],[]," 16735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "{\"google:suggestrelevance\":[9999]}]", 16745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "a.com", "a.com info", kNotApplicable, kNotApplicable }, 16755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { AutocompleteMatch::SEARCH_WHAT_YOU_TYPED, 16765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch::SEARCH_SUGGEST, 16775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch::NUM_TYPES, AutocompleteMatch::NUM_TYPES } }, 16785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "a.com", "[\"a.com\",[\"a.com/a\"],[],[]," 16795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "{\"google:suggestrelevance\":[9999]}]", 16805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "a.com", "a.com/a", kNotApplicable, kNotApplicable }, 16815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { AutocompleteMatch::SEARCH_WHAT_YOU_TYPED, 16825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch::SEARCH_SUGGEST, 16835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch::NUM_TYPES, AutocompleteMatch::NUM_TYPES } }, 16845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Ensure the fallback mechanism allows inlinable NAVIGATION matches. 16865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "a.com", "[\"a.com\",[\"a.com/a\", \"http://a.com/b\"],[],[]," 16875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "{\"google:suggesttype\":[\"QUERY\", \"NAVIGATION\"]," 16885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:suggestrelevance\":[9999, 9998]}]", 16895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "a.com/b", "a.com", "a.com/a", kNotApplicable }, 16905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { AutocompleteMatch::NAVSUGGEST, 16915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch::SEARCH_WHAT_YOU_TYPED, 16925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch::SEARCH_SUGGEST, 16935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch::NUM_TYPES } }, 16945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "a.com", "[\"a.com\",[\"a.com/a\", \"http://a.com/b\"],[],[]," 16955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "{\"google:suggesttype\":[\"QUERY\", \"NAVIGATION\"]," 16965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:suggestrelevance\":[9998, 9997]," 16975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:verbatimrelevance\":9999}]", 16985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "a.com/b", "a.com", "a.com/a", kNotApplicable }, 16995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { AutocompleteMatch::NAVSUGGEST, 17005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch::SEARCH_WHAT_YOU_TYPED, 17015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch::SEARCH_SUGGEST, 17025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch::NUM_TYPES } }, 17035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Ensure the fallback mechanism disallows non-inlinable NAVIGATION matches. 17055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "a.com", "[\"a.com\",[\"a.com/a\", \"http://abc.com\"],[],[]," 17065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "{\"google:suggesttype\":[\"QUERY\", \"NAVIGATION\"]," 17075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:suggestrelevance\":[9999, 9998]}]", 17085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "a.com", "abc.com", "a.com/a", kNotApplicable }, 17095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { AutocompleteMatch::SEARCH_WHAT_YOU_TYPED, 17105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch::NAVSUGGEST, 17115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch::SEARCH_SUGGEST, 17125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch::NUM_TYPES } }, 17135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "a.com", "[\"a.com\",[\"a.com/a\", \"http://abc.com\"],[],[]," 17145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "{\"google:suggesttype\":[\"QUERY\", \"NAVIGATION\"]," 17155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:suggestrelevance\":[9998, 9997]," 17165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:verbatimrelevance\":9999}]", 17175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "a.com", "abc.com", "a.com/a", kNotApplicable }, 17185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { AutocompleteMatch::SEARCH_WHAT_YOU_TYPED, 17195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch::NAVSUGGEST, 17205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch::SEARCH_SUGGEST, 17215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch::NUM_TYPES } }, 17222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 17235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); i++) { 1725c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) QueryForInput(ASCIIToUTF16(cases[i].input), false, false); 17262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) net::TestURLFetcher* fetcher = WaitUntilURLFetcherIsReady( 17275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SearchProvider::kDefaultProviderURLFetcherID); 17282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(fetcher); 17295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fetcher->set_response_code(200); 17305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fetcher->SetResponseString(cases[i].json); 17315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fetcher->delegate()->OnURLFetchComplete(fetcher); 17325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunTillProviderDone(); 17335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t j = 0; 17355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ACMatches& matches = provider_->matches(); 17365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Ensure that the returned matches equal the expectations. 17375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (; j < matches.size(); ++j) { 17385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16(cases[i].match_contents[j]), matches[j].contents); 17395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(cases[i].match_types[j], matches[j].type); 17405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 17415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Ensure that no expected matches are missing. 17425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (; j < ARRAYSIZE_UNSAFE(cases[i].match_contents); ++j) { 17435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kNotApplicable, cases[i].match_contents[j]); 17445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(AutocompleteMatch::NUM_TYPES, cases[i].match_types[j]); 17455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 17465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 17475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 17485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// A basic test that verifies the field trial triggered parsing logic. 17502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(SearchProviderTest, FieldTrialTriggeredParsing) { 1751c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) QueryForInput(ASCIIToUTF16("foo"), false, false); 17525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Make sure the default providers suggest service was queried. 17542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) net::TestURLFetcher* fetcher = test_factory_.GetFetcherByID( 17552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SearchProvider::kDefaultProviderURLFetcherID); 17562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(fetcher); 17575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Tell the SearchProvider the suggest query is done. 17592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) fetcher->set_response_code(200); 17602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) fetcher->SetResponseString( 17612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "[\"foo\",[\"foo bar\"],[\"\"],[]," 17622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{\"google:suggesttype\":[\"QUERY\"]," 17632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"google:fieldtrialtriggered\":true}]"); 17642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) fetcher->delegate()->OnURLFetchComplete(fetcher); 17652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) fetcher = NULL; 17665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Run till the history results complete. 17682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RunTillProviderDone(); 17695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { 17712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Check for the match and field trial triggered bits. 17722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AutocompleteMatch match; 17732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(FindMatchWithContents(ASCIIToUTF16("foo bar"), &match)); 17742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ProvidersInfo providers_info; 17752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) provider_->AddProviderInfo(&providers_info); 17762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(1U, providers_info.size()); 17772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, providers_info[0].field_trial_triggered_size()); 17782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, providers_info[0].field_trial_triggered_in_session_size()); 17792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 17802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { 17812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Reset the session and check that bits are reset. 17822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) provider_->ResetSession(); 17832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ProvidersInfo providers_info; 17842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) provider_->AddProviderInfo(&providers_info); 17852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(1U, providers_info.size()); 17862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, providers_info[0].field_trial_triggered_size()); 17872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(0, providers_info[0].field_trial_triggered_in_session_size()); 17885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 17895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 17905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Verifies inline autocompletion of navigational results. 17925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SearchProviderTest, NavigationInline) { 17935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct { 17945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string input; 17955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string url; 17965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test the expected fill_into_edit, which may drop "http://". 17975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Some cases do not trim "http://" to match from the start of the scheme. 17985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string fill_into_edit; 17995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t inline_offset; 18005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } cases[] = { 18015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Do not inline matches that do not contain the input; trim http as needed. 18025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "x", "http://www.abc.com", 18035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "www.abc.com", string16::npos }, 18045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "https:", "http://www.abc.com", 18055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "www.abc.com", string16::npos }, 18065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "abc.com/", "http://www.abc.com", 18075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "www.abc.com", string16::npos }, 18085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://www.abc.com/a", "http://www.abc.com", 18095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "http://www.abc.com", string16::npos }, 18105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://www.abc.com", "https://www.abc.com", 18115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "https://www.abc.com", string16::npos }, 18125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://abc.com", "ftp://abc.com", 18135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "ftp://abc.com", string16::npos }, 18145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "https://www.abc.com", "http://www.abc.com", 18155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "www.abc.com", string16::npos }, 18165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "ftp://abc.com", "http://abc.com", 18175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "abc.com", string16::npos }, 18185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Do not inline matches with invalid input prefixes; trim http as needed. 18205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "ttp", "http://www.abc.com", 18215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "www.abc.com", string16::npos }, 18225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "://w", "http://www.abc.com", 18235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "www.abc.com", string16::npos }, 18245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "ww.", "http://www.abc.com", 18255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "www.abc.com", string16::npos }, 18265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ".ab", "http://www.abc.com", 18275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "www.abc.com", string16::npos }, 18285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "bc", "http://www.abc.com", 18295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "www.abc.com", string16::npos }, 18305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ".com", "http://www.abc.com", 18315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "www.abc.com", string16::npos }, 18325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Do not inline matches that omit input domain labels; trim http as needed. 18345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "www.a", "http://a.com", 18355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "a.com", string16::npos }, 18365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://www.a", "http://a.com", 18375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "http://a.com", string16::npos }, 18385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "www.a", "ftp://a.com", 18395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "ftp://a.com", string16::npos }, 18405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "ftp://www.a", "ftp://a.com", 18415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "ftp://a.com", string16::npos }, 18425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Input matching but with nothing to inline will not yield an offset. 18445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "abc.com", "http://www.abc.com", 18455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "www.abc.com", string16::npos }, 18465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://www.abc.com", "http://www.abc.com", 18475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "http://www.abc.com", string16::npos }, 18485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Inline matches when the input is a leading substring of the scheme. 18505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "h", "http://www.abc.com", 18515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "http://www.abc.com", 1 }, 18525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http", "http://www.abc.com", 18535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "http://www.abc.com", 4 }, 18545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Inline matches when the input is a leading substring of the full URL. 18565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http:", "http://www.abc.com", 18575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "http://www.abc.com", 5 }, 18585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://w", "http://www.abc.com", 18595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "http://www.abc.com", 8 }, 18605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://www.", "http://www.abc.com", 18615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "http://www.abc.com", 11 }, 18625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://www.ab", "http://www.abc.com", 18635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "http://www.abc.com", 13 }, 18645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://www.abc.com/p", "http://www.abc.com/path/file.htm?q=x#foo", 18655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "http://www.abc.com/path/file.htm?q=x#foo", 20 }, 18665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://abc.com/p", "http://abc.com/path/file.htm?q=x#foo", 18675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "http://abc.com/path/file.htm?q=x#foo", 16 }, 18685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Inline matches with valid URLPrefixes; only trim "http://". 18705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "w", "http://www.abc.com", 18715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "www.abc.com", 1 }, 18725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "www.a", "http://www.abc.com", 18735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "www.abc.com", 5 }, 18745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "abc", "http://www.abc.com", 18755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "www.abc.com", 7 }, 18765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "abc.c", "http://www.abc.com", 18775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "www.abc.com", 9 }, 18785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "abc.com/p", "http://www.abc.com/path/file.htm?q=x#foo", 18795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "www.abc.com/path/file.htm?q=x#foo", 13 }, 18805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "abc.com/p", "http://abc.com/path/file.htm?q=x#foo", 18815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "abc.com/path/file.htm?q=x#foo", 9 }, 18825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Inline matches using the maximal URLPrefix components. 18845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "h", "http://help.com", 18855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "help.com", 1 }, 18865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http", "http://http.com", 18875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "http.com", 4 }, 18885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "h", "http://www.help.com", 18895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "www.help.com", 5 }, 18905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http", "http://www.http.com", 18915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "www.http.com", 8 }, 18925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "w", "http://www.www.com", 18935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "www.www.com", 5 }, 18945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test similar behavior for the ftp and https schemes. 18965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "ftp://www.ab", "ftp://www.abc.com/path/file.htm?q=x#foo", 18975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "ftp://www.abc.com/path/file.htm?q=x#foo", 12 }, 18985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "www.ab", "ftp://www.abc.com/path/file.htm?q=x#foo", 18995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "ftp://www.abc.com/path/file.htm?q=x#foo", 12 }, 19005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "ab", "ftp://www.abc.com/path/file.htm?q=x#foo", 19015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "ftp://www.abc.com/path/file.htm?q=x#foo", 12 }, 19025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "ab", "ftp://abc.com/path/file.htm?q=x#foo", 19035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "ftp://abc.com/path/file.htm?q=x#foo", 8 }, 19045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "https://www.ab", "https://www.abc.com/path/file.htm?q=x#foo", 19055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "https://www.abc.com/path/file.htm?q=x#foo", 14 }, 19065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "www.ab", "https://www.abc.com/path/file.htm?q=x#foo", 19075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "https://www.abc.com/path/file.htm?q=x#foo", 14 }, 19085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "ab", "https://www.abc.com/path/file.htm?q=x#foo", 19095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "https://www.abc.com/path/file.htm?q=x#foo", 14 }, 19105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "ab", "https://abc.com/path/file.htm?q=x#foo", 19115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "https://abc.com/path/file.htm?q=x#foo", 10 }, 19125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Forced query input should inline and retain the "?" prefix. 19145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "?http://www.ab", "http://www.abc.com", 19155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "?http://www.abc.com", 14 }, 19165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "?www.ab", "http://www.abc.com", 19175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "?www.abc.com", 7 }, 19185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "?ab", "http://www.abc.com", 19195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "?www.abc.com", 7 }, 19205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 19215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); i++) { 1923c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) QueryForInput(ASCIIToUTF16(cases[i].input), false, false); 1924c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SearchProvider::NavigationResult result( 1925c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) *provider_, GURL(cases[i].url), string16(), false, 0); 1926c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutocompleteMatch match(provider_->NavigationToMatch(result)); 19275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(cases[i].inline_offset, match.inline_autocomplete_offset); 19285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16(cases[i].fill_into_edit), match.fill_into_edit); 19295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 19305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 19315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Verifies that "http://" is not trimmed for input that is a leading substring. 19335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SearchProviderTest, NavigationInlineSchemeSubstring) { 19345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const string16 input(ASCIIToUTF16("ht")); 19355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const string16 url(ASCIIToUTF16("http://a.com")); 1936c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const SearchProvider::NavigationResult result( 1937c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) *provider_, GURL(url), string16(), false, 0); 19385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check the offset and strings when inline autocompletion is allowed. 1940c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) QueryForInput(input, false, false); 1941c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutocompleteMatch match_inline(provider_->NavigationToMatch(result)); 19425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2U, match_inline.inline_autocomplete_offset); 19435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(url, match_inline.fill_into_edit); 19445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(url, match_inline.contents); 19455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check the same offset and strings when inline autocompletion is prevented. 1947c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) QueryForInput(input, true, false); 1948c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutocompleteMatch match_prevent(provider_->NavigationToMatch(result)); 19495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(string16::npos, match_prevent.inline_autocomplete_offset); 19505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(url, match_prevent.fill_into_edit); 19515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(url, match_prevent.contents); 19525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 19535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Verifies that input "w" marks a more significant domain label than "www.". 19555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SearchProviderTest, NavigationInlineDomainClassify) { 1956c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) QueryForInput(ASCIIToUTF16("w"), false, false); 19575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL url("http://www.wow.com"); 1958c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const SearchProvider::NavigationResult result( 1959c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) *provider_, url, string16(), false, 0); 1960c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutocompleteMatch match(provider_->NavigationToMatch(result)); 19615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(5U, match.inline_autocomplete_offset); 19625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("www.wow.com"), match.fill_into_edit); 19635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("www.wow.com"), match.contents); 19645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Ensure that the match for input "w" is marked on "wow" and not "www". 19665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(3U, match.contents_class.size()); 19675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0U, match.contents_class[0].offset); 19685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(AutocompleteMatch::ACMatchClassification::URL, 19695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) match.contents_class[0].style); 19705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(4U, match.contents_class[1].offset); 19715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(AutocompleteMatch::ACMatchClassification::URL | 19725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch::ACMatchClassification::MATCH, 19735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) match.contents_class[1].style); 19745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(5U, match.contents_class[2].offset); 19755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(AutocompleteMatch::ACMatchClassification::URL, 19765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) match.contents_class[2].style); 19775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1978c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1979c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(SearchProviderTest, RemoveStaleResultsTest) { 1980c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // TODO(mpearson): Consider expanding this test to explicit cover 1981c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // testing staleness for keyword results. 1982c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) struct { 1983c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string omnibox_input; 1984c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const int verbatim_relevance; 1985c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // These cached suggestions should already be sorted. 1986c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // The particular number 5 as the length of the array is 1987c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // unimportant; it's merely enough cached results to fully test 1988c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // the functioning of RemoveAllStaleResults(). 1989c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) struct { 1990c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string suggestion; 1991c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const bool is_navigation_result; 1992c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const int relevance; 1993c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // |expect_match| is true if this result should survive 1994c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // RemoveAllStaleResults() filtering against |omnibox_input| below. 1995c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const bool expect_match; 1996c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } results[5]; 1997c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } cases[] = { 1998c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Simple case: multiple query suggestions and no navsuggestions. 1999c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // All query suggestions score less than search-what-you-typed and 2000c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // thus none should be filtered because none will appear first. 2001c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "x", 1300, 2002c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { { "food", false, 1299, true }, 2003c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "foobar", false, 1298, true }, 2004c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "crazy", false, 1297, true }, 2005c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "friend", false, 1296, true }, 2006c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { kNotApplicable, false, 0, false } } }, 2007c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2008c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Similarly simple cases, but the query suggestion appears first. 2009c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "f", 1200, 2010c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { { "food", false, 1299, true }, 2011c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "foobar", false, 1298, true }, 2012c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "crazy", false, 1297, true }, 2013c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "friend", false, 1296, true }, 2014c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { kNotApplicable, false, 0, false } } }, 2015c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "c", 1200, 2016c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { { "food", false, 1299, false }, 2017c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "foobar", false, 1298, false }, 2018c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "crazy", false, 1297, true }, 2019c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "friend", false, 1296, true }, 2020c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { kNotApplicable, false, 0, false } } }, 2021c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "x", 1200, 2022c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { { "food", false, 1299, false }, 2023c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "foobar", false, 1298, false }, 2024c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "crazy", false, 1297, false }, 2025c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "friend", false, 1296, false }, 2026c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { kNotApplicable, false, 0, false } } }, 2027c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2028c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // The same sort of cases, just using a mix of queries and navsuggestions. 2029c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "x", 1300, 2030c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { { "http://food.com/", true, 1299, true }, 2031c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "foobar", false, 1298, true }, 2032c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "http://crazy.com/", true, 1297, true }, 2033c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "friend", false, 1296, true }, 2034c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "http://friend.com/", true, 1295, true } } }, 2035c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "f", 1200, 2036c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { { "http://food.com/", true, 1299, true }, 2037c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "foobar", false, 1298, true }, 2038c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "http://crazy.com/", true, 1297, true }, 2039c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "friend", false, 1296, true }, 2040c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "http://friend.com/", true, 1295, true } } }, 2041c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "c", 1200, 2042c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { { "http://food.com/", true, 1299, false }, 2043c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "foobar", false, 1298, false }, 2044c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "http://crazy.com/", true, 1297, true }, 2045c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "friend", false, 1296, true }, 2046c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "http://friend.com/", true, 1295, true } } }, 2047c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "x", 1200, 2048c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { { "http://food.com/", true, 1299, false }, 2049c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "foobar", false, 1298, false }, 2050c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "http://crazy.com/", true, 1297, false }, 2051c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "friend", false, 1296, false }, 2052c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "http://friend.com/", true, 1295, false } } }, 2053c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2054c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Run the three tests immediately above again, just with verbatim 2055c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // suppressed. Note that in the last case, all results are filtered. 2056c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Because verbatim is also suppressed, SearchProvider will realize 2057c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // in UpdateMatches() that it needs to restore verbatim to fulfill 2058c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // its constraints. This restoration does not happen in 2059c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // RemoveAllStaleResults() and hence is not tested here. This restoration 2060c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // is tested in the DefaultFetcherSuggestRelevance test. 2061c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "f", 0, 2062c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { { "http://food.com/", true, 1299, true }, 2063c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "foobar", false, 1298, true }, 2064c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "http://crazy.com/", true, 1297, true }, 2065c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "friend", false, 1296, true }, 2066c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "http://friend.com/", true, 1295, true } } }, 2067c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "c", 0, 2068c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { { "http://food.com/", true, 1299, false }, 2069c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "foobar", false, 1298, false }, 2070c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "http://crazy.com/", true, 1297, true }, 2071c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "friend", false, 1296, true }, 2072c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "http://friend.com/", true, 1295, true } } }, 2073c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "x", 0, 2074c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { { "http://food.com/", true, 1299, false }, 2075c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "foobar", false, 1298, false }, 2076c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "http://crazy.com/", true, 1297, false }, 2077c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "friend", false, 1296, false }, 2078c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "http://friend.com/", true, 1295, false } } }, 2079c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) }; 2080c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2081c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); i++) { 2082c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Initialize cached results for this test case. 2083c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) provider_->default_verbatim_relevance_ = cases[i].verbatim_relevance; 2084c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) provider_->default_navigation_results_.clear(); 2085c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) provider_->default_suggest_results_.clear(); 2086c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for (size_t j = 0; j < ARRAYSIZE_UNSAFE(cases[i].results); ++j) { 2087c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& suggestion = cases[i].results[j].suggestion; 2088c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (suggestion == kNotApplicable) 2089c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) break; 2090c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (cases[i].results[j].is_navigation_result) { 2091c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) provider_->default_navigation_results_.push_back( 2092c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SearchProvider::NavigationResult( 2093c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) *provider_, GURL(suggestion), string16(), 2094c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false, cases[i].results[j].relevance)); 2095c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } else { 2096c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) provider_->default_suggest_results_.push_back( 2097c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SearchProvider::SuggestResult(ASCIIToUTF16(suggestion), false, 2098c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) cases[i].results[j].relevance)); 2099c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 2100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 2101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) provider_->input_ = AutocompleteInput( 2103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASCIIToUTF16(cases[i].omnibox_input), string16::npos, string16(), 2104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GURL(), false, false, true, AutocompleteInput::ALL_MATCHES); 2105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) provider_->RemoveAllStaleResults(); 2106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Check cached results. 2108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SearchProvider::SuggestResults::const_iterator sug_it = 2109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) provider_->default_suggest_results_.begin(); 2110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const SearchProvider::SuggestResults::const_iterator sug_end = 2111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) provider_->default_suggest_results_.end(); 2112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SearchProvider::NavigationResults::const_iterator nav_it = 2113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) provider_->default_navigation_results_.begin(); 2114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const SearchProvider::NavigationResults::const_iterator nav_end = 2115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) provider_->default_navigation_results_.end(); 2116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for (size_t j = 0; j < ARRAYSIZE_UNSAFE(cases[i].results); ++j) { 2117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& suggestion = cases[i].results[j].suggestion; 2118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (suggestion == kNotApplicable) 2119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) continue; 2120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!cases[i].results[j].expect_match) 2121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) continue; 2122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (cases[i].results[j].is_navigation_result) { 2123c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_NE(nav_end, nav_it) << "Failed to find " << suggestion; 2124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(suggestion, nav_it->url().spec()); 2125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ++nav_it; 2126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } else { 2127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_NE(sug_end, sug_it) << "Failed to find " << suggestion; 2128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(ASCIIToUTF16(suggestion), sug_it->suggestion()); 2129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ++sug_it; 2130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 2131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 2132c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(sug_end, sug_it); 2133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(nav_end, nav_it); 2134c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 2135c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 2136