search_provider_unittest.cc revision 1e9bf3e0803691d0a228da41fc608347b6db4340
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) 71e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include <string> 81e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 9eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/command_line.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/metrics/field_trial.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/run_loop.h" 131e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "base/strings/string16.h" 141e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "base/strings/string_number_conversions.h" 15868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string_util.h" 16868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 17eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "build/build_config.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/autocomplete/autocomplete_classifier_factory.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/autocomplete/autocomplete_controller.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/autocomplete/autocomplete_input.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/autocomplete/autocomplete_match.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/autocomplete/autocomplete_provider.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/autocomplete/autocomplete_provider_listener.h" 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/autocomplete/history_url_provider.h" 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/history/history_service.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/history/history_service_factory.h" 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/omnibox/omnibox_field_trial.h" 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/search/search.h" 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/search_engines/template_url.h" 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/search_engines/template_url_service.h" 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/search_engines/template_url_service_factory.h" 33eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "chrome/common/chrome_switches.h" 34c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch#include "chrome/common/metrics/variations/variations_util.h" 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h" 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/testing_browser_process.h" 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/testing_profile.h" 38424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "components/variations/entropy_provider.h" 39a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch#include "content/public/test/test_browser_thread_bundle.h" 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/url_request/test_url_fetcher_factory.h" 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/url_request/url_request_status.h" 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 44eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// SearchProviderTest --------------------------------------------------------- 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The following environment is configured for these tests: 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// . The TemplateURL default_t_url_ is set as the default provider. 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// . The TemplateURL keyword_t_url_ is added to the TemplateURLService. This 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TemplateURL has a valid suggest and search URL. 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// . The URL created by using the search term term1_ with default_t_url_ is 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// added to history. 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// . The URL created by using the search term keyword_term_ with keyword_t_url_ 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// is added to history. 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// . test_factory_ is set as the URLFetcherFactory. 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SearchProviderTest : public testing::Test, 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public AutocompleteProviderListener { 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) struct ResultInfo { 5990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ResultInfo() : result_type(AutocompleteMatchType::NUM_TYPES) { 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ResultInfo(GURL gurl, 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AutocompleteMatch::Type result_type, 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) string16 fill_into_edit) 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : gurl(gurl), 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result_type(result_type), 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) fill_into_edit(fill_into_edit) { 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 68eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const GURL gurl; 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const AutocompleteMatch::Type result_type; 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const string16 fill_into_edit; 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 73eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) struct TestData { 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const string16 input; 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const size_t num_results; 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const ResultInfo output[3]; 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 80eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SearchProviderTest() 81eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch : default_t_url_(NULL), 82eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch term1_(ASCIIToUTF16("term1")), 83eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch keyword_t_url_(NULL), 84eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch keyword_term_(ASCIIToUTF16("keyword")), 85a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch run_loop_(NULL) { 86c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch ResetFieldTrialList(); 87eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 88eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 89eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // See description above class for what this registers. 90eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual void SetUp() OVERRIDE; 91eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual void TearDown() OVERRIDE; 92eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void RunTest(TestData* cases, int num_cases, bool prefer_keyword); 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Needed for AutocompleteFieldTrial::ActivateStaticTrials(); 97c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch scoped_ptr<base::FieldTrialList> field_trial_list_; 98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Default value used for testing. 100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) static const std::string kNotApplicable; 101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Adds a search for |term|, using the engine |t_url| to the history, and 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // returns the URL for that search. 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL AddSearchToHistory(TemplateURL* t_url, string16 term, int visit_count); 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Looks for a match in |provider_| with |contents| equal to |contents|. 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sets |match| to it if found. Returns whether |match| was set. 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool FindMatchWithContents(const string16& contents, 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch* match); 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Looks for a match in |provider_| with destination |url|. Sets |match| to 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // it if found. Returns whether |match| was set. 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool FindMatchWithDestination(const GURL& url, AutocompleteMatch* match); 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // AutocompleteProviderListener: 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If we're waiting for the provider to finish, this exits the message loop. 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnProviderUpdate(bool updated_matches) OVERRIDE; 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Runs a nested message loop until provider_ is done. The message loop is 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // exited by way of OnProviderUpdate. 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RunTillProviderDone(); 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Invokes Start on provider_, then runs all pending tasks. 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void QueryForInput(const string16& text, 125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool prevent_inline_autocomplete, 126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool prefer_keyword); 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Calls QueryForInput(), finishes any suggest query, then if |wyt_match| is 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // non-NULL, sets it to the "what you typed" entry for |text|. 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void QueryForInputAndSetWYTMatch(const string16& text, 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch* wyt_match); 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Notifies the URLFetcher for the suggest query corresponding to the default 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // search provider that it's done. 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Be sure and wrap calls to this in ASSERT_NO_FATAL_FAILURE. 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void FinishDefaultSuggestQuery(); 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 138c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch void ResetFieldTrialList(); 139c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch 1401e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) void ClearAllResults(); 1411e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // See description above class for details of these fields. 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TemplateURL* default_t_url_; 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const string16 term1_; 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL term1_url_; 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TemplateURL* keyword_t_url_; 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const string16 keyword_term_; 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL keyword_url_; 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 150a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch content::TestBrowserThreadBundle thread_bundle_; 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // URLFetcherFactory implementation registered. 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::TestURLFetcherFactory test_factory_; 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Profile we use. 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestingProfile profile_; 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The provider. 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<SearchProvider> provider_; 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 161a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch // If non-NULL, OnProviderUpdate quits the current |run_loop_|. 162a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch base::RunLoop* run_loop_; 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(SearchProviderTest); 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static 168c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const std::string SearchProviderTest::kNotApplicable = "Not Applicable"; 169c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SearchProviderTest::SetUp() { 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Make sure that fetchers are automatically ungregistered upon destruction. 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) test_factory_.set_remove_fetcher_on_delete(true); 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We need both the history service and template url model loaded. 175bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch ASSERT_TRUE(profile_.CreateHistoryService(true, false)); 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TemplateURLServiceFactory::GetInstance()->SetTestingFactoryAndUse( 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &profile_, &TemplateURLServiceFactory::BuildInstanceFor); 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TemplateURLService* turl_model = 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TemplateURLServiceFactory::GetForProfile(&profile_); 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) turl_model->Load(); 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Reset the default TemplateURL. 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TemplateURLData data; 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data.short_name = ASCIIToUTF16("t"); 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data.SetURL("http://defaultturl/{searchTerms}"); 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data.suggestions_url = "http://defaultturl2/{searchTerms}"; 189b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) data.instant_url = "http://does/not/exist?strk=1"; 190b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) data.search_terms_replacement_key = "strk"; 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default_t_url_ = new TemplateURL(&profile_, data); 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) turl_model->Add(default_t_url_); 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) turl_model->SetDefaultSearchProvider(default_t_url_); 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TemplateURLID default_provider_id = default_t_url_->id(); 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NE(0, default_provider_id); 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add url1, with search term term1_. 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) term1_url_ = AddSearchToHistory(default_t_url_, term1_, 1); 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create another TemplateURL. 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data.short_name = ASCIIToUTF16("k"); 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data.SetKeyword(ASCIIToUTF16("k")); 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data.SetURL("http://keyword/{searchTerms}"); 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data.suggestions_url = "http://suggest_keyword/{searchTerms}"; 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keyword_t_url_ = new TemplateURL(&profile_, data); 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) turl_model->Add(keyword_t_url_); 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NE(0, keyword_t_url_->id()); 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add a page and search term for keyword_t_url_. 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keyword_url_ = AddSearchToHistory(keyword_t_url_, keyword_term_, 1); 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Keywords are updated by the InMemoryHistoryBackend only after the message 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // has been processed on the history thread. Block until history processes all 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // requests to ensure the InMemoryDatabase is the state we expect it. 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_.BlockUntilHistoryProcessesPendingRequests(); 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) provider_ = new SearchProvider(this, &profile_); 218c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) provider_->kMinimumTimeBetweenSuggestQueriesMs = 0; 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 221eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvoid SearchProviderTest::TearDown() { 222a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch base::RunLoop().RunUntilIdle(); 223eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 224eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Shutdown the provider before the profile. 225eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch provider_ = NULL; 226eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 227eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 228eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvoid SearchProviderTest::RunTest(TestData* cases, 229eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int num_cases, 230eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch bool prefer_keyword) { 231eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ACMatches matches; 232eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch for (int i = 0; i < num_cases; ++i) { 233eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch AutocompleteInput input(cases[i].input, string16::npos, string16(), GURL(), 234d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch AutocompleteInput::INVALID_SPEC, false, 235d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch prefer_keyword, true, 236eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch AutocompleteInput::ALL_MATCHES); 237eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch provider_->Start(input, false); 238eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch matches = provider_->matches(); 239eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch string16 diagnostic_details = ASCIIToUTF16("Input was: ") + cases[i].input + 240eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASCIIToUTF16("; prefer_keyword was: ") + 241eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch (prefer_keyword ? ASCIIToUTF16("true") : ASCIIToUTF16("false")); 242eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(cases[i].num_results, matches.size()) << diagnostic_details; 243eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (matches.size() == cases[i].num_results) { 244eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch for (size_t j = 0; j < cases[i].num_results; ++j) { 245eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(cases[i].output[j].gurl, matches[j].destination_url) << 246eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch diagnostic_details; 247eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(cases[i].output[j].result_type, matches[j].type) << 248eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch diagnostic_details; 249eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(cases[i].output[j].fill_into_edit, 250eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch matches[j].fill_into_edit) << 251eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch diagnostic_details; 252c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch // All callers that use this helper function at the moment produce 253c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch // matches that are always allowed to be the default match. 254c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_TRUE(matches[j].allowed_to_be_default_match); 255eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 256eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 257eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 258eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 259eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SearchProviderTest::OnProviderUpdate(bool updated_matches) { 261a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch if (run_loop_ && provider_->done()) { 262a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch run_loop_->Quit(); 263a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch run_loop_ = NULL; 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SearchProviderTest::RunTillProviderDone() { 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (provider_->done()) 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::RunLoop run_loop; 272a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch run_loop_ = &run_loop; 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) run_loop.Run(); 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SearchProviderTest::QueryForInput(const string16& text, 277c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool prevent_inline_autocomplete, 278c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool prefer_keyword) { 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Start a query. 2802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AutocompleteInput input(text, string16::npos, string16(), GURL(), 281d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch AutocompleteInput::INVALID_SPEC, 282d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch prevent_inline_autocomplete, prefer_keyword, true, 283d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch AutocompleteInput::ALL_MATCHES); 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) provider_->Start(input, false); 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // RunUntilIdle so that the task scheduled by SearchProvider to create the 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // URLFetchers runs. 288a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch base::RunLoop().RunUntilIdle(); 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SearchProviderTest::QueryForInputAndSetWYTMatch( 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const string16& text, 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch* wyt_match) { 294c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) QueryForInput(text, false, false); 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_.BlockUntilHistoryProcessesPendingRequests(); 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(FinishDefaultSuggestQuery()); 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!wyt_match) 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_GE(provider_->matches().size(), 1u); 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(FindMatchWithDestination(GURL( 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default_t_url_->url_ref().ReplaceSearchTerms( 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TemplateURLRef::SearchTermsArgs(text))), 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) wyt_match)); 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GURL SearchProviderTest::AddSearchToHistory(TemplateURL* t_url, 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16 term, 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int visit_count) { 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HistoryService* history = 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HistoryServiceFactory::GetForProfile(&profile_, 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile::EXPLICIT_ACCESS); 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL search(t_url->url_ref().ReplaceSearchTerms( 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TemplateURLRef::SearchTermsArgs(term))); 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static base::Time last_added_time; 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_added_time = std::max(base::Time::Now(), 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_added_time + base::TimeDelta::FromMicroseconds(1)); 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) history->AddPageWithDetails(search, string16(), visit_count, visit_count, 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_added_time, false, history::SOURCE_BROWSED); 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) history->SetKeywordSearchTermsForURL(search, t_url->id(), term); 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return search; 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool SearchProviderTest::FindMatchWithContents(const string16& contents, 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch* match) { 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (ACMatches::const_iterator i = provider_->matches().begin(); 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i != provider_->matches().end(); ++i) { 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (i->contents == contents) { 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *match = *i; 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool SearchProviderTest::FindMatchWithDestination(const GURL& url, 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch* match) { 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (ACMatches::const_iterator i = provider_->matches().begin(); 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i != provider_->matches().end(); ++i) { 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (i->destination_url == url) { 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *match = *i; 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SearchProviderTest::FinishDefaultSuggestQuery() { 348a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch net::TestURLFetcher* default_fetcher = 349a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch test_factory_.GetFetcherByID( 350a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch SearchProvider::kDefaultProviderURLFetcherID); 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(default_fetcher); 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Tell the SearchProvider the default suggest query is done. 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default_fetcher->set_response_code(200); 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default_fetcher->delegate()->OnURLFetchComplete(default_fetcher); 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 358c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdochvoid SearchProviderTest::ResetFieldTrialList() { 359c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch // Destroy the existing FieldTrialList before creating a new one to avoid 360c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch // a DCHECK. 361c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch field_trial_list_.reset(); 362c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch field_trial_list_.reset(new base::FieldTrialList( 363c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch new metrics::SHA1EntropyProvider("foo"))); 364c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch chrome_variations::testing::ClearAllVariationParams(); 365c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch base::FieldTrial* trial = base::FieldTrialList::CreateFieldTrial( 366c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "AutocompleteDynamicTrial_0", "DefaultGroup"); 367c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch trial->group(); 368c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch} 369eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 3701e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)void SearchProviderTest::ClearAllResults() { 3711e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) provider_->ClearAllResults(); 3721e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 3731e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 374eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Actual Tests --------------------------------------------------------------- 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Make sure we query history for the default provider and a URLFetcher is 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// created for the default provider suggest results. 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SearchProviderTest, QueryDefaultProvider) { 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16 term = term1_.substr(0, term1_.length() - 1); 380c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) QueryForInput(term, false, false); 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure the default providers suggest service was queried. 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::TestURLFetcher* fetcher = test_factory_.GetFetcherByID( 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SearchProvider::kDefaultProviderURLFetcherID); 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(fetcher); 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // And the URL matches what we expected. 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL expected_url(default_t_url_->suggestions_url_ref().ReplaceSearchTerms( 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TemplateURLRef::SearchTermsArgs(term))); 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(fetcher->GetOriginalURL() == expected_url); 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Tell the SearchProvider the suggest query is done. 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fetcher->set_response_code(200); 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fetcher->delegate()->OnURLFetchComplete(fetcher); 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fetcher = NULL; 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Run till the history results complete. 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunTillProviderDone(); 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The SearchProvider is done. Make sure it has a result for the history 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // term term1. 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch term1_match; 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(FindMatchWithDestination(term1_url_, &term1_match)); 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Term1 should not have a description, it's set later. 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(term1_match.description.empty()); 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch wyt_match; 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(FindMatchWithDestination( 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL(default_t_url_->url_ref().ReplaceSearchTerms( 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TemplateURLRef::SearchTermsArgs(term))), &wyt_match)); 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(wyt_match.description.empty()); 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 413c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch // The match for term1 should be more relevant than the what you typed match. 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GT(term1_match.relevance, wyt_match.relevance); 415c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch // This longer match should be inlineable. 416c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_TRUE(term1_match.allowed_to_be_default_match); 417c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch // The what you typed match should be too, of course. 418c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_TRUE(wyt_match.allowed_to_be_default_match); 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SearchProviderTest, HonorPreventInlineAutocomplete) { 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16 term = term1_.substr(0, term1_.length() - 1); 423c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) QueryForInput(term, true, false); 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(provider_->matches().empty()); 42690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_EQ(AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) provider_->matches()[0].type); 428c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_TRUE(provider_->matches()[0].allowed_to_be_default_match); 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Issues a query that matches the registered keyword and makes sure history 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// is queried as well as URLFetchers getting created. 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SearchProviderTest, QueryKeywordProvider) { 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16 term = keyword_term_.substr(0, keyword_term_.length() - 1); 435eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch QueryForInput(keyword_t_url_->keyword() + ASCIIToUTF16(" ") + term, 436c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false, 437c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false); 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure the default providers suggest service was queried. 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::TestURLFetcher* default_fetcher = test_factory_.GetFetcherByID( 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SearchProvider::kDefaultProviderURLFetcherID); 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(default_fetcher); 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Tell the SearchProvider the default suggest query is done. 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default_fetcher->set_response_code(200); 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default_fetcher->delegate()->OnURLFetchComplete(default_fetcher); 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default_fetcher = NULL; 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure the keyword providers suggest service was queried. 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::TestURLFetcher* keyword_fetcher = test_factory_.GetFetcherByID( 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SearchProvider::kKeywordProviderURLFetcherID); 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(keyword_fetcher); 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // And the URL matches what we expected. 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL expected_url(keyword_t_url_->suggestions_url_ref().ReplaceSearchTerms( 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TemplateURLRef::SearchTermsArgs(term))); 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(keyword_fetcher->GetOriginalURL() == expected_url); 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Tell the SearchProvider the keyword suggest query is done. 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keyword_fetcher->set_response_code(200); 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keyword_fetcher->delegate()->OnURLFetchComplete(keyword_fetcher); 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keyword_fetcher = NULL; 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Run till the history results complete. 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunTillProviderDone(); 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The SearchProvider is done. Make sure it has a result for the history 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // term keyword. 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch match; 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(FindMatchWithDestination(keyword_url_, &match)); 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The match should have an associated keyword. 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(match.keyword.empty()); 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The fill into edit should contain the keyword. 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(keyword_t_url_->keyword() + char16(' ') + keyword_term_, 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) match.fill_into_edit); 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SearchProviderTest, DontSendPrivateDataToSuggest) { 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // None of the following input strings should be sent to the suggest server, 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // because they may contain private data. 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* inputs[] = { 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "username:password", 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "http://username:password", 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "https://username:password", 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "username:password@hostname", 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "http://username:password@hostname/", 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "file://filename", 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "data://data", 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "unknownscheme:anything", 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "http://hostname/?query=q", 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "http://hostname/path#ref", 4944e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) "http://hostname/path #ref", 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "https://hostname/path", 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < arraysize(inputs); ++i) { 499c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) QueryForInput(ASCIIToUTF16(inputs[i]), false, false); 5004e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Make sure the default provider's suggest service was not queried. 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(test_factory_.GetFetcherByID( 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SearchProvider::kDefaultProviderURLFetcherID) == NULL); 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Run till the history results complete. 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunTillProviderDone(); 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5084e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)TEST_F(SearchProviderTest, SendNonPrivateDataToSuggest) { 5094e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // All of the following input strings should be sent to the suggest server, 5104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // because they should not get caught by the private data checks. 5114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const char* inputs[] = { 5124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) "query", 5134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) "query with spaces", 5144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) "http://hostname", 5154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) "http://hostname/path", 5164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) "http://hostname #ref", 5174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) "www.hostname.com #ref", 5184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) "https://hostname", 5194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) "#hashtag", 5204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) "foo https://hostname/path" 5214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) }; 5224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 5234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) profile_.BlockUntilHistoryProcessesPendingRequests(); 5244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) for (size_t i = 0; i < arraysize(inputs); ++i) { 5254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) QueryForInput(ASCIIToUTF16(inputs[i]), false, false); 5264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Make sure the default provider's suggest service was queried. 5274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ASSERT_TRUE(test_factory_.GetFetcherByID( 5284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) SearchProvider::kDefaultProviderURLFetcherID) != NULL); 5294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 5304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 5314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SearchProviderTest, DontAutocompleteURLLikeTerms) { 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteClassifierFactory::GetInstance()->SetTestingFactoryAndUse( 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &profile_, &AutocompleteClassifierFactory::BuildInstanceFor); 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url = AddSearchToHistory(default_t_url_, 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("docs.google.com"), 1); 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add the term as a url. 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HistoryServiceFactory::GetForProfile(&profile_, Profile::EXPLICIT_ACCESS)-> 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddPageWithDetails(GURL("http://docs.google.com"), string16(), 1, 1, 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time::Now(), false, history::SOURCE_BROWSED); 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_.BlockUntilHistoryProcessesPendingRequests(); 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch wyt_match; 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(QueryForInputAndSetWYTMatch(ASCIIToUTF16("docs"), 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &wyt_match)); 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // There should be two matches, one for what you typed, the other for 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 'docs.google.com'. The search term should have a lower priority than the 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // what you typed match. 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2u, provider_->matches().size()); 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch term_match; 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(FindMatchWithDestination(url, &term_match)); 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GT(wyt_match.relevance, term_match.relevance); 555c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_TRUE(wyt_match.allowed_to_be_default_match); 556c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_TRUE(term_match.allowed_to_be_default_match); 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A multiword search with one visit should not autocomplete until multiple 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// words are typed. 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SearchProviderTest, DontAutocompleteUntilMultipleWordsTyped) { 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL term_url(AddSearchToHistory(default_t_url_, ASCIIToUTF16("one search"), 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1)); 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_.BlockUntilHistoryProcessesPendingRequests(); 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch wyt_match; 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(QueryForInputAndSetWYTMatch(ASCIIToUTF16("on"), 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &wyt_match)); 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2u, provider_->matches().size()); 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch term_match; 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(FindMatchWithDestination(term_url, &term_match)); 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GT(wyt_match.relevance, term_match.relevance); 573c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_TRUE(wyt_match.allowed_to_be_default_match); 574c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_TRUE(term_match.allowed_to_be_default_match); 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(QueryForInputAndSetWYTMatch(ASCIIToUTF16("one se"), 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &wyt_match)); 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2u, provider_->matches().size()); 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(FindMatchWithDestination(term_url, &term_match)); 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GT(term_match.relevance, wyt_match.relevance); 581c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_TRUE(term_match.allowed_to_be_default_match); 582c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_TRUE(wyt_match.allowed_to_be_default_match); 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A multiword search with more than one visit should autocomplete immediately. 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SearchProviderTest, AutocompleteMultipleVisitsImmediately) { 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL term_url(AddSearchToHistory(default_t_url_, ASCIIToUTF16("two searches"), 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2)); 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_.BlockUntilHistoryProcessesPendingRequests(); 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch wyt_match; 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(QueryForInputAndSetWYTMatch(ASCIIToUTF16("tw"), 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &wyt_match)); 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2u, provider_->matches().size()); 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch term_match; 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(FindMatchWithDestination(term_url, &term_match)); 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GT(term_match.relevance, wyt_match.relevance); 598c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_TRUE(term_match.allowed_to_be_default_match); 599c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_TRUE(wyt_match.allowed_to_be_default_match); 6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Autocompletion should work at a word boundary after a space. 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SearchProviderTest, AutocompleteAfterSpace) { 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL term_url(AddSearchToHistory(default_t_url_, ASCIIToUTF16("two searches"), 6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2)); 6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_.BlockUntilHistoryProcessesPendingRequests(); 6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch wyt_match; 6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(QueryForInputAndSetWYTMatch(ASCIIToUTF16("two "), 6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &wyt_match)); 6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2u, provider_->matches().size()); 6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch term_match; 6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(FindMatchWithDestination(term_url, &term_match)); 6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GT(term_match.relevance, wyt_match.relevance); 615c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_TRUE(term_match.allowed_to_be_default_match); 616c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_TRUE(wyt_match.allowed_to_be_default_match); 6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Newer multiword searches should score more highly than older ones. 6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SearchProviderTest, ScoreNewerSearchesHigher) { 6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL term_url_a(AddSearchToHistory(default_t_url_, 6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("three searches aaa"), 1)); 6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL term_url_b(AddSearchToHistory(default_t_url_, 6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("three searches bbb"), 1)); 6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_.BlockUntilHistoryProcessesPendingRequests(); 6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch wyt_match; 6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(QueryForInputAndSetWYTMatch(ASCIIToUTF16("three se"), 6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &wyt_match)); 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(3u, provider_->matches().size()); 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch term_match_a; 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(FindMatchWithDestination(term_url_a, &term_match_a)); 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch term_match_b; 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(FindMatchWithDestination(term_url_b, &term_match_b)); 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GT(term_match_b.relevance, term_match_a.relevance); 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GT(term_match_a.relevance, wyt_match.relevance); 637c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_TRUE(term_match_b.allowed_to_be_default_match); 638c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_TRUE(term_match_a.allowed_to_be_default_match); 639c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_TRUE(wyt_match.allowed_to_be_default_match); 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// An autocompleted multiword search should not be replaced by a different 6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// autocompletion while the user is still typing a valid prefix. 6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SearchProviderTest, DontReplacePreviousAutocompletion) { 6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL term_url_a(AddSearchToHistory(default_t_url_, 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("four searches aaa"), 2)); 6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL term_url_b(AddSearchToHistory(default_t_url_, 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("four searches bbb"), 1)); 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_.BlockUntilHistoryProcessesPendingRequests(); 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch wyt_match; 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(QueryForInputAndSetWYTMatch(ASCIIToUTF16("fo"), 6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &wyt_match)); 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(3u, provider_->matches().size()); 6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch term_match_a; 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(FindMatchWithDestination(term_url_a, &term_match_a)); 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch term_match_b; 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(FindMatchWithDestination(term_url_b, &term_match_b)); 6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GT(term_match_a.relevance, wyt_match.relevance); 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GT(wyt_match.relevance, term_match_b.relevance); 661c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_TRUE(term_match_a.allowed_to_be_default_match); 662c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_TRUE(term_match_b.allowed_to_be_default_match); 663c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_TRUE(wyt_match.allowed_to_be_default_match); 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(QueryForInputAndSetWYTMatch(ASCIIToUTF16("four se"), 6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &wyt_match)); 6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(3u, provider_->matches().size()); 6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(FindMatchWithDestination(term_url_a, &term_match_a)); 6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(FindMatchWithDestination(term_url_b, &term_match_b)); 6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GT(term_match_a.relevance, wyt_match.relevance); 6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GT(wyt_match.relevance, term_match_b.relevance); 672c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_TRUE(term_match_a.allowed_to_be_default_match); 673c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_TRUE(term_match_b.allowed_to_be_default_match); 674c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_TRUE(wyt_match.allowed_to_be_default_match); 6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Non-completable multiword searches should not crowd out single-word searches. 6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SearchProviderTest, DontCrowdOutSingleWords) { 6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL term_url(AddSearchToHistory(default_t_url_, ASCIIToUTF16("five"), 1)); 6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddSearchToHistory(default_t_url_, ASCIIToUTF16("five searches bbb"), 1); 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddSearchToHistory(default_t_url_, ASCIIToUTF16("five searches ccc"), 1); 6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddSearchToHistory(default_t_url_, ASCIIToUTF16("five searches ddd"), 1); 6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddSearchToHistory(default_t_url_, ASCIIToUTF16("five searches eee"), 1); 6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_.BlockUntilHistoryProcessesPendingRequests(); 6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch wyt_match; 6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(QueryForInputAndSetWYTMatch(ASCIIToUTF16("fi"), 6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &wyt_match)); 6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(AutocompleteProvider::kMaxMatches + 1, provider_->matches().size()); 6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch term_match; 6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(FindMatchWithDestination(term_url, &term_match)); 6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GT(term_match.relevance, wyt_match.relevance); 693c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_TRUE(term_match.allowed_to_be_default_match); 694c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_TRUE(wyt_match.allowed_to_be_default_match); 6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Inline autocomplete matches regardless of case differences from the input. 6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SearchProviderTest, InlineMixedCaseMatches) { 6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL term_url(AddSearchToHistory(default_t_url_, ASCIIToUTF16("FOO"), 1)); 7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_.BlockUntilHistoryProcessesPendingRequests(); 7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch wyt_match; 7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(QueryForInputAndSetWYTMatch(ASCIIToUTF16("f"), 7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &wyt_match)); 7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2u, provider_->matches().size()); 7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch term_match; 7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(FindMatchWithDestination(term_url, &term_match)); 7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GT(term_match.relevance, wyt_match.relevance); 7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("FOO"), term_match.fill_into_edit); 710ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_EQ(ASCIIToUTF16("OO"), term_match.inline_autocompletion); 711c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_TRUE(term_match.allowed_to_be_default_match); 7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Verifies AutocompleteControllers return results (including keyword 7152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// results) in the right order and set descriptions for them correctly. 7162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(SearchProviderTest, KeywordOrderingAndDescriptions) { 7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add an entry that corresponds to a keyword search with 'term2'. 7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddSearchToHistory(keyword_t_url_, ASCIIToUTF16("term2"), 1); 7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_.BlockUntilHistoryProcessesPendingRequests(); 7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteController controller(&profile_, NULL, 7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteProvider::TYPE_SEARCH); 7232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) controller.Start(AutocompleteInput( 724d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch ASCIIToUTF16("k t"), string16::npos, string16(), GURL(), 725d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch AutocompleteInput::INVALID_SPEC, false, false, true, 726d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch AutocompleteInput::ALL_MATCHES)); 7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const AutocompleteResult& result = controller.result(); 7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // There should be three matches, one for the keyword history, one for 7302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // keyword provider's what-you-typed, and one for the default provider's 7312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // what you typed, in that order. 7322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(3u, result.size()); 73390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(AutocompleteMatchType::SEARCH_HISTORY, result.match_at(0).type); 73490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(AutocompleteMatchType::SEARCH_OTHER_ENGINE, 73590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) result.match_at(1).type); 73690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, 73790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) result.match_at(2).type); 7382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_GT(result.match_at(0).relevance, result.match_at(1).relevance); 7392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_GT(result.match_at(1).relevance, result.match_at(2).relevance); 740c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_TRUE(result.match_at(0).allowed_to_be_default_match); 741c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_TRUE(result.match_at(1).allowed_to_be_default_match); 742c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_TRUE(result.match_at(2).allowed_to_be_default_match); 7432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The two keyword results should come with the keyword we expect. 7452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("k"), result.match_at(0).keyword); 7462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("k"), result.match_at(1).keyword); 7472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The default provider has a different keyword. (We don't explicitly 7482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // set it during this test, so all we do is assert that it's different.) 7492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_NE(result.match_at(0).keyword, result.match_at(2).keyword); 7502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The top result will always have a description. The third result, 7522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // coming from a different provider than the first two, should also. 7532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Whether the second result has one doesn't matter much. (If it was 7542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // missing, people would infer that it's the same search provider as 7552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // the one above it.) 7562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(result.match_at(0).description.empty()); 7572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(result.match_at(2).description.empty()); 7582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_NE(result.match_at(0).description, result.match_at(2).description); 7592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(SearchProviderTest, KeywordVerbatim) { 7622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestData cases[] = { 7632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Test a simple keyword input. 7642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ASCIIToUTF16("k foo"), 2, 7652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ResultInfo(GURL("http://keyword/foo"), 76690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) AutocompleteMatchType::SEARCH_OTHER_ENGINE, 7672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASCIIToUTF16("k foo")), 7682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ResultInfo(GURL("http://defaultturl/k%20foo"), 76990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, 7702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASCIIToUTF16("k foo") ) } }, 7712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Make sure extra whitespace after the keyword doesn't change the 7732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // keyword verbatim query. 7742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ASCIIToUTF16("k foo"), 2, 7752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ResultInfo(GURL("http://keyword/foo"), 77690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) AutocompleteMatchType::SEARCH_OTHER_ENGINE, 7772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASCIIToUTF16("k foo")), 7782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ResultInfo(GURL("http://defaultturl/k%20%20%20foo"), 77990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, 7802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASCIIToUTF16("k foo")) } }, 7812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Leading whitespace should be stripped before SearchProvider gets the 7822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // input; hence there are no tests here about how it handles those inputs. 7832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // But whitespace elsewhere in the query string should matter to both 7852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // matches. 7862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ASCIIToUTF16("k foo bar"), 2, 7872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ResultInfo(GURL("http://keyword/foo%20%20bar"), 78890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) AutocompleteMatchType::SEARCH_OTHER_ENGINE, 7892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASCIIToUTF16("k foo bar")), 7902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ResultInfo(GURL("http://defaultturl/k%20%20foo%20%20bar"), 79190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, 7922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASCIIToUTF16("k foo bar")) } }, 7932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Note in the above test case we don't test trailing whitespace because 7942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // SearchProvider still doesn't handle this well. See related bugs: 7952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // 102690, 99239, 164635. 7962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Keywords can be prefixed by certain things that should get ignored 7982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // when constructing the keyword match. 7992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ASCIIToUTF16("www.k foo"), 2, 8002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ResultInfo(GURL("http://keyword/foo"), 80190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) AutocompleteMatchType::SEARCH_OTHER_ENGINE, 8022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASCIIToUTF16("k foo")), 8032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ResultInfo(GURL("http://defaultturl/www.k%20foo"), 80490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, 8052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASCIIToUTF16("www.k foo")) } }, 8062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ASCIIToUTF16("http://k foo"), 2, 8072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ResultInfo(GURL("http://keyword/foo"), 80890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) AutocompleteMatchType::SEARCH_OTHER_ENGINE, 8092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASCIIToUTF16("k foo")), 8102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ResultInfo(GURL("http://defaultturl/http%3A//k%20foo"), 81190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, 8122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASCIIToUTF16("http://k foo")) } }, 8132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ASCIIToUTF16("http://www.k foo"), 2, 8142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ResultInfo(GURL("http://keyword/foo"), 81590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) AutocompleteMatchType::SEARCH_OTHER_ENGINE, 8162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASCIIToUTF16("k foo")), 8172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ResultInfo(GURL("http://defaultturl/http%3A//www.k%20foo"), 81890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, 8192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASCIIToUTF16("http://www.k foo")) } }, 8202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // A keyword with no remaining input shouldn't get a keyword 8222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // verbatim match. 8232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ASCIIToUTF16("k"), 1, 8242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ResultInfo(GURL("http://defaultturl/k"), 82590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, 8262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASCIIToUTF16("k")) } }, 8272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ASCIIToUTF16("k "), 1, 8282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ResultInfo(GURL("http://defaultturl/k%20"), 82990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, 8302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASCIIToUTF16("k ")) } } 8312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The fact that verbatim queries to keyword are handled by KeywordProvider 8332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // not SearchProvider is tested in 8342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // chrome/browser/extensions/api/omnibox/omnibox_apitest.cc. 8352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 8365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Test not in keyword mode. 8382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RunTest(cases, arraysize(cases), false); 8392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Test in keyword mode. (Both modes should give the same result.) 8412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RunTest(cases, arraysize(cases), true); 8425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 844eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Ensures command-line flags are reflected in the URLs the search provider 845eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// generates. 846eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTEST_F(SearchProviderTest, CommandLineOverrides) { 847eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch TemplateURLService* turl_model = 848eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch TemplateURLServiceFactory::GetForProfile(&profile_); 849eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 850eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch TemplateURLData data; 851eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch data.short_name = ASCIIToUTF16("default"); 852eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch data.SetKeyword(data.short_name); 853eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch data.SetURL("{google:baseURL}{searchTerms}"); 854eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch default_t_url_ = new TemplateURL(&profile_, data); 855eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch turl_model->Add(default_t_url_); 856eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch turl_model->SetDefaultSearchProvider(default_t_url_); 857eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 858eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch CommandLine::ForCurrentProcess()->AppendSwitchASCII(switches::kGoogleBaseURL, 859eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "http://www.bar.com/"); 860eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch CommandLine::ForCurrentProcess()->AppendSwitchASCII( 861eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch switches::kExtraSearchQueryParams, "a=b"); 862eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 863eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch TestData cases[] = { 864eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { ASCIIToUTF16("k a"), 2, 865eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { ResultInfo(GURL("http://keyword/a"), 866eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch AutocompleteMatchType::SEARCH_OTHER_ENGINE, 867eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASCIIToUTF16("k a")), 868eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ResultInfo(GURL("http://www.bar.com/k%20a?a=b"), 869eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, 870eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASCIIToUTF16("k a")) } }, 871eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch }; 872eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 873eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch RunTest(cases, arraysize(cases), false); 874eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 875eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 8762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Verifies Navsuggest results don't set a TemplateURL, which Instant relies on. 8772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Also verifies that just the *first* navigational result is listed as a match 8782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// if suggested relevance scores were not sent. 8792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(SearchProviderTest, NavSuggestNoSuggestedRelevanceScores) { 880c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) QueryForInput(ASCIIToUTF16("a.c"), false, false); 8815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure the default providers suggest service was queried. 8835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::TestURLFetcher* fetcher = test_factory_.GetFetcherByID( 8845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SearchProvider::kDefaultProviderURLFetcherID); 8855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(fetcher); 8865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Tell the SearchProvider the suggest query is done. 8885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fetcher->set_response_code(200); 8895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fetcher->SetResponseString( 8905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "[\"a.c\",[\"a.com\", \"a.com/b\"],[\"a\", \"b\"],[]," 8915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\"]}]"); 8925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fetcher->delegate()->OnURLFetchComplete(fetcher); 8935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fetcher = NULL; 8945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Run till the history results complete. 8965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunTillProviderDone(); 8975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure the only match is 'a.com' and it doesn't have a template_url. 8995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch nav_match; 9005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(FindMatchWithDestination(GURL("http://a.com"), &nav_match)); 9015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(nav_match.keyword.empty()); 902c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_TRUE(nav_match.allowed_to_be_default_match); 9035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(FindMatchWithDestination(GURL("http://a.com/b"), &nav_match)); 9045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Verifies that the most relevant suggest results are added properly. 9075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SearchProviderTest, SuggestRelevance) { 908c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) QueryForInput(ASCIIToUTF16("a"), false, false); 9095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure the default provider's suggest service was queried. 9115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::TestURLFetcher* fetcher = test_factory_.GetFetcherByID( 9125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SearchProvider::kDefaultProviderURLFetcherID); 9135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(fetcher); 9145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Tell the SearchProvider the suggest query is done. 9165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fetcher->set_response_code(200); 9175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fetcher->SetResponseString("[\"a\",[\"a1\", \"a2\", \"a3\", \"a4\"]]"); 9185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fetcher->delegate()->OnURLFetchComplete(fetcher); 9195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fetcher = NULL; 9205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Run till the history results complete. 9225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunTillProviderDone(); 9235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check the expected verbatim and (first 3) suggestions' relative relevances. 9255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch verbatim, match_a1, match_a2, match_a3, match_a4; 9265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(FindMatchWithContents(ASCIIToUTF16("a"), &verbatim)); 9275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(FindMatchWithContents(ASCIIToUTF16("a1"), &match_a1)); 9285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(FindMatchWithContents(ASCIIToUTF16("a2"), &match_a2)); 9295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(FindMatchWithContents(ASCIIToUTF16("a3"), &match_a3)); 9305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(FindMatchWithContents(ASCIIToUTF16("a4"), &match_a4)); 9315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GT(verbatim.relevance, match_a1.relevance); 9325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GT(match_a1.relevance, match_a2.relevance); 9335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GT(match_a2.relevance, match_a3.relevance); 934c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_TRUE(verbatim.allowed_to_be_default_match); 935c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_TRUE(match_a1.allowed_to_be_default_match); 936c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_TRUE(match_a2.allowed_to_be_default_match); 937c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_TRUE(match_a3.allowed_to_be_default_match); 9385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Verifies that suggest results with relevance scores are added 9412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// properly when using the default fetcher. When adding a new test 9422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// case to this test, please consider adding it to the tests in 9432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// KeywordFetcherSuggestRelevance below. 9442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(SearchProviderTest, DefaultFetcherSuggestRelevance) { 945c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch struct DefaultFetcherMatch { 946c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch std::string contents; 947c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch bool allowed_to_be_default_match; 948c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch }; 949c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch const DefaultFetcherMatch kEmptyMatch = { kNotApplicable, false }; 9505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct { 9515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string json; 952c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch const DefaultFetcherMatch matches[4]; 953ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const std::string inline_autocompletion; 9545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } cases[] = { 9555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Ensure that suggestrelevance scores reorder matches. 9565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "[\"a\",[\"b\", \"c\"],[],[],{\"google:suggestrelevance\":[1, 2]}]", 957c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a", true }, { "c", false }, { "b", false }, kEmptyMatch }, 958c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch std::string() }, 9595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "[\"a\",[\"http://b.com\", \"http://c.com\"],[],[]," 9605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\"]," 9615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:suggestrelevance\":[1, 2]}]", 962c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a", true }, { "c.com", false }, { "b.com", false }, kEmptyMatch }, 963c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch std::string() }, 9642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Without suggested relevance scores, we should only allow one 9662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // navsuggest result to be be displayed. 9672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "[\"a\",[\"http://b.com\", \"http://c.com\"],[],[]," 9682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\"]}]", 969c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a", true }, { "b.com", false }, kEmptyMatch, kEmptyMatch }, 970c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch std::string() }, 9715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Ensure that verbatimrelevance scores reorder or suppress verbatim. 9735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Negative values will have no effect; the calculated value will be used. 9745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "[\"a\",[\"a1\"],[],[],{\"google:verbatimrelevance\":9999," 9755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:suggestrelevance\":[9998]}]", 976c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a", true}, { "a1", true }, kEmptyMatch, kEmptyMatch }, 977c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch std::string() }, 9785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "[\"a\",[\"a1\"],[],[],{\"google:verbatimrelevance\":9998," 9795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:suggestrelevance\":[9999]}]", 980c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a1", true }, { "a", true }, kEmptyMatch, kEmptyMatch }, 981c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "1" }, 9825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "[\"a\",[\"a1\"],[],[],{\"google:verbatimrelevance\":0," 9835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:suggestrelevance\":[9999]}]", 984c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a1", true }, kEmptyMatch, kEmptyMatch, kEmptyMatch }, 985c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "1" }, 9865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "[\"a\",[\"a1\"],[],[],{\"google:verbatimrelevance\":-1," 9875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:suggestrelevance\":[9999]}]", 988c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a1", true }, { "a", true }, kEmptyMatch, kEmptyMatch }, 989c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "1" }, 9905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "[\"a\",[\"http://a.com\"],[],[]," 9915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\"]," 9925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:verbatimrelevance\":9999," 9935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:suggestrelevance\":[9998]}]", 994c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a", true }, { "a.com", true }, kEmptyMatch, kEmptyMatch }, 995c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch std::string() }, 9965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "[\"a\",[\"http://a.com\"],[],[]," 9975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\"]," 9985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:verbatimrelevance\":9998," 9995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:suggestrelevance\":[9999]}]", 1000c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a.com", true }, { "a", true }, kEmptyMatch, kEmptyMatch }, 1001c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch ".com" }, 10025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "[\"a\",[\"http://a.com\"],[],[]," 10035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\"]," 10045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:verbatimrelevance\":0," 10055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:suggestrelevance\":[9999]}]", 1006c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a.com", true }, kEmptyMatch, kEmptyMatch, kEmptyMatch }, 1007c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch ".com" }, 10085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "[\"a\",[\"http://a.com\"],[],[]," 10095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\"]," 10105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:verbatimrelevance\":-1," 10115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:suggestrelevance\":[9999]}]", 1012c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a.com", true }, { "a", true }, kEmptyMatch, kEmptyMatch }, 1013c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch ".com" }, 10145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Ensure that both types of relevance scores reorder matches together. 10165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "[\"a\",[\"a1\", \"a2\"],[],[],{\"google:suggestrelevance\":[9999, 9997]," 10175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:verbatimrelevance\":9998}]", 1018c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a1", true }, { "a", true }, { "a2", true }, kEmptyMatch }, 1019c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "1" }, 10205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Ensure that only inlinable matches may be ranked as the highest result. 10225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Ignore all suggested relevance scores if this constraint is violated. 10235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "[\"a\",[\"b\"],[],[],{\"google:suggestrelevance\":[9999]}]", 1024c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a", true }, { "b", false }, kEmptyMatch, kEmptyMatch }, 1025c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch std::string() }, 10265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "[\"a\",[\"b\"],[],[],{\"google:suggestrelevance\":[9999]," 10275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:verbatimrelevance\":0}]", 1028c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a", true }, { "b", false }, kEmptyMatch, kEmptyMatch }, 1029c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch std::string() }, 10305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "[\"a\",[\"http://b.com\"],[],[]," 10315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\"]," 10325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:suggestrelevance\":[9999]}]", 1033c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a", true }, { "b.com", false }, kEmptyMatch, kEmptyMatch }, 1034c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch std::string() }, 10355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "[\"a\",[\"http://b.com\"],[],[]," 10365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\"]," 10375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:suggestrelevance\":[9999]," 10385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:verbatimrelevance\":0}]", 1039c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a", true }, { "b.com", false }, kEmptyMatch, kEmptyMatch }, 1040c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch std::string() }, 104158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) { "[\"a\",[\"https://a/\"],[],[]," 104258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\"]," 104358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "\"google:suggestrelevance\":[9999]}]", 104458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) { { "https://a", true }, { "a", true }, kEmptyMatch, kEmptyMatch }, 104558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) std::string() }, 10465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Ensure that the top result is ranked as highly as calculated verbatim. 10485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Ignore the suggested verbatim relevance if this constraint is violated. 10495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "[\"a\",[\"a1\"],[],[],{\"google:verbatimrelevance\":0}]", 1050c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a", true }, { "a1", true }, kEmptyMatch, kEmptyMatch }, 1051c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch std::string() }, 10525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "[\"a\",[\"a1\"],[],[],{\"google:verbatimrelevance\":1}]", 1053c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a", true }, { "a1", true }, kEmptyMatch, kEmptyMatch }, 1054c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch std::string() }, 10555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "[\"a\",[\"a1\"],[],[],{\"google:suggestrelevance\":[1]," 10565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:verbatimrelevance\":0}]", 1057c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a", true }, { "a1", true }, kEmptyMatch, kEmptyMatch }, 1058c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch std::string() }, 10595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "[\"a\",[\"a1\", \"a2\"],[],[],{\"google:suggestrelevance\":[1, 2]," 10605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:verbatimrelevance\":0}]", 1061c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a", true }, { "a2", true }, { "a1", true }, kEmptyMatch }, 1062c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch std::string() }, 10635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "[\"a\",[\"a1\", \"a2\"],[],[],{\"google:suggestrelevance\":[1, 3]," 10645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:verbatimrelevance\":2}]", 1065c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a", true }, { "a2", true }, { "a1", true }, kEmptyMatch }, 1066c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch std::string() }, 10675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "[\"a\",[\"http://a.com\"],[],[]," 10685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\"]," 10695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:suggestrelevance\":[1]," 10705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:verbatimrelevance\":0}]", 1071c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a", true }, { "a.com", true }, kEmptyMatch, kEmptyMatch }, 1072c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch std::string() }, 10735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "[\"a\",[\"http://a1.com\", \"http://a2.com\"],[],[]," 10745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\"]," 10755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:suggestrelevance\":[1, 2]," 10765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:verbatimrelevance\":0}]", 1077c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a", true }, { "a2.com", true }, { "a1.com", true }, kEmptyMatch }, 1078c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch std::string() }, 10795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Ensure that all suggestions are considered, regardless of order. 10815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "[\"a\",[\"b\", \"c\", \"d\", \"e\", \"f\", \"g\", \"h\"],[],[]," 10825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "{\"google:suggestrelevance\":[1, 2, 3, 4, 5, 6, 7]}]", 1083c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a", true }, { "h", false }, { "g", false }, { "f", false } }, 1084c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch std::string() }, 10855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "[\"a\",[\"http://b.com\", \"http://c.com\", \"http://d.com\"," 10865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"http://e.com\", \"http://f.com\", \"http://g.com\"," 10875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"http://h.com\"],[],[]," 10885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\"," 10895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"NAVIGATION\", \"NAVIGATION\"," 10905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"NAVIGATION\", \"NAVIGATION\"," 10915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"NAVIGATION\"]," 10925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:suggestrelevance\":[1, 2, 3, 4, 5, 6, 7]}]", 1093c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a", true }, { "h.com", false }, { "g.com", false }, 1094c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "f.com", false } }, 1095c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch std::string() }, 10965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Ensure that incorrectly sized suggestion relevance lists are ignored. 10985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "[\"a\",[\"a1\", \"a2\"],[],[],{\"google:suggestrelevance\":[1]}]", 1099c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a", true }, { "a1", true }, { "a2", true }, kEmptyMatch }, 1100c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch std::string() }, 11015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "[\"a\",[\"a1\"],[],[],{\"google:suggestrelevance\":[9999, 1]}]", 1102c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a", true }, { "a1", true }, kEmptyMatch, kEmptyMatch }, 1103c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch std::string() }, 11045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "[\"a\",[\"http://a1.com\", \"http://a2.com\"],[],[]," 11055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\"]," 11065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:suggestrelevance\":[1]}]", 1107c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a", true }, { "a1.com", true }, kEmptyMatch, kEmptyMatch }, 1108c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch std::string() }, 11095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "[\"a\",[\"http://a1.com\"],[],[]," 11105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\"]," 11115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:suggestrelevance\":[9999, 1]}]", 1112c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a", true }, { "a1.com", true }, kEmptyMatch, kEmptyMatch }, 1113c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch std::string() }, 11145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Ensure that all 'verbatim' results are merged with their maximum score. 11165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "[\"a\",[\"a\", \"a1\", \"a2\"],[],[]," 11175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "{\"google:suggestrelevance\":[9998, 9997, 9999]}]", 1118c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a2", true }, { "a", true }, { "a1", true }, kEmptyMatch }, 1119c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "2" }, 11205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "[\"a\",[\"a\", \"a1\", \"a2\"],[],[]," 11215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "{\"google:suggestrelevance\":[9998, 9997, 9999]," 11225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:verbatimrelevance\":0}]", 1123c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a2", true }, { "a", true }, { "a1", true }, kEmptyMatch }, 1124c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "2" }, 11255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Ensure that verbatim is always generated without other suggestions. 11275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(msw): Ensure verbatimrelevance is respected (except suppression). 11285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "[\"a\",[],[],[],{\"google:verbatimrelevance\":1}]", 1129c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a", true }, kEmptyMatch, kEmptyMatch, kEmptyMatch }, 1130c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch std::string() }, 11315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "[\"a\",[],[],[],{\"google:verbatimrelevance\":0}]", 1132c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a", true }, kEmptyMatch, kEmptyMatch, kEmptyMatch }, 1133c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch std::string() }, 11345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 11355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); i++) { 1137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) QueryForInput(ASCIIToUTF16("a"), false, false); 1138a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch net::TestURLFetcher* fetcher = 1139a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch test_factory_.GetFetcherByID( 1140a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch SearchProvider::kDefaultProviderURLFetcherID); 11412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(fetcher); 11425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fetcher->set_response_code(200); 11435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fetcher->SetResponseString(cases[i].json); 11445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fetcher->delegate()->OnURLFetchComplete(fetcher); 11455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunTillProviderDone(); 11465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1147eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const std::string description = "for input with json=" + cases[i].json; 11485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ACMatches& matches = provider_->matches(); 11495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The top match must inline and score as highly as calculated verbatim. 1150eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_FALSE(matches.empty()); 1151ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_EQ(ASCIIToUTF16(cases[i].inline_autocompletion), 1152ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch matches[0].inline_autocompletion) << description; 11532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_GE(matches[0].relevance, 1300) << description; 11545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t j = 0; 11565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Ensure that the returned matches equal the expectations. 1157c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch for (; j < matches.size(); ++j) { 1158c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_EQ(ASCIIToUTF16(cases[i].matches[j].contents), 11592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) matches[j].contents) << description; 1160c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_EQ(cases[i].matches[j].allowed_to_be_default_match, 1161c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch matches[j].allowed_to_be_default_match) << description; 1162c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch } 11635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Ensure that no expected matches are missing. 11645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (; j < ARRAYSIZE_UNSAFE(cases[i].matches); ++j) 1165c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_EQ(kNotApplicable, cases[i].matches[j].contents) << 1166c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "Case # " << i << " " << description; 1167c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch } 1168c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch} 1169c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch 1170c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch// This test is like DefaultFetcherSuggestRelevance above except it enables 1171c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch// the field trial that causes the omnibox to be willing to reorder matches 1172c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch// to guarantee the top result is a legal default match. This field trial 1173c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch// causes SearchProvider to allow some constraints to be violated that it 1174c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch// wouldn't normally because the omnibox will fix the problems later. 1175c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben MurdochTEST_F(SearchProviderTest, DefaultFetcherSuggestRelevanceWithReorder) { 1176c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch struct DefaultFetcherMatch { 1177c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch std::string contents; 1178c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch bool allowed_to_be_default_match; 1179c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch }; 1180c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch const DefaultFetcherMatch kEmptyMatch = { kNotApplicable, false }; 1181c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch struct { 1182c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch const std::string json; 1183c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch const DefaultFetcherMatch matches[4]; 1184c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch const std::string inline_autocompletion; 1185c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch } cases[] = { 1186c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch // Ensure that suggestrelevance scores reorder matches. 1187c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "[\"a\",[\"b\", \"c\"],[],[],{\"google:suggestrelevance\":[1, 2]}]", 1188c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a", true }, { "c", false }, { "b", false }, kEmptyMatch }, 1189c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch std::string() }, 1190c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "[\"a\",[\"http://b.com\", \"http://c.com\"],[],[]," 1191c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\"]," 1192c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "\"google:suggestrelevance\":[1, 2]}]", 1193c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a", true }, { "c.com", false }, { "b.com", false }, kEmptyMatch }, 1194c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch std::string() }, 1195c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch 1196c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch // Without suggested relevance scores, we should only allow one 1197c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch // navsuggest result to be be displayed. 1198c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "[\"a\",[\"http://b.com\", \"http://c.com\"],[],[]," 1199c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\"]}]", 1200c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a", true }, { "b.com", false }, kEmptyMatch, kEmptyMatch }, 1201c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch std::string() }, 1202c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch 1203c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch // Ensure that verbatimrelevance scores reorder or suppress verbatim. 1204c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch // Negative values will have no effect; the calculated value will be used. 1205c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "[\"a\",[\"a1\"],[],[],{\"google:verbatimrelevance\":9999," 1206c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "\"google:suggestrelevance\":[9998]}]", 1207c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a", true}, { "a1", true }, kEmptyMatch, kEmptyMatch }, 1208c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch std::string() }, 1209c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "[\"a\",[\"a1\"],[],[],{\"google:verbatimrelevance\":9998," 1210c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "\"google:suggestrelevance\":[9999]}]", 1211c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a1", true }, { "a", true }, kEmptyMatch, kEmptyMatch }, 1212c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "1" }, 1213c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "[\"a\",[\"a1\"],[],[],{\"google:verbatimrelevance\":0," 1214c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "\"google:suggestrelevance\":[9999]}]", 1215c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a1", true }, kEmptyMatch, kEmptyMatch, kEmptyMatch }, 1216c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "1" }, 1217c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "[\"a\",[\"a1\"],[],[],{\"google:verbatimrelevance\":-1," 1218c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "\"google:suggestrelevance\":[9999]}]", 1219c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a1", true }, { "a", true }, kEmptyMatch, kEmptyMatch }, 1220c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "1" }, 1221c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "[\"a\",[\"http://a.com\"],[],[]," 1222c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "{\"google:suggesttype\":[\"NAVIGATION\"]," 1223c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "\"google:verbatimrelevance\":9999," 1224c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "\"google:suggestrelevance\":[9998]}]", 1225c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a", true }, { "a.com", true }, kEmptyMatch, kEmptyMatch }, 1226c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch std::string() }, 1227c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "[\"a\",[\"http://a.com\"],[],[]," 1228c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "{\"google:suggesttype\":[\"NAVIGATION\"]," 1229c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "\"google:verbatimrelevance\":9998," 1230c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "\"google:suggestrelevance\":[9999]}]", 1231c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a.com", true }, { "a", true }, kEmptyMatch, kEmptyMatch }, 1232c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch ".com" }, 1233c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "[\"a\",[\"http://a.com\"],[],[]," 1234c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "{\"google:suggesttype\":[\"NAVIGATION\"]," 1235c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "\"google:verbatimrelevance\":0," 1236c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "\"google:suggestrelevance\":[9999]}]", 1237c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a.com", true }, kEmptyMatch, kEmptyMatch, kEmptyMatch }, 1238c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch ".com" }, 1239c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "[\"a\",[\"http://a.com\"],[],[]," 1240c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "{\"google:suggesttype\":[\"NAVIGATION\"]," 1241c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "\"google:verbatimrelevance\":-1," 1242c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "\"google:suggestrelevance\":[9999]}]", 1243c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a.com", true }, { "a", true }, kEmptyMatch, kEmptyMatch }, 1244c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch ".com" }, 1245c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch 1246c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch // Ensure that both types of relevance scores reorder matches together. 1247c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "[\"a\",[\"a1\", \"a2\"],[],[],{\"google:suggestrelevance\":[9999, 9997]," 1248c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "\"google:verbatimrelevance\":9998}]", 1249c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a1", true }, { "a", true }, { "a2", true }, kEmptyMatch }, 1250c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "1" }, 1251c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch 1252c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch // Allow non-inlineable matches to be the highest-scoring match but, 1253c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch // if the result set lacks a single inlineable result, abandon suggested 1254c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch // relevance scores entirely. 1255c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "[\"a\",[\"b\"],[],[],{\"google:suggestrelevance\":[9999]}]", 1256c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "b", false }, { "a", true }, kEmptyMatch, kEmptyMatch }, 1257c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch std::string() }, 1258c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "[\"a\",[\"b\"],[],[],{\"google:suggestrelevance\":[9999]," 1259c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "\"google:verbatimrelevance\":0}]", 1260c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a", true }, { "b", false }, kEmptyMatch, kEmptyMatch }, 1261c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch std::string() }, 1262c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "[\"a\",[\"http://b.com\"],[],[]," 1263c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "{\"google:suggesttype\":[\"NAVIGATION\"]," 1264c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "\"google:suggestrelevance\":[9999]}]", 1265c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "b.com", false }, { "a", true }, kEmptyMatch, kEmptyMatch }, 1266c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch std::string() }, 1267c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "[\"a\",[\"http://b.com\"],[],[]," 1268c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "{\"google:suggesttype\":[\"NAVIGATION\"]," 1269c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "\"google:suggestrelevance\":[9999]," 1270c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "\"google:verbatimrelevance\":0}]", 1271c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a", true }, { "b.com", false }, kEmptyMatch, kEmptyMatch }, 1272c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch std::string() }, 1273c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch 1274c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch // Allow low-scoring matches. 1275c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "[\"a\",[\"a1\"],[],[],{\"google:verbatimrelevance\":0}]", 1276c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a1", true }, kEmptyMatch, kEmptyMatch, kEmptyMatch }, 1277c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "1" }, 1278c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "[\"a\",[\"a1\"],[],[],{\"google:verbatimrelevance\":1}]", 1279c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a1", true }, { "a", true }, kEmptyMatch, kEmptyMatch }, 1280c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "1" }, 1281c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "[\"a\",[\"a1\"],[],[],{\"google:suggestrelevance\":[1]," 1282c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "\"google:verbatimrelevance\":0}]", 1283c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a1", true }, kEmptyMatch, kEmptyMatch, kEmptyMatch }, 1284c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "1" }, 1285c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "[\"a\",[\"a1\", \"a2\"],[],[],{\"google:suggestrelevance\":[1, 2]," 1286c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "\"google:verbatimrelevance\":0}]", 1287c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a2", true }, { "a1", true }, kEmptyMatch, kEmptyMatch }, 1288c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "2" }, 1289c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "[\"a\",[\"a1\", \"a2\"],[],[],{\"google:suggestrelevance\":[1, 3]," 1290c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "\"google:verbatimrelevance\":2}]", 1291c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a2", true }, { "a", true }, { "a1", true }, kEmptyMatch }, 1292c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "2" }, 1293c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "[\"a\",[\"http://a.com\"],[],[]," 1294c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "{\"google:suggesttype\":[\"NAVIGATION\"]," 1295c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "\"google:suggestrelevance\":[1]," 1296c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "\"google:verbatimrelevance\":0}]", 1297c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a.com", true }, kEmptyMatch, kEmptyMatch, kEmptyMatch }, 1298c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch ".com" }, 1299c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "[\"a\",[\"http://a1.com\", \"http://a2.com\"],[],[]," 1300c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\"]," 1301c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "\"google:suggestrelevance\":[1, 2]," 1302c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "\"google:verbatimrelevance\":0}]", 1303c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a2.com", true }, { "a1.com", true }, kEmptyMatch, kEmptyMatch }, 1304c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "2.com" }, 1305c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch 1306c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch // Ensure that all suggestions are considered, regardless of order. 1307c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "[\"a\",[\"b\", \"c\", \"d\", \"e\", \"f\", \"g\", \"h\"],[],[]," 1308c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "{\"google:suggestrelevance\":[1, 2, 3, 4, 5, 6, 7]}]", 1309c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a", true }, { "h", false }, { "g", false }, { "f", false } }, 1310c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch std::string() }, 1311c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "[\"a\",[\"http://b.com\", \"http://c.com\", \"http://d.com\"," 1312c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "\"http://e.com\", \"http://f.com\", \"http://g.com\"," 1313c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "\"http://h.com\"],[],[]," 1314c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\"," 1315c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "\"NAVIGATION\", \"NAVIGATION\"," 1316c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "\"NAVIGATION\", \"NAVIGATION\"," 1317c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "\"NAVIGATION\"]," 1318c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "\"google:suggestrelevance\":[1, 2, 3, 4, 5, 6, 7]}]", 1319c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a", true }, { "h.com", false }, { "g.com", false }, 1320c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "f.com", false } }, 1321c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch std::string() }, 1322c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch 1323c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch // Ensure that incorrectly sized suggestion relevance lists are ignored. 1324c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "[\"a\",[\"a1\", \"a2\"],[],[],{\"google:suggestrelevance\":[1]}]", 1325c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a", true }, { "a1", true }, { "a2", true }, kEmptyMatch }, 1326c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch std::string() }, 1327c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "[\"a\",[\"a1\"],[],[],{\"google:suggestrelevance\":[9999, 1]}]", 1328c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a", true }, { "a1", true }, kEmptyMatch, kEmptyMatch }, 1329c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch std::string() }, 1330c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "[\"a\",[\"http://a1.com\", \"http://a2.com\"],[],[]," 1331c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\"]," 1332c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "\"google:suggestrelevance\":[1]}]", 1333c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a", true }, { "a1.com", true }, kEmptyMatch, kEmptyMatch }, 1334c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch std::string() }, 1335c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "[\"a\",[\"http://a1.com\"],[],[]," 1336c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "{\"google:suggesttype\":[\"NAVIGATION\"]," 1337c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "\"google:suggestrelevance\":[9999, 1]}]", 1338c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a", true }, { "a1.com", true }, kEmptyMatch, kEmptyMatch }, 1339c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch std::string() }, 1340c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch 1341c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch // Ensure that all 'verbatim' results are merged with their maximum score. 1342c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "[\"a\",[\"a\", \"a1\", \"a2\"],[],[]," 1343c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "{\"google:suggestrelevance\":[9998, 9997, 9999]}]", 1344c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a2", true }, { "a", true }, { "a1", true }, kEmptyMatch }, 1345c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "2" }, 1346c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "[\"a\",[\"a\", \"a1\", \"a2\"],[],[]," 1347c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "{\"google:suggestrelevance\":[9998, 9997, 9999]," 1348c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "\"google:verbatimrelevance\":0}]", 1349c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a2", true }, { "a", true }, { "a1", true }, kEmptyMatch }, 1350c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "2" }, 1351c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch 1352c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch // Ensure that verbatim is always generated without other suggestions. 1353c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch // TODO(msw): Ensure verbatimrelevance is respected (except suppression). 1354c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "[\"a\",[],[],[],{\"google:verbatimrelevance\":1}]", 1355c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a", true }, kEmptyMatch, kEmptyMatch, kEmptyMatch }, 1356c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch std::string() }, 1357c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "[\"a\",[],[],[],{\"google:verbatimrelevance\":0}]", 1358c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a", true }, kEmptyMatch, kEmptyMatch, kEmptyMatch }, 1359c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch std::string() }, 1360c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch }; 1361c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch 1362c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch std::map<std::string, std::string> params; 1363c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch params[std::string(OmniboxFieldTrial::kReorderForLegalDefaultMatchRule) + 1364c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch ":*:*"] = OmniboxFieldTrial::kReorderForLegalDefaultMatchRuleEnabled; 1365c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch ASSERT_TRUE(chrome_variations::AssociateVariationParams( 1366c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch OmniboxFieldTrial::kBundledExperimentFieldTrialName, "A", params)); 1367c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch base::FieldTrialList::CreateFieldTrial( 1368c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch OmniboxFieldTrial::kBundledExperimentFieldTrialName, "A"); 1369c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch 1370c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); i++) { 1371c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch QueryForInput(ASCIIToUTF16("a"), false, false); 1372c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch net::TestURLFetcher* fetcher = 1373c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch test_factory_.GetFetcherByID( 1374c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch SearchProvider::kDefaultProviderURLFetcherID); 1375c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch ASSERT_TRUE(fetcher); 1376c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch fetcher->set_response_code(200); 1377c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch fetcher->SetResponseString(cases[i].json); 1378c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch fetcher->delegate()->OnURLFetchComplete(fetcher); 1379c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch RunTillProviderDone(); 1380c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch 1381c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch const std::string description = "for input with json=" + cases[i].json; 1382c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch const ACMatches& matches = provider_->matches(); 1383c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch // The top match must inline and score as highly as calculated verbatim. 1384c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch ASSERT_FALSE(matches.empty()); 1385c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_EQ(ASCIIToUTF16(cases[i].inline_autocompletion), 1386c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch matches[0].inline_autocompletion) << description; 1387c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch 1388c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch size_t j = 0; 1389c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch // Ensure that the returned matches equal the expectations. 1390c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch for (; j < matches.size(); ++j) { 1391c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_EQ(ASCIIToUTF16(cases[i].matches[j].contents), 1392c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch matches[j].contents) << description; 1393c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_EQ(cases[i].matches[j].allowed_to_be_default_match, 1394c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch matches[j].allowed_to_be_default_match) << description; 1395c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch } 1396c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch // Ensure that no expected matches are missing. 1397c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch for (; j < ARRAYSIZE_UNSAFE(cases[i].matches); ++j) 1398c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_EQ(kNotApplicable, cases[i].matches[j].contents) << 13992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "Case # " << i << " " << description; 14005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 14015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Verifies that suggest results with relevance scores are added 14042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// properly when using the keyword fetcher. This is similar to the 14052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// test DefaultFetcherSuggestRelevance above but this uses inputs that 14062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// trigger keyword suggestions (i.e., "k a" rather than "a") and has 14072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// different expectations (because now the results are a mix of 1408c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// keyword suggestions and default provider suggestions). When a new 14092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// test is added to this TEST_F, please consider if it would be 14102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// appropriate to add to DefaultFetcherSuggestRelevance as well. 14112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(SearchProviderTest, KeywordFetcherSuggestRelevance) { 1412c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch struct KeywordFetcherMatch { 1413c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch std::string contents; 1414c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch bool from_keyword; 1415c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch bool allowed_to_be_default_match; 1416c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch }; 1417c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch const KeywordFetcherMatch kEmptyMatch = { kNotApplicable, false, false }; 14182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) struct { 14192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string json; 1420c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch const KeywordFetcherMatch matches[5]; 1421ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const std::string inline_autocompletion; 14222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } cases[] = { 14232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Ensure that suggest relevance scores reorder matches and that 14242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // the keyword verbatim (lacking a suggested verbatim score) beats 14252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // the default provider verbatim. 14262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "[\"a\",[\"b\", \"c\"],[],[],{\"google:suggestrelevance\":[1, 2]}]", 1427c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a", true, true }, 1428c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "k a", false, true }, 1429c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "c", true, false }, 1430c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "b", true, false }, 1431c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch kEmptyMatch }, 1432ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::string() }, 14332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Again, check that relevance scores reorder matches, just this 14342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // time with navigation matches. This also checks that with 14352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // suggested relevance scores we allow multiple navsuggest results. 14362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // It's odd that navsuggest results that come from a keyword 14372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // provider are marked as not a keyword result. I think this 14382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // comes from them not going to a keyword search engine). 14392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // TODO(mpearson): Investigate the implications (if any) of 14402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // tagging these results appropriately. If so, do it because it 14412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // makes more sense. 1442c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "[\"a\",[\"http://b.com\", \"http://c.com\", \"d\"],[],[]," 1443c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\", \"QUERY\"]," 1444c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"google:suggestrelevance\":[1301, 1302, 1303]}]", 1445c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a", true, true }, 1446c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "d", true, false }, 1447c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "c.com", false, false }, 1448c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "b.com", false, false }, 1449c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "k a", false, true }, }, 1450ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::string() }, 14512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 14522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Without suggested relevance scores, we should only allow one 14532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // navsuggest result to be be displayed. 14542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "[\"a\",[\"http://b.com\", \"http://c.com\"],[],[]," 14552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\"]}]", 1456c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a", true, true }, 1457c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "b.com", false, false }, 1458c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "k a", false, true }, 1459c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch kEmptyMatch, kEmptyMatch }, 1460ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::string() }, 14612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 14622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Ensure that verbatimrelevance scores reorder or suppress verbatim. 14632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Negative values will have no effect; the calculated value will be used. 14642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "[\"a\",[\"a1\"],[],[],{\"google:verbatimrelevance\":9999," 14652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"google:suggestrelevance\":[9998]}]", 1466c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a", true, true }, 1467c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "a1", true, true }, 1468c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "k a", false, true }, 1469c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch kEmptyMatch, kEmptyMatch }, 1470ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::string() }, 14712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "[\"a\",[\"a1\"],[],[],{\"google:verbatimrelevance\":9998," 14722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"google:suggestrelevance\":[9999]}]", 1473c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a1", true, true }, 1474c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "a", true, true }, 1475c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "k a", false, true }, 1476c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch kEmptyMatch, kEmptyMatch }, 1477ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch "1" }, 14782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "[\"a\",[\"a1\"],[],[],{\"google:verbatimrelevance\":0," 14792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"google:suggestrelevance\":[9999]}]", 1480c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a1", true, true }, 1481c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "k a", false, true }, 1482c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch kEmptyMatch, kEmptyMatch, kEmptyMatch }, 1483ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch "1" }, 14842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "[\"a\",[\"a1\"],[],[],{\"google:verbatimrelevance\":-1," 14852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"google:suggestrelevance\":[9999]}]", 1486c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a1", true, true }, 1487c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "a", true, true }, 1488c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "k a", false, true }, 1489c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch kEmptyMatch, kEmptyMatch }, 1490ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch "1" }, 14912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "[\"a\",[\"http://a.com\"],[],[]," 14922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\"]," 14932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"google:verbatimrelevance\":9999," 14942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"google:suggestrelevance\":[9998]}]", 1495c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a", true, true }, 1496c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "a.com", false, true }, 1497c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "k a", false, true }, 1498c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch kEmptyMatch, kEmptyMatch }, 1499ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::string() }, 15002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 15012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Ensure that both types of relevance scores reorder matches together. 15022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "[\"a\",[\"a1\", \"a2\"],[],[],{\"google:suggestrelevance\":[9999, 9997]," 15032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"google:verbatimrelevance\":9998}]", 1504c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a1", true, true }, 1505c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "a", true, true }, 1506c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "a2", true, true }, 1507c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "k a", false, true }, 1508c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch kEmptyMatch }, 1509ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch "1" }, 15102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 15112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Ensure that only inlinable matches may be ranked as the highest result. 15122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Ignore all suggested relevance scores if this constraint is violated. 15132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "[\"a\",[\"b\"],[],[],{\"google:suggestrelevance\":[9999]}]", 1514c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a", true, true }, 1515c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "b", true, false }, 1516c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "k a", false, true }, 1517c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch kEmptyMatch, kEmptyMatch }, 1518ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::string() }, 15192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "[\"a\",[\"b\"],[],[],{\"google:suggestrelevance\":[9999]," 15202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"google:verbatimrelevance\":0}]", 1521c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a", true, true }, 1522c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "b", true, false }, 1523c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "k a", false, true }, 1524c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch kEmptyMatch, kEmptyMatch }, 1525ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::string() }, 15262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "[\"a\",[\"http://b.com\"],[],[]," 15272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\"]," 15282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"google:suggestrelevance\":[9999]}]", 1529c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a", true, true }, 1530c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "b.com", false, false }, 1531c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "k a", false, true }, 1532c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch kEmptyMatch, kEmptyMatch }, 1533ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::string() }, 15342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "[\"a\",[\"http://b.com\"],[],[]," 15352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\"]," 15362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"google:suggestrelevance\":[9999]," 15372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"google:verbatimrelevance\":0}]", 1538c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a", true, true }, 1539c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "b.com", false, false }, 1540c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "k a", false, true }, 1541c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch kEmptyMatch, kEmptyMatch }, 1542ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::string() }, 15432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 15442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Ensure that the top result is ranked as highly as calculated verbatim. 15452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Ignore the suggested verbatim relevance if this constraint is violated. 15462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Note that keyword suggestions by default (not in suggested relevance 15472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // mode) score more highly than the default verbatim. 15482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "[\"a\",[\"a1\"],[],[],{\"google:verbatimrelevance\":0}]", 1549c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a", true, true }, 1550c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "a1", true, true }, 1551c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "k a", false, true }, 1552c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch kEmptyMatch, kEmptyMatch }, 1553ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::string() }, 15542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "[\"a\",[\"a1\"],[],[],{\"google:verbatimrelevance\":1}]", 1555c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a", true, true }, 1556c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "a1", true, true }, 1557c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "k a", false, true }, 1558c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch kEmptyMatch, kEmptyMatch}, 1559ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::string() }, 15602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Continuing the same category of tests, but make sure we keep the 15612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // suggested relevance scores even as we discard the verbatim relevance 15622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // scores. 15632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "[\"a\",[\"a1\"],[],[],{\"google:suggestrelevance\":[1]," 15642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"google:verbatimrelevance\":0}]", 1565c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a", true, true }, 1566c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "k a", false, true }, 1567c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "a1", true, true }, 1568c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch kEmptyMatch, kEmptyMatch}, 1569ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::string() }, 15702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "[\"a\",[\"a1\", \"a2\"],[],[],{\"google:suggestrelevance\":[1, 2]," 15712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"google:verbatimrelevance\":0}]", 1572c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a", true, true }, 1573c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "k a", false, true }, 1574c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "a2", true, true }, 1575c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "a1", true, true }, 1576c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch kEmptyMatch }, 1577ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::string() }, 15782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "[\"a\",[\"a1\", \"a2\"],[],[],{\"google:suggestrelevance\":[1, 3]," 15792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"google:verbatimrelevance\":2}]", 1580c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a", true, true }, 1581c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "k a", false, true }, 1582c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "a2", true, true }, 1583c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "a1", true, true }, 1584c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch kEmptyMatch }, 1585ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::string() }, 15862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 15872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Ensure that all suggestions are considered, regardless of order. 15882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "[\"a\",[\"b\", \"c\", \"d\", \"e\", \"f\", \"g\", \"h\"],[],[]," 15892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{\"google:suggestrelevance\":[1, 2, 3, 4, 5, 6, 7]}]", 1590c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a", true, true }, 1591c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "k a", false, true }, 1592c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "h", true, false }, 1593c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "g", true, false }, 1594c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "f", true, false } }, 1595ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::string() }, 15962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "[\"a\",[\"http://b.com\", \"http://c.com\", \"http://d.com\"," 15972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"http://e.com\", \"http://f.com\", \"http://g.com\"," 15982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"http://h.com\"],[],[]," 15992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\"," 16002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"NAVIGATION\", \"NAVIGATION\"," 16012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"NAVIGATION\", \"NAVIGATION\"," 16022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"NAVIGATION\"]," 16032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"google:suggestrelevance\":[1, 2, 3, 4, 5, 6, 7]}]", 1604c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a", true, true }, 1605c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "k a", false, true }, 1606c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "h.com", false, false }, 1607c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "g.com", false, false }, 1608c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "f.com", false, false } }, 1609ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::string() }, 16102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 16112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Ensure that incorrectly sized suggestion relevance lists are ignored. 16122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Note that keyword suggestions by default (not in suggested relevance 16132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // mode) score more highly than the default verbatim. 16142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "[\"a\",[\"a1\", \"a2\"],[],[],{\"google:suggestrelevance\":[1]}]", 1615c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a", true, true }, 1616c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "a1", true, true }, 1617c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "a2", true, true }, 1618c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "k a", false, true }, 1619c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch kEmptyMatch }, 1620ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::string() }, 16212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "[\"a\",[\"a1\"],[],[],{\"google:suggestrelevance\":[9999, 1]}]", 1622c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a", true, true }, 1623c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "a1", true, true }, 1624c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "k a", false, true }, 1625c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch kEmptyMatch, kEmptyMatch}, 1626ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::string() }, 16272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // In this case, ignored the suggested relevance scores means we keep 16282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // only one navsuggest result. 16292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "[\"a\",[\"http://a1.com\", \"http://a2.com\"],[],[]," 16302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\"]," 16312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"google:suggestrelevance\":[1]}]", 1632c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a", true, true }, 1633c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "a1.com", false, true }, 1634c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "k a", false, true }, 1635c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch kEmptyMatch, kEmptyMatch}, 1636ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::string() }, 16372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "[\"a\",[\"http://a1.com\"],[],[]," 16382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\"]," 16392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"google:suggestrelevance\":[9999, 1]}]", 1640c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a", true, true }, 1641c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "a1.com", false, true }, 1642c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "k a", false, true }, 1643c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch kEmptyMatch, kEmptyMatch}, 1644ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::string() }, 16452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 16462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Ensure that all 'verbatim' results are merged with their maximum score. 16472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "[\"a\",[\"a\", \"a1\", \"a2\"],[],[]," 16482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{\"google:suggestrelevance\":[9998, 9997, 9999]}]", 1649c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a2", true, true }, 1650c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "a", true, true }, 1651c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "a1", true, true }, 1652c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "k a", false, true }, 1653c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch kEmptyMatch }, 1654ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch "2" }, 16552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "[\"a\",[\"a\", \"a1\", \"a2\"],[],[]," 16562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{\"google:suggestrelevance\":[9998, 9997, 9999]," 16572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"google:verbatimrelevance\":0}]", 1658c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a2", true, true }, 1659c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "a", true, true }, 1660c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "a1", true, true }, 1661c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "k a", false, true }, 1662c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch kEmptyMatch }, 1663ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch "2" }, 16642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 16652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Ensure that verbatim is always generated without other suggestions. 16662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // TODO(mpearson): Ensure the value of verbatimrelevance is respected 16672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // (except when suggested relevances are ignored). 16682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "[\"a\",[],[],[],{\"google:verbatimrelevance\":1}]", 1669c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a", true, true }, 1670c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "k a", false, true }, 1671c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch kEmptyMatch, kEmptyMatch, kEmptyMatch}, 1672ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::string() }, 16732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { "[\"a\",[],[],[],{\"google:verbatimrelevance\":0}]", 1674c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a", true, true }, 1675c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "k a", false, true }, 1676c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch kEmptyMatch, kEmptyMatch, kEmptyMatch}, 1677ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::string() }, 1678c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1679c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Check that navsuggestions will be demoted below queries. 1680c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // (Navsuggestions are not allowed to appear first.) In the process, 1681c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // make sure the navsuggestions still remain in the same order. 1682c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // First, check the situation where navsuggest scores more than verbatim 1683c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // and there are no query suggestions. 1684c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "[\"a\",[\"http://a1.com\", \"http://a2.com\"],[],[]," 1685c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\"]," 1686c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"google:verbatimrelevance\":9990," 1687c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"google:suggestrelevance\":[9998, 9999]}]", 1688c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a", true, true }, 1689c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "a2.com", false, true }, 1690c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "a1.com", false, true }, 1691c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "k a", false, true }, 1692c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch kEmptyMatch }, 1693ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::string() }, 1694c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "[\"a\",[\"http://a1.com\", \"http://a2.com\"],[],[]," 1695c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\"]," 1696c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"google:verbatimrelevance\":9990," 1697c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"google:suggestrelevance\":[9999, 9998]}]", 1698c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a", true, true }, 1699c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "a1.com", false, true }, 1700c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "a2.com", false, true }, 1701c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "k a", false, true }, 1702c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch kEmptyMatch }, 1703ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::string() }, 170458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) { "[\"a\",[\"https://a/\"],[],[]," 170558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\"]," 170658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "\"google:suggestrelevance\":[9999]}]", 170758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) { { "a", true, true }, 170858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) { "https://a", false, true }, 170958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) { "k a", false, true }, 171058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) kEmptyMatch, 171158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) kEmptyMatch }, 171258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) std::string() }, 1713c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Check when navsuggest scores more than verbatim and there is query 1714c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // suggestion but it scores lower. 1715c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "[\"a\",[\"http://a1.com\", \"http://a2.com\", \"a3\"],[],[]," 1716c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\", \"QUERY\"]," 1717c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"google:verbatimrelevance\":9990," 1718c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"google:suggestrelevance\":[9998, 9999, 1300]}]", 1719c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a", true, true }, 1720c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "a2.com", false, true }, 1721c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "a1.com", false, true }, 1722c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "a3", true, true }, 1723c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "k a", false, true } }, 1724ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::string() }, 1725c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "[\"a\",[\"http://a1.com\", \"http://a2.com\", \"a3\"],[],[]," 1726c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\", \"QUERY\"]," 1727c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"google:verbatimrelevance\":9990," 1728c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"google:suggestrelevance\":[9999, 9998, 1300]}]", 1729c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a", true, true }, 1730c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "a1.com", false, true }, 1731c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "a2.com", false, true }, 1732c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "a3", true, true }, 1733c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "k a", false, true } }, 1734ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::string() }, 1735c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Check when navsuggest scores more than a query suggestion. There is 1736c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // a verbatim but it scores lower. 1737c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "[\"a\",[\"http://a1.com\", \"http://a2.com\", \"a3\"],[],[]," 1738c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\", \"QUERY\"]," 1739c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"google:verbatimrelevance\":9990," 1740c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"google:suggestrelevance\":[9998, 9999, 9997]}]", 1741c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a3", true, true }, 1742c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "a2.com", false, true }, 1743c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "a1.com", false, true }, 1744c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "a", true, true }, 1745c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "k a", false, true } }, 1746ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch "3" }, 1747c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "[\"a\",[\"http://a1.com\", \"http://a2.com\", \"a3\"],[],[]," 1748c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\", \"QUERY\"]," 1749c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"google:verbatimrelevance\":9990," 1750c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"google:suggestrelevance\":[9999, 9998, 9997]}]", 1751c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a3", true, true }, 1752c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "a1.com", false, true }, 1753c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "a2.com", false, true }, 1754c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "a", true, true }, 1755c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "k a", false, true } }, 1756ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch "3" }, 1757c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "[\"a\",[\"http://a1.com\", \"http://a2.com\", \"a3\"],[],[]," 1758c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\", \"QUERY\"]," 1759c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"google:verbatimrelevance\":0," 1760c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"google:suggestrelevance\":[9998, 9999, 9997]}]", 1761c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a3", true, true }, 1762c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "a2.com", false, true }, 1763c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "a1.com", false, true }, 1764c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "k a", false, true }, 1765c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch kEmptyMatch }, 1766ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch "3" }, 1767c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "[\"a\",[\"http://a1.com\", \"http://a2.com\", \"a3\"],[],[]," 1768c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\", \"QUERY\"]," 1769c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"google:verbatimrelevance\":0," 1770c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"google:suggestrelevance\":[9999, 9998, 9997]}]", 1771c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a3", true, true }, 1772c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "a1.com", false, true }, 1773c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "a2.com", false, true }, 1774c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "k a", false, true }, 1775c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch kEmptyMatch }, 1776ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch "3" }, 1777c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Check when there is neither verbatim nor a query suggestion that, 1778eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // because we can't demote navsuggestions below a query suggestion, 1779c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // we abandon suggested relevance scores entirely. One consequence is 1780c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // that this means we restore the keyword verbatim match. Note 1781c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // that in this case of abandoning suggested relevance scores, we still 1782eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // keep the navsuggestions in the same order, but we revert to only allowing 1783eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // one navigation to appear because the scores are completely local. 1784c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "[\"a\",[\"http://a1.com\", \"http://a2.com\"],[],[]," 1785c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\"]," 1786c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"google:verbatimrelevance\":0," 1787c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"google:suggestrelevance\":[9998, 9999]}]", 1788c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a", true, true }, 1789c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "a2.com", false, true }, 1790c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "k a", false, true }, 1791c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch kEmptyMatch, kEmptyMatch}, 1792ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::string() }, 1793c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "[\"a\",[\"http://a1.com\", \"http://a2.com\"],[],[]," 1794c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\"]," 1795c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"google:verbatimrelevance\":0," 1796c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"google:suggestrelevance\":[9999, 9998]}]", 1797c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a", true, true }, 1798c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "a1.com", false, true }, 1799c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "k a", false, true }, 1800c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch kEmptyMatch, kEmptyMatch}, 1801ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::string() }, 1802c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // More checks that everything works when it's not necessary to demote. 1803c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "[\"a\",[\"http://a1.com\", \"http://a2.com\", \"a3\"],[],[]," 1804c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\", \"QUERY\"]," 1805c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"google:verbatimrelevance\":9990," 1806c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"google:suggestrelevance\":[9997, 9998, 9999]}]", 1807c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a3", true, true }, 1808c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "a2.com", false, true }, 1809c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "a1.com", false, true }, 1810c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "a", true, true }, 1811c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "k a", false, true } }, 1812ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch "3" }, 1813c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "[\"a\",[\"http://a1.com\", \"http://a2.com\", \"a3\"],[],[]," 1814c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\", \"QUERY\"]," 1815c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"google:verbatimrelevance\":9990," 1816c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "\"google:suggestrelevance\":[9998, 9997, 9999]}]", 1817c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a3", true, true }, 1818c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "a1.com", false, true }, 1819c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "a2.com", false, true }, 1820c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "a", true, true }, 1821c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "k a", false, true } }, 1822ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch "3" }, 18232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 18242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 18252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); i++) { 1826c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) QueryForInput(ASCIIToUTF16("k a"), false, true); 18272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 18282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Set up a default fetcher with no results. 1829a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch net::TestURLFetcher* default_fetcher = 1830a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch test_factory_.GetFetcherByID( 1831a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch SearchProvider::kDefaultProviderURLFetcherID); 18322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(default_fetcher); 18332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) default_fetcher->set_response_code(200); 18342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) default_fetcher->delegate()->OnURLFetchComplete(default_fetcher); 18352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) default_fetcher = NULL; 18362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 18372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Set up a keyword fetcher with provided results. 1838a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch net::TestURLFetcher* keyword_fetcher = 1839a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch test_factory_.GetFetcherByID( 1840a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch SearchProvider::kKeywordProviderURLFetcherID); 18412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(keyword_fetcher); 18422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) keyword_fetcher->set_response_code(200); 18432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) keyword_fetcher->SetResponseString(cases[i].json); 18442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) keyword_fetcher->delegate()->OnURLFetchComplete(keyword_fetcher); 18452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) keyword_fetcher = NULL; 18462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RunTillProviderDone(); 18472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 18482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string description = "for input with json=" + cases[i].json; 18492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const ACMatches& matches = provider_->matches(); 18502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The top match must inline and score as highly as calculated verbatim. 1851eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_FALSE(matches.empty()); 1852ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_EQ(ASCIIToUTF16(cases[i].inline_autocompletion), 1853ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch matches[0].inline_autocompletion) << description; 18542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_GE(matches[0].relevance, 1300) << description; 18552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 18562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) size_t j = 0; 18572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Ensure that the returned matches equal the expectations. 18582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (; j < matches.size(); ++j) { 18592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(ASCIIToUTF16(cases[i].matches[j].contents), 18602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) matches[j].contents) << description; 18612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(cases[i].matches[j].from_keyword, 18622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) matches[j].keyword == ASCIIToUTF16("k")) << description; 1863c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_EQ(cases[i].matches[j].allowed_to_be_default_match, 1864c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch matches[j].allowed_to_be_default_match) << description; 18652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 18662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Ensure that no expected matches are missing. 18672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (; j < ARRAYSIZE_UNSAFE(cases[i].matches); ++j) 18682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(kNotApplicable, cases[i].matches[j].contents) << 18692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "Case # " << i << " " << description; 18702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 18712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 18722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1873eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTEST_F(SearchProviderTest, LocalAndRemoteRelevances) { 1874eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Enable Instant Extended in order to allow an increased number of 1875eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // suggestions. 1876eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch chrome::EnableInstantExtendedAPIForTesting(); 1877eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 1878eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // We hardcode the string "term1" below, so ensure that the search term that 1879eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // got added to history already is that string. 1880eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_EQ(ASCIIToUTF16("term1"), term1_); 1881eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch string16 term = term1_.substr(0, term1_.length() - 1); 1882eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 1883eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch AddSearchToHistory(default_t_url_, term + ASCIIToUTF16("2"), 2); 1884eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch profile_.BlockUntilHistoryProcessesPendingRequests(); 1885eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 1886eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch struct { 1887eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const string16 input; 1888eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const std::string json; 1889eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const std::string matches[6]; 1890eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } cases[] = { 1891eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // The history results outscore the default verbatim score. term2 has more 1892eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // visits so it outscores term1. The suggestions are still returned since 1893eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // they're server-scored. 1894eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { term, 1895eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "[\"term\",[\"a1\", \"a2\", \"a3\"],[],[]," 1896eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "{\"google:suggesttype\":[\"QUERY\", \"QUERY\", \"QUERY\"]," 1897eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "\"google:suggestrelevance\":[1, 2, 3]}]", 1898eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "term2", "term1", "term", "a3", "a2", "a1" } }, 1899eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Because we already have three suggestions by the time we see the history 1900eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // results, they don't get returned. 1901eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { term, 1902eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "[\"term\",[\"a1\", \"a2\", \"a3\"],[],[]," 1903eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "{\"google:suggesttype\":[\"QUERY\", \"QUERY\", \"QUERY\"]," 1904eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "\"google:verbatimrelevance\":1450," 1905eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "\"google:suggestrelevance\":[1440, 1430, 1420]}]", 1906eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "term", "a1", "a2", "a3", kNotApplicable, kNotApplicable } }, 1907eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // If we only have two suggestions, we have room for a history result. 1908eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { term, 1909eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "[\"term\",[\"a1\", \"a2\"],[],[]," 1910eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "{\"google:suggesttype\":[\"QUERY\", \"QUERY\"]," 1911eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "\"google:verbatimrelevance\":1450," 1912eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "\"google:suggestrelevance\":[1430, 1410]}]", 1913eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "term", "a1", "a2", "term2", kNotApplicable, kNotApplicable } }, 1914eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // If we have more than three suggestions, they should all be returned as 1915eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // long as we have enough total space for them. 1916eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { term, 1917eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "[\"term\",[\"a1\", \"a2\", \"a3\", \"a4\"],[],[]," 1918eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "{\"google:suggesttype\":[\"QUERY\", \"QUERY\", \"QUERY\", \"QUERY\"]," 1919eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "\"google:verbatimrelevance\":1450," 1920eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "\"google:suggestrelevance\":[1440, 1430, 1420, 1410]}]", 1921eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "term", "a1", "a2", "a3", "a4", kNotApplicable } }, 1922eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { term, 1923eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "[\"term\",[\"a1\", \"a2\", \"a3\", \"a4\", \"a5\", \"a6\"],[],[]," 1924eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "{\"google:suggesttype\":[\"QUERY\", \"QUERY\", \"QUERY\", \"QUERY\"," 1925eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "\"QUERY\", \"QUERY\"]," 1926eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "\"google:verbatimrelevance\":1450," 1927eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "\"google:suggestrelevance\":[1440, 1430, 1420, 1410, 1400, 1390]}]", 1928eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "term", "a1", "a2", "a3", "a4", "a5" } }, 1929eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { term, 1930eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "[\"term\",[\"a1\", \"a2\", \"a3\", \"a4\"],[],[]," 1931eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "{\"google:suggesttype\":[\"QUERY\", \"QUERY\", \"QUERY\", \"QUERY\"]," 1932eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "\"google:verbatimrelevance\":1450," 1933eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "\"google:suggestrelevance\":[1430, 1410, 1390, 1370]}]", 1934eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "term", "a1", "a2", "term2", "a3", "a4" } }, 1935eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // When the input looks like a URL, we disallow having a query as the 1936eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // highest-ranking result. If the query was provided by a suggestion, we 1937eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // reset the suggest scores to enforce this (see 1938eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // SearchProvider::UpdateMatches()). Even if we reset the suggest scores, 1939eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // however, we should still allow navsuggestions to be treated as 1940eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // server-provided. 1941eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { ASCIIToUTF16("a.com"), 1942eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "[\"a.com\",[\"a1\", \"a2\", \"a.com/1\", \"a.com/2\"],[],[]," 1943eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "{\"google:suggesttype\":[\"QUERY\", \"QUERY\", \"NAVIGATION\"," 1944eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "\"NAVIGATION\"]," 1945eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // A verbatim query for URL-like input scores 850, so the navigation 1946eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // scores here should bracket it. 1947eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "\"google:suggestrelevance\":[9999, 9998, 900, 800]}]", 1948eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { "a.com/1", "a.com", "a.com/2", "a1", kNotApplicable, kNotApplicable } }, 1949eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch }; 1950eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 1951eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); i++) { 1952eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch QueryForInput(cases[i].input, false, false); 1953a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch net::TestURLFetcher* fetcher = 1954a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch test_factory_.GetFetcherByID( 1955a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch SearchProvider::kDefaultProviderURLFetcherID); 1956eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(fetcher); 1957eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch fetcher->set_response_code(200); 1958eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch fetcher->SetResponseString(cases[i].json); 1959eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch fetcher->delegate()->OnURLFetchComplete(fetcher); 1960eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch RunTillProviderDone(); 1961eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 1962eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const std::string description = "for input with json=" + cases[i].json; 1963eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const ACMatches& matches = provider_->matches(); 1964eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 1965eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Ensure no extra matches are present. 1966eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_LE(matches.size(), 6U); 1967eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 1968eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch size_t j = 0; 1969eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Ensure that the returned matches equal the expectations. 1970eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch for (; j < matches.size(); ++j) 1971eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(ASCIIToUTF16(cases[i].matches[j]), 1972eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch matches[j].contents) << description; 1973eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Ensure that no expected matches are missing. 1974eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch for (; j < ARRAYSIZE_UNSAFE(cases[i].matches); ++j) 1975eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(kNotApplicable, cases[i].matches[j]) << 1976eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "Case # " << i << " " << description; 1977eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 1978eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 1979eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 19802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Verifies suggest relevance behavior for URL input. 19812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(SearchProviderTest, DefaultProviderSuggestRelevanceScoringUrlInput) { 1982c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch struct DefaultFetcherUrlInputMatch { 1983c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch const std::string match_contents; 1984c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch AutocompleteMatch::Type match_type; 1985c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch bool allowed_to_be_default_match; 1986c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch }; 1987c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch const DefaultFetcherUrlInputMatch kEmptyMatch = 1988c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { kNotApplicable, AutocompleteMatchType::NUM_TYPES, false }; 19895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct { 19905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string input; 19915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string json; 1992c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch const DefaultFetcherUrlInputMatch output[4]; 19935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } cases[] = { 19945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Ensure topmost NAVIGATION matches are allowed for URL input. 19955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "a.com", "[\"a.com\",[\"http://a.com/a\"],[],[]," 19965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\"]," 19975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:suggestrelevance\":[9999]}]", 1998c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a.com/a", AutocompleteMatchType::NAVSUGGEST, true }, 1999c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "a.com", AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, true }, 2000c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch kEmptyMatch, kEmptyMatch } }, 200158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) { "a.com", "[\"a.com\",[\"https://a.com\"],[],[]," 200258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\"]," 200358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "\"google:suggestrelevance\":[9999]}]", 200458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) { { "https://a.com", AutocompleteMatchType::NAVSUGGEST, true }, 200558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) { "a.com", AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, true }, 200658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) kEmptyMatch, kEmptyMatch } }, 20075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Ensure topmost SUGGEST matches are not allowed for URL input. 20095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // SearchProvider disregards search and verbatim suggested relevances. 20105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "a.com", "[\"a.com\",[\"a.com info\"],[],[]," 20115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "{\"google:suggestrelevance\":[9999]}]", 2012c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a.com", AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, true }, 2013c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "a.com info", AutocompleteMatchType::SEARCH_SUGGEST, true }, 2014c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch kEmptyMatch, kEmptyMatch } }, 20155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "a.com", "[\"a.com\",[\"a.com/a\"],[],[]," 20165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "{\"google:suggestrelevance\":[9999]}]", 2017c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a.com", AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, true }, 2018c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "a.com/a", AutocompleteMatchType::SEARCH_SUGGEST, true }, 2019c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch kEmptyMatch, kEmptyMatch } }, 20205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Ensure the fallback mechanism allows inlinable NAVIGATION matches. 20225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "a.com", "[\"a.com\",[\"a.com/a\", \"http://a.com/b\"],[],[]," 20235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "{\"google:suggesttype\":[\"QUERY\", \"NAVIGATION\"]," 20245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:suggestrelevance\":[9999, 9998]}]", 2025c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a.com/b", AutocompleteMatchType::NAVSUGGEST, true }, 2026c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "a.com", AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, true }, 2027c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "a.com/a", AutocompleteMatchType::SEARCH_SUGGEST, true }, 2028c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch kEmptyMatch } }, 20295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "a.com", "[\"a.com\",[\"a.com/a\", \"http://a.com/b\"],[],[]," 20305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "{\"google:suggesttype\":[\"QUERY\", \"NAVIGATION\"]," 20315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:suggestrelevance\":[9998, 9997]," 20325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:verbatimrelevance\":9999}]", 2033c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a.com/b", AutocompleteMatchType::NAVSUGGEST, true }, 2034c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "a.com", AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, true }, 2035c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "a.com/a", AutocompleteMatchType::SEARCH_SUGGEST, true }, 2036c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch kEmptyMatch } }, 20375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Ensure the fallback mechanism disallows non-inlinable NAVIGATION matches. 20395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "a.com", "[\"a.com\",[\"a.com/a\", \"http://abc.com\"],[],[]," 20405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "{\"google:suggesttype\":[\"QUERY\", \"NAVIGATION\"]," 20415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:suggestrelevance\":[9999, 9998]}]", 2042c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a.com", AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, true }, 2043c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "abc.com", AutocompleteMatchType::NAVSUGGEST, false }, 2044c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "a.com/a", AutocompleteMatchType::SEARCH_SUGGEST, true }, 2045c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch kEmptyMatch } }, 20465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "a.com", "[\"a.com\",[\"a.com/a\", \"http://abc.com\"],[],[]," 20475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "{\"google:suggesttype\":[\"QUERY\", \"NAVIGATION\"]," 20485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:suggestrelevance\":[9998, 9997]," 20495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\"google:verbatimrelevance\":9999}]", 2050c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a.com", AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, true }, 2051c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "abc.com", AutocompleteMatchType::NAVSUGGEST, false }, 2052c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "a.com/a", AutocompleteMatchType::SEARCH_SUGGEST, true }, 2053c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch kEmptyMatch } }, 20542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 20555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); i++) { 2057c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) QueryForInput(ASCIIToUTF16(cases[i].input), false, false); 2058a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch net::TestURLFetcher* fetcher = 2059a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch test_factory_.GetFetcherByID( 2060a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch SearchProvider::kDefaultProviderURLFetcherID); 20612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(fetcher); 20625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fetcher->set_response_code(200); 20635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fetcher->SetResponseString(cases[i].json); 20645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fetcher->delegate()->OnURLFetchComplete(fetcher); 20655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunTillProviderDone(); 20665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t j = 0; 20685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ACMatches& matches = provider_->matches(); 20695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Ensure that the returned matches equal the expectations. 20705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (; j < matches.size(); ++j) { 2071c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_EQ(ASCIIToUTF16(cases[i].output[j].match_contents), 2072c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch matches[j].contents); 2073c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_EQ(cases[i].output[j].match_type, matches[j].type); 2074c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_EQ(cases[i].output[j].allowed_to_be_default_match, 2075c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch matches[j].allowed_to_be_default_match); 20765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 20775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Ensure that no expected matches are missing. 2078c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch for (; j < ARRAYSIZE_UNSAFE(cases[i].output); ++j) { 2079c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_EQ(kNotApplicable, cases[i].output[j].match_contents); 2080c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_EQ(AutocompleteMatchType::NUM_TYPES, 2081c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch cases[i].output[j].match_type); 2082c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_FALSE(cases[i].output[j].allowed_to_be_default_match); 20835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 20845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 20855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 20865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// A basic test that verifies the field trial triggered parsing logic. 20882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(SearchProviderTest, FieldTrialTriggeredParsing) { 2089c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) QueryForInput(ASCIIToUTF16("foo"), false, false); 20905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Make sure the default providers suggest service was queried. 20922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) net::TestURLFetcher* fetcher = test_factory_.GetFetcherByID( 20932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SearchProvider::kDefaultProviderURLFetcherID); 20942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(fetcher); 20955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Tell the SearchProvider the suggest query is done. 20972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) fetcher->set_response_code(200); 20982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) fetcher->SetResponseString( 20992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "[\"foo\",[\"foo bar\"],[\"\"],[]," 21002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{\"google:suggesttype\":[\"QUERY\"]," 21012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\"google:fieldtrialtriggered\":true}]"); 21022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) fetcher->delegate()->OnURLFetchComplete(fetcher); 21032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) fetcher = NULL; 21045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Run till the history results complete. 21062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RunTillProviderDone(); 21075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { 21092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Check for the match and field trial triggered bits. 21102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AutocompleteMatch match; 21112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(FindMatchWithContents(ASCIIToUTF16("foo bar"), &match)); 21122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ProvidersInfo providers_info; 21132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) provider_->AddProviderInfo(&providers_info); 21142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(1U, providers_info.size()); 21152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, providers_info[0].field_trial_triggered_size()); 21162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, providers_info[0].field_trial_triggered_in_session_size()); 21172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 21182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { 21192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Reset the session and check that bits are reset. 21202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) provider_->ResetSession(); 21212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ProvidersInfo providers_info; 21222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) provider_->AddProviderInfo(&providers_info); 21232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(1U, providers_info.size()); 21242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, providers_info[0].field_trial_triggered_size()); 21252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(0, providers_info[0].field_trial_triggered_in_session_size()); 21265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 21275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 21285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Verifies inline autocompletion of navigational results. 21305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SearchProviderTest, NavigationInline) { 21315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct { 21325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string input; 21335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string url; 21345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test the expected fill_into_edit, which may drop "http://". 21355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Some cases do not trim "http://" to match from the start of the scheme. 21365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string fill_into_edit; 2137ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const std::string inline_autocompletion; 2138c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch const bool allowed_to_be_default_match; 21395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } cases[] = { 21405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Do not inline matches that do not contain the input; trim http as needed. 21415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "x", "http://www.abc.com", 2142c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "www.abc.com", std::string(), false }, 21435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "https:", "http://www.abc.com", 2144c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "www.abc.com", std::string(), false }, 21455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "abc.com/", "http://www.abc.com", 2146c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "www.abc.com", std::string(), false }, 21475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://www.abc.com/a", "http://www.abc.com", 2148c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "http://www.abc.com", std::string(), false }, 21495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://www.abc.com", "https://www.abc.com", 2150c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "https://www.abc.com", std::string(), false }, 21515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://abc.com", "ftp://abc.com", 2152c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "ftp://abc.com", std::string(), false }, 21535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "https://www.abc.com", "http://www.abc.com", 2154c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "www.abc.com", std::string(), false }, 21555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "ftp://abc.com", "http://abc.com", 2156c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "abc.com", std::string(), false }, 21575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Do not inline matches with invalid input prefixes; trim http as needed. 21595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "ttp", "http://www.abc.com", 2160c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "www.abc.com", std::string(), false }, 21615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "://w", "http://www.abc.com", 2162c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "www.abc.com", std::string(), false }, 21635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "ww.", "http://www.abc.com", 2164c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "www.abc.com", std::string(), false }, 21655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ".ab", "http://www.abc.com", 2166c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "www.abc.com", std::string(), false }, 21675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "bc", "http://www.abc.com", 2168c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "www.abc.com", std::string(), false }, 21695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { ".com", "http://www.abc.com", 2170c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "www.abc.com", std::string(), false }, 21715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Do not inline matches that omit input domain labels; trim http as needed. 21735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "www.a", "http://a.com", 2174c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "a.com", std::string(), false }, 21755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://www.a", "http://a.com", 2176c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "http://a.com", std::string(), false }, 21775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "www.a", "ftp://a.com", 2178c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "ftp://a.com", std::string(), false }, 21795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "ftp://www.a", "ftp://a.com", 2180c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "ftp://a.com", std::string(), false }, 21815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 218258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Input matching but with nothing to inline will not yield an offset, but 218358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // will be allowed to be default. 21845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "abc.com", "http://www.abc.com", 218558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "www.abc.com", std::string(), true }, 21865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://www.abc.com", "http://www.abc.com", 218758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "http://www.abc.com", std::string(), true }, 21885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Inline matches when the input is a leading substring of the scheme. 21905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "h", "http://www.abc.com", 2191c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "http://www.abc.com", "ttp://www.abc.com", true }, 21925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http", "http://www.abc.com", 2193c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "http://www.abc.com", "://www.abc.com", true }, 21945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Inline matches when the input is a leading substring of the full URL. 21965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http:", "http://www.abc.com", 2197c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "http://www.abc.com", "//www.abc.com", true }, 21985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://w", "http://www.abc.com", 2199c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "http://www.abc.com", "ww.abc.com", true }, 22005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://www.", "http://www.abc.com", 2201c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "http://www.abc.com", "abc.com", true }, 22025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://www.ab", "http://www.abc.com", 2203c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "http://www.abc.com", "c.com", true }, 22045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://www.abc.com/p", "http://www.abc.com/path/file.htm?q=x#foo", 2205ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch "http://www.abc.com/path/file.htm?q=x#foo", 2206c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "ath/file.htm?q=x#foo", 2207c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch true }, 22085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://abc.com/p", "http://abc.com/path/file.htm?q=x#foo", 2209ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch "http://abc.com/path/file.htm?q=x#foo", 2210c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "ath/file.htm?q=x#foo", true}, 22115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Inline matches with valid URLPrefixes; only trim "http://". 2213c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "w", "http://www.abc.com", 2214c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "www.abc.com", "ww.abc.com", true }, 2215c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "www.a", "http://www.abc.com", 2216c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "www.abc.com", "bc.com", true }, 2217c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "abc", "http://www.abc.com", 2218c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "www.abc.com", ".com", true }, 2219c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "abc.c", "http://www.abc.com", 2220c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "www.abc.com", "om", true }, 2221c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "abc.com/p", "http://www.abc.com/path/file.htm?q=x#foo", 2222c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "www.abc.com/path/file.htm?q=x#foo", 2223c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "ath/file.htm?q=x#foo", true }, 2224c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "abc.com/p", "http://abc.com/path/file.htm?q=x#foo", 2225c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "abc.com/path/file.htm?q=x#foo", 2226c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "ath/file.htm?q=x#foo", true }, 22275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Inline matches using the maximal URLPrefix components. 2229c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "h", "http://help.com", 2230c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "help.com", "elp.com", true }, 2231c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "http", "http://http.com", 2232c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "http.com", ".com", true }, 2233c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "h", "http://www.help.com", 2234c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "www.help.com", "elp.com", true }, 2235c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "http", "http://www.http.com", 2236c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "www.http.com", ".com", true }, 2237c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "w", "http://www.www.com", 2238c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "www.www.com", "ww.com", true }, 22395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test similar behavior for the ftp and https schemes. 2241c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "ftp://www.ab", "ftp://www.abc.com/path/file.htm?q=x#foo", 2242c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "ftp://www.abc.com/path/file.htm?q=x#foo", 2243c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "c.com/path/file.htm?q=x#foo", true }, 2244c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "www.ab", "ftp://www.abc.com/path/file.htm?q=x#foo", 2245c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "ftp://www.abc.com/path/file.htm?q=x#foo", 2246c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "c.com/path/file.htm?q=x#foo", true }, 2247c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "ab", "ftp://www.abc.com/path/file.htm?q=x#foo", 2248c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "ftp://www.abc.com/path/file.htm?q=x#foo", 2249c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "c.com/path/file.htm?q=x#foo", true }, 2250c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "ab", "ftp://abc.com/path/file.htm?q=x#foo", 2251c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "ftp://abc.com/path/file.htm?q=x#foo", 2252c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "c.com/path/file.htm?q=x#foo", true }, 2253c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "https://www.ab", "https://www.abc.com/path/file.htm?q=x#foo", 2254c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "https://www.abc.com/path/file.htm?q=x#foo", 2255c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "c.com/path/file.htm?q=x#foo", true }, 2256c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "www.ab", "https://www.abc.com/path/file.htm?q=x#foo", 2257c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "https://www.abc.com/path/file.htm?q=x#foo", 2258c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "c.com/path/file.htm?q=x#foo", true }, 2259c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "ab", "https://www.abc.com/path/file.htm?q=x#foo", 2260c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "https://www.abc.com/path/file.htm?q=x#foo", 2261c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "c.com/path/file.htm?q=x#foo", true }, 2262c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "ab", "https://abc.com/path/file.htm?q=x#foo", 2263c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "https://abc.com/path/file.htm?q=x#foo", 2264c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "c.com/path/file.htm?q=x#foo", true }, 22655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Forced query input should inline and retain the "?" prefix. 2267c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "?http://www.ab", "http://www.abc.com", 2268c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "?http://www.abc.com", "c.com", true }, 2269c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "?www.ab", "http://www.abc.com", 2270c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "?www.abc.com", "c.com", true }, 2271c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "?ab", "http://www.abc.com", 2272c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "?www.abc.com", "c.com", true }, 22735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 22745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); i++) { 2276c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) QueryForInput(ASCIIToUTF16(cases[i].input), false, false); 2277eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch AutocompleteMatch match( 2278eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch provider_->NavigationToMatch(SearchProvider::NavigationResult( 2279eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch *provider_.get(), GURL(cases[i].url), string16(), false, 0, 2280eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch false))); 2281ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_EQ(ASCIIToUTF16(cases[i].inline_autocompletion), 2282ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch match.inline_autocompletion); 22835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16(cases[i].fill_into_edit), match.fill_into_edit); 2284c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_EQ(cases[i].allowed_to_be_default_match, 2285c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch match.allowed_to_be_default_match); 22865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 22875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 22885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Verifies that "http://" is not trimmed for input that is a leading substring. 22905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SearchProviderTest, NavigationInlineSchemeSubstring) { 22915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const string16 input(ASCIIToUTF16("ht")); 22925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const string16 url(ASCIIToUTF16("http://a.com")); 2293c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const SearchProvider::NavigationResult result( 2294eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch *provider_.get(), GURL(url), string16(), false, 0, false); 22955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check the offset and strings when inline autocompletion is allowed. 2297c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) QueryForInput(input, false, false); 2298c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutocompleteMatch match_inline(provider_->NavigationToMatch(result)); 22995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(url, match_inline.fill_into_edit); 2300ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_EQ(url.substr(2), match_inline.inline_autocompletion); 2301c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_TRUE(match_inline.allowed_to_be_default_match); 23025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(url, match_inline.contents); 23035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check the same offset and strings when inline autocompletion is prevented. 2305c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) QueryForInput(input, true, false); 2306c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutocompleteMatch match_prevent(provider_->NavigationToMatch(result)); 23075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(url, match_prevent.fill_into_edit); 2308c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_TRUE(match_prevent.inline_autocompletion.empty()); 2309c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_FALSE(match_prevent.allowed_to_be_default_match); 23105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(url, match_prevent.contents); 23115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 23125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Verifies that input "w" marks a more significant domain label than "www.". 23145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SearchProviderTest, NavigationInlineDomainClassify) { 2315c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) QueryForInput(ASCIIToUTF16("w"), false, false); 2316eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch AutocompleteMatch match( 2317eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch provider_->NavigationToMatch(SearchProvider::NavigationResult( 2318eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch *provider_.get(), GURL("http://www.wow.com"), string16(), false, 0, 2319eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch false))); 2320ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_EQ(ASCIIToUTF16("ow.com"), match.inline_autocompletion); 2321c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_TRUE(match.allowed_to_be_default_match); 23225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("www.wow.com"), match.fill_into_edit); 23235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("www.wow.com"), match.contents); 23245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Ensure that the match for input "w" is marked on "wow" and not "www". 23265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(3U, match.contents_class.size()); 23275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0U, match.contents_class[0].offset); 23285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(AutocompleteMatch::ACMatchClassification::URL, 23295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) match.contents_class[0].style); 23305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(4U, match.contents_class[1].offset); 23315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(AutocompleteMatch::ACMatchClassification::URL | 23325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch::ACMatchClassification::MATCH, 23335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) match.contents_class[1].style); 23345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(5U, match.contents_class[2].offset); 23355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(AutocompleteMatch::ACMatchClassification::URL, 23365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) match.contents_class[2].style); 23375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2338c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2339c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(SearchProviderTest, RemoveStaleResultsTest) { 2340a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) // TODO(mpearson): Consider expanding this test to explicitly cover 2341c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // testing staleness for keyword results. 2342c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) struct { 2343c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string omnibox_input; 2344c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const int verbatim_relevance; 2345c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // These cached suggestions should already be sorted. 2346c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // The particular number 5 as the length of the array is 2347c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // unimportant; it's merely enough cached results to fully test 2348c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // the functioning of RemoveAllStaleResults(). 2349c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) struct { 2350c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string suggestion; 2351c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const bool is_navigation_result; 2352c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const int relevance; 2353c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // |expect_match| is true if this result should survive 2354c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // RemoveAllStaleResults() filtering against |omnibox_input| below. 2355c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const bool expect_match; 2356c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } results[5]; 2357c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } cases[] = { 2358c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Simple case: multiple query suggestions and no navsuggestions. 2359c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // All query suggestions score less than search-what-you-typed and 2360c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // thus none should be filtered because none will appear first. 2361c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "x", 1300, 2362a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { { "food", false, 1299, true }, 2363a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { "foobar", false, 1298, true }, 2364a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { "crazy", false, 1297, true }, 2365a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { "friend", false, 1296, true }, 2366a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { kNotApplicable, false, 0, false } } }, 2367c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2368c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Similarly simple cases, but the query suggestion appears first. 2369c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "f", 1200, 2370a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { { "food", false, 1299, true }, 2371a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { "foobar", false, 1298, true }, 2372a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { "crazy", false, 1297, true }, 2373a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { "friend", false, 1296, true }, 2374a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { kNotApplicable, false, 0, false } } }, 2375c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "c", 1200, 2376a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { { "food", false, 1299, false }, 2377a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { "foobar", false, 1298, false }, 2378a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { "crazy", false, 1297, true }, 2379a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { "friend", false, 1296, true }, 2380a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { kNotApplicable, false, 0, false } } }, 2381c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "x", 1200, 2382a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { { "food", false, 1299, false }, 2383a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { "foobar", false, 1298, false }, 2384a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { "crazy", false, 1297, false }, 2385a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { "friend", false, 1296, false }, 2386a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { kNotApplicable, false, 0, false } } }, 2387c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2388c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // The same sort of cases, just using a mix of queries and navsuggestions. 2389c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "x", 1300, 2390a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { { "http://food.com/", true, 1299, true }, 2391a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { "foobar", false, 1298, true }, 2392a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { "http://crazy.com/", true, 1297, true }, 2393a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { "friend", false, 1296, true }, 2394a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { "http://friend.com/", true, 1295, true } } }, 2395c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "f", 1200, 2396a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { { "http://food.com/", true, 1299, true }, 2397a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { "foobar", false, 1298, true }, 2398a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { "http://crazy.com/", true, 1297, true }, 2399a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { "friend", false, 1296, true }, 2400a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { "http://friend.com/", true, 1295, true } } }, 2401c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "c", 1200, 2402a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { { "http://food.com/", true, 1299, false }, 2403a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { "foobar", false, 1298, false }, 2404a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { "http://crazy.com/", true, 1297, true }, 2405a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { "friend", false, 1296, true }, 2406a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { "http://friend.com/", true, 1295, true } } }, 2407c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "x", 1200, 2408a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { { "http://food.com/", true, 1299, false }, 2409a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { "foobar", false, 1298, false }, 2410a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { "http://crazy.com/", true, 1297, false }, 2411a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { "friend", false, 1296, false }, 2412a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { "http://friend.com/", true, 1295, false } } }, 2413c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2414c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Run the three tests immediately above again, just with verbatim 2415c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // suppressed. Note that in the last case, all results are filtered. 2416c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Because verbatim is also suppressed, SearchProvider will realize 2417c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // in UpdateMatches() that it needs to restore verbatim to fulfill 2418c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // its constraints. This restoration does not happen in 2419c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // RemoveAllStaleResults() and hence is not tested here. This restoration 2420c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // is tested in the DefaultFetcherSuggestRelevance test. 2421c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "f", 0, 2422a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { { "http://food.com/", true, 1299, true }, 2423a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { "foobar", false, 1298, true }, 2424a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { "http://crazy.com/", true, 1297, true }, 2425a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { "friend", false, 1296, true }, 2426a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { "http://friend.com/", true, 1295, true } } }, 2427c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "c", 0, 2428a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { { "http://food.com/", true, 1299, false }, 2429a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { "foobar", false, 1298, false }, 2430a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { "http://crazy.com/", true, 1297, true }, 2431a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { "friend", false, 1296, true }, 2432a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { "http://friend.com/", true, 1295, true } } }, 2433c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "x", 0, 2434a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { { "http://food.com/", true, 1299, false }, 2435a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { "foobar", false, 1298, false }, 2436a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { "http://crazy.com/", true, 1297, false }, 2437a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { "friend", false, 1296, false }, 2438a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { "http://friend.com/", true, 1295, false } } }, 2439a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 2440a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) // The same sort of tests again, just with verbatim with a score 2441a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) // that would place it in between other suggestions. 2442a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { "f", 1290, 2443a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { { "http://food.com/", true, 1299, true }, 2444a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { "foobar", false, 1288, true }, 2445a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { "http://crazy.com/", true, 1277, true }, 2446a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { "friend", false, 1266, true }, 2447a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { "http://friend.com/", true, 1255, true } } }, 2448a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { "c", 1290, 2449a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { { "http://food.com/", true, 1299, false }, 2450a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { "foobar", false, 1288, true }, 2451a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { "http://crazy.com/", true, 1277, true }, 2452a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { "friend", false, 1266, true }, 2453a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { "http://friend.com/", true, 1255, true } } }, 2454a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { "c", 1270, 2455a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { { "http://food.com/", true, 1299, false }, 2456a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { "foobar", false, 1288, false }, 2457a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { "http://crazy.com/", true, 1277, true }, 2458a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { "friend", false, 1266, true }, 2459a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { "http://friend.com/", true, 1255, true } } }, 2460a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { "x", 1280, 2461a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { { "http://food.com/", true, 1299, false }, 2462a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { "foobar", false, 1288, false }, 2463a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { "http://crazy.com/", true, 1277, true }, 2464a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { "friend", false, 1266, true }, 2465a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) { "http://friend.com/", true, 1255, true } } }, 2466c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) }; 2467c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2468c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); i++) { 2469c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Initialize cached results for this test case. 247090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) provider_->default_results_.verbatim_relevance = 247190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) cases[i].verbatim_relevance; 247290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) provider_->default_results_.navigation_results.clear(); 247390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) provider_->default_results_.suggest_results.clear(); 2474c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for (size_t j = 0; j < ARRAYSIZE_UNSAFE(cases[i].results); ++j) { 2475c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& suggestion = cases[i].results[j].suggestion; 2476c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (suggestion == kNotApplicable) 2477c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) break; 2478c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (cases[i].results[j].is_navigation_result) { 247990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) provider_->default_results_.navigation_results.push_back( 2480eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SearchProvider::NavigationResult( 2481eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch *provider_.get(), GURL(suggestion), string16(), false, 2482eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch cases[i].results[j].relevance, false)); 2483c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } else { 248490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) provider_->default_results_.suggest_results.push_back( 24851e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SearchProvider::SuggestResult(ASCIIToUTF16(suggestion), string16(), 24861e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) string16(), std::string(), false, 2487eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch cases[i].results[j].relevance, 2488424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) false, false)); 2489c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 2490c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 2491c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2492c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) provider_->input_ = AutocompleteInput( 2493c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASCIIToUTF16(cases[i].omnibox_input), string16::npos, string16(), 2494d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch GURL(), AutocompleteInput::INVALID_SPEC, false, false, true, 2495d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch AutocompleteInput::ALL_MATCHES); 2496c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) provider_->RemoveAllStaleResults(); 2497c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2498c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Check cached results. 2499c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SearchProvider::SuggestResults::const_iterator sug_it = 250090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) provider_->default_results_.suggest_results.begin(); 2501c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const SearchProvider::SuggestResults::const_iterator sug_end = 250290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) provider_->default_results_.suggest_results.end(); 2503c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SearchProvider::NavigationResults::const_iterator nav_it = 250490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) provider_->default_results_.navigation_results.begin(); 2505c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const SearchProvider::NavigationResults::const_iterator nav_end = 250690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) provider_->default_results_.navigation_results.end(); 2507c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for (size_t j = 0; j < ARRAYSIZE_UNSAFE(cases[i].results); ++j) { 2508c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& suggestion = cases[i].results[j].suggestion; 2509c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (suggestion == kNotApplicable) 2510c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) continue; 2511c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!cases[i].results[j].expect_match) 2512c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) continue; 2513c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (cases[i].results[j].is_navigation_result) { 2514c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_NE(nav_end, nav_it) << "Failed to find " << suggestion; 2515c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(suggestion, nav_it->url().spec()); 2516c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ++nav_it; 2517c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } else { 2518c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_NE(sug_end, sug_it) << "Failed to find " << suggestion; 2519c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(ASCIIToUTF16(suggestion), sug_it->suggestion()); 2520c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ++sug_it; 2521c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 2522c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 2523c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(sug_end, sug_it); 2524c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(nav_end, nav_it); 2525c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 2526c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 2527424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 25281e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#if !defined(OS_WIN) 25291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Verify entity suggestion parsing. 25301e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)TEST_F(SearchProviderTest, ParseEntitySuggestion) { 25311e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) struct Match { 25321e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) std::string contents; 25331e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) std::string query_params; 25341e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) std::string fill_into_edit; 25351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) AutocompleteMatchType::Type type; 25361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) size_t classification_offsets[3]; 25371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) int classification_styles[3]; 25381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) }; 25391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const size_t invalid_offset = 10; 25401e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const int invalid_style = -1; 25411e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const Match kEmptyMatch = { 25421e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) kNotApplicable, kNotApplicable, kNotApplicable, 25431e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) AutocompleteMatchType::NUM_TYPES, 25441e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) { invalid_offset, invalid_offset, invalid_offset }, 25451e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) { invalid_style, invalid_style, invalid_style } }; 25461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 25471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) struct { 25481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const std::string input_text; 25491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const std::string response_json; 25501e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const Match matches[5]; 25511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } cases[] = { 25521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // A query and an entity suggestion with different search terms. 25531e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) { "x", 25541e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) "[\"x\",[\"xy\", \"xy\"],[\"\",\"\"],[]," 25551e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) " {\"google:suggestdetail\":[{}," 25561e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) " {\"a\":\"A\",\"dq\":\"yy\",\"q\":\"p=v\"}]," 25571e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) "\"google:suggesttype\":[\"QUERY\",\"ENTITY\"]}]", 25581e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) { { "x", "", "x", AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, 25591e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) { 0, invalid_offset, invalid_offset }, 25601e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) { ACMatchClassification::NONE, invalid_style, invalid_style } }, 25611e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) { "xy", "", "xy", AutocompleteMatchType::SEARCH_SUGGEST, 25621e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) { 0, 1, invalid_offset }, 25631e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) { ACMatchClassification::NONE, ACMatchClassification::MATCH, 25641e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) invalid_style } }, 25651e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) { "xy - A", "p=v", "yy", AutocompleteMatchType::SEARCH_SUGGEST, 25661e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) { 0, 1, 2 }, 25671e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) { ACMatchClassification::NONE, ACMatchClassification::MATCH, 25681e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ACMatchClassification::DIM } }, 25691e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) kEmptyMatch, 25701e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) kEmptyMatch 25711e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) }, 25721e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) }, 25731e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // A query and an entity suggestion with same search terms. 25741e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) { "x", 25751e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) "[\"x\",[\"xy\", \"xy\"],[\"\",\"\"],[]," 25761e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) " {\"google:suggestdetail\":[{}," 25771e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) " {\"a\":\"A\",\"dq\":\"xy\",\"q\":\"p=v\"}]," 25781e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) "\"google:suggesttype\":[\"QUERY\",\"ENTITY\"]}]", 25791e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) { { "x", "", "x", AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, 25801e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) { 0, invalid_offset, invalid_offset }, 25811e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) { ACMatchClassification::NONE, invalid_style, invalid_style } }, 25821e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) { "xy", "", "xy", AutocompleteMatchType::SEARCH_SUGGEST, 25831e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) { 0, 1, invalid_offset }, 25841e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) { ACMatchClassification::NONE, ACMatchClassification::MATCH, 25851e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) invalid_style } }, 25861e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) { "xy - A", "p=v", "xy", AutocompleteMatchType::SEARCH_SUGGEST, 25871e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) { 0, 1, 2 }, 25881e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) { ACMatchClassification::NONE, ACMatchClassification::MATCH, 25891e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ACMatchClassification::DIM } }, 25901e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) kEmptyMatch, 25911e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) kEmptyMatch 25921e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) }, 25931e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) }, 25941e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) }; 25951e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); i++) { 25961e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) QueryForInput(ASCIIToUTF16(cases[i].input_text), false, false); 25971e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 25981e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Set up a default fetcher with provided results. 25991e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) net::TestURLFetcher* fetcher = 26001e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) test_factory_.GetFetcherByID( 26011e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SearchProvider::kDefaultProviderURLFetcherID); 26021e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ASSERT_TRUE(fetcher); 26031e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) fetcher->set_response_code(200); 26041e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) fetcher->SetResponseString(cases[i].response_json); 26051e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) fetcher->delegate()->OnURLFetchComplete(fetcher); 26061e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 26071e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) RunTillProviderDone(); 26081e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 26091e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const ACMatches& matches = provider_->matches(); 26101e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ASSERT_FALSE(matches.empty()); 26111e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 26121e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SCOPED_TRACE("for input with json = " + cases[i].response_json); 26131e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 26141e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) size_t j = 0; 26151e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Ensure that the returned matches equal the expectations. 26161e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) for (; j < matches.size(); ++j) { 26171e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const Match& match = cases[i].matches[j]; 26181e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SCOPED_TRACE(" and match index: " + base::IntToString(j)); 26191e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(match.contents, 26201e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) UTF16ToUTF8(matches[j].contents)); 26211e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(match.query_params, 26221e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) matches[j].search_terms_args->suggest_query_params); 26231e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(match.fill_into_edit, 26241e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) UTF16ToUTF8(matches[j].fill_into_edit)); 26251e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(match.type, matches[j].type); 26261e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 26271e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) size_t k = 0; 26281e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) for (; k < matches[j].contents_class.size(); k++) { 26291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SCOPED_TRACE(" and contents class: " + base::IntToString(k)); 26301e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(match.classification_offsets[k], 26311e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) matches[j].contents_class[k].offset); 26321e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(match.classification_styles[k], 26331e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) matches[j].contents_class[k].style); 26341e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 26351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) for (; k < ARRAYSIZE_UNSAFE(match.classification_offsets); k++) { 26361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SCOPED_TRACE(" and contents class: " + base::IntToString(k)); 26371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(match.classification_offsets[k], invalid_offset); 26381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(match.classification_styles[k], invalid_style); 26391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 26401e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 26411e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Ensure that no expected matches are missing. 26421e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) for (; j < ARRAYSIZE_UNSAFE(cases[i].matches); ++j) { 26431e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SCOPED_TRACE(" and match index: " + base::IntToString(j)); 26441e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(cases[i].matches[j].contents, kNotApplicable); 26451e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(cases[i].matches[j].query_params, kNotApplicable); 26461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(cases[i].matches[j].fill_into_edit, kNotApplicable); 26471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(cases[i].matches[j].type, AutocompleteMatchType::NUM_TYPES); 26481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 26491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 26501e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 26511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#endif // !defined(OS_WIN) 26521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 26531e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)TEST_F(SearchProviderTest, SearchHistorySuppressesEntitySuggestion) { 26541e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) struct Match { 26551e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) std::string contents; 26561e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) std::string query_params; 26571e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) std::string fill_into_edit; 26581e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) AutocompleteMatchType::Type type; 26591e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) }; 26601e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const Match kEmptyMatch = { kNotApplicable, kNotApplicable, kNotApplicable, 26611e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) AutocompleteMatchType::NUM_TYPES}; 26621e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 26631e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) struct { 26641e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const std::string input_text; 26651e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const std::string history_search_term; 26661e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const std::string response_json; 26671e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const Match matches[5]; 26681e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } cases[] = { 26691e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Search history suppresses both query and entity suggestions. 26701e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) { "x", "xy", 26711e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) "[\"x\",[\"xy\", \"xy\"],[\"\",\"\"],[]," 26721e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) " {\"google:suggestdetail\":[{}," 26731e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) " {\"a\":\"A\",\"dq\":\"xy\",\"q\":\"p=v\"}]," 26741e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) "\"google:suggesttype\":[\"QUERY\",\"ENTITY\"]}]", 26751e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) { 26761e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) {"xy", "", "xy", AutocompleteMatchType::SEARCH_HISTORY}, 26771e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) {"x", "", "x", AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED}, 26781e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) {"xy - A", "p=v", "xy", AutocompleteMatchType::SEARCH_SUGGEST}, 26791e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) kEmptyMatch, 26801e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) kEmptyMatch, 26811e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) }, 26821e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) }, 26831e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Search history suppresses only query suggestion. 26841e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) { "x", "xyy", 26851e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) "[\"x\",[\"xy\", \"xy\"],[\"\",\"\"],[]," 26861e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) " {\"google:suggestdetail\":[{}," 26871e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) " {\"a\":\"A\",\"dq\":\"xyy\",\"q\":\"p=v\"}]," 26881e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) "\"google:suggesttype\":[\"QUERY\",\"ENTITY\"]}]", 26891e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) { 26901e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) {"xyy", "", "xyy", AutocompleteMatchType::SEARCH_HISTORY}, 26911e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) {"xy", "", "xy", AutocompleteMatchType::SEARCH_HISTORY}, 26921e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) {"x", "", "x", AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED}, 26931e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) {"xy - A", "p=v", "xyy", AutocompleteMatchType::SEARCH_SUGGEST}, 26941e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) kEmptyMatch, 26951e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) }, 26961e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 26971e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) }; 26981e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 26991e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); i++) { 27001e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) GURL term_url(AddSearchToHistory( 27011e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) default_t_url_, ASCIIToUTF16(cases[i].history_search_term), 10)); 27021e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) profile_.BlockUntilHistoryProcessesPendingRequests(); 27031e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) QueryForInput(ASCIIToUTF16(cases[i].input_text), false, false); 27041e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 27051e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Set up a default fetcher with provided results. 27061e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) net::TestURLFetcher* fetcher = 27071e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) test_factory_.GetFetcherByID( 27081e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SearchProvider::kDefaultProviderURLFetcherID); 27091e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ASSERT_TRUE(fetcher); 27101e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) fetcher->set_response_code(200); 27111e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) fetcher->SetResponseString(cases[i].response_json); 27121e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) fetcher->delegate()->OnURLFetchComplete(fetcher); 27131e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 27141e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) RunTillProviderDone(); 27151e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 27161e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const ACMatches& matches = provider_->matches(); 27171e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ASSERT_FALSE(matches.empty()); 27181e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SCOPED_TRACE("for case: " + base::IntToString(i)); 27191e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 27201e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) size_t j = 0; 27211e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Ensure that the returned matches equal the expectations. 27221e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) for (; j < matches.size(); ++j) { 27231e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SCOPED_TRACE(" and match index: " + base::IntToString(j)); 27241e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(cases[i].matches[j].contents, 27251e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) UTF16ToUTF8(matches[j].contents)); 27261e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(cases[i].matches[j].query_params, 27271e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) matches[j].search_terms_args->suggest_query_params); 27281e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(cases[i].matches[j].fill_into_edit, 27291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) UTF16ToUTF8(matches[j].fill_into_edit)); 27301e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(cases[i].matches[j].type, matches[j].type); 27311e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 27321e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Ensure that no expected matches are missing. 27331e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) for (; j < ARRAYSIZE_UNSAFE(cases[i].matches); ++j) { 27341e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SCOPED_TRACE(" and match index: " + base::IntToString(j)); 27351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(cases[i].matches[j].contents, kNotApplicable); 27361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(cases[i].matches[j].query_params, kNotApplicable); 27371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(cases[i].matches[j].fill_into_edit, kNotApplicable); 27381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(cases[i].matches[j].type, AutocompleteMatchType::NUM_TYPES); 27391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 27401e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 27411e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 27421e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 2743424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// A basic test that verifies the prefetch metadata parsing logic. 2744424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)TEST_F(SearchProviderTest, PrefetchMetadataParsing) { 2745424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) struct Match { 2746424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) std::string contents; 2747424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) bool allowed_to_be_prefetched; 2748424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) AutocompleteMatchType::Type type; 2749424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) bool from_keyword; 2750424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) }; 2751424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) const Match kEmptyMatch = { kNotApplicable, 2752424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) false, 2753424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, 2754424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) false }; 2755424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 2756424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) struct { 2757424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) const std::string input_text; 2758424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) bool prefer_keyword_provider_results; 2759424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) const std::string default_provider_response_json; 2760424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) const std::string keyword_provider_response_json; 2761424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) const Match matches[5]; 2762424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } cases[] = { 2763424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // Default provider response does not have prefetch details. Ensure that the 2764424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // suggestions are not marked as prefetch query. 2765424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) { "a", 2766424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) false, 2767424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) "[\"a\",[\"b\", \"c\"],[],[],{\"google:suggestrelevance\":[1, 2]}]", 2768424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) std::string(), 2769424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) { { "a", false, AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, false }, 2770424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) { "c", false, AutocompleteMatchType::SEARCH_SUGGEST, false }, 2771424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) { "b", false, AutocompleteMatchType::SEARCH_SUGGEST, false }, 2772424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) kEmptyMatch, 2773424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) kEmptyMatch 2774424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) }, 2775424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) }, 2776424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // Ensure that default provider suggest response prefetch details are 2777424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // parsed and recorded in AutocompleteMatch. 2778424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) { "ab", 2779424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) false, 2780424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) "[\"ab\",[\"abc\", \"http://b.com\", \"http://c.com\"],[],[]," 2781424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) "{\"google:clientdata\":{\"phi\": 0}," 2782424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) "\"google:suggesttype\":[\"QUERY\", \"NAVIGATION\", \"NAVIGATION\"]," 2783424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) "\"google:suggestrelevance\":[999, 12, 1]}]", 2784424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) std::string(), 2785424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) { { "ab", false, AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, false }, 2786424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) { "abc", true, AutocompleteMatchType::SEARCH_SUGGEST, false }, 2787424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) { "b.com", false, AutocompleteMatchType::NAVSUGGEST, false }, 2788424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) { "c.com", false, AutocompleteMatchType::NAVSUGGEST, false }, 2789424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) kEmptyMatch 2790424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) }, 2791424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) }, 2792424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // Default provider suggest response has prefetch details. 2793424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // SEARCH_WHAT_YOU_TYPE suggestion outranks SEARCH_SUGGEST suggestion for 2794424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // the same query string. Ensure that the prefetch details from 2795424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // SEARCH_SUGGEST match are set onto SEARCH_WHAT_YOU_TYPE match. 2796424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) { "ab", 2797424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) false, 2798424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) "[\"ab\",[\"ab\", \"http://ab.com\"],[],[]," 2799424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) "{\"google:clientdata\":{\"phi\": 0}," 2800424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) "\"google:suggesttype\":[\"QUERY\", \"NAVIGATION\"]," 2801424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) "\"google:suggestrelevance\":[99, 98]}]", 2802424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) std::string(), 2803424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) { {"ab", true, AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, false }, 2804424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) {"ab.com", false, AutocompleteMatchType::NAVSUGGEST, false }, 2805424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) kEmptyMatch, 2806424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) kEmptyMatch, 2807424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) kEmptyMatch 2808424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) }, 2809424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) }, 2810424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // Default provider response has prefetch details. We prefer keyword 2811424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // provider results. Ensure that prefetch bit for a suggestion from the 2812424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // default search provider does not get copied onto a higher-scoring match 2813424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // for the same query string from the keyword provider. 2814424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) { "k a", 2815424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) true, 2816424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) "[\"k a\",[\"a\", \"ab\"],[],[], {\"google:clientdata\":{\"phi\": 0}," 2817424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) "\"google:suggesttype\":[\"QUERY\", \"QUERY\"]," 2818424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) "\"google:suggestrelevance\":[9, 12]}]", 2819424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) "[\"a\",[\"b\", \"c\"],[],[],{\"google:suggestrelevance\":[1, 2]}]", 2820424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) { { "a", false, AutocompleteMatchType::SEARCH_OTHER_ENGINE, true}, 2821424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) { "k a", false, AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, false }, 2822424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) { "ab", false, AutocompleteMatchType::SEARCH_SUGGEST, false }, 2823424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) { "c", false, AutocompleteMatchType::SEARCH_SUGGEST, true }, 2824424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) { "b", false, AutocompleteMatchType::SEARCH_SUGGEST, true } 2825424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) }, 2826424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } 2827424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) }; 2828424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 2829424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); i++) { 2830424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) QueryForInput(ASCIIToUTF16(cases[i].input_text), false, 2831424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) cases[i].prefer_keyword_provider_results); 2832424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 2833424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // Set up a default fetcher with provided results. 2834424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) net::TestURLFetcher* fetcher = 2835424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) test_factory_.GetFetcherByID( 2836424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) SearchProvider::kDefaultProviderURLFetcherID); 2837424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ASSERT_TRUE(fetcher); 2838424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) fetcher->set_response_code(200); 2839424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) fetcher->SetResponseString(cases[i].default_provider_response_json); 2840424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) fetcher->delegate()->OnURLFetchComplete(fetcher); 2841424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 2842424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) if (cases[i].prefer_keyword_provider_results) { 2843424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // Set up a keyword fetcher with provided results. 2844424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) net::TestURLFetcher* keyword_fetcher = 2845424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) test_factory_.GetFetcherByID( 2846424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) SearchProvider::kKeywordProviderURLFetcherID); 2847424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ASSERT_TRUE(keyword_fetcher); 2848424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) keyword_fetcher->set_response_code(200); 2849424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) keyword_fetcher->SetResponseString( 2850424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) cases[i].keyword_provider_response_json); 2851424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) keyword_fetcher->delegate()->OnURLFetchComplete(keyword_fetcher); 2852424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) keyword_fetcher = NULL; 2853424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } 2854424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 2855424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) RunTillProviderDone(); 2856424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 2857424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) const std::string description = 2858424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) "for input with json =" + cases[i].default_provider_response_json; 2859424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) const ACMatches& matches = provider_->matches(); 2860424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // The top match must inline and score as highly as calculated verbatim. 2861424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ASSERT_FALSE(matches.empty()); 2862424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) EXPECT_GE(matches[0].relevance, 1300); 2863424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 2864424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // Ensure that the returned matches equal the expectations. 2865424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) for (size_t j = 0; j < matches.size(); ++j) { 2866424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) SCOPED_TRACE(description); 2867424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) EXPECT_EQ(cases[i].matches[j].contents, UTF16ToUTF8(matches[j].contents)); 2868424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) EXPECT_EQ(cases[i].matches[j].allowed_to_be_prefetched, 2869424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) SearchProvider::ShouldPrefetch(matches[j])); 2870424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) EXPECT_EQ(cases[i].matches[j].type, matches[j].type); 2871424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) EXPECT_EQ(cases[i].matches[j].from_keyword, 2872424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) matches[j].keyword == ASCIIToUTF16("k")); 2873424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } 2874424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } 2875424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)} 28764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 28771e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// A basic test that verifies that the XSSI guarded JSON response is parsed 28781e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// correctly. 28791e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)TEST_F(SearchProviderTest, XSSIGuardedJSONParsing) { 28801e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) struct Match { 28811e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) std::string contents; 28821e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) AutocompleteMatchType::Type type; 28831e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) }; 28841e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const Match kEmptyMatch = { kNotApplicable, 28851e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) AutocompleteMatchType::NUM_TYPES}; 28861e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 28871e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) struct { 28881e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const std::string input_text; 28891e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const std::string default_provider_response_json; 28901e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const Match matches[4]; 28911e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } cases[] = { 28921e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // No XSSI guard. 28931e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) { "a", 28941e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) "[\"a\",[\"b\", \"c\"],[],[]," 28951e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) "{\"google:suggesttype\":[\"QUERY\",\"QUERY\"]," 28961e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) "\"google:suggestrelevance\":[1, 2]}]", 28971e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) { { "a", AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED }, 28981e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) { "c", AutocompleteMatchType::SEARCH_SUGGEST }, 28991e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) { "b", AutocompleteMatchType::SEARCH_SUGGEST }, 29001e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) kEmptyMatch, 29011e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) }, 29021e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) }, 29031e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Standard XSSI guard - )]}'\n. 29041e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) { "a", 29051e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ")]}'\n[\"a\",[\"b\", \"c\"],[],[]," 29061e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) "{\"google:suggesttype\":[\"QUERY\",\"QUERY\"]," 29071e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) "\"google:suggestrelevance\":[1, 2]}]", 29081e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) { { "a", AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED }, 29091e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) { "c", AutocompleteMatchType::SEARCH_SUGGEST }, 29101e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) { "b", AutocompleteMatchType::SEARCH_SUGGEST }, 29111e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) kEmptyMatch, 29121e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) }, 29131e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) }, 29141e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Modified XSSI guard - contains "[". 29151e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) { "a", 29161e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ")]}'\n[)\"[\"a\",[\"b\", \"c\"],[],[]," 29171e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) "{\"google:suggesttype\":[\"QUERY\",\"QUERY\"]," 29181e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) "\"google:suggestrelevance\":[1, 2]}]", 29191e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) { { "a", AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED }, 29201e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) { "c", AutocompleteMatchType::SEARCH_SUGGEST }, 29211e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) { "b", AutocompleteMatchType::SEARCH_SUGGEST }, 29221e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) kEmptyMatch, 29231e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) }, 29241e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) }, 29251e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) }; 29261e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 29271e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); i++) { 29281e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ClearAllResults(); 29291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) QueryForInput(ASCIIToUTF16(cases[i].input_text), false, false); 29301e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 29311e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Set up a default fetcher with provided results. 29321e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) net::TestURLFetcher* fetcher = 29331e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) test_factory_.GetFetcherByID( 29341e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SearchProvider::kDefaultProviderURLFetcherID); 29351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ASSERT_TRUE(fetcher); 29361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) fetcher->set_response_code(200); 29371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) fetcher->SetResponseString(cases[i].default_provider_response_json); 29381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) fetcher->delegate()->OnURLFetchComplete(fetcher); 29391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 29401e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) RunTillProviderDone(); 29411e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 29421e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const ACMatches& matches = provider_->matches(); 29431e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // The top match must inline and score as highly as calculated verbatim. 29441e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ASSERT_FALSE(matches.empty()); 29451e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_GE(matches[0].relevance, 1300); 29461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 29471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SCOPED_TRACE("for case: " + base::IntToString(i)); 29481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) size_t j = 0; 29491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Ensure that the returned matches equal the expectations. 29501e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) for (; j < matches.size(); ++j) { 29511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SCOPED_TRACE("and match: " + base::IntToString(j)); 29521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(cases[i].matches[j].contents, UTF16ToUTF8(matches[j].contents)); 29531e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(cases[i].matches[j].type, matches[j].type); 29541e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 29551e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) for (; j < ARRAYSIZE_UNSAFE(cases[i].matches); ++j) { 29561e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SCOPED_TRACE("and match: " + base::IntToString(j)); 29571e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(cases[i].matches[j].contents, kNotApplicable); 29581e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(cases[i].matches[j].type, AutocompleteMatchType::NUM_TYPES); 29591e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 29601e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 29611e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 29621e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 29631e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 29644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)TEST_F(SearchProviderTest, ReflectsBookmarkBarState) { 29654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) profile_.GetPrefs()->SetBoolean(prefs::kShowBookmarkBar, false); 29664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) string16 term = term1_.substr(0, term1_.length() - 1); 29674e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) QueryForInput(term, true, false); 29684e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ASSERT_FALSE(provider_->matches().empty()); 29694e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, 29704e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) provider_->matches()[0].type); 29714e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ASSERT_TRUE(provider_->matches()[0].search_terms_args != NULL); 29724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_FALSE(provider_->matches()[0].search_terms_args->bookmark_bar_pinned); 29734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 29744e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) profile_.GetPrefs()->SetBoolean(prefs::kShowBookmarkBar, true); 29754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) term = term1_.substr(0, term1_.length() - 1); 29764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) QueryForInput(term, true, false); 29774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ASSERT_FALSE(provider_->matches().empty()); 29784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, 29794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) provider_->matches()[0].type); 29804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ASSERT_TRUE(provider_->matches()[0].search_terms_args != NULL); 29814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_TRUE(provider_->matches()[0].search_terms_args->bookmark_bar_pinned); 29824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 2983