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) 51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/omnibox/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" 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/autocomplete/chrome_autocomplete_provider_client.h" 22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/autocomplete/chrome_autocomplete_scheme_classifier.h" 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/autocomplete/history_url_provider.h" 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/history/history_service.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/history/history_service_factory.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/search_engines/template_url_service_factory.h" 27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/signin/signin_manager_factory.h" 28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/sync/profile_sync_service.h" 29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/sync/profile_sync_service_factory.h" 30eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "chrome/common/chrome_switches.h" 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h" 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/testing_browser_process.h" 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/testing_profile.h" 3446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "components/google/core/browser/google_switches.h" 356d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "components/metrics/proto/omnibox_event.pb.h" 365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "components/omnibox/autocomplete_input.h" 375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "components/omnibox/autocomplete_match.h" 385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "components/omnibox/autocomplete_provider.h" 395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "components/omnibox/autocomplete_provider_listener.h" 406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "components/omnibox/omnibox_field_trial.h" 416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "components/omnibox/omnibox_switches.h" 42f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "components/search_engines/search_engine_type.h" 43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/search_engines/search_engines_switches.h" 445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "components/search_engines/search_terms_data.h" 45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/search_engines/template_url.h" 46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/search_engines/template_url_service.h" 47e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "components/signin/core/browser/signin_manager.h" 4823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "components/sync_driver/pref_names.h" 49424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "components/variations/entropy_provider.h" 50cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "components/variations/variations_associated_data.h" 51a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch#include "content/public/test/test_browser_thread_bundle.h" 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/url_request/test_url_fetcher_factory.h" 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/url_request/url_request_status.h" 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using base::ASCIIToUTF16; 575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace { 59f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 60f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Returns the first match in |matches| with |allowed_to_be_default_match| 61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// set to true. 62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)ACMatches::const_iterator FindDefaultMatch(const ACMatches& matches) { 63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ACMatches::const_iterator it = matches.begin(); 64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) while ((it != matches.end()) && !it->allowed_to_be_default_match) 65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ++it; 66f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return it; 67f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 68f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 69a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class SuggestionDeletionHandler; 70a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class SearchProviderForTest : public SearchProvider { 71a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) public: 725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) SearchProviderForTest(AutocompleteProviderListener* listener, 735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) TemplateURLService* template_url_service, 745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Profile* profile); 75a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) bool is_success() { return is_success_; }; 76a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 77a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) protected: 78a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual ~SearchProviderForTest(); 79a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 80a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) private: 81a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual void RecordDeletionResult(bool success) OVERRIDE; 82a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) bool is_success_; 83a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(SearchProviderForTest); 84a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}; 85a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 86a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)SearchProviderForTest::SearchProviderForTest( 87a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) AutocompleteProviderListener* listener, 885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) TemplateURLService* template_url_service, 89a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) Profile* profile) 901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci : SearchProvider(listener, template_url_service, 911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<AutocompleteProviderClient>( 921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci new ChromeAutocompleteProviderClient(profile))), 935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) is_success_(false) { 94a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 95a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 96a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)SearchProviderForTest::~SearchProviderForTest() { 97a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 98a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 99a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void SearchProviderForTest::RecordDeletionResult(bool success) { 100a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) is_success_ = success; 101a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 102a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 103f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} // namespace 104f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 105eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// SearchProviderTest --------------------------------------------------------- 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The following environment is configured for these tests: 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// . The TemplateURL default_t_url_ is set as the default provider. 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// . The TemplateURL keyword_t_url_ is added to the TemplateURLService. This 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TemplateURL has a valid suggest and search URL. 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// . The URL created by using the search term term1_ with default_t_url_ is 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// added to history. 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// . The URL created by using the search term keyword_term_ with keyword_t_url_ 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// is added to history. 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// . test_factory_ is set as the URLFetcherFactory. 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SearchProviderTest : public testing::Test, 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public AutocompleteProviderListener { 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) struct ResultInfo { 120f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ResultInfo() : result_type(AutocompleteMatchType::NUM_TYPES), 121f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) allowed_to_be_default_match(false) { 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ResultInfo(GURL gurl, 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AutocompleteMatch::Type result_type, 125f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) bool allowed_to_be_default_match, 126a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 fill_into_edit) 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : gurl(gurl), 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result_type(result_type), 129f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) allowed_to_be_default_match(allowed_to_be_default_match), 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) fill_into_edit(fill_into_edit) { 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 132eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const GURL gurl; 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const AutocompleteMatch::Type result_type; 135f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const bool allowed_to_be_default_match; 136a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16 fill_into_edit; 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 138eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) struct TestData { 140a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16 input; 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const size_t num_results; 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const ResultInfo output[3]; 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci struct ExpectedMatch { 1461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string contents; 1471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool allowed_to_be_default_match; 1481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }; 1491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 150eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SearchProviderTest() 151eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch : default_t_url_(NULL), 152eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch term1_(ASCIIToUTF16("term1")), 153eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch keyword_t_url_(NULL), 154eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch keyword_term_(ASCIIToUTF16("keyword")), 155a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch run_loop_(NULL) { 156c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch ResetFieldTrialList(); 157eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 158eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 159eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // See description above class for what this registers. 160eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual void SetUp() OVERRIDE; 161eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual void TearDown() OVERRIDE; 162eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void RunTest(TestData* cases, int num_cases, bool prefer_keyword); 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 166c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Needed for AutocompleteFieldTrial::ActivateStaticTrials(); 167c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch scoped_ptr<base::FieldTrialList> field_trial_list_; 168c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Default values used for testing. 170c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) static const std::string kNotApplicable; 1711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci static const ExpectedMatch kEmptyExpectedMatch; 172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Adds a search for |term|, using the engine |t_url| to the history, and 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // returns the URL for that search. 175a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) GURL AddSearchToHistory(TemplateURL* t_url, base::string16 term, int visit_count); 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Looks for a match in |provider_| with |contents| equal to |contents|. 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sets |match| to it if found. Returns whether |match| was set. 179a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) bool FindMatchWithContents(const base::string16& contents, 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch* match); 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Looks for a match in |provider_| with destination |url|. Sets |match| to 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // it if found. Returns whether |match| was set. 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool FindMatchWithDestination(const GURL& url, AutocompleteMatch* match); 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // AutocompleteProviderListener: 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If we're waiting for the provider to finish, this exits the message loop. 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnProviderUpdate(bool updated_matches) OVERRIDE; 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Runs a nested message loop until provider_ is done. The message loop is 1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // exited by way of OnProviderUpdate. 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RunTillProviderDone(); 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Invokes Start on provider_, then runs all pending tasks. 195a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void QueryForInput(const base::string16& text, 196c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool prevent_inline_autocomplete, 197c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool prefer_keyword); 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Calls QueryForInput(), finishes any suggest query, then if |wyt_match| is 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // non-NULL, sets it to the "what you typed" entry for |text|. 201a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void QueryForInputAndSetWYTMatch(const base::string16& text, 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch* wyt_match); 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Calls QueryForInput(), sets the JSON responses for the default and keyword 2051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // fetchers, and waits until the responses have been returned and the matches 2061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // returned. Use empty responses for each fetcher that shouldn't be set up / 2071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // configured. 2081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void QueryForInputAndWaitForFetcherResponses( 2091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const base::string16& text, 2101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const bool prefer_keyword, 2111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string& default_fetcher_response, 2121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string& keyword_fetcher_response); 2131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Notifies the URLFetcher for the suggest query corresponding to the default 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // search provider that it's done. 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Be sure and wrap calls to this in ASSERT_NO_FATAL_FAILURE. 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void FinishDefaultSuggestQuery(); 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 219f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Runs SearchProvider on |input|, for which the suggest server replies 220f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // with |json|, and expects that the resulting matches' contents equals 221f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // that in |matches|. An empty entry in |matches| means no match should 222f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // be returned in that position. Reports any errors with a message that 223f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // includes |error_description|. 224f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void ForcedQueryTestHelper(const std::string& input, 225f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::string& json, 226f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::string matches[3], 227f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::string& error_description); 228f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 2291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Verifies that |matches| and |expected_matches| agree on the first 2301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // |num_expected_matches|, displaying an error message that includes 2311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // |description| for any disagreement. 2321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void CheckMatches(const std::string& description, 2331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const size_t num_expected_matches, 2341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const ExpectedMatch expected_matches[], 2351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const ACMatches& matches); 2361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 237c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch void ResetFieldTrialList(); 238c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch 239116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Create a field trial, with ZeroSuggest activation based on |enabled|. 240116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::FieldTrial* CreateZeroSuggestFieldTrial(bool enabled); 241116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2421e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) void ClearAllResults(); 2431e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // See description above class for details of these fields. 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TemplateURL* default_t_url_; 246a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16 term1_; 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL term1_url_; 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TemplateURL* keyword_t_url_; 249a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16 keyword_term_; 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL keyword_url_; 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 252a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch content::TestBrowserThreadBundle thread_bundle_; 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // URLFetcherFactory implementation registered. 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::TestURLFetcherFactory test_factory_; 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Profile we use. 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestingProfile profile_; 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The provider. 261a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) scoped_refptr<SearchProviderForTest> provider_; 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 263a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch // If non-NULL, OnProviderUpdate quits the current |run_loop_|. 264a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch base::RunLoop* run_loop_; 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(SearchProviderTest); 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static 270c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const std::string SearchProviderTest::kNotApplicable = "Not Applicable"; 2711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst SearchProviderTest::ExpectedMatch 2721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SearchProviderTest::kEmptyExpectedMatch = { kNotApplicable, false }; 273c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SearchProviderTest::SetUp() { 2752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Make sure that fetchers are automatically ungregistered upon destruction. 2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) test_factory_.set_remove_fetcher_on_delete(true); 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We need both the history service and template url model loaded. 279bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch ASSERT_TRUE(profile_.CreateHistoryService(true, false)); 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TemplateURLServiceFactory::GetInstance()->SetTestingFactoryAndUse( 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &profile_, &TemplateURLServiceFactory::BuildInstanceFor); 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TemplateURLService* turl_model = 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TemplateURLServiceFactory::GetForProfile(&profile_); 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) turl_model->Load(); 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Reset the default TemplateURL. 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TemplateURLData data; 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data.short_name = ASCIIToUTF16("t"); 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data.SetURL("http://defaultturl/{searchTerms}"); 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data.suggestions_url = "http://defaultturl2/{searchTerms}"; 293b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) data.instant_url = "http://does/not/exist?strk=1"; 294b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) data.search_terms_replacement_key = "strk"; 295f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) default_t_url_ = new TemplateURL(data); 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) turl_model->Add(default_t_url_); 2975c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu turl_model->SetUserSelectedDefaultSearchProvider(default_t_url_); 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TemplateURLID default_provider_id = default_t_url_->id(); 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NE(0, default_provider_id); 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add url1, with search term term1_. 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) term1_url_ = AddSearchToHistory(default_t_url_, term1_, 1); 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create another TemplateURL. 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data.short_name = ASCIIToUTF16("k"); 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data.SetKeyword(ASCIIToUTF16("k")); 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data.SetURL("http://keyword/{searchTerms}"); 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data.suggestions_url = "http://suggest_keyword/{searchTerms}"; 309f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) keyword_t_url_ = new TemplateURL(data); 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) turl_model->Add(keyword_t_url_); 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NE(0, keyword_t_url_->id()); 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add a page and search term for keyword_t_url_. 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keyword_url_ = AddSearchToHistory(keyword_t_url_, keyword_term_, 1); 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Keywords are updated by the InMemoryHistoryBackend only after the message 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // has been processed on the history thread. Block until history processes all 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // requests to ensure the InMemoryDatabase is the state we expect it. 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_.BlockUntilHistoryProcessesPendingRequests(); 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci AutocompleteClassifierFactory::GetInstance()->SetTestingFactoryAndUse( 3221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci &profile_, &AutocompleteClassifierFactory::BuildInstanceFor); 3231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) provider_ = new SearchProviderForTest(this, turl_model, &profile_); 325c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) provider_->kMinimumTimeBetweenSuggestQueriesMs = 0; 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 328eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvoid SearchProviderTest::TearDown() { 329a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch base::RunLoop().RunUntilIdle(); 330eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 331eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Shutdown the provider before the profile. 332eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch provider_ = NULL; 333eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 334eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 335eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvoid SearchProviderTest::RunTest(TestData* cases, 336eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int num_cases, 337eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch bool prefer_keyword) { 338eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ACMatches matches; 339eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch for (int i = 0; i < num_cases; ++i) { 3405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) AutocompleteInput input(cases[i].input, base::string16::npos, 3415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::string16(), GURL(), 3426d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) metrics::OmniboxEventProto::INVALID_SPEC, false, 343116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch prefer_keyword, true, true, 344116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ChromeAutocompleteSchemeClassifier(&profile_)); 345eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch provider_->Start(input, false); 346eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch matches = provider_->matches(); 3471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SCOPED_TRACE( 3485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASCIIToUTF16("Input was: ") + 3495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) cases[i].input + 350eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASCIIToUTF16("; prefer_keyword was: ") + 3511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (prefer_keyword ? ASCIIToUTF16("true") : ASCIIToUTF16("false"))); 3521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(cases[i].num_results, matches.size()); 353eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (matches.size() == cases[i].num_results) { 354eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch for (size_t j = 0; j < cases[i].num_results; ++j) { 3551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(cases[i].output[j].gurl, matches[j].destination_url); 3561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(cases[i].output[j].result_type, matches[j].type); 357eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(cases[i].output[j].fill_into_edit, 3581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci matches[j].fill_into_edit); 359f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(cases[i].output[j].allowed_to_be_default_match, 3601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci matches[j].allowed_to_be_default_match); 361eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 362eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 363eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 364eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 365eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SearchProviderTest::OnProviderUpdate(bool updated_matches) { 367a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch if (run_loop_ && provider_->done()) { 368a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch run_loop_->Quit(); 369a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch run_loop_ = NULL; 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SearchProviderTest::RunTillProviderDone() { 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (provider_->done()) 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::RunLoop run_loop; 378a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch run_loop_ = &run_loop; 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) run_loop.Run(); 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 382a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void SearchProviderTest::QueryForInput(const base::string16& text, 383c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool prevent_inline_autocomplete, 384c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool prefer_keyword) { 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Start a query. 386a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) AutocompleteInput input(text, base::string16::npos, base::string16(), GURL(), 3876d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) metrics::OmniboxEventProto::INVALID_SPEC, 388d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch prevent_inline_autocomplete, prefer_keyword, true, 389116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch true, ChromeAutocompleteSchemeClassifier(&profile_)); 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) provider_->Start(input, false); 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // RunUntilIdle so that the task scheduled by SearchProvider to create the 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // URLFetchers runs. 394a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch base::RunLoop().RunUntilIdle(); 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SearchProviderTest::QueryForInputAndSetWYTMatch( 398a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& text, 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch* wyt_match) { 400c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) QueryForInput(text, false, false); 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_.BlockUntilHistoryProcessesPendingRequests(); 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(FinishDefaultSuggestQuery()); 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!wyt_match) 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_GE(provider_->matches().size(), 1u); 406f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(FindMatchWithDestination( 407f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GURL(default_t_url_->url_ref().ReplaceSearchTerms( 408effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch TemplateURLRef::SearchTermsArgs(base::CollapseWhitespace( 409f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) text, false)), 410f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) TemplateURLServiceFactory::GetForProfile( 411f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) &profile_)->search_terms_data())), 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) wyt_match)); 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid SearchProviderTest::QueryForInputAndWaitForFetcherResponses( 4161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const base::string16& text, 4171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const bool prefer_keyword, 4181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string& default_fetcher_response, 4191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string& keyword_fetcher_response) { 4201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci QueryForInput(text, false, prefer_keyword); 4211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!default_fetcher_response.empty()) { 4221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci net::TestURLFetcher* fetcher = test_factory_.GetFetcherByID( 4231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SearchProvider::kDefaultProviderURLFetcherID); 4241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(fetcher); 4251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci fetcher->set_response_code(200); 4261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci fetcher->SetResponseString(default_fetcher_response); 4271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci fetcher->delegate()->OnURLFetchComplete(fetcher); 4281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 4291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!keyword_fetcher_response.empty()) { 4301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci net::TestURLFetcher* keyword_fetcher = test_factory_.GetFetcherByID( 4311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SearchProvider::kKeywordProviderURLFetcherID); 4321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(keyword_fetcher); 4331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci keyword_fetcher->set_response_code(200); 4341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci keyword_fetcher->SetResponseString(keyword_fetcher_response); 4351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci keyword_fetcher->delegate()->OnURLFetchComplete(keyword_fetcher); 4361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 4371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci RunTillProviderDone(); 4381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 4391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GURL SearchProviderTest::AddSearchToHistory(TemplateURL* t_url, 441a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 term, 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int visit_count) { 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HistoryService* history = 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HistoryServiceFactory::GetForProfile(&profile_, 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile::EXPLICIT_ACCESS); 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL search(t_url->url_ref().ReplaceSearchTerms( 447f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) TemplateURLRef::SearchTermsArgs(term), 448f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) TemplateURLServiceFactory::GetForProfile( 449f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) &profile_)->search_terms_data())); 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static base::Time last_added_time; 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_added_time = std::max(base::Time::Now(), 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_added_time + base::TimeDelta::FromMicroseconds(1)); 453a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) history->AddPageWithDetails(search, base::string16(), visit_count, visit_count, 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_added_time, false, history::SOURCE_BROWSED); 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) history->SetKeywordSearchTermsForURL(search, t_url->id(), term); 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return search; 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 459a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)bool SearchProviderTest::FindMatchWithContents(const base::string16& contents, 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch* match) { 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (ACMatches::const_iterator i = provider_->matches().begin(); 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i != provider_->matches().end(); ++i) { 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (i->contents == contents) { 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *match = *i; 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool SearchProviderTest::FindMatchWithDestination(const GURL& url, 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch* match) { 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (ACMatches::const_iterator i = provider_->matches().begin(); 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i != provider_->matches().end(); ++i) { 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (i->destination_url == url) { 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *match = *i; 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SearchProviderTest::FinishDefaultSuggestQuery() { 484a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch net::TestURLFetcher* default_fetcher = 485a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch test_factory_.GetFetcherByID( 486a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch SearchProvider::kDefaultProviderURLFetcherID); 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(default_fetcher); 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Tell the SearchProvider the default suggest query is done. 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default_fetcher->set_response_code(200); 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default_fetcher->delegate()->OnURLFetchComplete(default_fetcher); 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 494f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void SearchProviderTest::ForcedQueryTestHelper( 495f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::string& input, 496f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::string& json, 497f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::string expected_matches[3], 498f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::string& error_description) { 4991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Send the query twice in order to have a synchronous pass after the first 5001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // response is received. This is necessary because SearchProvider doesn't 5011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // allow an asynchronous response to change the default match. 5021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci for (size_t i = 0; i < 2; ++i) { 5031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci QueryForInputAndWaitForFetcherResponses( 5041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASCIIToUTF16(input), false, json, std::string()); 5051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 506f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 507f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const ACMatches& matches = provider_->matches(); 508f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_LE(matches.size(), 3u); 509f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) size_t i = 0; 510f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Ensure that the returned matches equal the expectations. 511f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) for (; i < matches.size(); ++i) { 512f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(ASCIIToUTF16(expected_matches[i]), matches[i].contents) << 513f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) error_description; 514f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 515f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Ensure that no expected matches are missing. 516f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) for (; i < 3u; ++i) { 517f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(std::string(), expected_matches[i]) << 518f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "Case #" << i << ": " << error_description; 519f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 520f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 521f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 5221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid SearchProviderTest::CheckMatches(const std::string& description, 5231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const size_t num_expected_matches, 5241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const ExpectedMatch expected_matches[], 5251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const ACMatches& matches) { 5261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_FALSE(matches.empty()); 5271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_LE(matches.size(), num_expected_matches); 5281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci size_t i = 0; 5291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SCOPED_TRACE(description); 5301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Ensure that the returned matches equal the expectations. 5311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci for (; i < matches.size(); ++i) { 5321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SCOPED_TRACE(" Case # " + base::IntToString(i)); 5331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(ASCIIToUTF16(expected_matches[i].contents), matches[i].contents); 5341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(expected_matches[i].allowed_to_be_default_match, 5351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci matches[i].allowed_to_be_default_match); 5361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 5371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Ensure that no expected matches are missing. 5381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci for (; i < num_expected_matches; ++i) { 5391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SCOPED_TRACE(" Case # " + base::IntToString(i)); 5401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(kNotApplicable, expected_matches[i].contents); 5411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 5421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 5431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 544c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdochvoid SearchProviderTest::ResetFieldTrialList() { 545c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch // Destroy the existing FieldTrialList before creating a new one to avoid 546c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch // a DCHECK. 547c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch field_trial_list_.reset(); 548c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch field_trial_list_.reset(new base::FieldTrialList( 549c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch new metrics::SHA1EntropyProvider("foo"))); 5505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) variations::testing::ClearAllVariationParams(); 551c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch base::FieldTrial* trial = base::FieldTrialList::CreateFieldTrial( 552c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "AutocompleteDynamicTrial_0", "DefaultGroup"); 553c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch trial->group(); 554c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch} 555eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 556116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbase::FieldTrial* SearchProviderTest::CreateZeroSuggestFieldTrial( 557116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool enabled) { 558116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch std::map<std::string, std::string> params; 559116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch params[std::string(OmniboxFieldTrial::kZeroSuggestRule)] = enabled ? 560116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "true" : "false"; 5615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) variations::AssociateVariationParams( 562116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch OmniboxFieldTrial::kBundledExperimentFieldTrialName, "A", params); 563116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return base::FieldTrialList::CreateFieldTrial( 564116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch OmniboxFieldTrial::kBundledExperimentFieldTrialName, "A"); 565116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 566116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 5671e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)void SearchProviderTest::ClearAllResults() { 5681e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) provider_->ClearAllResults(); 5691e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 5701e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 571eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Actual Tests --------------------------------------------------------------- 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Make sure we query history for the default provider and a URLFetcher is 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// created for the default provider suggest results. 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SearchProviderTest, QueryDefaultProvider) { 576a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 term = term1_.substr(0, term1_.length() - 1); 577c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) QueryForInput(term, false, false); 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure the default providers suggest service was queried. 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::TestURLFetcher* fetcher = test_factory_.GetFetcherByID( 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SearchProvider::kDefaultProviderURLFetcherID); 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(fetcher); 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // And the URL matches what we expected. 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL expected_url(default_t_url_->suggestions_url_ref().ReplaceSearchTerms( 586f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) TemplateURLRef::SearchTermsArgs(term), 587f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) TemplateURLServiceFactory::GetForProfile( 588f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) &profile_)->search_terms_data())); 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(fetcher->GetOriginalURL() == expected_url); 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Tell the SearchProvider the suggest query is done. 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fetcher->set_response_code(200); 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fetcher->delegate()->OnURLFetchComplete(fetcher); 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fetcher = NULL; 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Run till the history results complete. 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunTillProviderDone(); 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The SearchProvider is done. Make sure it has a result for the history 6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // term term1. 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch term1_match; 6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(FindMatchWithDestination(term1_url_, &term1_match)); 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Term1 should not have a description, it's set later. 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(term1_match.description.empty()); 6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch wyt_match; 6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(FindMatchWithDestination( 6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL(default_t_url_->url_ref().ReplaceSearchTerms( 609f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) TemplateURLRef::SearchTermsArgs(term), 610f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) TemplateURLServiceFactory::GetForProfile( 611f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) &profile_)->search_terms_data())), 612f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) &wyt_match)); 6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(wyt_match.description.empty()); 6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch // The match for term1 should be more relevant than the what you typed match. 6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GT(term1_match.relevance, wyt_match.relevance); 617c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch // This longer match should be inlineable. 618c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_TRUE(term1_match.allowed_to_be_default_match); 619c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch // The what you typed match should be too, of course. 620c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_TRUE(wyt_match.allowed_to_be_default_match); 6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SearchProviderTest, HonorPreventInlineAutocomplete) { 624a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 term = term1_.substr(0, term1_.length() - 1); 625c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) QueryForInput(term, true, false); 6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(provider_->matches().empty()); 62890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_EQ(AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, 6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) provider_->matches()[0].type); 630c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_TRUE(provider_->matches()[0].allowed_to_be_default_match); 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Issues a query that matches the registered keyword and makes sure history 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// is queried as well as URLFetchers getting created. 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SearchProviderTest, QueryKeywordProvider) { 636a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 term = keyword_term_.substr(0, keyword_term_.length() - 1); 637eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch QueryForInput(keyword_t_url_->keyword() + ASCIIToUTF16(" ") + term, 638c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false, 639c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false); 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure the default providers suggest service was queried. 6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::TestURLFetcher* default_fetcher = test_factory_.GetFetcherByID( 6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SearchProvider::kDefaultProviderURLFetcherID); 6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(default_fetcher); 6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Tell the SearchProvider the default suggest query is done. 6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default_fetcher->set_response_code(200); 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default_fetcher->delegate()->OnURLFetchComplete(default_fetcher); 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default_fetcher = NULL; 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure the keyword providers suggest service was queried. 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::TestURLFetcher* keyword_fetcher = test_factory_.GetFetcherByID( 6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SearchProvider::kKeywordProviderURLFetcherID); 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(keyword_fetcher); 6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // And the URL matches what we expected. 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL expected_url(keyword_t_url_->suggestions_url_ref().ReplaceSearchTerms( 658f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) TemplateURLRef::SearchTermsArgs(term), 659f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) TemplateURLServiceFactory::GetForProfile( 660f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) &profile_)->search_terms_data())); 6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(keyword_fetcher->GetOriginalURL() == expected_url); 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Tell the SearchProvider the keyword suggest query is done. 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keyword_fetcher->set_response_code(200); 6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keyword_fetcher->delegate()->OnURLFetchComplete(keyword_fetcher); 6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keyword_fetcher = NULL; 6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Run till the history results complete. 6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunTillProviderDone(); 6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The SearchProvider is done. Make sure it has a result for the history 6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // term keyword. 6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch match; 6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(FindMatchWithDestination(keyword_url_, &match)); 6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The match should have an associated keyword. 6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(match.keyword.empty()); 6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The fill into edit should contain the keyword. 6805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(keyword_t_url_->keyword() + base::char16(' ') + keyword_term_, 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) match.fill_into_edit); 6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SearchProviderTest, DontSendPrivateDataToSuggest) { 6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // None of the following input strings should be sent to the suggest server, 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // because they may contain private data. 6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* inputs[] = { 6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "username:password", 6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "http://username:password", 6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "https://username:password", 6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "username:password@hostname", 6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "http://username:password@hostname/", 6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "file://filename", 6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "data://data", 6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "unknownscheme:anything", 6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "http://hostname/?query=q", 6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "http://hostname/path#ref", 6984e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) "http://hostname/path #ref", 6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "https://hostname/path", 7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < arraysize(inputs); ++i) { 703c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) QueryForInput(ASCIIToUTF16(inputs[i]), false, false); 7044e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Make sure the default provider's suggest service was not queried. 7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(test_factory_.GetFetcherByID( 7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SearchProvider::kDefaultProviderURLFetcherID) == NULL); 7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Run till the history results complete. 7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunTillProviderDone(); 7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)TEST_F(SearchProviderTest, SendNonPrivateDataToSuggest) { 7134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // All of the following input strings should be sent to the suggest server, 7144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // because they should not get caught by the private data checks. 7154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const char* inputs[] = { 7164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) "query", 7174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) "query with spaces", 7184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) "http://hostname", 7194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) "http://hostname/path", 7204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) "http://hostname #ref", 7214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) "www.hostname.com #ref", 7224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) "https://hostname", 7234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) "#hashtag", 7244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) "foo https://hostname/path" 7254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) }; 7264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 7274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) profile_.BlockUntilHistoryProcessesPendingRequests(); 7284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) for (size_t i = 0; i < arraysize(inputs); ++i) { 7294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) QueryForInput(ASCIIToUTF16(inputs[i]), false, false); 7304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Make sure the default provider's suggest service was queried. 7314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ASSERT_TRUE(test_factory_.GetFetcherByID( 7324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) SearchProvider::kDefaultProviderURLFetcherID) != NULL); 7334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 7344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 7354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SearchProviderTest, DontAutocompleteURLLikeTerms) { 7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url = AddSearchToHistory(default_t_url_, 7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("docs.google.com"), 1); 7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add the term as a url. 7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HistoryServiceFactory::GetForProfile(&profile_, Profile::EXPLICIT_ACCESS)-> 742a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) AddPageWithDetails(GURL("http://docs.google.com"), base::string16(), 1, 1, 7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time::Now(), false, history::SOURCE_BROWSED); 7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_.BlockUntilHistoryProcessesPendingRequests(); 7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch wyt_match; 7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(QueryForInputAndSetWYTMatch(ASCIIToUTF16("docs"), 7485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &wyt_match)); 7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // There should be two matches, one for what you typed, the other for 7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 'docs.google.com'. The search term should have a lower priority than the 7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // what you typed match. 7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2u, provider_->matches().size()); 7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch term_match; 7555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(FindMatchWithDestination(url, &term_match)); 7565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GT(wyt_match.relevance, term_match.relevance); 757c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_TRUE(wyt_match.allowed_to_be_default_match); 758c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_TRUE(term_match.allowed_to_be_default_match); 7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 761f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(SearchProviderTest, DontGiveNavsuggestionsInForcedQueryMode) { 762f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::string kEmptyMatch; 763f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) struct { 764f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::string json; 765f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::string matches_in_default_mode[3]; 766f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::string matches_in_forced_query_mode[3]; 767f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } cases[] = { 768f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Without suggested relevance scores. 769f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "[\"a\",[\"http://a1.com\", \"a2\"],[],[]," 770f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\", \"QUERY\"]}]", 771f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "a", "a1.com", "a2" }, 772f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "a", "a2", kEmptyMatch } }, 773f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 774f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // With suggested relevance scores in a situation where navsuggest would 775f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // go second. 776f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "[\"a\",[\"http://a1.com\", \"a2\"],[],[]," 777f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\", \"QUERY\"]," 778f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"google:suggestrelevance\":[1250, 1200]}]", 779f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "a", "a1.com", "a2" }, 780f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "a", "a2", kEmptyMatch } }, 781f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 782f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // With suggested relevance scores in a situation where navsuggest 783f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // would go first. 784f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "[\"a\",[\"http://a1.com\", \"a2\"],[],[]," 785f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\", \"QUERY\"]," 786f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"google:suggestrelevance\":[1350, 1250]}]", 787f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "a1.com", "a", "a2" }, 788f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "a", "a2", kEmptyMatch } }, 789f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 790f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // With suggested relevance scores in a situation where navsuggest 791f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // would go first only because verbatim has been demoted. 792f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "[\"a\",[\"http://a1.com\", \"a2\"],[],[]," 793f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\", \"QUERY\"]," 794f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"google:suggestrelevance\":[1450, 1400]," 795f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"google:verbatimrelevance\":1350}]", 796f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "a1.com", "a2", "a" }, 797f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "a2", "a", kEmptyMatch } }, 798f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) }; 799f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 800f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); ++i) { 801f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ForcedQueryTestHelper("a", cases[i].json, cases[i].matches_in_default_mode, 802f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "regular input with json=" + cases[i].json); 803f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ForcedQueryTestHelper("?a", cases[i].json, 804f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) cases[i].matches_in_forced_query_mode, 805f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "forced query input with json=" + cases[i].json); 806f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 807f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 808f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 8095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A multiword search with one visit should not autocomplete until multiple 8105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// words are typed. 8115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SearchProviderTest, DontAutocompleteUntilMultipleWordsTyped) { 8125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL term_url(AddSearchToHistory(default_t_url_, ASCIIToUTF16("one search"), 8135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1)); 8145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_.BlockUntilHistoryProcessesPendingRequests(); 8155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch wyt_match; 8175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(QueryForInputAndSetWYTMatch(ASCIIToUTF16("on"), 8185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &wyt_match)); 8195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2u, provider_->matches().size()); 8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch term_match; 8215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(FindMatchWithDestination(term_url, &term_match)); 8225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GT(wyt_match.relevance, term_match.relevance); 823c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_TRUE(wyt_match.allowed_to_be_default_match); 824c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_TRUE(term_match.allowed_to_be_default_match); 8255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(QueryForInputAndSetWYTMatch(ASCIIToUTF16("one se"), 8275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &wyt_match)); 8285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2u, provider_->matches().size()); 8295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(FindMatchWithDestination(term_url, &term_match)); 8305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GT(term_match.relevance, wyt_match.relevance); 831c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_TRUE(term_match.allowed_to_be_default_match); 832c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_TRUE(wyt_match.allowed_to_be_default_match); 8335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A multiword search with more than one visit should autocomplete immediately. 8365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SearchProviderTest, AutocompleteMultipleVisitsImmediately) { 8375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL term_url(AddSearchToHistory(default_t_url_, ASCIIToUTF16("two searches"), 8385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2)); 8395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_.BlockUntilHistoryProcessesPendingRequests(); 8405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch wyt_match; 8425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(QueryForInputAndSetWYTMatch(ASCIIToUTF16("tw"), 8435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &wyt_match)); 8445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2u, provider_->matches().size()); 8455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch term_match; 8465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(FindMatchWithDestination(term_url, &term_match)); 8475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GT(term_match.relevance, wyt_match.relevance); 848c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_TRUE(term_match.allowed_to_be_default_match); 849c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_TRUE(wyt_match.allowed_to_be_default_match); 8505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 852effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Autocompletion should work at a word boundary after a space, and should 853effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// offer a suggestion for the trimmed search query. 8545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SearchProviderTest, AutocompleteAfterSpace) { 855effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch AddSearchToHistory(default_t_url_, ASCIIToUTF16("two searches "), 2); 856effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch GURL suggested_url(default_t_url_->url_ref().ReplaceSearchTerms( 857f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) TemplateURLRef::SearchTermsArgs(ASCIIToUTF16("two searches")), 858f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) TemplateURLServiceFactory::GetForProfile( 859f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) &profile_)->search_terms_data())); 8605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_.BlockUntilHistoryProcessesPendingRequests(); 8615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch wyt_match; 8635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(QueryForInputAndSetWYTMatch(ASCIIToUTF16("two "), 8645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &wyt_match)); 8655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2u, provider_->matches().size()); 8665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch term_match; 867effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_TRUE(FindMatchWithDestination(suggested_url, &term_match)); 8685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GT(term_match.relevance, wyt_match.relevance); 869c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_TRUE(term_match.allowed_to_be_default_match); 870effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_EQ(ASCIIToUTF16("searches"), term_match.inline_autocompletion); 871effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_EQ(ASCIIToUTF16("two searches"), term_match.fill_into_edit); 872c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_TRUE(wyt_match.allowed_to_be_default_match); 8735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Newer multiword searches should score more highly than older ones. 8765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SearchProviderTest, ScoreNewerSearchesHigher) { 8775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL term_url_a(AddSearchToHistory(default_t_url_, 8785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("three searches aaa"), 1)); 8795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL term_url_b(AddSearchToHistory(default_t_url_, 8805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("three searches bbb"), 1)); 8815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_.BlockUntilHistoryProcessesPendingRequests(); 8825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch wyt_match; 8845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(QueryForInputAndSetWYTMatch(ASCIIToUTF16("three se"), 8855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &wyt_match)); 8865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(3u, provider_->matches().size()); 8875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch term_match_a; 8885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(FindMatchWithDestination(term_url_a, &term_match_a)); 8895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch term_match_b; 8905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(FindMatchWithDestination(term_url_b, &term_match_b)); 8915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GT(term_match_b.relevance, term_match_a.relevance); 8925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GT(term_match_a.relevance, wyt_match.relevance); 893c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_TRUE(term_match_b.allowed_to_be_default_match); 894c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_TRUE(term_match_a.allowed_to_be_default_match); 895c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_TRUE(wyt_match.allowed_to_be_default_match); 8965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// An autocompleted multiword search should not be replaced by a different 899116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// autocompletion while the user is still typing a valid prefix unless the 900116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// user has typed the prefix as a query before. 9015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SearchProviderTest, DontReplacePreviousAutocompletion) { 9025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL term_url_a(AddSearchToHistory(default_t_url_, 903116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASCIIToUTF16("four searches aaa"), 3)); 9045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL term_url_b(AddSearchToHistory(default_t_url_, 9055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("four searches bbb"), 1)); 906116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch GURL term_url_c(AddSearchToHistory(default_t_url_, 907116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASCIIToUTF16("four searches"), 1)); 9085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_.BlockUntilHistoryProcessesPendingRequests(); 9095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch wyt_match; 9115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(QueryForInputAndSetWYTMatch(ASCIIToUTF16("fo"), 9125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &wyt_match)); 913116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_EQ(4u, provider_->matches().size()); 9145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch term_match_a; 9155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(FindMatchWithDestination(term_url_a, &term_match_a)); 9165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch term_match_b; 9175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(FindMatchWithDestination(term_url_b, &term_match_b)); 918116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch AutocompleteMatch term_match_c; 919116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(FindMatchWithDestination(term_url_c, &term_match_c)); 9205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GT(term_match_a.relevance, wyt_match.relevance); 921116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // We don't care about the relative order of b and c. 9225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GT(wyt_match.relevance, term_match_b.relevance); 923116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_GT(wyt_match.relevance, term_match_c.relevance); 924c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_TRUE(term_match_a.allowed_to_be_default_match); 925c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_TRUE(term_match_b.allowed_to_be_default_match); 926116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(term_match_c.allowed_to_be_default_match); 927c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_TRUE(wyt_match.allowed_to_be_default_match); 9285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(QueryForInputAndSetWYTMatch(ASCIIToUTF16("four se"), 9305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &wyt_match)); 931116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_EQ(4u, provider_->matches().size()); 9325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(FindMatchWithDestination(term_url_a, &term_match_a)); 9335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(FindMatchWithDestination(term_url_b, &term_match_b)); 934116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(FindMatchWithDestination(term_url_c, &term_match_c)); 9355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GT(term_match_a.relevance, wyt_match.relevance); 9365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GT(wyt_match.relevance, term_match_b.relevance); 937116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_GT(wyt_match.relevance, term_match_c.relevance); 938116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(term_match_a.allowed_to_be_default_match); 939116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(term_match_b.allowed_to_be_default_match); 940116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(term_match_c.allowed_to_be_default_match); 941116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(wyt_match.allowed_to_be_default_match); 942116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 943116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // For the exact previously-issued query, the what-you-typed match should win. 944116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_NO_FATAL_FAILURE( 945116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch QueryForInputAndSetWYTMatch(ASCIIToUTF16("four searches"), &wyt_match)); 946116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_EQ(3u, provider_->matches().size()); 947116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(FindMatchWithDestination(term_url_a, &term_match_a)); 948116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(FindMatchWithDestination(term_url_b, &term_match_b)); 949116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_GT(wyt_match.relevance, term_match_a.relevance); 950116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_GT(wyt_match.relevance, term_match_b.relevance); 951c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_TRUE(term_match_a.allowed_to_be_default_match); 952c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_TRUE(term_match_b.allowed_to_be_default_match); 953c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_TRUE(wyt_match.allowed_to_be_default_match); 9545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Non-completable multiword searches should not crowd out single-word searches. 9575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SearchProviderTest, DontCrowdOutSingleWords) { 9585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL term_url(AddSearchToHistory(default_t_url_, ASCIIToUTF16("five"), 1)); 9595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddSearchToHistory(default_t_url_, ASCIIToUTF16("five searches bbb"), 1); 9605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddSearchToHistory(default_t_url_, ASCIIToUTF16("five searches ccc"), 1); 9615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddSearchToHistory(default_t_url_, ASCIIToUTF16("five searches ddd"), 1); 9625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddSearchToHistory(default_t_url_, ASCIIToUTF16("five searches eee"), 1); 9635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_.BlockUntilHistoryProcessesPendingRequests(); 9645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch wyt_match; 9665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(QueryForInputAndSetWYTMatch(ASCIIToUTF16("fi"), 9675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &wyt_match)); 9685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(AutocompleteProvider::kMaxMatches + 1, provider_->matches().size()); 9695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch term_match; 9705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(FindMatchWithDestination(term_url, &term_match)); 9715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GT(term_match.relevance, wyt_match.relevance); 972c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_TRUE(term_match.allowed_to_be_default_match); 973c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_TRUE(wyt_match.allowed_to_be_default_match); 9745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Inline autocomplete matches regardless of case differences from the input. 9775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SearchProviderTest, InlineMixedCaseMatches) { 9785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL term_url(AddSearchToHistory(default_t_url_, ASCIIToUTF16("FOO"), 1)); 9795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_.BlockUntilHistoryProcessesPendingRequests(); 9805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch wyt_match; 9825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(QueryForInputAndSetWYTMatch(ASCIIToUTF16("f"), 9835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &wyt_match)); 9845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2u, provider_->matches().size()); 9855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch term_match; 9865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(FindMatchWithDestination(term_url, &term_match)); 9875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GT(term_match.relevance, wyt_match.relevance); 9885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("FOO"), term_match.fill_into_edit); 989ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_EQ(ASCIIToUTF16("OO"), term_match.inline_autocompletion); 990c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_TRUE(term_match.allowed_to_be_default_match); 9915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Verifies AutocompleteControllers return results (including keyword 9942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// results) in the right order and set descriptions for them correctly. 9952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(SearchProviderTest, KeywordOrderingAndDescriptions) { 9965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add an entry that corresponds to a keyword search with 'term2'. 9975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddSearchToHistory(keyword_t_url_, ASCIIToUTF16("term2"), 1); 9985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_.BlockUntilHistoryProcessesPendingRequests(); 9995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1000116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch AutocompleteController controller(&profile_, 1001116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch TemplateURLServiceFactory::GetForProfile(&profile_), 1002116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch NULL, AutocompleteProvider::TYPE_SEARCH); 10032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) controller.Start(AutocompleteInput( 1004a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASCIIToUTF16("k t"), base::string16::npos, base::string16(), GURL(), 1005116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch metrics::OmniboxEventProto::INVALID_SPEC, false, false, true, true, 1006116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ChromeAutocompleteSchemeClassifier(&profile_))); 10075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const AutocompleteResult& result = controller.result(); 10085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // There should be three matches, one for the keyword history, one for 10102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // keyword provider's what-you-typed, and one for the default provider's 10112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // what you typed, in that order. 10122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(3u, result.size()); 101390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(AutocompleteMatchType::SEARCH_HISTORY, result.match_at(0).type); 101490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(AutocompleteMatchType::SEARCH_OTHER_ENGINE, 101590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) result.match_at(1).type); 101690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, 101790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) result.match_at(2).type); 10182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_GT(result.match_at(0).relevance, result.match_at(1).relevance); 10192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_GT(result.match_at(1).relevance, result.match_at(2).relevance); 1020c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_TRUE(result.match_at(0).allowed_to_be_default_match); 1021c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_TRUE(result.match_at(1).allowed_to_be_default_match); 1022f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(result.match_at(2).allowed_to_be_default_match); 10232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The two keyword results should come with the keyword we expect. 10252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("k"), result.match_at(0).keyword); 10262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("k"), result.match_at(1).keyword); 10272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The default provider has a different keyword. (We don't explicitly 10282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // set it during this test, so all we do is assert that it's different.) 10292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_NE(result.match_at(0).keyword, result.match_at(2).keyword); 10302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The top result will always have a description. The third result, 10322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // coming from a different provider than the first two, should also. 10332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Whether the second result has one doesn't matter much. (If it was 10342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // missing, people would infer that it's the same search provider as 10352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // the one above it.) 10362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(result.match_at(0).description.empty()); 10372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(result.match_at(2).description.empty()); 10382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_NE(result.match_at(0).description, result.match_at(2).description); 10392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 10405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(SearchProviderTest, KeywordVerbatim) { 10422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestData cases[] = { 10432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Test a simple keyword input. 10442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ASCIIToUTF16("k foo"), 2, 10452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ResultInfo(GURL("http://keyword/foo"), 104690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) AutocompleteMatchType::SEARCH_OTHER_ENGINE, 1047f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) true, 10482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASCIIToUTF16("k foo")), 10492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ResultInfo(GURL("http://defaultturl/k%20foo"), 105090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, 1051f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) false, 10522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASCIIToUTF16("k foo") ) } }, 10532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Make sure extra whitespace after the keyword doesn't change the 1055effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // keyword verbatim query. Also verify that interior consecutive 1056effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // whitespace gets trimmed. 10572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ASCIIToUTF16("k foo"), 2, 10582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ResultInfo(GURL("http://keyword/foo"), 105990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) AutocompleteMatchType::SEARCH_OTHER_ENGINE, 1060f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) true, 10612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASCIIToUTF16("k foo")), 1062effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ResultInfo(GURL("http://defaultturl/k%20foo"), 106390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, 1064f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) false, 1065effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ASCIIToUTF16("k foo")) } }, 10662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Leading whitespace should be stripped before SearchProvider gets the 10672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // input; hence there are no tests here about how it handles those inputs. 10682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1069effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Verify that interior consecutive whitespace gets trimmed in either case. 10702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ASCIIToUTF16("k foo bar"), 2, 1071effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch { ResultInfo(GURL("http://keyword/foo%20bar"), 1072effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch AutocompleteMatchType::SEARCH_OTHER_ENGINE, 1073effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch true, 1074effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ASCIIToUTF16("k foo bar")), 1075effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ResultInfo(GURL("http://defaultturl/k%20foo%20bar"), 1076effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, 1077effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch false, 1078effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ASCIIToUTF16("k foo bar")) } }, 1079effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 1080effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Verify that trailing whitespace gets trimmed. 1081effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch { ASCIIToUTF16("k foo bar "), 2, 1082effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch { ResultInfo(GURL("http://keyword/foo%20bar"), 108390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) AutocompleteMatchType::SEARCH_OTHER_ENGINE, 1084f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) true, 1085effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ASCIIToUTF16("k foo bar")), 1086effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ResultInfo(GURL("http://defaultturl/k%20foo%20bar"), 108790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, 1088f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) false, 1089effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ASCIIToUTF16("k foo bar")) } }, 10902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Keywords can be prefixed by certain things that should get ignored 10922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // when constructing the keyword match. 10932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ASCIIToUTF16("www.k foo"), 2, 10942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ResultInfo(GURL("http://keyword/foo"), 109590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) AutocompleteMatchType::SEARCH_OTHER_ENGINE, 1096f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) true, 10972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASCIIToUTF16("k foo")), 10982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ResultInfo(GURL("http://defaultturl/www.k%20foo"), 109990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, 1100f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) false, 11012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASCIIToUTF16("www.k foo")) } }, 11022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ASCIIToUTF16("http://k foo"), 2, 11032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ResultInfo(GURL("http://keyword/foo"), 110490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) AutocompleteMatchType::SEARCH_OTHER_ENGINE, 1105f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) true, 11062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASCIIToUTF16("k foo")), 11072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ResultInfo(GURL("http://defaultturl/http%3A//k%20foo"), 110890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, 1109f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) false, 11102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASCIIToUTF16("http://k foo")) } }, 11112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ASCIIToUTF16("http://www.k foo"), 2, 11122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ResultInfo(GURL("http://keyword/foo"), 111390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) AutocompleteMatchType::SEARCH_OTHER_ENGINE, 1114f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) true, 11152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASCIIToUTF16("k foo")), 11162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ResultInfo(GURL("http://defaultturl/http%3A//www.k%20foo"), 111790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, 1118f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) false, 11192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASCIIToUTF16("http://www.k foo")) } }, 11202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // A keyword with no remaining input shouldn't get a keyword 11222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // verbatim match. 11232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ASCIIToUTF16("k"), 1, 11242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ResultInfo(GURL("http://defaultturl/k"), 112590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, 1126f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) true, 11272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASCIIToUTF16("k")) } }, 1128effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Ditto. Trailing whitespace shouldn't make a difference. 11292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { ASCIIToUTF16("k "), 1, 1130effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch { ResultInfo(GURL("http://defaultturl/k"), 113190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, 1132f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) true, 1133effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ASCIIToUTF16("k")) } } 11342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The fact that verbatim queries to keyword are handled by KeywordProvider 11362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // not SearchProvider is tested in 11372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // chrome/browser/extensions/api/omnibox/omnibox_apitest.cc. 11382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 11395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Test not in keyword mode. 11412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RunTest(cases, arraysize(cases), false); 11422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Test in keyword mode. (Both modes should give the same result.) 11442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RunTest(cases, arraysize(cases), true); 11455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1147eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Ensures command-line flags are reflected in the URLs the search provider 1148eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// generates. 1149eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTEST_F(SearchProviderTest, CommandLineOverrides) { 1150eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch TemplateURLService* turl_model = 1151eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch TemplateURLServiceFactory::GetForProfile(&profile_); 1152eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 1153eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch TemplateURLData data; 1154eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch data.short_name = ASCIIToUTF16("default"); 1155eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch data.SetKeyword(data.short_name); 1156eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch data.SetURL("{google:baseURL}{searchTerms}"); 1157f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) default_t_url_ = new TemplateURL(data); 1158eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch turl_model->Add(default_t_url_); 11595c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu turl_model->SetUserSelectedDefaultSearchProvider(default_t_url_); 1160eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 1161eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch CommandLine::ForCurrentProcess()->AppendSwitchASCII(switches::kGoogleBaseURL, 1162eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "http://www.bar.com/"); 1163eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch CommandLine::ForCurrentProcess()->AppendSwitchASCII( 1164eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch switches::kExtraSearchQueryParams, "a=b"); 1165eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 1166eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch TestData cases[] = { 1167eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { ASCIIToUTF16("k a"), 2, 1168eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { ResultInfo(GURL("http://keyword/a"), 1169eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch AutocompleteMatchType::SEARCH_OTHER_ENGINE, 1170f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) true, 1171eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASCIIToUTF16("k a")), 1172eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ResultInfo(GURL("http://www.bar.com/k%20a?a=b"), 1173eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, 1174f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) false, 1175eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASCIIToUTF16("k a")) } }, 1176eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch }; 1177eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 1178eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch RunTest(cases, arraysize(cases), false); 1179eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 1180eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 11812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Verifies Navsuggest results don't set a TemplateURL, which Instant relies on. 11822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Also verifies that just the *first* navigational result is listed as a match 11832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// if suggested relevance scores were not sent. 11842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(SearchProviderTest, NavSuggestNoSuggestedRelevanceScores) { 11851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci QueryForInputAndWaitForFetcherResponses( 11861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASCIIToUTF16("a.c"), false, 11875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "[\"a.c\",[\"a.com\", \"a.com/b\"],[\"a\", \"b\"],[]," 11881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\"]}]", 11891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string()); 11905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure the only match is 'a.com' and it doesn't have a template_url. 11925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch nav_match; 11935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(FindMatchWithDestination(GURL("http://a.com"), &nav_match)); 11945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(nav_match.keyword.empty()); 11951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FALSE(nav_match.allowed_to_be_default_match); 11965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(FindMatchWithDestination(GURL("http://a.com/b"), &nav_match)); 11975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Verifies that the most relevant suggest results are added properly. 12005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SearchProviderTest, SuggestRelevance) { 12011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci QueryForInputAndWaitForFetcherResponses( 12021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASCIIToUTF16("a"), false, "[\"a\",[\"a1\", \"a2\", \"a3\", \"a4\"]]", 12031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string()); 12045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check the expected verbatim and (first 3) suggestions' relative relevances. 12065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch verbatim, match_a1, match_a2, match_a3, match_a4; 12075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(FindMatchWithContents(ASCIIToUTF16("a"), &verbatim)); 12085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(FindMatchWithContents(ASCIIToUTF16("a1"), &match_a1)); 12095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(FindMatchWithContents(ASCIIToUTF16("a2"), &match_a2)); 12105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(FindMatchWithContents(ASCIIToUTF16("a3"), &match_a3)); 12115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(FindMatchWithContents(ASCIIToUTF16("a4"), &match_a4)); 12125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GT(verbatim.relevance, match_a1.relevance); 12135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GT(match_a1.relevance, match_a2.relevance); 12145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GT(match_a2.relevance, match_a3.relevance); 1215c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_TRUE(verbatim.allowed_to_be_default_match); 12161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FALSE(match_a1.allowed_to_be_default_match); 12171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FALSE(match_a2.allowed_to_be_default_match); 12181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FALSE(match_a3.allowed_to_be_default_match); 12195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1221f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Verifies that the default provider abandons suggested relevance scores 1222f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// when in keyword mode. This should happen regardless of whether the 1223f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// keyword provider returns suggested relevance scores. 1224f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(SearchProviderTest, DefaultProviderNoSuggestRelevanceInKeywordMode) { 1225f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) struct { 1226f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::string default_provider_json; 1227f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::string keyword_provider_json; 1228f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::string matches[5]; 1229f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } cases[] = { 1230f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // First, try an input where the keyword provider does not deliver 1231f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // suggested relevance scores. 1232f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "[\"k a\",[\"k adefault-query\", \"adefault.com\"],[],[]," 1233f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "{\"google:verbatimrelevance\":9700," 1234f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"google:suggesttype\":[\"QUERY\", \"NAVIGATION\"]," 1235f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"google:suggestrelevance\":[9900, 9800]}]", 1236f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "[\"a\",[\"akeyword-query\"],[],[],{\"google:suggesttype\":[\"QUERY\"]}]", 1237f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "a", "akeyword-query", "k a", "adefault.com", "k adefault-query" } }, 1238f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1239f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Now try with keyword provider suggested relevance scores. 1240f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "[\"k a\",[\"k adefault-query\", \"adefault.com\"],[],[]," 1241f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "{\"google:verbatimrelevance\":9700," 1242f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"google:suggesttype\":[\"QUERY\", \"NAVIGATION\"]," 1243f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"google:suggestrelevance\":[9900, 9800]}]", 1244f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "[\"a\",[\"akeyword-query\"],[],[],{\"google:suggesttype\":[\"QUERY\"]," 1245f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"google:verbatimrelevance\":9500," 1246f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"google:suggestrelevance\":[9600]}]", 1247f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "akeyword-query", "a", "k a", "adefault.com", "k adefault-query" } } 1248f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) }; 1249f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 12501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); ++i) { 12511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Send the query twice in order to have a synchronous pass after the first 12521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // response is received. This is necessary because SearchProvider doesn't 12531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // allow an asynchronous response to change the default match. 12541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci for (size_t j = 0; j < 2; ++j) { 12551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci QueryForInputAndWaitForFetcherResponses( 12561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASCIIToUTF16("k a"), true, cases[i].default_provider_json, 12571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci cases[i].keyword_provider_json); 12581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 1259f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 12601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SCOPED_TRACE( 12611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "for input with default_provider_json=" + 1262f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) cases[i].default_provider_json + " and keyword_provider_json=" + 12631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci cases[i].keyword_provider_json); 1264f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const ACMatches& matches = provider_->matches(); 1265f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_LE(matches.size(), ARRAYSIZE_UNSAFE(cases[i].matches)); 1266f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) size_t j = 0; 1267f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Ensure that the returned matches equal the expectations. 12681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci for (; j < matches.size(); ++j) 12691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(ASCIIToUTF16(cases[i].matches[j]), matches[j].contents); 1270f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Ensure that no expected matches are missing. 1271f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) for (; j < ARRAYSIZE_UNSAFE(cases[i].matches); ++j) 12721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(std::string(), cases[i].matches[j]); 1273f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 1274f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 1275f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 12762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Verifies that suggest results with relevance scores are added 12772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// properly when using the default fetcher. When adding a new test 12782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// case to this test, please consider adding it to the tests in 12792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// KeywordFetcherSuggestRelevance below. 12802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(SearchProviderTest, DefaultFetcherSuggestRelevance) { 12815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct { 12825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string json; 12831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const ExpectedMatch matches[6]; 1284ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const std::string inline_autocompletion; 12855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } cases[] = { 12865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Ensure that suggestrelevance scores reorder matches. 12875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "[\"a\",[\"b\", \"c\"],[],[],{\"google:suggestrelevance\":[1, 2]}]", 12881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "a", true }, { "c", false }, { "b", false }, kEmptyExpectedMatch, 12891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kEmptyExpectedMatch, kEmptyExpectedMatch }, 1290c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch std::string() }, 1291c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "[\"a\",[\"http://b.com\", \"http://c.com\"],[],[]," 1292c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\"]," 1293c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "\"google:suggestrelevance\":[1, 2]}]", 12941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "a", true }, { "c.com", false }, { "b.com", false }, 12951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kEmptyExpectedMatch, kEmptyExpectedMatch, kEmptyExpectedMatch }, 1296c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch std::string() }, 1297c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch 1298c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch // Without suggested relevance scores, we should only allow one 1299c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch // navsuggest result to be be displayed. 1300c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "[\"a\",[\"http://b.com\", \"http://c.com\"],[],[]," 1301c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\"]}]", 13021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "a", true }, { "b.com", false }, kEmptyExpectedMatch, 13031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kEmptyExpectedMatch, kEmptyExpectedMatch, kEmptyExpectedMatch }, 1304c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch std::string() }, 1305c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch 1306c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch // Ensure that verbatimrelevance scores reorder or suppress verbatim. 1307c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch // Negative values will have no effect; the calculated value will be used. 1308c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "[\"a\",[\"a1\"],[],[],{\"google:verbatimrelevance\":9999," 1309c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "\"google:suggestrelevance\":[9998]}]", 13101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "a", true}, { "a1", false }, kEmptyExpectedMatch, 13111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kEmptyExpectedMatch, kEmptyExpectedMatch, kEmptyExpectedMatch }, 1312c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch std::string() }, 1313c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "[\"a\",[\"a1\"],[],[],{\"google:verbatimrelevance\":9998," 1314c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "\"google:suggestrelevance\":[9999]}]", 13151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "a1", true }, { "a", true }, kEmptyExpectedMatch, 13161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kEmptyExpectedMatch, kEmptyExpectedMatch, kEmptyExpectedMatch }, 1317c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "1" }, 1318c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "[\"a\",[\"a1\"],[],[],{\"google:verbatimrelevance\":0," 1319c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "\"google:suggestrelevance\":[9999]}]", 13201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "a1", true }, kEmptyExpectedMatch, kEmptyExpectedMatch, 13211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kEmptyExpectedMatch, kEmptyExpectedMatch, kEmptyExpectedMatch }, 1322c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "1" }, 1323c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "[\"a\",[\"a1\"],[],[],{\"google:verbatimrelevance\":-1," 1324c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "\"google:suggestrelevance\":[9999]}]", 13251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "a1", true }, { "a", true }, kEmptyExpectedMatch, 13261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kEmptyExpectedMatch, kEmptyExpectedMatch, kEmptyExpectedMatch }, 1327c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "1" }, 1328c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "[\"a\",[\"http://a.com\"],[],[]," 1329c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "{\"google:suggesttype\":[\"NAVIGATION\"]," 1330c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "\"google:verbatimrelevance\":9999," 1331c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "\"google:suggestrelevance\":[9998]}]", 13321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "a", true }, { "a.com", false }, kEmptyExpectedMatch, 13331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kEmptyExpectedMatch, kEmptyExpectedMatch, kEmptyExpectedMatch }, 1334c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch std::string() }, 1335c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "[\"a\",[\"http://a.com\"],[],[]," 1336c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "{\"google:suggesttype\":[\"NAVIGATION\"]," 1337c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "\"google:verbatimrelevance\":9998," 1338c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "\"google:suggestrelevance\":[9999]}]", 13391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "a.com", true }, { "a", true }, kEmptyExpectedMatch, 13401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kEmptyExpectedMatch, kEmptyExpectedMatch, kEmptyExpectedMatch }, 1341c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch ".com" }, 1342c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "[\"a\",[\"http://a.com\"],[],[]," 1343c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "{\"google:suggesttype\":[\"NAVIGATION\"]," 1344c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "\"google:verbatimrelevance\":0," 1345c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "\"google:suggestrelevance\":[9999]}]", 13461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "a.com", true }, kEmptyExpectedMatch, kEmptyExpectedMatch, 13471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kEmptyExpectedMatch, kEmptyExpectedMatch, kEmptyExpectedMatch }, 1348c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch ".com" }, 1349c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "[\"a\",[\"http://a.com\"],[],[]," 1350c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "{\"google:suggesttype\":[\"NAVIGATION\"]," 1351c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "\"google:verbatimrelevance\":-1," 1352c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "\"google:suggestrelevance\":[9999]}]", 13531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "a.com", true }, { "a", true }, kEmptyExpectedMatch, 13541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kEmptyExpectedMatch, kEmptyExpectedMatch, kEmptyExpectedMatch }, 1355c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch ".com" }, 1356c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch 1357c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch // Ensure that both types of relevance scores reorder matches together. 1358c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "[\"a\",[\"a1\", \"a2\"],[],[],{\"google:suggestrelevance\":[9999, 9997]," 1359c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "\"google:verbatimrelevance\":9998}]", 13601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "a1", true }, { "a", true }, { "a2", false }, kEmptyExpectedMatch, 13611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kEmptyExpectedMatch, kEmptyExpectedMatch }, 1362c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "1" }, 1363c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch 13641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Check that an inlineable result appears first regardless of its score. 13651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Also, if the result set lacks a single inlineable result, abandon the 13661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // request to suppress verbatim (verbatim_relevance=0), which will then 13671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // cause verbatim to appear (first). 1368c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "[\"a\",[\"b\"],[],[],{\"google:suggestrelevance\":[9999]}]", 13691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "a", true }, { "b", false }, kEmptyExpectedMatch, 13701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kEmptyExpectedMatch, kEmptyExpectedMatch, kEmptyExpectedMatch }, 1371c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch std::string() }, 1372c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "[\"a\",[\"b\"],[],[],{\"google:suggestrelevance\":[9999]," 1373c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "\"google:verbatimrelevance\":0}]", 13741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "a", true }, { "b", false }, kEmptyExpectedMatch, 13751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kEmptyExpectedMatch, kEmptyExpectedMatch, kEmptyExpectedMatch }, 1376c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch std::string() }, 1377c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "[\"a\",[\"http://b.com\"],[],[]," 1378c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "{\"google:suggesttype\":[\"NAVIGATION\"]," 1379c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "\"google:suggestrelevance\":[9999]}]", 13801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "a", true }, { "b.com", false }, kEmptyExpectedMatch, 13811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kEmptyExpectedMatch, kEmptyExpectedMatch, kEmptyExpectedMatch }, 1382c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch std::string() }, 1383c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "[\"a\",[\"http://b.com\"],[],[]," 1384c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "{\"google:suggesttype\":[\"NAVIGATION\"]," 1385c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "\"google:suggestrelevance\":[9999]," 1386c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "\"google:verbatimrelevance\":0}]", 13871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "a", true }, { "b.com", false }, kEmptyExpectedMatch, 13881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kEmptyExpectedMatch, kEmptyExpectedMatch, kEmptyExpectedMatch }, 1389c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch std::string() }, 1390c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch 1391c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch // Allow low-scoring matches. 1392c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "[\"a\",[\"a1\"],[],[],{\"google:verbatimrelevance\":0}]", 13931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "a1", true }, kEmptyExpectedMatch, kEmptyExpectedMatch, 13941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kEmptyExpectedMatch, kEmptyExpectedMatch, kEmptyExpectedMatch }, 1395c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "1" }, 13961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "[\"a\",[\"a1\"],[],[],{\"google:verbatimrelevance\":10}]", 13971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "a1", true }, { "a", true }, kEmptyExpectedMatch, 13981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kEmptyExpectedMatch, kEmptyExpectedMatch, kEmptyExpectedMatch }, 1399c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "1" }, 14001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "[\"a\",[\"a1\"],[],[],{\"google:suggestrelevance\":[10]," 1401c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "\"google:verbatimrelevance\":0}]", 14021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "a1", true }, kEmptyExpectedMatch, kEmptyExpectedMatch, 14031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kEmptyExpectedMatch, kEmptyExpectedMatch, kEmptyExpectedMatch }, 1404c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "1" }, 14051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "[\"a\",[\"a1\", \"a2\"],[],[],{\"google:suggestrelevance\":[10, 20]," 1406c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "\"google:verbatimrelevance\":0}]", 14071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "a2", true }, { "a1", false }, kEmptyExpectedMatch, 14081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kEmptyExpectedMatch, kEmptyExpectedMatch, kEmptyExpectedMatch }, 1409c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "2" }, 14101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "[\"a\",[\"a1\", \"a2\"],[],[],{\"google:suggestrelevance\":[10, 30]," 14111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "\"google:verbatimrelevance\":20}]", 14121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "a2", true }, { "a", true }, { "a1", false }, kEmptyExpectedMatch, 14131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kEmptyExpectedMatch, kEmptyExpectedMatch }, 1414c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "2" }, 1415c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "[\"a\",[\"http://a.com\"],[],[]," 1416c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "{\"google:suggesttype\":[\"NAVIGATION\"]," 14171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "\"google:suggestrelevance\":[10]," 1418c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "\"google:verbatimrelevance\":0}]", 14191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "a.com", true }, kEmptyExpectedMatch, kEmptyExpectedMatch, 14201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kEmptyExpectedMatch, kEmptyExpectedMatch, kEmptyExpectedMatch }, 1421c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch ".com" }, 1422c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "[\"a\",[\"http://a1.com\", \"http://a2.com\"],[],[]," 1423c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\"]," 14241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "\"google:suggestrelevance\":[10, 20]," 1425c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "\"google:verbatimrelevance\":0}]", 14261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "a2.com", true }, { "a1.com", false }, kEmptyExpectedMatch, 14271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kEmptyExpectedMatch, kEmptyExpectedMatch, kEmptyExpectedMatch }, 1428c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "2.com" }, 1429c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch 1430c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch // Ensure that all suggestions are considered, regardless of order. 1431c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "[\"a\",[\"b\", \"c\", \"d\", \"e\", \"f\", \"g\", \"h\"],[],[]," 14321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "{\"google:suggestrelevance\":[10, 20, 30, 40, 50, 60, 70]}]", 1433f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { { "a", true }, { "h", false }, { "g", false }, { "f", false }, 1434f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "e", false }, { "d", false } }, 1435c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch std::string() }, 1436c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "[\"a\",[\"http://b.com\", \"http://c.com\", \"http://d.com\"," 1437c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "\"http://e.com\", \"http://f.com\", \"http://g.com\"," 1438c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "\"http://h.com\"],[],[]," 1439c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\"," 1440c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "\"NAVIGATION\", \"NAVIGATION\"," 1441c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "\"NAVIGATION\", \"NAVIGATION\"," 1442c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "\"NAVIGATION\"]," 14431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "\"google:suggestrelevance\":[10, 20, 30, 40, 50, 60, 70]}]", 1444c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { { "a", true }, { "h.com", false }, { "g.com", false }, 1445f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "f.com", false }, { "e.com", false }, { "d.com", false } }, 1446c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch std::string() }, 1447c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch 1448a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Ensure that incorrectly sized suggestion relevance lists are ignored. 14491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "[\"a\",[\"a1\", \"a2\"],[],[],{\"google:suggestrelevance\":[10]}]", 14501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "a", true }, { "a1", false }, { "a2", false }, kEmptyExpectedMatch, 14511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kEmptyExpectedMatch, kEmptyExpectedMatch }, 1452ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::string() }, 14531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "[\"a\",[\"a1\"],[],[],{\"google:suggestrelevance\":[9999, 10]}]", 14541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "a", true }, { "a1", false }, kEmptyExpectedMatch, 14551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kEmptyExpectedMatch, kEmptyExpectedMatch, kEmptyExpectedMatch }, 1456ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::string() }, 1457c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "[\"a\",[\"http://a1.com\", \"http://a2.com\"],[],[]," 1458c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\"]," 14591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "\"google:suggestrelevance\":[10]}]", 14601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "a", true }, { "a1.com", false }, kEmptyExpectedMatch, 14611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kEmptyExpectedMatch, kEmptyExpectedMatch, kEmptyExpectedMatch }, 1462ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::string() }, 1463a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch { "[\"a\",[\"http://a1.com\"],[],[]," 1464a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch "{\"google:suggesttype\":[\"NAVIGATION\"]," 14651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "\"google:suggestrelevance\":[9999, 10]}]", 14661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "a", true }, { "a1.com", false }, kEmptyExpectedMatch, 14671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kEmptyExpectedMatch, kEmptyExpectedMatch, kEmptyExpectedMatch }, 1468a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch std::string() }, 1469a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 1470a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Ensure that all 'verbatim' results are merged with their maximum score. 1471a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch { "[\"a\",[\"a\", \"a1\", \"a2\"],[],[]," 1472a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch "{\"google:suggestrelevance\":[9998, 9997, 9999]}]", 14731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "a2", true }, { "a", true }, { "a1", false }, kEmptyExpectedMatch, 14741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kEmptyExpectedMatch, kEmptyExpectedMatch }, 1475a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch "2" }, 1476a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch { "[\"a\",[\"a\", \"a1\", \"a2\"],[],[]," 1477a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch "{\"google:suggestrelevance\":[9998, 9997, 9999]," 1478a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch "\"google:verbatimrelevance\":0}]", 14791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "a2", true }, { "a", true }, { "a1", false }, kEmptyExpectedMatch, 14801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kEmptyExpectedMatch, kEmptyExpectedMatch }, 1481a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch "2" }, 14822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1483a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Ensure that verbatim is always generated without other suggestions. 1484a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // TODO(msw): Ensure verbatimrelevance is respected (except suppression). 1485a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch { "[\"a\",[],[],[],{\"google:verbatimrelevance\":1}]", 14861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "a", true }, kEmptyExpectedMatch, kEmptyExpectedMatch, 14871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kEmptyExpectedMatch, kEmptyExpectedMatch, kEmptyExpectedMatch }, 1488a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch std::string() }, 1489a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch { "[\"a\",[],[],[],{\"google:verbatimrelevance\":0}]", 14901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "a", true }, kEmptyExpectedMatch, kEmptyExpectedMatch, 14911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kEmptyExpectedMatch, kEmptyExpectedMatch, kEmptyExpectedMatch }, 1492a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch std::string() }, 1493a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch }; 14945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 14951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); ++i) { 14961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Send the query twice in order to have a synchronous pass after the first 14971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // response is received. This is necessary because SearchProvider doesn't 14981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // allow an asynchronous response to change the default match. 14991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci for (size_t j = 0; j < 2; ++j) { 15001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci QueryForInputAndWaitForFetcherResponses( 15011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASCIIToUTF16("a"), false, cases[i].json, std::string()); 15021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 15032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 15042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string description = "for input with json=" + cases[i].json; 15051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CheckMatches(description, ARRAYSIZE_UNSAFE(cases[i].matches), 15061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci cases[i].matches, provider_->matches()); 15072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 15082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 15092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1510a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// Verifies that suggest results with relevance scores are added 1511a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// properly when using the keyword fetcher. This is similar to the 1512a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// test DefaultFetcherSuggestRelevance above but this uses inputs that 1513a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// trigger keyword suggestions (i.e., "k a" rather than "a") and has 1514a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// different expectations (because now the results are a mix of 1515a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// keyword suggestions and default provider suggestions). When a new 1516a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// test is added to this TEST_F, please consider if it would be 1517a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// appropriate to add to DefaultFetcherSuggestRelevance as well. 1518a02191e04bc25c4935f804f2c080ae28663d096dBen MurdochTEST_F(SearchProviderTest, KeywordFetcherSuggestRelevance) { 1519f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) struct KeywordFetcherMatch { 1520f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) std::string contents; 1521f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) bool from_keyword; 1522f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) bool allowed_to_be_default_match; 1523f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) }; 1524f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const KeywordFetcherMatch kEmptyMatch = { kNotApplicable, false, false }; 1525eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch struct { 1526eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const std::string json; 1527f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const KeywordFetcherMatch matches[6]; 1528f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::string inline_autocompletion; 1529eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } cases[] = { 1530f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Ensure that suggest relevance scores reorder matches and that 1531f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // the keyword verbatim (lacking a suggested verbatim score) beats 1532f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // the default provider verbatim. 1533f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "[\"a\",[\"b\", \"c\"],[],[],{\"google:suggestrelevance\":[1, 2]}]", 1534f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { { "a", true, true }, 1535f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "k a", false, false }, 1536f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "c", true, false }, 1537f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "b", true, false }, 1538f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) kEmptyMatch, kEmptyMatch }, 1539f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) std::string() }, 1540f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Again, check that relevance scores reorder matches, just this 1541f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // time with navigation matches. This also checks that with 1542f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // suggested relevance scores we allow multiple navsuggest results. 1543f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Note that navsuggest results that come from a keyword provider 1544f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // are marked as not a keyword result. (They don't go to a 1545f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // keyword search engine.) 1546f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "[\"a\",[\"http://b.com\", \"http://c.com\", \"d\"],[],[]," 1547f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\", \"QUERY\"]," 1548f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"google:suggestrelevance\":[1301, 1302, 1303]}]", 1549f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { { "a", true, true }, 1550f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "d", true, false }, 1551f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "c.com", false, false }, 1552f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "b.com", false, false }, 1553f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "k a", false, false }, 1554f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) kEmptyMatch }, 1555f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) std::string() }, 1556f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1557f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Without suggested relevance scores, we should only allow one 1558f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // navsuggest result to be be displayed. 1559f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "[\"a\",[\"http://b.com\", \"http://c.com\"],[],[]," 1560f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\"]}]", 1561f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { { "a", true, true }, 1562f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "b.com", false, false }, 1563f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "k a", false, false }, 1564f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) kEmptyMatch, kEmptyMatch, kEmptyMatch }, 1565f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) std::string() }, 1566f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1567f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Ensure that verbatimrelevance scores reorder or suppress verbatim. 1568f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Negative values will have no effect; the calculated value will be used. 1569f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "[\"a\",[\"a1\"],[],[],{\"google:verbatimrelevance\":9999," 1570f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"google:suggestrelevance\":[9998]}]", 1571f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { { "a", true, true }, 15721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "a1", true, false }, 1573f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "k a", false, false }, 1574f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) kEmptyMatch, kEmptyMatch, kEmptyMatch }, 1575f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) std::string() }, 1576f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "[\"a\",[\"a1\"],[],[],{\"google:verbatimrelevance\":9998," 1577f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"google:suggestrelevance\":[9999]}]", 1578f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { { "a1", true, true }, 1579f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "a", true, true }, 1580f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "k a", false, false }, 1581f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) kEmptyMatch, kEmptyMatch, kEmptyMatch }, 1582f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "1" }, 1583f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "[\"a\",[\"a1\"],[],[],{\"google:verbatimrelevance\":0," 1584f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"google:suggestrelevance\":[9999]}]", 1585f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { { "a1", true, true }, 1586f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "k a", false, false }, 1587f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) kEmptyMatch, kEmptyMatch, kEmptyMatch, kEmptyMatch }, 1588f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "1" }, 1589f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "[\"a\",[\"a1\"],[],[],{\"google:verbatimrelevance\":-1," 1590f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"google:suggestrelevance\":[9999]}]", 1591f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { { "a1", true, true }, 1592f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "a", true, true }, 1593f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "k a", false, false }, 1594f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) kEmptyMatch, kEmptyMatch, kEmptyMatch }, 1595f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "1" }, 1596f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "[\"a\",[\"http://a.com\"],[],[]," 1597f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\"]," 1598f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"google:verbatimrelevance\":9999," 1599f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"google:suggestrelevance\":[9998]}]", 1600f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { { "a", true, true }, 1601f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "a.com", false, false }, 1602f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "k a", false, false }, 1603f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) kEmptyMatch, kEmptyMatch, kEmptyMatch }, 1604f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) std::string() }, 1605f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1606f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Ensure that both types of relevance scores reorder matches together. 1607f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "[\"a\",[\"a1\", \"a2\"],[],[],{\"google:suggestrelevance\":[9999, 9997]," 1608f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"google:verbatimrelevance\":9998}]", 1609f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { { "a1", true, true }, 1610f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "a", true, true }, 16111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "a2", true, false }, 1612f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "k a", false, false }, 1613f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) kEmptyMatch, kEmptyMatch }, 1614f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "1" }, 1615f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 16161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Check that an inlineable match appears first regardless of its score. 1617f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "[\"a\",[\"b\"],[],[],{\"google:suggestrelevance\":[9999]}]", 16181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "a", true, true }, 16191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "b", true, false }, 1620f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "k a", false, false }, 1621f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) kEmptyMatch, kEmptyMatch, kEmptyMatch }, 1622f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) std::string() }, 1623f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "[\"a\",[\"http://b.com\"],[],[]," 1624f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\"]," 1625f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"google:suggestrelevance\":[9999]}]", 16261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "a", true, true }, 16271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "b.com", false, false }, 1628f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "k a", false, false }, 1629f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) kEmptyMatch, kEmptyMatch, kEmptyMatch }, 1630f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) std::string() }, 16311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // If there is no inlineable match, restore the keyword verbatim score. 16321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // The keyword verbatim match will then appear first. 1633f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "[\"a\",[\"b\"],[],[],{\"google:suggestrelevance\":[9999]," 1634f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"google:verbatimrelevance\":0}]", 16351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "a", true, true }, 16361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "b", true, false }, 1637f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "k a", false, false }, 1638f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) kEmptyMatch, kEmptyMatch, kEmptyMatch }, 1639f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) std::string() }, 1640f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "[\"a\",[\"http://b.com\"],[],[]," 1641f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\"]," 1642f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"google:suggestrelevance\":[9999]," 1643f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"google:verbatimrelevance\":0}]", 16441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "a", true, true }, 16451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "b.com", false, false }, 1646f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "k a", false, false }, 1647f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) kEmptyMatch, kEmptyMatch, kEmptyMatch }, 1648f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) std::string() }, 1649f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1650f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // The top result does not have to score as highly as calculated 1651f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // verbatim. i.e., there are no minimum score restrictions in 1652f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // this provider. 1653f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "[\"a\",[\"a1\"],[],[],{\"google:verbatimrelevance\":0}]", 1654f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { { "a1", true, true }, 1655f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "k a", false, false }, 1656f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) kEmptyMatch, kEmptyMatch, kEmptyMatch, kEmptyMatch }, 1657f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "1" }, 16581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "[\"a\",[\"a1\"],[],[],{\"google:verbatimrelevance\":10}]", 1659f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { { "a1", true, true }, 1660f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "k a", false, false }, 1661f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "a", true, true }, 1662f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) kEmptyMatch, kEmptyMatch, kEmptyMatch }, 1663f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "1" }, 16641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "[\"a\",[\"a1\"],[],[],{\"google:suggestrelevance\":[10]," 1665f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"google:verbatimrelevance\":0}]", 16661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "a1", true, true }, 16671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "k a", false, false }, 1668f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) kEmptyMatch, kEmptyMatch, kEmptyMatch, kEmptyMatch }, 1669f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "1" }, 16701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "[\"a\",[\"a1\", \"a2\"],[],[],{\"google:suggestrelevance\":[10, 20]," 1671f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"google:verbatimrelevance\":0}]", 16721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "a2", true, true }, 1673f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "k a", false, false }, 16741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "a1", true, false }, 1675f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) kEmptyMatch, kEmptyMatch, kEmptyMatch }, 1676f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "2" }, 16771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "[\"a\",[\"a1\", \"a2\"],[],[],{\"google:suggestrelevance\":[10, 30]," 16781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "\"google:verbatimrelevance\":20}]", 16791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "a2", true, true }, 16801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "k a", false, false }, 1681f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "a", true, true }, 16821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "a1", true, false }, 1683f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) kEmptyMatch, kEmptyMatch }, 1684f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "2" }, 1685f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1686f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Ensure that all suggestions are considered, regardless of order. 1687f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "[\"a\",[\"b\", \"c\", \"d\", \"e\", \"f\", \"g\", \"h\"],[],[]," 16881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "{\"google:suggestrelevance\":[10, 20, 30, 40, 50, 60, 70]}]", 1689f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { { "a", true, true }, 1690f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "k a", false, false }, 1691f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "h", true, false }, 1692f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "g", true, false }, 1693f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "f", true, false }, 1694f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "e", true, false } }, 1695f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) std::string() }, 1696f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "[\"a\",[\"http://b.com\", \"http://c.com\", \"http://d.com\"," 1697f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"http://e.com\", \"http://f.com\", \"http://g.com\"," 1698f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"http://h.com\"],[],[]," 1699f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\"," 1700f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"NAVIGATION\", \"NAVIGATION\"," 1701f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"NAVIGATION\", \"NAVIGATION\"," 1702f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"NAVIGATION\"]," 17031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "\"google:suggestrelevance\":[10, 20, 30, 40, 50, 60, 70]}]", 1704f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { { "a", true, true }, 1705f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "k a", false, false }, 1706f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "h.com", false, false }, 1707f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "g.com", false, false }, 1708f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "f.com", false, false }, 1709f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "e.com", false, false } }, 1710f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) std::string() }, 1711f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1712f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Ensure that incorrectly sized suggestion relevance lists are ignored. 1713f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Note that keyword suggestions by default (not in suggested relevance 1714f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // mode) score more highly than the default verbatim. 1715f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "[\"a\",[\"a1\", \"a2\"],[],[],{\"google:suggestrelevance\":[1]}]", 1716f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { { "a", true, true }, 17171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "a1", true, false }, 17181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "a2", true, false }, 1719f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "k a", false, false }, 1720f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) kEmptyMatch, kEmptyMatch }, 1721f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) std::string() }, 1722f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "[\"a\",[\"a1\"],[],[],{\"google:suggestrelevance\":[9999, 1]}]", 1723f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { { "a", true, true }, 17241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "a1", true, false }, 1725f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "k a", false, false }, 1726f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) kEmptyMatch, kEmptyMatch, kEmptyMatch }, 1727f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) std::string() }, 1728f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // In this case, ignoring the suggested relevance scores means we keep 1729f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // only one navsuggest result. 1730f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "[\"a\",[\"http://a1.com\", \"http://a2.com\"],[],[]," 1731f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\"]," 1732f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"google:suggestrelevance\":[1]}]", 1733f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { { "a", true, true }, 1734f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "a1.com", false, false }, 1735f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "k a", false, false }, 1736f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) kEmptyMatch, kEmptyMatch, kEmptyMatch }, 1737f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) std::string() }, 1738f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "[\"a\",[\"http://a1.com\"],[],[]," 1739f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\"]," 1740f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"google:suggestrelevance\":[9999, 1]}]", 1741f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { { "a", true, true }, 1742f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "a1.com", false, false }, 1743f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "k a", false, false }, 1744f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) kEmptyMatch, kEmptyMatch, kEmptyMatch }, 1745f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) std::string() }, 1746f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1747f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Ensure that all 'verbatim' results are merged with their maximum score. 1748f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "[\"a\",[\"a\", \"a1\", \"a2\"],[],[]," 1749f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "{\"google:suggestrelevance\":[9998, 9997, 9999]}]", 1750f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { { "a2", true, true }, 1751f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "a", true, true }, 17521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "a1", true, false }, 1753f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "k a", false, false }, 1754f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) kEmptyMatch, kEmptyMatch }, 1755f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "2" }, 1756f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "[\"a\",[\"a\", \"a1\", \"a2\"],[],[]," 1757f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "{\"google:suggestrelevance\":[9998, 9997, 9999]," 1758f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"google:verbatimrelevance\":0}]", 1759f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { { "a2", true, true }, 1760f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "a", true, true }, 17611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "a1", true, false }, 1762f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "k a", false, false }, 1763f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) kEmptyMatch, kEmptyMatch }, 1764f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "2" }, 1765f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1766f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Ensure that verbatim is always generated without other suggestions. 1767f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // TODO(mpearson): Ensure the value of verbatimrelevance is respected 1768f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // (except when suggested relevances are ignored). 1769f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "[\"a\",[],[],[],{\"google:verbatimrelevance\":1}]", 17701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "a", true, true }, 17711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "k a", false, false }, 1772f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) kEmptyMatch, kEmptyMatch, kEmptyMatch, kEmptyMatch }, 1773f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) std::string() }, 1774f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "[\"a\",[],[],[],{\"google:verbatimrelevance\":0}]", 1775f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { { "a", true, true }, 1776f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "k a", false, false }, 1777f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) kEmptyMatch, kEmptyMatch, kEmptyMatch, kEmptyMatch }, 1778f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) std::string() }, 1779f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1780f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // In reorder mode, navsuggestions will not need to be demoted (because 1781f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // they are marked as not allowed to be default match and will be 1782f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // reordered as necessary). 1783f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "[\"a\",[\"http://a1.com\", \"http://a2.com\"],[],[]," 1784f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\"]," 1785f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"google:verbatimrelevance\":9990," 1786f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"google:suggestrelevance\":[9998, 9999]}]", 17871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "a", true, true }, 17881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "a2.com", false, false }, 1789f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "a1.com", false, false }, 1790f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "k a", false, false }, 1791f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) kEmptyMatch, kEmptyMatch }, 1792f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) std::string() }, 1793f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "[\"a\",[\"http://a1.com\", \"http://a2.com\"],[],[]," 1794f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\"]," 1795f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"google:verbatimrelevance\":9990," 1796f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"google:suggestrelevance\":[9999, 9998]}]", 17971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "a", true, true }, 17981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "a1.com", false, false }, 1799f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "a2.com", false, false }, 1800f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "k a", false, false }, 1801f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) kEmptyMatch, kEmptyMatch }, 1802f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) std::string() }, 1803f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "[\"a\",[\"https://a/\"],[],[]," 1804f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\"]," 1805f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"google:suggestrelevance\":[9999]}]", 18061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "a", true, true }, 18071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "https://a", false, false }, 1808f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "k a", false, false }, 1809f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) kEmptyMatch, kEmptyMatch, kEmptyMatch }, 1810f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) std::string() }, 1811f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Check when navsuggest scores more than verbatim and there is query 1812f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // suggestion but it scores lower. 1813f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "[\"a\",[\"http://a1.com\", \"http://a2.com\", \"a3\"],[],[]," 1814f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\", \"QUERY\"]," 1815f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"google:verbatimrelevance\":9990," 1816f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"google:suggestrelevance\":[9998, 9999, 1300]}]", 18171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "a", true, true }, 18181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "a2.com", false, false }, 1819f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "a1.com", false, false }, 18201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "a3", true, false }, 1821f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "k a", false, false }, 1822f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) kEmptyMatch }, 1823f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) std::string() }, 1824f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "[\"a\",[\"http://a1.com\", \"http://a2.com\", \"a3\"],[],[]," 1825f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\", \"QUERY\"]," 1826f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"google:verbatimrelevance\":9990," 1827f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"google:suggestrelevance\":[9999, 9998, 1300]}]", 18281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "a", true, true }, 18291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "a1.com", false, false }, 1830f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "a2.com", false, false }, 18311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "a3", true, false }, 1832f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "k a", false, false }, 1833f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) kEmptyMatch }, 1834f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) std::string() }, 1835f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Check when navsuggest scores more than a query suggestion. There is 1836f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // a verbatim but it scores lower. 1837f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "[\"a\",[\"http://a1.com\", \"http://a2.com\", \"a3\"],[],[]," 1838f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\", \"QUERY\"]," 1839f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"google:verbatimrelevance\":9990," 1840f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"google:suggestrelevance\":[9998, 9999, 9997]}]", 18411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "a3", true, true }, 18421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "a2.com", false, false }, 1843f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "a1.com", false, false }, 1844f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "a", true, true }, 1845f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "k a", false, false }, 1846f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) kEmptyMatch }, 1847f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "3" }, 1848f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "[\"a\",[\"http://a1.com\", \"http://a2.com\", \"a3\"],[],[]," 1849f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\", \"QUERY\"]," 1850f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"google:verbatimrelevance\":9990," 1851f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"google:suggestrelevance\":[9999, 9998, 9997]}]", 18521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "a3", true, true }, 18531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "a1.com", false, false }, 1854f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "a2.com", false, false }, 1855f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "a", true, true }, 1856f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "k a", false, false }, 1857f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) kEmptyMatch }, 1858f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "3" }, 1859f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "[\"a\",[\"http://a1.com\", \"http://a2.com\", \"a3\"],[],[]," 1860f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\", \"QUERY\"]," 1861f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"google:verbatimrelevance\":0," 1862f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"google:suggestrelevance\":[9998, 9999, 9997]}]", 18631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "a3", true, true }, 18641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "a2.com", false, false }, 1865f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "a1.com", false, false }, 1866f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "k a", false, false }, 1867f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) kEmptyMatch, kEmptyMatch }, 1868f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "3" }, 1869f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "[\"a\",[\"http://a1.com\", \"http://a2.com\", \"a3\"],[],[]," 1870f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\", \"QUERY\"]," 1871f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"google:verbatimrelevance\":0," 1872f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"google:suggestrelevance\":[9999, 9998, 9997]}]", 18731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "a3", true, true }, 18741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "a1.com", false, false }, 1875f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "a2.com", false, false }, 1876f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "k a", false, false }, 1877f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) kEmptyMatch, kEmptyMatch }, 1878f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "3" }, 1879f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Check when there is neither verbatim nor a query suggestion that, 1880f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // because we can't demote navsuggestions below a query suggestion, 1881f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // we restore the keyword verbatim score. 1882f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "[\"a\",[\"http://a1.com\", \"http://a2.com\"],[],[]," 1883f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\"]," 1884f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"google:verbatimrelevance\":0," 1885f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"google:suggestrelevance\":[9998, 9999]}]", 18861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "a", true, true }, 18871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "a2.com", false, false }, 1888f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "a1.com", false, false }, 1889f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "k a", false, false }, 1890f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) kEmptyMatch, kEmptyMatch }, 1891f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) std::string() }, 1892f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "[\"a\",[\"http://a1.com\", \"http://a2.com\"],[],[]," 1893f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\"]," 1894f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"google:verbatimrelevance\":0," 1895f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"google:suggestrelevance\":[9999, 9998]}]", 18961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "a", true, true }, 18971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "a1.com", false, false }, 1898f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "a2.com", false, false }, 1899f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "k a", false, false }, 1900f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) kEmptyMatch, kEmptyMatch }, 1901f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) std::string() }, 1902f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // More checks that everything works when it's not necessary to demote. 1903f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "[\"a\",[\"http://a1.com\", \"http://a2.com\", \"a3\"],[],[]," 1904f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\", \"QUERY\"]," 1905f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"google:verbatimrelevance\":9990," 1906f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"google:suggestrelevance\":[9997, 9998, 9999]}]", 1907f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { { "a3", true, true }, 1908f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "a2.com", false, false }, 1909f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "a1.com", false, false }, 1910f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "a", true, true }, 1911f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "k a", false, false }, 1912f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) kEmptyMatch }, 1913f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "3" }, 1914f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "[\"a\",[\"http://a1.com\", \"http://a2.com\", \"a3\"],[],[]," 1915f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\", \"QUERY\"]," 1916f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"google:verbatimrelevance\":9990," 1917f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"google:suggestrelevance\":[9998, 9997, 9999]}]", 1918f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { { "a3", true, true }, 1919f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "a1.com", false, false }, 1920f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "a2.com", false, false }, 1921f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "a", true, true }, 1922f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "k a", false, false }, 1923f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) kEmptyMatch }, 1924f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "3" }, 1925f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) }; 1926f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 19271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); ++i) { 19281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Send the query twice in order to have a synchronous pass after the first 19291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // response is received. This is necessary because SearchProvider doesn't 19301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // allow an asynchronous response to change the default match. 19311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci for (size_t j = 0; j < 2; ++j) { 19321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci QueryForInput(ASCIIToUTF16("k a"), false, true); 19331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 19341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Set up a default fetcher with no results. 19351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci net::TestURLFetcher* default_fetcher = 19361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci test_factory_.GetFetcherByID( 19371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SearchProvider::kDefaultProviderURLFetcherID); 19381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(default_fetcher); 19391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci default_fetcher->set_response_code(200); 19401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci default_fetcher->delegate()->OnURLFetchComplete(default_fetcher); 19411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci default_fetcher = NULL; 1942f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 19431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Set up a keyword fetcher with provided results. 19441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci net::TestURLFetcher* keyword_fetcher = 19451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci test_factory_.GetFetcherByID( 19461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SearchProvider::kKeywordProviderURLFetcherID); 19471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(keyword_fetcher); 19481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci keyword_fetcher->set_response_code(200); 19491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci keyword_fetcher->SetResponseString(cases[i].json); 19501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci keyword_fetcher->delegate()->OnURLFetchComplete(keyword_fetcher); 19511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci keyword_fetcher = NULL; 19521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci RunTillProviderDone(); 19531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 1954f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 19551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SCOPED_TRACE("for input with json=" + cases[i].json); 1956f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const ACMatches& matches = provider_->matches(); 1957f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_FALSE(matches.empty()); 1958f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Find the first match that's allowed to be the default match and check 1959f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // its inline_autocompletion. 1960f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ACMatches::const_iterator it = FindDefaultMatch(matches); 1961f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NE(matches.end(), it); 1962f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(ASCIIToUTF16(cases[i].inline_autocompletion), 19631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci it->inline_autocompletion); 1964f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1965f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_LE(matches.size(), ARRAYSIZE_UNSAFE(cases[i].matches)); 1966f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) size_t j = 0; 1967f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Ensure that the returned matches equal the expectations. 1968f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) for (; j < matches.size(); ++j) { 1969f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(ASCIIToUTF16(cases[i].matches[j].contents), 19701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci matches[j].contents); 1971f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(cases[i].matches[j].from_keyword, 19721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci matches[j].keyword == ASCIIToUTF16("k")); 1973f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(cases[i].matches[j].allowed_to_be_default_match, 19741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci matches[j].allowed_to_be_default_match); 1975f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 1976f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Ensure that no expected matches are missing. 19771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci for (; j < ARRAYSIZE_UNSAFE(cases[i].matches); ++j) { 19781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SCOPED_TRACE(" Case # " + base::IntToString(i)); 19791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(kNotApplicable, cases[i].matches[j].contents); 19801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 19811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 19821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 19831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 19841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(SearchProviderTest, DontInlineAutocompleteAsynchronously) { 19851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // This test sends two separate queries, each receiving different JSON 19861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // replies, and checks that at each stage of processing (receiving first 19871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // asynchronous response, handling new keystroke synchronously / sending the 19881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // second request, and receiving the second asynchronous response) we have the 19891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // expected matches. In particular, receiving the second response shouldn't 19901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // cause an unexpected inline autcompletion. 19911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci struct { 19921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string first_json; 19931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const ExpectedMatch first_async_matches[4]; 19941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const ExpectedMatch sync_matches[4]; 19951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string second_json; 19961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const ExpectedMatch second_async_matches[4]; 19971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } cases[] = { 19981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // A simple test that verifies we don't inline autocomplete after the 19991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // first asynchronous response, but we do at the next keystroke if the 20001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // response's results were good enough. Furthermore, we should continue 20011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // inline autocompleting after the second asynchronous response if the new 20021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // top suggestion is the same as the old inline autocompleted suggestion. 20031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "[\"a\",[\"ab1\", \"ab2\"],[],[]," 20041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "{\"google:verbatimrelevance\":9000," 20051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "\"google:suggestrelevance\":[9002, 9001]}]", 20061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "a", true }, { "ab1", false }, { "ab2", false }, 20071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kEmptyExpectedMatch }, 20081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "ab1", true }, { "ab2", true }, { "ab", true }, 20091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kEmptyExpectedMatch }, 20101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "[\"ab\",[\"ab1\", \"ab2\"],[],[]," 20111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "{\"google:verbatimrelevance\":9000," 20121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "\"google:suggestrelevance\":[9002, 9001]}]", 20131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "ab1", true }, { "ab2", false }, { "ab", true }, 20141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kEmptyExpectedMatch } }, 20151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Ditto, just for a navigation suggestion. 20161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "[\"a\",[\"ab1.com\", \"ab2.com\"],[],[]," 20171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "{\"google:verbatimrelevance\":9000," 20181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\"]," 20191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "\"google:suggestrelevance\":[9002, 9001]}]", 20201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "a", true }, { "ab1.com", false }, { "ab2.com", false }, 20211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kEmptyExpectedMatch }, 20221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "ab1.com", true }, { "ab2.com", true }, { "ab", true }, 20231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kEmptyExpectedMatch }, 20241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "[\"ab\",[\"ab1.com\", \"ab2.com\"],[],[]," 20251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "{\"google:verbatimrelevance\":9000," 20261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\"]," 20271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "\"google:suggestrelevance\":[9002, 9001]}]", 20281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "ab1.com", true }, { "ab2.com", false }, { "ab", true }, 20291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kEmptyExpectedMatch } }, 20301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // A more realistic test of the same situation. 20311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "[\"a\",[\"abcdef\", \"abcdef.com\", \"abc\"],[],[]," 20321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "{\"google:verbatimrelevance\":900," 20331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "\"google:suggesttype\":[\"QUERY\", \"NAVIGATION\", \"QUERY\"]," 20341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "\"google:suggestrelevance\":[1250, 1200, 1000]}]", 20351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "a", true }, { "abcdef", false }, { "abcdef.com", false }, 20361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "abc", false } }, 20371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "abcdef", true }, { "abcdef.com", true }, { "abc", true }, 20381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "ab", true } }, 20391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "[\"ab\",[\"abcdef\", \"abcdef.com\", \"abc\"],[],[]," 20401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "{\"google:verbatimrelevance\":900," 20411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "\"google:suggesttype\":[\"QUERY\", \"NAVIGATION\", \"QUERY\"]," 20421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "\"google:suggestrelevance\":[1250, 1200, 1000]}]", 20431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "abcdef", true }, { "abcdef.com", false }, { "abc", false }, 20441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "ab", true } } }, 20451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 20461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Without an original inline autcompletion, a new inline autcompletion 20471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // should be rejected. 20481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "[\"a\",[\"ab1\", \"ab2\"],[],[]," 20491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "{\"google:verbatimrelevance\":9000," 20501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "\"google:suggestrelevance\":[8000, 7000]}]", 20511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "a", true }, { "ab1", false }, { "ab2", false }, 20521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kEmptyExpectedMatch }, 20531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "ab", true }, { "ab1", true }, { "ab2", true }, 20541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kEmptyExpectedMatch }, 20551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "[\"ab\",[\"ab1\", \"ab2\"],[],[]," 20561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "{\"google:verbatimrelevance\":9000," 20571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "\"google:suggestrelevance\":[9002, 9001]}]", 20581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "ab", true }, { "ab1", false }, { "ab2", false }, 20591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kEmptyExpectedMatch } }, 20601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // For the same test except with the queries scored in the opposite order 20611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // on the second JSON response, the queries should be ordered by the second 20621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // response's scores, not the first. 20631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "[\"a\",[\"ab1\", \"ab2\"],[],[]," 20641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "{\"google:verbatimrelevance\":9000," 20651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "\"google:suggestrelevance\":[8000, 7000]}]", 20661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "a", true }, { "ab1", false }, { "ab2", false }, 20671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kEmptyExpectedMatch }, 20681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "ab", true }, { "ab1", true }, { "ab2", true }, 20691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kEmptyExpectedMatch }, 20701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "[\"ab\",[\"ab1\", \"ab2\"],[],[]," 20711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "{\"google:verbatimrelevance\":9000," 20721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "\"google:suggestrelevance\":[9001, 9002]}]", 20731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "ab", true }, { "ab2", false }, { "ab1", false }, 20741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kEmptyExpectedMatch } }, 20751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Now, the same verifications but with the new inline autocompletion as a 20761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // navsuggestion. The new autocompletion should still be rejected. 20771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "[\"a\",[\"ab1.com\", \"ab2.com\"],[],[]," 20781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "{\"google:verbatimrelevance\":9000," 20791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\"]," 20801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "\"google:suggestrelevance\":[8000, 7000]}]", 20811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "a", true }, { "ab1.com", false }, { "ab2.com", false }, 20821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kEmptyExpectedMatch }, 20831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "ab", true }, { "ab1.com", true }, { "ab2.com", true }, 20841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kEmptyExpectedMatch }, 20851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "[\"ab\",[\"ab1.com\", \"ab2.com\"],[],[]," 20861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "{\"google:verbatimrelevance\":9000," 20871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\"]," 20881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "\"google:suggestrelevance\":[9002, 9001]}]", 20891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "ab", true }, { "ab1.com", false }, { "ab2.com", false }, 20901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kEmptyExpectedMatch } }, 20911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "[\"a\",[\"ab1.com\", \"ab2.com\"],[],[]," 20921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "{\"google:verbatimrelevance\":9000," 20931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\"]," 20941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "\"google:suggestrelevance\":[8000, 7000]}]", 20951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "a", true }, { "ab1.com", false }, { "ab2.com", false }, 20961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kEmptyExpectedMatch }, 20971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "ab", true }, { "ab1.com", true }, { "ab2.com", true }, 20981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kEmptyExpectedMatch }, 20991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "[\"ab\",[\"ab1.com\", \"ab2.com\"],[],[]," 21001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "{\"google:verbatimrelevance\":9000," 21011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "\"google:suggesttype\":[\"NAVIGATION\", \"NAVIGATION\"]," 21021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "\"google:suggestrelevance\":[9001, 9002]}]", 21031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "ab", true }, { "ab2.com", false }, { "ab1.com", false }, 21041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kEmptyExpectedMatch } }, 21051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 21061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // It's okay to abandon an inline autocompletion asynchronously. 21071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "[\"a\",[\"ab1\", \"ab2\"],[],[]," 21081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "{\"google:verbatimrelevance\":9000," 21091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "\"google:suggestrelevance\":[9002, 9001]}]", 21101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "a", true }, { "ab1", false }, { "ab2", false }, 21111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kEmptyExpectedMatch }, 21121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "ab1", true }, { "ab2", true }, { "ab", true }, 21131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kEmptyExpectedMatch }, 21141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "[\"ab\",[\"ab1\", \"ab2\"],[],[]," 21151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "{\"google:verbatimrelevance\":9000," 21161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "\"google:suggestrelevance\":[8000, 7000]}]", 21171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "ab", true }, { "ab1", true }, { "ab2", false }, 21181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kEmptyExpectedMatch } }, 21191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 21201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Note: it's possible that the suggest server returns a suggestion with 21211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // an inline autocompletion (that as usual we delay in allowing it to 21221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // be displayed as an inline autocompletion until the next keystroke), 21231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // then, in response to the next keystroke, the server returns a different 21241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // suggestion as an inline autocompletion. This is not likely to happen. 21251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Regardless, if it does, one could imagine three different behaviors: 21261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // - keep the original inline autocompletion until the next keystroke 21271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // (i.e., don't abandon an inline autocompletion asynchronously), then 21281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // use the new suggestion 21291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // - abandon all inline autocompletions upon the server response, then use 21301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // the new suggestion on the next keystroke 21311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // - ignore the new inline autocompletion provided by the server, yet 21321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // possibly keep the original if it scores well in the most recent 21331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // response, then use the new suggestion on the next keystroke 21341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // All of these behaviors are reasonable. The main thing we want to 21351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // ensure is that the second asynchronous response shouldn't cause *a new* 21361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // inline autocompletion to be displayed. We test that here. 21371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // The current implementation does the third bullet, but all of these 21381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // behaviors seem reasonable. 21391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "[\"a\",[\"ab1\", \"ab2\"],[],[]," 21401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "{\"google:verbatimrelevance\":9000," 21411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "\"google:suggestrelevance\":[9002, 9001]}]", 21421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "a", true }, { "ab1", false }, { "ab2", false }, 21431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kEmptyExpectedMatch }, 21441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "ab1", true }, { "ab2", true }, { "ab", true }, 21451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kEmptyExpectedMatch }, 21461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "[\"ab\",[\"ab1\", \"ab3\"],[],[]," 21471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "{\"google:verbatimrelevance\":9000," 21481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "\"google:suggestrelevance\":[9002, 9900]}]", 21491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "ab1", true }, { "ab3", false }, { "ab", true }, 21501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kEmptyExpectedMatch } }, 21511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "[\"a\",[\"ab1\", \"ab2\"],[],[]," 21521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "{\"google:verbatimrelevance\":9000," 21531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "\"google:suggestrelevance\":[9002, 9001]}]", 21541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "a", true }, { "ab1", false }, { "ab2", false }, 21551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kEmptyExpectedMatch }, 21561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "ab1", true }, { "ab2", true }, { "ab", true }, 21571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kEmptyExpectedMatch }, 21581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "[\"ab\",[\"ab1\", \"ab3\"],[],[]," 21591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "{\"google:verbatimrelevance\":9000," 21601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "\"google:suggestrelevance\":[8000, 9500]}]", 21611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "ab", true }, { "ab3", false }, { "ab1", true }, 21621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kEmptyExpectedMatch } }, 21631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }; 21641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 21651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); ++i) { 21661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // First, send the query "a" and receive the JSON response |first_json|. 21671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ClearAllResults(); 21681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci QueryForInputAndWaitForFetcherResponses( 21691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASCIIToUTF16("a"), false, cases[i].first_json, std::string()); 21701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 21711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Verify that the matches after the asynchronous results are as expected. 21721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string description = "first asynchronous response for input with " 21731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "first_json=" + cases[i].first_json; 21741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CheckMatches(description, ARRAYSIZE_UNSAFE(cases[i].first_async_matches), 21751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci cases[i].first_async_matches, provider_->matches()); 21761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 21771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Then, send the query "ab" and check the synchronous matches. 21781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci description = "synchronous response after the first keystroke after input " 21791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "with first_json=" + cases[i].first_json; 21801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci QueryForInput(ASCIIToUTF16("ab"), false, false); 21811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CheckMatches(description, ARRAYSIZE_UNSAFE(cases[i].sync_matches), 21821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci cases[i].sync_matches, provider_->matches()); 21831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 21841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Finally, get the provided JSON response, |second_json|, and verify the 21851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // matches after the second asynchronous response are as expected. 21861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci description = "second asynchronous response after input with first_json=" + 21871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci cases[i].first_json + " and second_json=" + cases[i].second_json; 21881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci net::TestURLFetcher* second_fetcher = 21891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci test_factory_.GetFetcherByID( 21901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SearchProvider::kDefaultProviderURLFetcherID); 21911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(second_fetcher); 21921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci second_fetcher->set_response_code(200); 21931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci second_fetcher->SetResponseString(cases[i].second_json); 21941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci second_fetcher->delegate()->OnURLFetchComplete(second_fetcher); 21951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci RunTillProviderDone(); 21961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CheckMatches(description, ARRAYSIZE_UNSAFE(cases[i].second_async_matches), 21971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci cases[i].second_async_matches, provider_->matches()); 2198f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 2199f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 2200f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 2201f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(SearchProviderTest, LocalAndRemoteRelevances) { 2202f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // We hardcode the string "term1" below, so ensure that the search term that 2203f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // got added to history already is that string. 2204f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(ASCIIToUTF16("term1"), term1_); 2205a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 term = term1_.substr(0, term1_.length() - 1); 2206f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 2207f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddSearchToHistory(default_t_url_, term + ASCIIToUTF16("2"), 2); 2208f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) profile_.BlockUntilHistoryProcessesPendingRequests(); 2209f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 2210f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) struct { 2211a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16 input; 2212f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::string json; 2213f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::string matches[6]; 2214f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } cases[] = { 2215f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // The history results outscore the default verbatim score. term2 has more 2216f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // visits so it outscores term1. The suggestions are still returned since 2217f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // they're server-scored. 2218f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { term, 2219f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "[\"term\",[\"a1\", \"a2\", \"a3\"],[],[]," 2220f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "{\"google:suggesttype\":[\"QUERY\", \"QUERY\", \"QUERY\"]," 2221f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"google:suggestrelevance\":[1, 2, 3]}]", 2222f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "term2", "term1", "term", "a3", "a2", "a1" } }, 2223f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Because we already have three suggestions by the time we see the history 2224f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // results, they don't get returned. 2225f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { term, 2226f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "[\"term\",[\"a1\", \"a2\", \"a3\"],[],[]," 2227f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "{\"google:suggesttype\":[\"QUERY\", \"QUERY\", \"QUERY\"]," 2228f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"google:verbatimrelevance\":1450," 2229f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"google:suggestrelevance\":[1440, 1430, 1420]}]", 2230f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "term", "a1", "a2", "a3", kNotApplicable, kNotApplicable } }, 2231f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // If we only have two suggestions, we have room for a history result. 2232f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { term, 2233f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "[\"term\",[\"a1\", \"a2\"],[],[]," 2234f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "{\"google:suggesttype\":[\"QUERY\", \"QUERY\"]," 2235f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"google:verbatimrelevance\":1450," 2236f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"google:suggestrelevance\":[1430, 1410]}]", 2237f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "term", "a1", "a2", "term2", kNotApplicable, kNotApplicable } }, 2238f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // If we have more than three suggestions, they should all be returned as 2239f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // long as we have enough total space for them. 2240f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { term, 2241f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "[\"term\",[\"a1\", \"a2\", \"a3\", \"a4\"],[],[]," 2242f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "{\"google:suggesttype\":[\"QUERY\", \"QUERY\", \"QUERY\", \"QUERY\"]," 2243f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"google:verbatimrelevance\":1450," 2244f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"google:suggestrelevance\":[1440, 1430, 1420, 1410]}]", 2245f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "term", "a1", "a2", "a3", "a4", kNotApplicable } }, 2246f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { term, 2247f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "[\"term\",[\"a1\", \"a2\", \"a3\", \"a4\", \"a5\", \"a6\"],[],[]," 2248f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "{\"google:suggesttype\":[\"QUERY\", \"QUERY\", \"QUERY\", \"QUERY\"," 2249f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"QUERY\", \"QUERY\"]," 2250f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"google:verbatimrelevance\":1450," 2251f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"google:suggestrelevance\":[1440, 1430, 1420, 1410, 1400, 1390]}]", 2252f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "term", "a1", "a2", "a3", "a4", "a5" } }, 2253f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { term, 2254f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "[\"term\",[\"a1\", \"a2\", \"a3\", \"a4\"],[],[]," 2255f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "{\"google:suggesttype\":[\"QUERY\", \"QUERY\", \"QUERY\", \"QUERY\"]," 2256f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"google:verbatimrelevance\":1450," 2257f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"google:suggestrelevance\":[1430, 1410, 1390, 1370]}]", 22585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) { "term", "a1", "a2", "term2", "a3", "a4" } } 2259eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch }; 2260eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 22611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); ++i) { 22621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci QueryForInputAndWaitForFetcherResponses( 22631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci cases[i].input, false, cases[i].json, std::string()); 2264eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 2265eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const std::string description = "for input with json=" + cases[i].json; 2266eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const ACMatches& matches = provider_->matches(); 2267eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 2268eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Ensure no extra matches are present. 2269f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_LE(matches.size(), ARRAYSIZE_UNSAFE(cases[i].matches)); 2270eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 2271eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch size_t j = 0; 2272eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Ensure that the returned matches equal the expectations. 2273eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch for (; j < matches.size(); ++j) 2274eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(ASCIIToUTF16(cases[i].matches[j]), 2275eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch matches[j].contents) << description; 2276eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Ensure that no expected matches are missing. 2277eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch for (; j < ARRAYSIZE_UNSAFE(cases[i].matches); ++j) 2278eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(kNotApplicable, cases[i].matches[j]) << 2279eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "Case # " << i << " " << description; 2280eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 2281eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 2282eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 22832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Verifies suggest relevance behavior for URL input. 22842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(SearchProviderTest, DefaultProviderSuggestRelevanceScoringUrlInput) { 2285c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch struct DefaultFetcherUrlInputMatch { 2286c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch const std::string match_contents; 2287c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch AutocompleteMatch::Type match_type; 2288c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch bool allowed_to_be_default_match; 2289c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch }; 2290c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch const DefaultFetcherUrlInputMatch kEmptyMatch = 2291c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { kNotApplicable, AutocompleteMatchType::NUM_TYPES, false }; 22925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct { 22935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string input; 22945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string json; 2295c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch const DefaultFetcherUrlInputMatch output[4]; 22965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } cases[] = { 22971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Ensure NAVIGATION matches are allowed to be listed first for URL input. 22981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Non-inlineable matches should not be allowed to be the default match. 22991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Note that the top-scoring inlineable match is moved to the top 23001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // regardless of its score. 2301f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "a.com", "[\"a.com\",[\"http://b.com/\"],[],[]," 2302f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\"]," 2303f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"google:suggestrelevance\":[9999]}]", 23041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "a.com", AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, true }, 23051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "b.com", AutocompleteMatchType::NAVSUGGEST, false }, 2306f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) kEmptyMatch, kEmptyMatch } }, 2307f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "a.com", "[\"a.com\",[\"https://b.com\"],[],[]," 2308f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\"]," 2309f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"google:suggestrelevance\":[9999]}]", 23101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "a.com", AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, true }, 23111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "https://b.com", AutocompleteMatchType::NAVSUGGEST, false }, 2312f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) kEmptyMatch, kEmptyMatch } }, 2313f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "a.com", "[\"a.com\",[\"http://a.com/a\"],[],[]," 2314f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\"]," 2315f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"google:suggestrelevance\":[9999]}]", 2316f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { { "a.com/a", AutocompleteMatchType::NAVSUGGEST, true }, 2317f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "a.com", AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, true }, 2318f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) kEmptyMatch, kEmptyMatch } }, 2319f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "a.com", "[\"a.com\",[\"https://a.com\"],[],[]," 2320f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "{\"google:suggesttype\":[\"NAVIGATION\"]," 2321f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"google:suggestrelevance\":[9999]}]", 2322f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { { "https://a.com", AutocompleteMatchType::NAVSUGGEST, true }, 2323f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "a.com", AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, true }, 2324f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) kEmptyMatch, kEmptyMatch } }, 2325f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 2326f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Ensure topmost inlineable SUGGEST matches are NOT allowed for URL 2327f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // input. SearchProvider disregards search and verbatim suggested 2328f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // relevances. 2329f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "a.com", "[\"a.com\",[\"a.com info\"],[],[]," 2330f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "{\"google:suggestrelevance\":[9999]}]", 23311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "a.com", AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, true }, 23321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "a.com info", AutocompleteMatchType::SEARCH_SUGGEST, false }, 2333f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) kEmptyMatch, kEmptyMatch } }, 2334f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "a.com", "[\"a.com\",[\"a.com info\"],[],[]," 2335f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "{\"google:suggestrelevance\":[9999]}]", 23361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "a.com", AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, true }, 23371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "a.com info", AutocompleteMatchType::SEARCH_SUGGEST, false }, 2338f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) kEmptyMatch, kEmptyMatch } }, 2339f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 23401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Ensure the fallback mechanism allows inlineable NAVIGATION matches. 2341f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "a.com", "[\"a.com\",[\"a.com info\", \"http://a.com/b\"],[],[]," 2342f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "{\"google:suggesttype\":[\"QUERY\", \"NAVIGATION\"]," 2343f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"google:suggestrelevance\":[9999, 9998]}]", 23441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "a.com/b", AutocompleteMatchType::NAVSUGGEST, true }, 23451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "a.com info", AutocompleteMatchType::SEARCH_SUGGEST, false }, 23461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "a.com", AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, true }, 2347f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) kEmptyMatch } }, 2348f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "a.com", "[\"a.com\",[\"a.com info\", \"http://a.com/b\"],[],[]," 2349f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "{\"google:suggesttype\":[\"QUERY\", \"NAVIGATION\"]," 2350f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"google:suggestrelevance\":[9998, 9997]," 2351f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"google:verbatimrelevance\":9999}]", 2352f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { { "a.com/b", AutocompleteMatchType::NAVSUGGEST, true }, 2353f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "a.com", AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, true }, 23541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "a.com info", AutocompleteMatchType::SEARCH_SUGGEST, false }, 2355f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) kEmptyMatch } }, 2356f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 23571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Ensure non-inlineable SUGGEST matches are allowed for URL input 23581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // assuming the best inlineable match is not a query (i.e., is a 23591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // NAVSUGGEST). The best inlineable match will be at the top of the 23601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // list regardless of its score. 2361f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "a.com", "[\"a.com\",[\"info\"],[],[]," 2362f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "{\"google:suggestrelevance\":[9999]}]", 23631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "a.com", AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, true }, 23641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "info", AutocompleteMatchType::SEARCH_SUGGEST, false }, 2365f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) kEmptyMatch, kEmptyMatch } }, 2366f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "a.com", "[\"a.com\",[\"info\"],[],[]," 2367f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "{\"google:suggestrelevance\":[9999]}]", 23681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { { "a.com", AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, true }, 23691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { "info", AutocompleteMatchType::SEARCH_SUGGEST, false }, 2370f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) kEmptyMatch, kEmptyMatch } }, 2371f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) }; 2372f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 23731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); ++i) { 23741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Send the query twice in order to have a synchronous pass after the first 23751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // response is received. This is necessary because SearchProvider doesn't 23761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // allow an asynchronous response to change the default match. 23771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci for (size_t j = 0; j < 2; ++j) { 23781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci QueryForInputAndWaitForFetcherResponses( 23791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASCIIToUTF16(cases[i].input), false, cases[i].json, std::string()); 23801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 2381f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 23821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SCOPED_TRACE("input=" + cases[i].input + " json=" + cases[i].json); 2383f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) size_t j = 0; 2384f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const ACMatches& matches = provider_->matches(); 2385f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_LE(matches.size(), ARRAYSIZE_UNSAFE(cases[i].output)); 23865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Ensure that the returned matches equal the expectations. 23875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (; j < matches.size(); ++j) { 2388c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_EQ(ASCIIToUTF16(cases[i].output[j].match_contents), 2389c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch matches[j].contents); 2390c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_EQ(cases[i].output[j].match_type, matches[j].type); 2391c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_EQ(cases[i].output[j].allowed_to_be_default_match, 2392c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch matches[j].allowed_to_be_default_match); 23935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 23945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Ensure that no expected matches are missing. 2395c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch for (; j < ARRAYSIZE_UNSAFE(cases[i].output); ++j) { 2396c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_EQ(kNotApplicable, cases[i].output[j].match_contents); 2397c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_EQ(AutocompleteMatchType::NUM_TYPES, 2398c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch cases[i].output[j].match_type); 2399c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_FALSE(cases[i].output[j].allowed_to_be_default_match); 24005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 24015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 24025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 24035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// A basic test that verifies the field trial triggered parsing logic. 24052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(SearchProviderTest, FieldTrialTriggeredParsing) { 24061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci QueryForInputAndWaitForFetcherResponses( 24071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASCIIToUTF16("foo"), false, 24082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "[\"foo\",[\"foo bar\"],[\"\"],[]," 24092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "{\"google:suggesttype\":[\"QUERY\"]," 24101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "\"google:fieldtrialtriggered\":true}]", 24111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string()); 24125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { 24142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Check for the match and field trial triggered bits. 24152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AutocompleteMatch match; 24162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(FindMatchWithContents(ASCIIToUTF16("foo bar"), &match)); 24172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ProvidersInfo providers_info; 24182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) provider_->AddProviderInfo(&providers_info); 24192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(1U, providers_info.size()); 24202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, providers_info[0].field_trial_triggered_size()); 24212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, providers_info[0].field_trial_triggered_in_session_size()); 24222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 24232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { 24242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Reset the session and check that bits are reset. 24252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) provider_->ResetSession(); 24262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ProvidersInfo providers_info; 24272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) provider_->AddProviderInfo(&providers_info); 24282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(1U, providers_info.size()); 24292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, providers_info[0].field_trial_triggered_size()); 24302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(0, providers_info[0].field_trial_triggered_in_session_size()); 24315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 24325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 24335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Verifies inline autocompletion of navigational results. 24355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SearchProviderTest, NavigationInline) { 24365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct { 24375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string input; 24385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string url; 24395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test the expected fill_into_edit, which may drop "http://". 24405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Some cases do not trim "http://" to match from the start of the scheme. 24415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string fill_into_edit; 2442ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const std::string inline_autocompletion; 2443a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const bool allowed_to_be_default_match_in_regular_mode; 2444a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const bool allowed_to_be_default_match_in_prevent_inline_mode; 24455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } cases[] = { 24465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Do not inline matches that do not contain the input; trim http as needed. 2447a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) { "x", "http://www.abc.com", 2448a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "www.abc.com", std::string(), false, false }, 2449a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) { "https:", "http://www.abc.com", 2450a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "www.abc.com", std::string(), false, false }, 24515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://www.abc.com/a", "http://www.abc.com", 2452a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "http://www.abc.com", std::string(), false, 2453a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) false }, 24545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Do not inline matches with invalid input prefixes; trim http as needed. 2456a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) { "ttp", "http://www.abc.com", 2457a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "www.abc.com", std::string(), false, false }, 2458a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) { "://w", "http://www.abc.com", 2459a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "www.abc.com", std::string(), false, false }, 2460a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) { "ww.", "http://www.abc.com", 2461a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "www.abc.com", std::string(), false, false }, 2462a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) { ".ab", "http://www.abc.com", 2463a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "www.abc.com", std::string(), false, false }, 2464a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) { "bc", "http://www.abc.com", 2465a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "www.abc.com", std::string(), false, false }, 2466a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) { ".com", "http://www.abc.com", 2467a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "www.abc.com", std::string(), false, false }, 24685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Do not inline matches that omit input domain labels; trim http as needed. 2470a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) { "www.a", "http://a.com", 2471a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "a.com", std::string(), false, false }, 2472a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) { "http://www.a", "http://a.com", 2473a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "http://a.com", std::string(), false, false }, 2474a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) { "www.a", "ftp://a.com", 2475a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "ftp://a.com", std::string(), false, false }, 2476a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) { "ftp://www.a", "ftp://a.com", 2477a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "ftp://a.com", std::string(), false, false }, 24785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 247958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Input matching but with nothing to inline will not yield an offset, but 248058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // will be allowed to be default. 2481a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) { "abc.com", "http://www.abc.com", 2482a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "www.abc.com", std::string(), true, true }, 2483a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) { "abc.com/", "http://www.abc.com", 2484a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "www.abc.com", std::string(), true, true }, 2485a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) { "http://www.abc.com", "http://www.abc.com", 2486a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "http://www.abc.com", std::string(), true, true }, 2487a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) { "http://www.abc.com/", "http://www.abc.com", 2488a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "http://www.abc.com", std::string(), true, true }, 24895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 249023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // Inputs with trailing whitespace should inline when possible. 249123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) { "abc.com ", "http://www.abc.com", 249223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) "www.abc.com", std::string(), true, true }, 249323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) { "abc.com/ ", "http://www.abc.com", 249423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) "www.abc.com", std::string(), true, true }, 249523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) { "abc.com ", "http://www.abc.com/bar", 249623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) "www.abc.com/bar", "/bar", false, false }, 249723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 2498116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // A suggestion that's equivalent to what the input gets fixed up to 2499116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // should be inlined. 2500116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch { "abc.com:", "http://abc.com/", 25011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "abc.com", std::string(), true, true }, 2502116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch { "abc.com:", "http://www.abc.com", 25031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "www.abc.com", std::string(), true, true }, 2504116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 25055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Inline matches when the input is a leading substring of the scheme. 2506a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) { "h", "http://www.abc.com", 2507a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "http://www.abc.com", "ttp://www.abc.com", true, false }, 2508a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) { "http", "http://www.abc.com", 2509a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "http://www.abc.com", "://www.abc.com", true, false }, 25105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 25115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Inline matches when the input is a leading substring of the full URL. 2512a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) { "http:", "http://www.abc.com", 2513a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "http://www.abc.com", "//www.abc.com", true, false }, 2514a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) { "http://w", "http://www.abc.com", 2515a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "http://www.abc.com", "ww.abc.com", true, false }, 2516a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) { "http://www.", "http://www.abc.com", 2517a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "http://www.abc.com", "abc.com", true, false }, 2518a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) { "http://www.ab", "http://www.abc.com", 2519a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "http://www.abc.com", "c.com", true, false }, 25205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://www.abc.com/p", "http://www.abc.com/path/file.htm?q=x#foo", 2521ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch "http://www.abc.com/path/file.htm?q=x#foo", 2522c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "ath/file.htm?q=x#foo", 2523a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) true, false }, 25245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://abc.com/p", "http://abc.com/path/file.htm?q=x#foo", 2525ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch "http://abc.com/path/file.htm?q=x#foo", 2526a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "ath/file.htm?q=x#foo", 2527a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) true, false}, 25285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 25295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Inline matches with valid URLPrefixes; only trim "http://". 2530c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "w", "http://www.abc.com", 2531a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "www.abc.com", "ww.abc.com", true, false }, 2532c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "www.a", "http://www.abc.com", 2533a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "www.abc.com", "bc.com", true, false }, 2534c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "abc", "http://www.abc.com", 2535a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "www.abc.com", ".com", true, false }, 2536c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "abc.c", "http://www.abc.com", 2537a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "www.abc.com", "om", true, false }, 2538c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "abc.com/p", "http://www.abc.com/path/file.htm?q=x#foo", 2539c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "www.abc.com/path/file.htm?q=x#foo", 2540a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "ath/file.htm?q=x#foo", 2541a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) true, false }, 2542c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "abc.com/p", "http://abc.com/path/file.htm?q=x#foo", 2543c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "abc.com/path/file.htm?q=x#foo", 2544a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "ath/file.htm?q=x#foo", 2545a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) true, false }, 25465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 25475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Inline matches using the maximal URLPrefix components. 2548c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "h", "http://help.com", 2549a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "help.com", "elp.com", true, false }, 2550c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "http", "http://http.com", 2551a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "http.com", ".com", true, false }, 2552c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "h", "http://www.help.com", 2553a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "www.help.com", "elp.com", true, false }, 2554c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "http", "http://www.http.com", 2555a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "www.http.com", ".com", true, false }, 2556c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "w", "http://www.www.com", 2557a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "www.www.com", "ww.com", true, false }, 25585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 25595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test similar behavior for the ftp and https schemes. 2560a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) { "ftp://www.ab", "ftp://www.abc.com/path/file.htm?q=x#foo", 2561a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "ftp://www.abc.com/path/file.htm?q=x#foo", 2562a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "c.com/path/file.htm?q=x#foo", true, false }, 2563a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) { "www.ab", "ftp://www.abc.com/path/file.htm?q=x#foo", 2564a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "ftp://www.abc.com/path/file.htm?q=x#foo", 2565a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "c.com/path/file.htm?q=x#foo", true, false }, 2566a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) { "ab", "ftp://www.abc.com/path/file.htm?q=x#foo", 2567a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "ftp://www.abc.com/path/file.htm?q=x#foo", 2568a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "c.com/path/file.htm?q=x#foo", true, false }, 2569a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) { "ab", "ftp://abc.com/path/file.htm?q=x#foo", 2570a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "ftp://abc.com/path/file.htm?q=x#foo", 2571a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "c.com/path/file.htm?q=x#foo", true, false }, 2572c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "https://www.ab", "https://www.abc.com/path/file.htm?q=x#foo", 2573c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch "https://www.abc.com/path/file.htm?q=x#foo", 2574a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "c.com/path/file.htm?q=x#foo", 2575a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) true, false }, 2576a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) { "www.ab", "https://www.abc.com/path/file.htm?q=x#foo", 2577a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "https://www.abc.com/path/file.htm?q=x#foo", 2578a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "c.com/path/file.htm?q=x#foo", true, false }, 2579a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) { "ab", "https://www.abc.com/path/file.htm?q=x#foo", 2580a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "https://www.abc.com/path/file.htm?q=x#foo", 2581a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "c.com/path/file.htm?q=x#foo", true, false }, 2582a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) { "ab", "https://abc.com/path/file.htm?q=x#foo", 2583a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "https://abc.com/path/file.htm?q=x#foo", 2584a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "c.com/path/file.htm?q=x#foo", true, false }, 25855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 25865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Forced query input should inline and retain the "?" prefix. 2587c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "?http://www.ab", "http://www.abc.com", 25881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "?http://www.abc.com", "c.com", true, false }, 2589c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "?www.ab", "http://www.abc.com", 25901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "?www.abc.com", "c.com", true, false }, 2591c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch { "?ab", "http://www.abc.com", 25921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "?www.abc.com", "c.com", true, false }, 2593f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { "?abc.com", "http://www.abc.com", 25941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "?www.abc.com", std::string(), true, true }, 25955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 25965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 25971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); ++i) { 2598a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // First test regular mode. 2599c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) QueryForInput(ASCIIToUTF16(cases[i].input), false, false); 26001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SearchSuggestionParser::NavigationResult result( 26011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ChromeAutocompleteSchemeClassifier(&profile_), GURL(cases[i].url), 26021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci AutocompleteMatchType::NAVSUGGEST, base::string16(), std::string(), 26031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci false, 0, false, ASCIIToUTF16(cases[i].input), std::string()); 26041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci result.set_received_after_last_keystroke(false); 26051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci AutocompleteMatch match(provider_->NavigationToMatch(result)); 2606ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_EQ(ASCIIToUTF16(cases[i].inline_autocompletion), 2607ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch match.inline_autocompletion); 26085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16(cases[i].fill_into_edit), match.fill_into_edit); 2609a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(cases[i].allowed_to_be_default_match_in_regular_mode, 2610c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch match.allowed_to_be_default_match); 2611a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 2612a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Then test prevent-inline-autocomplete mode. 2613a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) QueryForInput(ASCIIToUTF16(cases[i].input), true, false); 26141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SearchSuggestionParser::NavigationResult result_prevent_inline( 26151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ChromeAutocompleteSchemeClassifier(&profile_), GURL(cases[i].url), 26161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci AutocompleteMatchType::NAVSUGGEST, base::string16(), std::string(), 26171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci false, 0, false, ASCIIToUTF16(cases[i].input), std::string()); 26181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci result_prevent_inline.set_received_after_last_keystroke(false); 2619a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) AutocompleteMatch match_prevent_inline( 26201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci provider_->NavigationToMatch(result_prevent_inline)); 2621a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16(cases[i].inline_autocompletion), 2622a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) match_prevent_inline.inline_autocompletion); 2623a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16(cases[i].fill_into_edit), 2624a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) match_prevent_inline.fill_into_edit); 2625a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(cases[i].allowed_to_be_default_match_in_prevent_inline_mode, 2626a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) match_prevent_inline.allowed_to_be_default_match); 26275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 26285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 26295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 26305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Verifies that "http://" is not trimmed for input that is a leading substring. 26315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SearchProviderTest, NavigationInlineSchemeSubstring) { 2632a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16 input(ASCIIToUTF16("ht")); 2633a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16 url(ASCIIToUTF16("http://a.com")); 26341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SearchSuggestionParser::NavigationResult result( 2635116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ChromeAutocompleteSchemeClassifier(&profile_), GURL(url), 2636116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch AutocompleteMatchType::NAVSUGGEST, 2637010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::string16(), std::string(), false, 0, false, input, std::string()); 26381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci result.set_received_after_last_keystroke(false); 26395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 26405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check the offset and strings when inline autocompletion is allowed. 2641c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) QueryForInput(input, false, false); 2642c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutocompleteMatch match_inline(provider_->NavigationToMatch(result)); 26435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(url, match_inline.fill_into_edit); 2644ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_EQ(url.substr(2), match_inline.inline_autocompletion); 2645c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_TRUE(match_inline.allowed_to_be_default_match); 26465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(url, match_inline.contents); 26475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2648a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Check the same strings when inline autocompletion is prevented. 2649c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) QueryForInput(input, true, false); 2650c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutocompleteMatch match_prevent(provider_->NavigationToMatch(result)); 26515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(url, match_prevent.fill_into_edit); 2652c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_FALSE(match_prevent.allowed_to_be_default_match); 26535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(url, match_prevent.contents); 26545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 26555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 26565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Verifies that input "w" marks a more significant domain label than "www.". 26575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SearchProviderTest, NavigationInlineDomainClassify) { 2658c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) QueryForInput(ASCIIToUTF16("w"), false, false); 26591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SearchSuggestionParser::NavigationResult result( 26601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ChromeAutocompleteSchemeClassifier(&profile_), 26611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GURL("http://www.wow.com"), AutocompleteMatchType::NAVSUGGEST, 26621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::string16(), std::string(), false, 0, false, ASCIIToUTF16("w"), 26631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string()); 26641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci result.set_received_after_last_keystroke(false); 26651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci AutocompleteMatch match(provider_->NavigationToMatch(result)); 2666ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_EQ(ASCIIToUTF16("ow.com"), match.inline_autocompletion); 2667c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_TRUE(match.allowed_to_be_default_match); 26685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("www.wow.com"), match.fill_into_edit); 26695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("www.wow.com"), match.contents); 26705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 26715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Ensure that the match for input "w" is marked on "wow" and not "www". 26725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(3U, match.contents_class.size()); 26735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0U, match.contents_class[0].offset); 26745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(AutocompleteMatch::ACMatchClassification::URL, 26755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) match.contents_class[0].style); 26765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(4U, match.contents_class[1].offset); 26775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(AutocompleteMatch::ACMatchClassification::URL | 26785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteMatch::ACMatchClassification::MATCH, 26795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) match.contents_class[1].style); 26805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(5U, match.contents_class[2].offset); 26815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(AutocompleteMatch::ACMatchClassification::URL, 26825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) match.contents_class[2].style); 26835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2684c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 26851e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#if !defined(OS_WIN) 26861e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Verify entity suggestion parsing. 26871e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)TEST_F(SearchProviderTest, ParseEntitySuggestion) { 26881e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) struct Match { 26891e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) std::string contents; 26905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string description; 26911e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) std::string query_params; 26921e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) std::string fill_into_edit; 26931e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) AutocompleteMatchType::Type type; 26941e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) }; 26951e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const Match kEmptyMatch = { 26965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) kNotApplicable, kNotApplicable, kNotApplicable, kNotApplicable, 26975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) AutocompleteMatchType::NUM_TYPES}; 26981e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 26991e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) struct { 27001e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const std::string input_text; 27011e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const std::string response_json; 27021e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const Match matches[5]; 27031e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } cases[] = { 27041e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // A query and an entity suggestion with different search terms. 27051e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) { "x", 27065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "[\"x\",[\"xy\", \"yy\"],[\"\",\"\"],[]," 27071e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) " {\"google:suggestdetail\":[{}," 27085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " {\"a\":\"A\",\"t\":\"xy\",\"q\":\"p=v\"}]," 27091e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) "\"google:suggesttype\":[\"QUERY\",\"ENTITY\"]}]", 27105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) { { "x", "", "", "x", AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED }, 27115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) { "xy", "", "", "xy", AutocompleteMatchType::SEARCH_SUGGEST }, 27125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) { "xy", "A", "p=v", "yy", 27135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) AutocompleteMatchType::SEARCH_SUGGEST_ENTITY }, 27141e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) kEmptyMatch, 27151e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) kEmptyMatch 27161e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) }, 27171e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) }, 27181e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // A query and an entity suggestion with same search terms. 27191e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) { "x", 27201e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) "[\"x\",[\"xy\", \"xy\"],[\"\",\"\"],[]," 27211e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) " {\"google:suggestdetail\":[{}," 27225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " {\"a\":\"A\",\"t\":\"xy\",\"q\":\"p=v\"}]," 27231e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) "\"google:suggesttype\":[\"QUERY\",\"ENTITY\"]}]", 27245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) { { "x", "", "", "x", AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED }, 27255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) { "xy", "", "", "xy", AutocompleteMatchType::SEARCH_SUGGEST }, 27265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) { "xy", "A", "p=v", "xy", 27275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) AutocompleteMatchType::SEARCH_SUGGEST_ENTITY }, 27281e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) kEmptyMatch, 27291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) kEmptyMatch 27301e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) }, 27311e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) }, 27321e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) }; 27331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); ++i) { 27341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci QueryForInputAndWaitForFetcherResponses( 27351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASCIIToUTF16(cases[i].input_text), false, cases[i].response_json, 27361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string()); 27371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 27381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const ACMatches& matches = provider_->matches(); 27391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ASSERT_FALSE(matches.empty()); 27401e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 27411e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SCOPED_TRACE("for input with json = " + cases[i].response_json); 27421e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 2743f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_LE(matches.size(), ARRAYSIZE_UNSAFE(cases[i].matches)); 27441e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) size_t j = 0; 27451e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Ensure that the returned matches equal the expectations. 27461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) for (; j < matches.size(); ++j) { 27471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const Match& match = cases[i].matches[j]; 27481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SCOPED_TRACE(" and match index: " + base::IntToString(j)); 27491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(match.contents, 27505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::UTF16ToUTF8(matches[j].contents)); 27515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(match.description, 27525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::UTF16ToUTF8(matches[j].description)); 27531e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(match.query_params, 27541e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) matches[j].search_terms_args->suggest_query_params); 27551e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(match.fill_into_edit, 27565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::UTF16ToUTF8(matches[j].fill_into_edit)); 27571e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(match.type, matches[j].type); 27581e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 27591e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Ensure that no expected matches are missing. 27601e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) for (; j < ARRAYSIZE_UNSAFE(cases[i].matches); ++j) { 27611e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SCOPED_TRACE(" and match index: " + base::IntToString(j)); 27621e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(cases[i].matches[j].contents, kNotApplicable); 27635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(cases[i].matches[j].description, kNotApplicable); 27641e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(cases[i].matches[j].query_params, kNotApplicable); 27651e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(cases[i].matches[j].fill_into_edit, kNotApplicable); 27661e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(cases[i].matches[j].type, AutocompleteMatchType::NUM_TYPES); 27671e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 27681e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 27691e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 27701e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#endif // !defined(OS_WIN) 27711e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 27721e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 2773424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// A basic test that verifies the prefetch metadata parsing logic. 2774424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)TEST_F(SearchProviderTest, PrefetchMetadataParsing) { 2775424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) struct Match { 2776424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) std::string contents; 2777424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) bool allowed_to_be_prefetched; 2778424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) AutocompleteMatchType::Type type; 2779424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) bool from_keyword; 2780424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) }; 2781424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) const Match kEmptyMatch = { kNotApplicable, 2782424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) false, 2783424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, 2784424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) false }; 2785424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 2786424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) struct { 2787424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) const std::string input_text; 2788424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) bool prefer_keyword_provider_results; 2789424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) const std::string default_provider_response_json; 2790424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) const std::string keyword_provider_response_json; 2791424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) const Match matches[5]; 2792424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } cases[] = { 2793424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // Default provider response does not have prefetch details. Ensure that the 2794424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // suggestions are not marked as prefetch query. 2795424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) { "a", 2796424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) false, 2797424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) "[\"a\",[\"b\", \"c\"],[],[],{\"google:suggestrelevance\":[1, 2]}]", 2798424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) std::string(), 2799424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) { { "a", false, AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, false }, 2800424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) { "c", false, AutocompleteMatchType::SEARCH_SUGGEST, false }, 2801424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) { "b", false, AutocompleteMatchType::SEARCH_SUGGEST, false }, 2802424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) kEmptyMatch, 2803424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) kEmptyMatch 2804424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) }, 2805424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) }, 2806424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // Ensure that default provider suggest response prefetch details are 2807424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // parsed and recorded in AutocompleteMatch. 2808424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) { "ab", 2809424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) false, 2810424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) "[\"ab\",[\"abc\", \"http://b.com\", \"http://c.com\"],[],[]," 2811424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) "{\"google:clientdata\":{\"phi\": 0}," 2812424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) "\"google:suggesttype\":[\"QUERY\", \"NAVIGATION\", \"NAVIGATION\"]," 2813424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) "\"google:suggestrelevance\":[999, 12, 1]}]", 2814424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) std::string(), 2815424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) { { "ab", false, AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, false }, 2816424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) { "abc", true, AutocompleteMatchType::SEARCH_SUGGEST, false }, 2817424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) { "b.com", false, AutocompleteMatchType::NAVSUGGEST, false }, 2818424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) { "c.com", false, AutocompleteMatchType::NAVSUGGEST, false }, 2819424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) kEmptyMatch 2820424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) }, 2821424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) }, 2822424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // Default provider suggest response has prefetch details. 2823424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // SEARCH_WHAT_YOU_TYPE suggestion outranks SEARCH_SUGGEST suggestion for 2824424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // the same query string. Ensure that the prefetch details from 2825424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // SEARCH_SUGGEST match are set onto SEARCH_WHAT_YOU_TYPE match. 2826424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) { "ab", 2827424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) false, 2828424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) "[\"ab\",[\"ab\", \"http://ab.com\"],[],[]," 2829424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) "{\"google:clientdata\":{\"phi\": 0}," 2830424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) "\"google:suggesttype\":[\"QUERY\", \"NAVIGATION\"]," 2831424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) "\"google:suggestrelevance\":[99, 98]}]", 2832424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) std::string(), 2833424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) { {"ab", true, AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, false }, 2834424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) {"ab.com", false, AutocompleteMatchType::NAVSUGGEST, false }, 2835424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) kEmptyMatch, 2836424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) kEmptyMatch, 2837424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) kEmptyMatch 2838424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) }, 2839424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) }, 2840424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // Default provider response has prefetch details. We prefer keyword 2841424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // provider results. Ensure that prefetch bit for a suggestion from the 2842424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // default search provider does not get copied onto a higher-scoring match 2843424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // for the same query string from the keyword provider. 2844424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) { "k a", 2845424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) true, 2846424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) "[\"k a\",[\"a\", \"ab\"],[],[], {\"google:clientdata\":{\"phi\": 0}," 2847424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) "\"google:suggesttype\":[\"QUERY\", \"QUERY\"]," 2848424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) "\"google:suggestrelevance\":[9, 12]}]", 2849424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) "[\"a\",[\"b\", \"c\"],[],[],{\"google:suggestrelevance\":[1, 2]}]", 2850424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) { { "a", false, AutocompleteMatchType::SEARCH_OTHER_ENGINE, true}, 2851424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) { "k a", false, AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, false }, 2852424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) { "ab", false, AutocompleteMatchType::SEARCH_SUGGEST, false }, 2853424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) { "c", false, AutocompleteMatchType::SEARCH_SUGGEST, true }, 2854424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) { "b", false, AutocompleteMatchType::SEARCH_SUGGEST, true } 2855424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) }, 2856424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } 2857424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) }; 2858424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 28591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); ++i) { 28601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci QueryForInputAndWaitForFetcherResponses( 28611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASCIIToUTF16(cases[i].input_text), 28621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci cases[i].prefer_keyword_provider_results, 28631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci cases[i].default_provider_response_json, 28641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci cases[i].prefer_keyword_provider_results ? 28651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci cases[i].keyword_provider_response_json : std::string()); 2866424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 2867424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) const std::string description = 2868424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) "for input with json =" + cases[i].default_provider_response_json; 2869424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) const ACMatches& matches = provider_->matches(); 2870424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // The top match must inline and score as highly as calculated verbatim. 2871424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ASSERT_FALSE(matches.empty()); 2872424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) EXPECT_GE(matches[0].relevance, 1300); 2873424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 2874f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_LE(matches.size(), ARRAYSIZE_UNSAFE(cases[i].matches)); 2875424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // Ensure that the returned matches equal the expectations. 2876424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) for (size_t j = 0; j < matches.size(); ++j) { 2877424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) SCOPED_TRACE(description); 28785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(cases[i].matches[j].contents, 28795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::UTF16ToUTF8(matches[j].contents)); 2880424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) EXPECT_EQ(cases[i].matches[j].allowed_to_be_prefetched, 2881424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) SearchProvider::ShouldPrefetch(matches[j])); 2882424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) EXPECT_EQ(cases[i].matches[j].type, matches[j].type); 2883424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) EXPECT_EQ(cases[i].matches[j].from_keyword, 2884424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) matches[j].keyword == ASCIIToUTF16("k")); 2885424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } 2886424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } 2887424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)} 28884e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 2889a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)TEST_F(SearchProviderTest, XSSIGuardedJSONParsing_InvalidResponse) { 2890a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ClearAllResults(); 2891a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 2892a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) std::string input_str("abc"); 28931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci QueryForInputAndWaitForFetcherResponses( 28941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASCIIToUTF16(input_str), false, "this is a bad non-json response", 28951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string()); 2896a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 2897a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const ACMatches& matches = provider_->matches(); 2898a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 2899a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Should have exactly one "search what you typed" match 2900a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_TRUE(matches.size() == 1); 29015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(input_str, base::UTF16ToUTF8(matches[0].contents)); 2902a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, 2903a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) matches[0].type); 2904a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 2905a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 29061e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// A basic test that verifies that the XSSI guarded JSON response is parsed 29071e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// correctly. 2908a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)TEST_F(SearchProviderTest, XSSIGuardedJSONParsing_ValidResponses) { 29091e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) struct Match { 29101e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) std::string contents; 29111e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) AutocompleteMatchType::Type type; 29121e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) }; 2913a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const Match kEmptyMatch = { 2914a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) kNotApplicable, AutocompleteMatchType::NUM_TYPES 2915a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) }; 29161e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 29171e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) struct { 29181e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const std::string input_text; 29191e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const std::string default_provider_response_json; 29201e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const Match matches[4]; 29211e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } cases[] = { 29221e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // No XSSI guard. 29231e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) { "a", 29241e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) "[\"a\",[\"b\", \"c\"],[],[]," 29251e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) "{\"google:suggesttype\":[\"QUERY\",\"QUERY\"]," 29261e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) "\"google:suggestrelevance\":[1, 2]}]", 29271e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) { { "a", AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED }, 29281e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) { "c", AutocompleteMatchType::SEARCH_SUGGEST }, 29291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) { "b", AutocompleteMatchType::SEARCH_SUGGEST }, 29301e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) kEmptyMatch, 29311e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) }, 29321e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) }, 29331e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Standard XSSI guard - )]}'\n. 29341e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) { "a", 29351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ")]}'\n[\"a\",[\"b\", \"c\"],[],[]," 29361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) "{\"google:suggesttype\":[\"QUERY\",\"QUERY\"]," 29371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) "\"google:suggestrelevance\":[1, 2]}]", 29381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) { { "a", AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED }, 29391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) { "c", AutocompleteMatchType::SEARCH_SUGGEST }, 29401e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) { "b", AutocompleteMatchType::SEARCH_SUGGEST }, 29411e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) kEmptyMatch, 29421e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) }, 29431e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) }, 29441e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Modified XSSI guard - contains "[". 29451e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) { "a", 29461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ")]}'\n[)\"[\"a\",[\"b\", \"c\"],[],[]," 29471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) "{\"google:suggesttype\":[\"QUERY\",\"QUERY\"]," 29481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) "\"google:suggestrelevance\":[1, 2]}]", 29491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) { { "a", AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED }, 29501e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) { "c", AutocompleteMatchType::SEARCH_SUGGEST }, 29511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) { "b", AutocompleteMatchType::SEARCH_SUGGEST }, 29521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) kEmptyMatch, 29531e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) }, 29541e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) }, 29551e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) }; 29561e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 29571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); ++i) { 29581e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ClearAllResults(); 29591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci QueryForInputAndWaitForFetcherResponses( 29601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASCIIToUTF16(cases[i].input_text), false, 29611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci cases[i].default_provider_response_json, std::string()); 29621e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 29631e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const ACMatches& matches = provider_->matches(); 29641e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // The top match must inline and score as highly as calculated verbatim. 29651e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ASSERT_FALSE(matches.empty()); 29661e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_GE(matches[0].relevance, 1300); 29671e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 29681e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SCOPED_TRACE("for case: " + base::IntToString(i)); 2969f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_LE(matches.size(), ARRAYSIZE_UNSAFE(cases[i].matches)); 29701e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) size_t j = 0; 29711e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Ensure that the returned matches equal the expectations. 29721e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) for (; j < matches.size(); ++j) { 29731e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SCOPED_TRACE("and match: " + base::IntToString(j)); 29745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(cases[i].matches[j].contents, 29755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::UTF16ToUTF8(matches[j].contents)); 29761e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(cases[i].matches[j].type, matches[j].type); 29771e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 29781e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) for (; j < ARRAYSIZE_UNSAFE(cases[i].matches); ++j) { 29791e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SCOPED_TRACE("and match: " + base::IntToString(j)); 29801e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(cases[i].matches[j].contents, kNotApplicable); 29811e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(cases[i].matches[j].type, AutocompleteMatchType::NUM_TYPES); 29821e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 29831e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 29841e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 29851e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 2986a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// Test that deletion url gets set on an AutocompleteMatch when available for a 2987010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// personalized query or a personalized URL. 2988a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)TEST_F(SearchProviderTest, ParseDeletionUrl) { 2989a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) struct Match { 2990a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) std::string contents; 2991a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) std::string deletion_url; 2992a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) AutocompleteMatchType::Type type; 2993a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) }; 2994a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 2995a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const Match kEmptyMatch = { 29961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kNotApplicable, std::string(), AutocompleteMatchType::NUM_TYPES 2997a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) }; 2998a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 2999010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const char* url[] = { 3000010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "http://defaultturl/complete/deleteitems" 3001010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "?delq=ab&client=chrome&deltok=xsrf124", 3002010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "http://defaultturl/complete/deleteitems" 3003010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "?delq=www.amazon.com&client=chrome&deltok=xsrf123", 30041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }; 3005a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 3006a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) struct { 3007a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const std::string input_text; 3008a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const std::string response_json; 3009010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const Match matches[5]; 3010a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } cases[] = { 3011a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // A deletion URL on a personalized query should be reflected in the 3012a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // resulting AutocompleteMatch. 3013a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) { "a", 3014010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "[\"a\",[\"ab\", \"ac\",\"www.amazon.com\"],[],[]," 3015010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "{\"google:suggesttype\":[\"PERSONALIZED_QUERY\",\"QUERY\"," 3016010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "\"PERSONALIZED_NAVIGATION\"]," 3017010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "\"google:suggestrelevance\":[3, 2, 1]," 3018a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) "\"google:suggestdetail\":[{\"du\":" 3019010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "\"/complete/deleteitems?delq=ab&client=chrome" 3020010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "&deltok=xsrf124\"}, {}, {\"du\":" 3021010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "\"/complete/deleteitems?delq=www.amazon.com&" 3022010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "client=chrome&deltok=xsrf123\"}]}]", 3023a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) { { "a", "", AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED }, 3024010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) { "ab", url[0], AutocompleteMatchType::SEARCH_SUGGEST }, 3025a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) { "ac", "", AutocompleteMatchType::SEARCH_SUGGEST }, 3026010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) { "www.amazon.com", url[1], 3027010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) AutocompleteMatchType::NAVSUGGEST_PERSONALIZED }, 3028a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) kEmptyMatch, 3029a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) }, 3030a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) }, 3031010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Personalized queries or a personalized URL without deletion URLs 3032010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // shouldn't cause errors. 3033a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) { "a", 3034a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) "[\"a\",[\"ab\", \"ac\"],[],[]," 3035010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "{\"google:suggesttype\":[\"PERSONALIZED_QUERY\",\"QUERY\"," 3036010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "\"PERSONALIZED_NAVIGATION\"]," 3037a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) "\"google:suggestrelevance\":[1, 2]," 3038a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) "\"google:suggestdetail\":[{}, {}]}]", 3039a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) { { "a", "", AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED }, 3040a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) { "ac", "", AutocompleteMatchType::SEARCH_SUGGEST }, 3041a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) { "ab", "", AutocompleteMatchType::SEARCH_SUGGEST }, 3042010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) { "www.amazon.com", "", 3043010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) AutocompleteMatchType::NAVSUGGEST_PERSONALIZED }, 3044010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) kEmptyMatch, 3045010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) }, 3046010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) }, 3047010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Personalized queries or a personalized URL without 3048010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // google:suggestdetail shouldn't cause errors. 3049010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) { "a", 3050010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "[\"a\",[\"ab\", \"ac\"],[],[]," 3051010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "{\"google:suggesttype\":[\"PERSONALIZED_QUERY\",\"QUERY\"," 3052010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "\"PERSONALIZED_NAVIGATION\"]," 3053010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "\"google:suggestrelevance\":[1, 2]}]", 3054010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) { { "a", "", AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED }, 3055010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) { "ac", "", AutocompleteMatchType::SEARCH_SUGGEST }, 3056010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) { "ab", "", AutocompleteMatchType::SEARCH_SUGGEST }, 3057010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) { "www.amazon.com", "", 3058010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) AutocompleteMatchType::NAVSUGGEST_PERSONALIZED }, 3059a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) kEmptyMatch, 3060a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) }, 3061a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) }, 3062a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) }; 3063a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 30641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); ++i) { 30651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci QueryForInputAndWaitForFetcherResponses( 30661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASCIIToUTF16(cases[i].input_text), false, cases[i].response_json, 30671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string()); 3068a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 3069a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const ACMatches& matches = provider_->matches(); 3070a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_FALSE(matches.empty()); 3071a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 3072a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) SCOPED_TRACE("for input with json = " + cases[i].response_json); 3073a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 3074a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) for (size_t j = 0; j < matches.size(); ++j) { 3075a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const Match& match = cases[i].matches[j]; 3076a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) SCOPED_TRACE(" and match index: " + base::IntToString(j)); 30775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(match.contents, base::UTF16ToUTF8(matches[j].contents)); 3078a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_EQ(match.deletion_url, matches[j].GetAdditionalInfo( 3079a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) "deletion_url")); 3080a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 3081a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 3082a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 30831e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 30844e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)TEST_F(SearchProviderTest, ReflectsBookmarkBarState) { 30851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci profile_.GetPrefs()->SetBoolean(bookmarks::prefs::kShowBookmarkBar, false); 3086a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 term = term1_.substr(0, term1_.length() - 1); 30874e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) QueryForInput(term, true, false); 30884e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ASSERT_FALSE(provider_->matches().empty()); 30894e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, 30904e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) provider_->matches()[0].type); 30914e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ASSERT_TRUE(provider_->matches()[0].search_terms_args != NULL); 30924e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_FALSE(provider_->matches()[0].search_terms_args->bookmark_bar_pinned); 30934e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 30941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci profile_.GetPrefs()->SetBoolean(bookmarks::prefs::kShowBookmarkBar, true); 30954e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) term = term1_.substr(0, term1_.length() - 1); 30964e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) QueryForInput(term, true, false); 30974e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ASSERT_FALSE(provider_->matches().empty()); 30984e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, 30994e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) provider_->matches()[0].type); 31004e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ASSERT_TRUE(provider_->matches()[0].search_terms_args != NULL); 31014e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_TRUE(provider_->matches()[0].search_terms_args->bookmark_bar_pinned); 31024e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 3103f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 3104f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(SearchProviderTest, CanSendURL) { 3105f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) TemplateURLData template_url_data; 3106f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) template_url_data.short_name = ASCIIToUTF16("t"); 3107f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) template_url_data.SetURL("http://www.google.com/{searchTerms}"); 3108f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) template_url_data.suggestions_url = "http://www.google.com/{searchTerms}"; 3109f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) template_url_data.instant_url = "http://does/not/exist?strk=1"; 3110f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) template_url_data.search_terms_replacement_key = "strk"; 3111f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) template_url_data.id = SEARCH_ENGINE_GOOGLE; 3112f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) TemplateURL google_template_url(template_url_data); 3113f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 3114f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Create field trial. 3115116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch CreateZeroSuggestFieldTrial(true); 3116f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 31171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ChromeAutocompleteProviderClient client(&profile_); 31181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3119f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Not signed in. 3120f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(SearchProvider::CanSendURL( 3121f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GURL("http://www.google.com/search"), 3122f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GURL("https://www.google.com/complete/search"), &google_template_url, 31231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci metrics::OmniboxEventProto::OTHER, SearchTermsData(), &client)); 3124f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SigninManagerBase* signin = SigninManagerFactory::GetForProfile(&profile_); 3125f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) signin->SetAuthenticatedUsername("test"); 3126f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 3127f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // All conditions should be met. 3128f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(SearchProvider::CanSendURL( 3129f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GURL("http://www.google.com/search"), 3130f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GURL("https://www.google.com/complete/search"), &google_template_url, 31311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci metrics::OmniboxEventProto::OTHER, SearchTermsData(), &client)); 3132f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 3133f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Not in field trial. 3134f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ResetFieldTrialList(); 3135116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch CreateZeroSuggestFieldTrial(false); 3136f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(SearchProvider::CanSendURL( 3137f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GURL("http://www.google.com/search"), 3138f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GURL("https://www.google.com/complete/search"), &google_template_url, 31391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci metrics::OmniboxEventProto::OTHER, SearchTermsData(), &client)); 3140116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ResetFieldTrialList(); 3141116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch CreateZeroSuggestFieldTrial(true); 3142f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 3143f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Invalid page URL. 3144f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(SearchProvider::CanSendURL( 3145f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GURL("badpageurl"), 3146f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GURL("https://www.google.com/complete/search"), &google_template_url, 31471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci metrics::OmniboxEventProto::OTHER, SearchTermsData(), &client)); 3148f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 3149f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Invalid page classification. 3150f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(SearchProvider::CanSendURL( 3151f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GURL("http://www.google.com/search"), 3152f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GURL("https://www.google.com/complete/search"), &google_template_url, 31536d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) metrics::OmniboxEventProto::INSTANT_NTP_WITH_FAKEBOX_AS_STARTING_FOCUS, 31541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SearchTermsData(), &client)); 3155f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 3156f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Invalid page classification. 3157f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(SearchProvider::CanSendURL( 3158f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GURL("http://www.google.com/search"), 3159f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GURL("https://www.google.com/complete/search"), &google_template_url, 31606d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) metrics::OmniboxEventProto::INSTANT_NTP_WITH_OMNIBOX_AS_STARTING_FOCUS, 31611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SearchTermsData(), &client)); 3162f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 3163f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // HTTPS page URL on same domain as provider. 3164f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(SearchProvider::CanSendURL( 3165f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GURL("https://www.google.com/search"), 3166f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GURL("https://www.google.com/complete/search"), 31675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) &google_template_url, metrics::OmniboxEventProto::OTHER, 31681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SearchTermsData(), &client)); 3169f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 3170f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Non-HTTP[S] page URL on same domain as provider. 3171f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(SearchProvider::CanSendURL( 3172f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GURL("ftp://www.google.com/search"), 3173f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GURL("https://www.google.com/complete/search"), &google_template_url, 31741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci metrics::OmniboxEventProto::OTHER, SearchTermsData(), &client)); 3175f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 3176f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Non-HTTP page URL on different domain. 3177f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(SearchProvider::CanSendURL( 3178f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GURL("https://www.notgoogle.com/search"), 3179f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GURL("https://www.google.com/complete/search"), &google_template_url, 31801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci metrics::OmniboxEventProto::OTHER, SearchTermsData(), &client)); 3181f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 3182f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Non-HTTPS provider. 3183f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(SearchProvider::CanSendURL( 3184f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GURL("http://www.google.com/search"), 3185f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GURL("http://www.google.com/complete/search"), &google_template_url, 31861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci metrics::OmniboxEventProto::OTHER, SearchTermsData(), &client)); 3187f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 3188f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Suggest disabled. 3189f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) profile_.GetPrefs()->SetBoolean(prefs::kSearchSuggestEnabled, false); 3190f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(SearchProvider::CanSendURL( 3191f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GURL("http://www.google.com/search"), 3192f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GURL("https://www.google.com/complete/search"), &google_template_url, 31931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci metrics::OmniboxEventProto::OTHER, SearchTermsData(), &client)); 3194f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) profile_.GetPrefs()->SetBoolean(prefs::kSearchSuggestEnabled, true); 3195f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 3196f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Incognito. 31971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ChromeAutocompleteProviderClient client_incognito( 31981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci profile_.GetOffTheRecordProfile()); 3199f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(SearchProvider::CanSendURL( 3200f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GURL("http://www.google.com/search"), 3201f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GURL("https://www.google.com/complete/search"), &google_template_url, 32025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) metrics::OmniboxEventProto::OTHER, SearchTermsData(), 32031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci &client_incognito)); 3204f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 3205f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Tab sync not enabled. 320623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) profile_.GetPrefs()->SetBoolean(sync_driver::prefs::kSyncKeepEverythingSynced, 320723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) false); 320823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) profile_.GetPrefs()->SetBoolean(sync_driver::prefs::kSyncTabs, false); 3209f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(SearchProvider::CanSendURL( 3210f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GURL("http://www.google.com/search"), 3211f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GURL("https://www.google.com/complete/search"), &google_template_url, 32121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci metrics::OmniboxEventProto::OTHER, SearchTermsData(), &client)); 321323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) profile_.GetPrefs()->SetBoolean(sync_driver::prefs::kSyncTabs, true); 3214f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 3215f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Tab sync is encrypted. 3216f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ProfileSyncService* service = 3217f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ProfileSyncServiceFactory::GetInstance()->GetForProfile(&profile_); 3218f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) syncer::ModelTypeSet encrypted_types = service->GetEncryptedDataTypes(); 3219f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) encrypted_types.Put(syncer::SESSIONS); 3220f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) service->OnEncryptedTypesChanged(encrypted_types, false); 3221f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(SearchProvider::CanSendURL( 3222f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GURL("http://www.google.com/search"), 3223f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GURL("https://www.google.com/complete/search"), &google_template_url, 32241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci metrics::OmniboxEventProto::OTHER, SearchTermsData(), &client)); 3225f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) encrypted_types.Remove(syncer::SESSIONS); 3226f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) service->OnEncryptedTypesChanged(encrypted_types, false); 3227f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 3228f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Check that there were no side effects from previous tests. 3229f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(SearchProvider::CanSendURL( 3230f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GURL("http://www.google.com/search"), 3231f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GURL("https://www.google.com/complete/search"), &google_template_url, 32321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci metrics::OmniboxEventProto::OTHER, SearchTermsData(), &client)); 3233f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 3234a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 3235a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)TEST_F(SearchProviderTest, TestDeleteMatch) { 32361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci AutocompleteMatch match( 32371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci provider_.get(), 0, true, AutocompleteMatchType::SEARCH_SUGGEST); 3238a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) match.RecordAdditionalInfo( 3239a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) SearchProvider::kDeletionUrlKey, 3240a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) "https://www.google.com/complete/deleteitem?q=foo"); 3241a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 3242a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Test a successful deletion request. 3243a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) provider_->matches_.push_back(match); 3244a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) provider_->DeleteMatch(match); 3245a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_FALSE(provider_->deletion_handlers_.empty()); 3246a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_TRUE(provider_->matches_.empty()); 3247a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Set up a default fetcher with provided results. 3248a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) net::TestURLFetcher* fetcher = test_factory_.GetFetcherByID( 3249a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) SearchProvider::kDeletionURLFetcherID); 3250a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_TRUE(fetcher); 3251a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) fetcher->set_response_code(200); 3252a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) fetcher->delegate()->OnURLFetchComplete(fetcher); 3253a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_TRUE(provider_->deletion_handlers_.empty()); 3254a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_TRUE(provider_->is_success()); 3255a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 3256a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Test a failing deletion request. 3257a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) provider_->matches_.push_back(match); 3258a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) provider_->DeleteMatch(match); 3259a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_FALSE(provider_->deletion_handlers_.empty()); 3260a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Set up a default fetcher with provided results. 3261a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) fetcher = test_factory_.GetFetcherByID( 3262a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) SearchProvider::kDeletionURLFetcherID); 3263a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_TRUE(fetcher); 3264a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) fetcher->set_response_code(500); 3265a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) fetcher->delegate()->OnURLFetchComplete(fetcher); 3266a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_TRUE(provider_->deletion_handlers_.empty()); 3267a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_FALSE(provider_->is_success()); 3268a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 3269a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 3270a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)TEST_F(SearchProviderTest, TestDeleteHistoryQueryMatch) { 3271a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GURL term_url( 3272a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) AddSearchToHistory(default_t_url_, ASCIIToUTF16("flash games"), 1)); 3273a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) profile_.BlockUntilHistoryProcessesPendingRequests(); 3274a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 3275a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) AutocompleteMatch games; 3276a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) QueryForInput(ASCIIToUTF16("fla"), false, false); 3277a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) profile_.BlockUntilHistoryProcessesPendingRequests(); 3278a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(FinishDefaultSuggestQuery()); 3279a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_TRUE(FindMatchWithContents(ASCIIToUTF16("flash games"), &games)); 3280a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 3281a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) size_t matches_before = provider_->matches().size(); 3282a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) provider_->DeleteMatch(games); 3283a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(matches_before - 1, provider_->matches().size()); 3284a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 3285a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Process history deletions. 3286a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) profile_.BlockUntilHistoryProcessesPendingRequests(); 3287a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 3288a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Check that the match is gone. 3289a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) QueryForInput(ASCIIToUTF16("fla"), false, false); 3290a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) profile_.BlockUntilHistoryProcessesPendingRequests(); 3291a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(FinishDefaultSuggestQuery()); 3292a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(FindMatchWithContents(ASCIIToUTF16("flash games"), &games)); 3293a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 3294a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 3295a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Verifies that duplicates are preserved in AddMatchToMap(). 3296a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)TEST_F(SearchProviderTest, CheckDuplicateMatchesSaved) { 3297a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) AddSearchToHistory(default_t_url_, ASCIIToUTF16("a"), 1); 3298a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) AddSearchToHistory(default_t_url_, ASCIIToUTF16("alpha"), 1); 3299a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) AddSearchToHistory(default_t_url_, ASCIIToUTF16("avid"), 1); 3300a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 3301a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) profile_.BlockUntilHistoryProcessesPendingRequests(); 33021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci QueryForInputAndWaitForFetcherResponses( 33031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASCIIToUTF16("a"), false, 3304a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "[\"a\",[\"a\", \"alpha\", \"avid\", \"apricot\"],[],[]," 3305a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "{\"google:suggestrelevance\":[1450, 1200, 1150, 1100]," 33061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "\"google:verbatimrelevance\":1350}]", 33071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string()); 3308a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 3309a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) AutocompleteMatch verbatim, match_alpha, match_apricot, match_avid; 3310a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(FindMatchWithContents(ASCIIToUTF16("a"), &verbatim)); 3311a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(FindMatchWithContents(ASCIIToUTF16("alpha"), &match_alpha)); 3312a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(FindMatchWithContents(ASCIIToUTF16("apricot"), &match_apricot)); 3313a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(FindMatchWithContents(ASCIIToUTF16("avid"), &match_avid)); 3314a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 3315a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Verbatim match duplicates are added such that each one has a higher 3316a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // relevance than the previous one. 3317a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(2U, verbatim.duplicate_matches.size()); 3318a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 3319a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Other match duplicates are added in descending relevance order. 3320a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(1U, match_alpha.duplicate_matches.size()); 3321a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(1U, match_avid.duplicate_matches.size()); 3322a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 3323a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(0U, match_apricot.duplicate_matches.size()); 3324a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 3325cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 3326cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TEST_F(SearchProviderTest, SuggestQueryUsesToken) { 3327cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) CommandLine::ForCurrentProcess()->AppendSwitch( 3328cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) switches::kEnableAnswersInSuggest); 3329cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 3330cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) TemplateURLService* turl_model = 3331cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) TemplateURLServiceFactory::GetForProfile(&profile_); 3332cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 3333cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) TemplateURLData data; 3334cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) data.short_name = ASCIIToUTF16("default"); 3335cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) data.SetKeyword(data.short_name); 3336cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) data.SetURL("http://example/{searchTerms}{google:sessionToken}"); 3337cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) data.suggestions_url = 3338cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) "http://suggest/?q={searchTerms}&{google:sessionToken}"; 3339f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) default_t_url_ = new TemplateURL(data); 3340cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) turl_model->Add(default_t_url_); 3341cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) turl_model->SetUserSelectedDefaultSearchProvider(default_t_url_); 3342cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 3343cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::string16 term = term1_.substr(0, term1_.length() - 1); 3344cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) QueryForInput(term, false, false); 3345cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 3346cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Make sure the default provider's suggest service was queried. 3347cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) net::TestURLFetcher* fetcher = test_factory_.GetFetcherByID( 3348cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) SearchProvider::kDefaultProviderURLFetcherID); 3349cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ASSERT_TRUE(fetcher); 3350cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 3351cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // And the URL matches what we expected. 3352cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) TemplateURLRef::SearchTermsArgs search_terms_args(term); 3353cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) search_terms_args.session_token = provider_->current_token_; 3354cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) GURL expected_url(default_t_url_->suggestions_url_ref().ReplaceSearchTerms( 3355f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) search_terms_args, turl_model->search_terms_data())); 3356cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(fetcher->GetOriginalURL().spec(), expected_url.spec()); 3357cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 3358cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Complete running the fetcher to clean up. 3359cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) fetcher->set_response_code(200); 3360cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) fetcher->delegate()->OnURLFetchComplete(fetcher); 3361cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) RunTillProviderDone(); 3362cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 3363cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 3364cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TEST_F(SearchProviderTest, SessionToken) { 3365cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Subsequent calls always get the same token. 3366cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) std::string token = provider_->GetSessionToken(); 3367cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) std::string token2 = provider_->GetSessionToken(); 3368cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(token, token2); 3369cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_FALSE(token.empty()); 3370cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 3371cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Calls do not regenerate a token. 3372cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) provider_->current_token_ = "PRE-EXISTING TOKEN"; 3373cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) token = provider_->GetSessionToken(); 3374cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(token, "PRE-EXISTING TOKEN"); 3375cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 3376cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // ... unless the token has expired. 3377cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) provider_->current_token_.clear(); 3378cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const base::TimeDelta kSmallDelta = base::TimeDelta::FromMilliseconds(1); 3379cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) provider_->token_expiration_time_ = base::TimeTicks::Now() - kSmallDelta; 3380cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) token = provider_->GetSessionToken(); 3381cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_FALSE(token.empty()); 3382cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(token, provider_->current_token_); 3383cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 3384cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // The expiration time is always updated. 3385cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) provider_->GetSessionToken(); 3386cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::TimeTicks expiration_time_1 = provider_->token_expiration_time_; 3387cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::PlatformThread::Sleep(kSmallDelta); 3388cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) provider_->GetSessionToken(); 3389cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::TimeTicks expiration_time_2 = provider_->token_expiration_time_; 3390cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_GT(expiration_time_2, expiration_time_1); 3391cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_GE(expiration_time_2, expiration_time_1 + kSmallDelta); 3392cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 33935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 33945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST_F(SearchProviderTest, AnswersCache) { 33955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) AutocompleteResult result; 33965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ACMatches matches; 33975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) AutocompleteMatch match1; 33985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) match1.answer_contents = base::ASCIIToUTF16("m1"); 33995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) match1.answer_type = base::ASCIIToUTF16("2334"); 34005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) match1.fill_into_edit = base::ASCIIToUTF16("weather los angeles"); 34015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 34025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) AutocompleteMatch non_answer_match1; 34035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) non_answer_match1.fill_into_edit = base::ASCIIToUTF16("weather laguna beach"); 34045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 34055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Test that an answer in the first slot populates the cache. 34065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) matches.push_back(match1); 34075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) matches.push_back(non_answer_match1); 34085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) result.AppendMatches(matches); 34095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) provider_->RegisterDisplayedAnswers(result); 341003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) ASSERT_FALSE(provider_->answers_cache_.empty()); 34115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 34121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Without scored results, no answers will be retrieved. 34131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci AnswersQueryData answer = provider_->FindAnswersPrefetchData(); 34141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(answer.full_query_text.empty()); 34151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(answer.query_type.empty()); 34161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 34171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Inject a scored result, which will trigger answer retrieval. 34181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::string16 query = base::ASCIIToUTF16("weather los angeles"); 34191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SearchSuggestionParser::SuggestResult suggest_result( 34201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci query, AutocompleteMatchType::SEARCH_HISTORY, query, base::string16(), 34211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::string16(), base::string16(), base::string16(), std::string(), 34221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string(), false, 1200, false, false, query); 34231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci QueryForInput(ASCIIToUTF16("weather l"), false, false); 34241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci provider_->transformed_default_history_results_.push_back(suggest_result); 34251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci answer = provider_->FindAnswersPrefetchData(); 34261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(base::ASCIIToUTF16("weather los angeles"), answer.full_query_text); 34271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(base::ASCIIToUTF16("2334"), answer.query_type); 34281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 34291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 34301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(SearchProviderTest, RemoveExtraAnswers) { 34311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ACMatches matches; 34321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci AutocompleteMatch match1, match2, match3, match4, match5; 34331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci match1.answer_contents = base::ASCIIToUTF16("the answer"); 34341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci match1.answer_type = base::ASCIIToUTF16("42"); 34351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci match3.answer_contents = base::ASCIIToUTF16("not to play"); 34361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci match3.answer_type = base::ASCIIToUTF16("1983"); 34371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci match5.answer_contents = base::ASCIIToUTF16("a man"); 34381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci match5.answer_type = base::ASCIIToUTF16("423"); 34391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 34401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci matches.push_back(match1); 34411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci matches.push_back(match2); 34421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci matches.push_back(match3); 34431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci matches.push_back(match4); 34441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci matches.push_back(match5); 34451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 34461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SearchProvider::RemoveExtraAnswers(&matches); 34471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(base::ASCIIToUTF16("the answer"), matches[0].answer_contents); 34481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(base::ASCIIToUTF16("42"), matches[0].answer_type); 34491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(matches[1].answer_contents.empty()); 34501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(matches[1].answer_type.empty()); 34511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(matches[2].answer_contents.empty()); 34521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(matches[2].answer_type.empty()); 34531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(matches[3].answer_contents.empty()); 34541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(matches[3].answer_type.empty()); 34551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(matches[4].answer_contents.empty()); 34561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(matches[4].answer_type.empty()); 34575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 3458