15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/autocomplete/history_quick_provider.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <algorithm> 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <functional> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <set> 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector> 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/format_macros.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 159ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/message_loop/message_loop.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h" 177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/strings/stringprintf.h" 18868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/autocomplete/chrome_autocomplete_scheme_classifier.h" 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/autocomplete/history_url_provider.h" 21010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "chrome/browser/bookmarks/bookmark_model_factory.h" 22f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/chrome_notification_types.h" 237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "chrome/browser/history/history_backend.h" 247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "chrome/browser/history/history_database.h" 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/history/history_service.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/history/history_service_factory.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/history/in_memory_url_index.h" 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/history/url_index_private_data.h" 29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/search_engines/chrome_template_url_service_client.h" 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/search_engines/template_url_service_factory.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" 34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "components/bookmarks/test/bookmark_test_helpers.h" 35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/history/core/browser/url_database.h" 366d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "components/metrics/proto/omnibox_event.pb.h" 375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "components/omnibox/autocomplete_match.h" 386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "components/omnibox/autocomplete_result.h" 39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/search_engines/search_terms_data.h" 40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/search_engines/template_url.h" 41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/search_engines/template_url_service.h" 42f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "content/public/browser/notification_service.h" 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/test/test_browser_thread.h" 44f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "content/public/test/test_utils.h" 457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "sql/transaction.h" 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using base::ASCIIToUTF16; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::Time; 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::TimeDelta; 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserThread; 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct TestURLInfo { 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string url; 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string title; 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int visit_count; 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int typed_count; 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int days_from_now; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} quick_test_db[] = { 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"http://www.google.com/", "Google", 3, 3, 0}, 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"http://slashdot.org/favorite_page.html", "Favorite page", 200, 100, 0}, 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"http://kerneltrap.org/not_very_popular.html", "Less popular", 4, 0, 0}, 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"http://freshmeat.net/unpopular.html", "Unpopular", 1, 1, 0}, 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"http://news.google.com/?ned=us&topic=n", "Google News - U.S.", 2, 2, 0}, 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"http://news.google.com/", "Google News", 1, 1, 0}, 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"http://foo.com/", "Dir", 200, 100, 0}, 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"http://foo.com/dir/", "Dir", 2, 1, 10}, 697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) {"http://foo.com/dir/another/", "Dir", 10, 5, 0}, 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"http://foo.com/dir/another/again/", "Dir", 5, 1, 0}, 717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) {"http://foo.com/dir/another/again/myfile.html", "File", 3, 1, 0}, 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"http://visitedest.com/y/a", "VA", 10, 1, 20}, 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"http://visitedest.com/y/b", "VB", 9, 1, 20}, 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"http://visitedest.com/x/c", "VC", 8, 1, 20}, 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"http://visitedest.com/x/d", "VD", 7, 1, 20}, 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"http://visitedest.com/y/e", "VE", 6, 1, 20}, 777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) {"http://typeredest.com/y/a", "TA", 5, 5, 0}, 787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) {"http://typeredest.com/y/b", "TB", 5, 4, 0}, 797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) {"http://typeredest.com/x/c", "TC", 5, 3, 0}, 807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) {"http://typeredest.com/x/d", "TD", 5, 2, 0}, 817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) {"http://typeredest.com/y/e", "TE", 5, 1, 0}, 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"http://daysagoest.com/y/a", "DA", 1, 1, 0}, 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"http://daysagoest.com/y/b", "DB", 1, 1, 1}, 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"http://daysagoest.com/x/c", "DC", 1, 1, 2}, 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"http://daysagoest.com/x/d", "DD", 1, 1, 3}, 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"http://daysagoest.com/y/e", "DE", 1, 1, 4}, 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"http://abcdefghixyzjklmnopqrstuvw.com/a", "", 3, 1, 0}, 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"http://spaces.com/path%20with%20spaces/foo.html", "Spaces", 2, 2, 0}, 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"http://abcdefghijklxyzmnopqrstuvw.com/a", "", 3, 1, 0}, 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"http://abcdefxyzghijklmnopqrstuvw.com/a", "", 3, 1, 0}, 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"http://abcxyzdefghijklmnopqrstuvw.com/a", "", 3, 1, 0}, 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"http://xyzabcdefghijklmnopqrstuvw.com/a", "", 3, 1, 0}, 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"http://cda.com/Dogs%20Cats%20Gorillas%20Sea%20Slugs%20and%20Mice", 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Dogs & Cats & Mice & Other Animals", 1, 1, 0}, 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"https://monkeytrap.org/", "", 3, 1, 0}, 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) {"http://popularsitewithpathonly.com/moo", 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "popularsitewithpathonly.com/moo", 50, 50, 0}, 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) {"http://popularsitewithroot.com/", "popularsitewithroot.com", 50, 50, 0}, 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) {"http://testsearch.com/?q=thequery", "Test Search Engine", 10, 10, 0}, 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) {"http://testsearch.com/", "Test Search Engine", 9, 9, 0}, 1015c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu {"http://anotherengine.com/?q=thequery", "Another Search Engine", 8, 8, 0}, 1025c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // The encoded stuff between /wiki/ and the # is 第二次世界大戦 1035c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu {"http://ja.wikipedia.org/wiki/%E7%AC%AC%E4%BA%8C%E6%AC%A1%E4%B8%96%E7%95" 1045c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "%8C%E5%A4%A7%E6%88%A6#.E3.83.B4.E3.82.A7.E3.83.AB.E3.82.B5.E3.82.A4.E3." 1055c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "83.A6.E4.BD.93.E5.88.B6", "Title Unimportant", 2, 2, 0} 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 108116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass HistoryQuickProviderTest : public testing::Test { 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HistoryQuickProviderTest() 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : ui_thread_(BrowserThread::UI, &message_loop_), 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) file_thread_(BrowserThread::FILE, &message_loop_) {} 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class SetShouldContain : public std::unary_function<const std::string&, 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::set<std::string> > { 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit SetShouldContain(const ACMatches& matched_urls); 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void operator()(const std::string& expected); 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::set<std::string> LeftOvers() const { return matches_; } 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::set<std::string> matches_; 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 128a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) static KeyedService* CreateTemplateURLService( 129116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch content::BrowserContext* context) { 130116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch Profile* profile = static_cast<Profile*>(context); 131116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return new TemplateURLService( 132116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch profile->GetPrefs(), make_scoped_ptr(new SearchTermsData), NULL, 133116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_ptr<TemplateURLServiceClient>( 134116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch new ChromeTemplateURLServiceClient(profile)), 135116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch NULL, NULL, base::Closure()); 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetUp(); 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void TearDown(); 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void GetTestData(size_t* data_count, TestURLInfo** test_data); 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Fills test data into the history system. 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void FillData(); 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Runs an autocomplete query on |text| and checks to see that the returned 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // results' destination URLs match those provided. |expected_urls| does not 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // need to be in sorted order. 149a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void RunTest(const base::string16 text, 150a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) bool prevent_inline_autocomplete, 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<std::string> expected_urls, 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool can_inline_top_result, 153a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::string16 expected_fill_into_edit, 154a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::string16 autocompletion); 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 156116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // As above, simply with a cursor position specified. 157116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void RunTestWithCursor(const base::string16 text, 158116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const size_t cursor_position, 159116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool prevent_inline_autocomplete, 160116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch std::vector<std::string> expected_urls, 161116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool can_inline_top_result, 162116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::string16 expected_fill_into_edit, 163116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::string16 autocompletion); 164116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 165f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) history::HistoryBackend* history_backend() { 1661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return history_service_->history_backend_.get(); 167f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 168f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 16990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoopForUI message_loop_; 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::TestBrowserThread ui_thread_; 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::TestBrowserThread file_thread_; 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<TestingProfile> profile_; 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HistoryService* history_service_; 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ACMatches ac_matches_; // The resulting matches after running RunTest. 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<HistoryQuickProvider> provider_; 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void HistoryQuickProviderTest::SetUp() { 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_.reset(new TestingProfile()); 183bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch ASSERT_TRUE(profile_->CreateHistoryService(true, false)); 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_->CreateBookmarkModel(true); 185010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) test::WaitForBookmarkModelToLoad( 186010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) BookmarkModelFactory::GetForProfile(profile_.get())); 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_->BlockUntilHistoryIndexIsRefreshed(); 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) history_service_ = 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HistoryServiceFactory::GetForProfile(profile_.get(), 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile::EXPLICIT_ACCESS); 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(history_service_); 192116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch provider_ = new HistoryQuickProvider(profile_.get()); 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TemplateURLServiceFactory::GetInstance()->SetTestingFactoryAndUse( 1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) profile_.get(), &HistoryQuickProviderTest::CreateTemplateURLService); 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FillData(); 196f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) provider_->GetIndex()->RebuildFromHistory(history_backend()->db()); 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void HistoryQuickProviderTest::TearDown() { 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) provider_ = NULL; 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void HistoryQuickProviderTest::GetTestData(size_t* data_count, 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestURLInfo** test_data) { 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(data_count); 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(test_data); 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *data_count = arraysize(quick_test_db); 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *test_data = &quick_test_db[0]; 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void HistoryQuickProviderTest::FillData() { 212f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) sql::Connection& db(history_backend()->db()->GetDB()); 2137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(db.is_open()); 2147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t data_count = 0; 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestURLInfo* test_data = NULL; 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetTestData(&data_count, &test_data); 2187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) size_t visit_id = 1; 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < data_count; ++i) { 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const TestURLInfo& cur(test_data[i]); 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Time visit_time = Time::Now() - TimeDelta::FromDays(cur.days_from_now); 2227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) sql::Transaction transaction(&db); 2237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Add URL. 2257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) transaction.Begin(); 2267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string sql_cmd_line = base::StringPrintf( 2277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) "INSERT INTO \"urls\" VALUES(%" PRIuS ", \'%s\', \'%s\', %d, %d, %" 2287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) PRId64 ", 0, 0)", 2297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) i + 1, cur.url.c_str(), cur.title.c_str(), cur.visit_count, 2307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) cur.typed_count, visit_time.ToInternalValue()); 2317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) sql::Statement sql_stmt(db.GetUniqueStatement(sql_cmd_line.c_str())); 2327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_TRUE(sql_stmt.Run()); 2337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) transaction.Commit(); 2347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Add visits. 2367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) for (int j = 0; j < cur.visit_count; ++j) { 2377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Assume earlier visits are at one-day intervals. 2387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) visit_time -= TimeDelta::FromDays(1); 2397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) transaction.Begin(); 2407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Mark the most recent |cur.typed_count| visits as typed. 2417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string sql_cmd_line = base::StringPrintf( 2427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) "INSERT INTO \"visits\" VALUES(%" PRIuS ", %" PRIuS ", %" PRId64 243bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch ", 0, %d, 0, 1)", 2447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) visit_id++, i + 1, visit_time.ToInternalValue(), 2451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (j < cur.typed_count) ? ui::PAGE_TRANSITION_TYPED : 2461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::PAGE_TRANSITION_LINK); 2477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) sql::Statement sql_stmt(db.GetUniqueStatement(sql_cmd_line.c_str())); 2497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_TRUE(sql_stmt.Run()); 2507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) transaction.Commit(); 2517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)HistoryQuickProviderTest::SetShouldContain::SetShouldContain( 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ACMatches& matched_urls) { 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (ACMatches::const_iterator iter = matched_urls.begin(); 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) iter != matched_urls.end(); ++iter) 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) matches_.insert(iter->destination_url.spec()); 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void HistoryQuickProviderTest::SetShouldContain::operator()( 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& expected) { 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1U, matches_.erase(expected)) 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << "Results did not contain '" << expected << "' but should have."; 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 268116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid HistoryQuickProviderTest::RunTest( 269116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const base::string16 text, 270116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool prevent_inline_autocomplete, 271116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch std::vector<std::string> expected_urls, 272116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool can_inline_top_result, 273116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::string16 expected_fill_into_edit, 274116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::string16 expected_autocompletion) { 275116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch RunTestWithCursor(text, base::string16::npos, prevent_inline_autocomplete, 276116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch expected_urls, can_inline_top_result, 277116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch expected_fill_into_edit, expected_autocompletion); 278116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 280116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid HistoryQuickProviderTest::RunTestWithCursor( 281116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const base::string16 text, 282116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const size_t cursor_position, 283116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool prevent_inline_autocomplete, 284116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch std::vector<std::string> expected_urls, 285116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool can_inline_top_result, 286116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::string16 expected_fill_into_edit, 287116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::string16 expected_autocompletion) { 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE(text); // Minimal hint to query being run. 28990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoop::current()->RunUntilIdle(); 290116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch AutocompleteInput input(text, cursor_position, base::string16(), 2916d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) GURL(), metrics::OmniboxEventProto::INVALID_SPEC, 292116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch prevent_inline_autocomplete, false, true, true, 293116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ChromeAutocompleteSchemeClassifier(profile_.get())); 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) provider_->Start(input, false); 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(provider_->done()); 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ac_matches_ = provider_->matches(); 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should have gotten back at most AutocompleteProvider::kMaxMatches. 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_LE(ac_matches_.size(), AutocompleteProvider::kMaxMatches); 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If the number of expected and actual matches aren't equal then we need 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // test no further, but let's do anyway so that we know which URLs failed. 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(expected_urls.size(), ac_matches_.size()); 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify that all expected URLs were found and that all found URLs 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // were expected. 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::set<std::string> leftovers = 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for_each(expected_urls.begin(), expected_urls.end(), 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetShouldContain(ac_matches_)).LeftOvers(); 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0U, leftovers.size()) << "There were " << leftovers.size() 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << " unexpected results, one of which was: '" 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << *(leftovers.begin()) << "'."; 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (expected_urls.empty()) 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify that we got the results in the order expected. 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int best_score = ac_matches_.begin()->relevance + 1; 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int i = 0; 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<std::string>::const_iterator expected = expected_urls.begin(); 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (ACMatches::const_iterator actual = ac_matches_.begin(); 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) actual != ac_matches_.end() && expected != expected_urls.end(); 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++actual, ++expected, ++i) { 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(*expected, actual->destination_url.spec()) 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << "For result #" << i << " we got '" << actual->destination_url.spec() 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << "' but expected '" << *expected << "'."; 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_LT(actual->relevance, best_score) 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << "At result #" << i << " (url=" << actual->destination_url.spec() 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << "), we noticed scores are not monotonically decreasing."; 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) best_score = actual->relevance; 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 334c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch EXPECT_EQ(can_inline_top_result, ac_matches_[0].allowed_to_be_default_match); 335a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (can_inline_top_result) 336a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(expected_autocompletion, ac_matches_[0].inline_autocompletion); 337a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(expected_fill_into_edit, ac_matches_[0].fill_into_edit); 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(HistoryQuickProviderTest, SimpleSingleMatch) { 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<std::string> expected_urls; 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_urls.push_back("http://slashdot.org/favorite_page.html"); 343a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) RunTest(ASCIIToUTF16("slashdot"), false, expected_urls, true, 344a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASCIIToUTF16("slashdot.org/favorite_page.html"), 345a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASCIIToUTF16(".org/favorite_page.html")); 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 348116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST_F(HistoryQuickProviderTest, SingleMatchWithCursor) { 349116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch std::vector<std::string> expected_urls; 350116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch expected_urls.push_back("http://slashdot.org/favorite_page.html"); 351116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // With cursor after "slash", we should retrieve the desired result but it 352116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // should not be allowed to be the default match. 353116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch RunTestWithCursor(ASCIIToUTF16("slashfavorite_page.html"), 5, false, 354116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch expected_urls, false, 355116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASCIIToUTF16("slashdot.org/favorite_page.html"), 356116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::string16()); 357116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // If the cursor is in the middle of a valid URL suggestion, it should be 358116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // allowed to be the default match. The inline completion will be empty 359116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // though as no completion is necessary. 360116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch RunTestWithCursor(ASCIIToUTF16("slashdot.org/favorite_page.html"), 5, false, 361116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch expected_urls, true, 362116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASCIIToUTF16("slashdot.org/favorite_page.html"), 363116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::string16()); 364116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 365116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 366e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen MurdochTEST_F(HistoryQuickProviderTest, WordBoundariesWithPunctuationMatch) { 367e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch std::vector<std::string> expected_urls; 368e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch expected_urls.push_back("http://popularsitewithpathonly.com/moo"); 369e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch RunTest(ASCIIToUTF16("/moo"), false, expected_urls, false, 370e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch ASCIIToUTF16("popularsitewithpathonly.com/moo"), base::string16()); 371e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch} 372e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(HistoryQuickProviderTest, MultiTermTitleMatch) { 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<std::string> expected_urls; 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_urls.push_back( 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "http://cda.com/Dogs%20Cats%20Gorillas%20Sea%20Slugs%20and%20Mice"); 377a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) RunTest(ASCIIToUTF16("mice other animals"), false, expected_urls, false, 378a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASCIIToUTF16("cda.com/Dogs Cats Gorillas Sea Slugs and Mice"), 379a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::string16()); 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(HistoryQuickProviderTest, NonWordLastCharacterMatch) { 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string expected_url("http://slashdot.org/favorite_page.html"); 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<std::string> expected_urls; 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_urls.push_back(expected_url); 386a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) RunTest(ASCIIToUTF16("slashdot.org/"), false, expected_urls, true, 387a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASCIIToUTF16("slashdot.org/favorite_page.html"), 388a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASCIIToUTF16("favorite_page.html")); 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(HistoryQuickProviderTest, MultiMatch) { 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<std::string> expected_urls; 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Scores high because of typed_count. 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_urls.push_back("http://foo.com/"); 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Scores high because of visit count. 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_urls.push_back("http://foo.com/dir/another/"); 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Scores high because of high visit count. 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_urls.push_back("http://foo.com/dir/another/again/"); 399a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) RunTest(ASCIIToUTF16("foo"), false, expected_urls, true, 400a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASCIIToUTF16("foo.com"), ASCIIToUTF16(".com")); 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(HistoryQuickProviderTest, StartRelativeMatch) { 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<std::string> expected_urls; 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_urls.push_back("http://xyzabcdefghijklmnopqrstuvw.com/a"); 406a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) RunTest(ASCIIToUTF16("xyza"), false, expected_urls, true, 407a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASCIIToUTF16("xyzabcdefghijklmnopqrstuvw.com/a"), 408a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASCIIToUTF16("bcdefghijklmnopqrstuvw.com/a")); 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(HistoryQuickProviderTest, EncodingMatch) { 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<std::string> expected_urls; 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_urls.push_back("http://spaces.com/path%20with%20spaces/foo.html"); 414a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) RunTest(ASCIIToUTF16("path with spaces"), false, expected_urls, false, 415a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASCIIToUTF16("spaces.com/path with spaces/foo.html"), 416a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::string16()); 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo LiuTEST_F(HistoryQuickProviderTest, ContentsClass) { 4205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu std::vector<std::string> expected_urls; 4215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu expected_urls.push_back( 4225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "http://ja.wikipedia.org/wiki/%E7%AC%AC%E4%BA%8C%E6%AC%A1%E4%B8%96%E7" 4235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "%95%8C%E5%A4%A7%E6%88%A6#.E3.83.B4.E3.82.A7.E3.83.AB.E3.82.B5.E3.82." 4245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "A4.E3.83.A6.E4.BD.93.E5.88.B6"); 4255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu RunTest(base::UTF8ToUTF16("第二 e3"), false, expected_urls, false, 4265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::UTF8ToUTF16("ja.wikipedia.org/wiki/第二次世界大戦#.E3.83.B4.E3." 4275c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "82.A7.E3.83.AB.E3.82.B5.E3.82.A4.E3.83.A6.E4.BD." 4285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "93.E5.88.B6"), 4295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::string16()); 4305c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#ifndef NDEBUG 4315c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ac_matches_[0].Validate(); 4325c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#endif 4335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Verify that contents_class divides the string in the right places. 4345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // [22, 24) is the "第二". All the other pairs are the "e3". 4355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ACMatchClassifications contents_class(ac_matches_[0].contents_class); 4365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu size_t expected_offsets[] = { 0, 22, 24, 31, 33, 40, 42, 49, 51, 58, 60, 67, 4375c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 69, 76, 78 }; 4385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // ScoredHistoryMatch may not highlight all the occurrences of these terms 4395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // because it only highlights terms at word breaks, and it only stores word 4405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // breaks up to some specified number of characters (50 at the time of this 4415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // comment). This test is written flexibly so it still will pass if we 4425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // increase that number in the future. Regardless, we require the first 4435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // five offsets to be correct--in this example these cover at least one 4445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // occurrence of each term. 4455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_LE(contents_class.size(), arraysize(expected_offsets)); 4465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_GE(contents_class.size(), 5u); 4475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu for (size_t i = 0; i < contents_class.size(); ++i) 4485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_EQ(expected_offsets[i], contents_class[i].offset); 4495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 4505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(HistoryQuickProviderTest, VisitCountMatches) { 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<std::string> expected_urls; 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_urls.push_back("http://visitedest.com/y/a"); 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_urls.push_back("http://visitedest.com/y/b"); 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_urls.push_back("http://visitedest.com/x/c"); 456a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) RunTest(ASCIIToUTF16("visitedest"), false, expected_urls, true, 457a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASCIIToUTF16("visitedest.com/y/a"), 458a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASCIIToUTF16(".com/y/a")); 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(HistoryQuickProviderTest, TypedCountMatches) { 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<std::string> expected_urls; 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_urls.push_back("http://typeredest.com/y/a"); 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_urls.push_back("http://typeredest.com/y/b"); 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_urls.push_back("http://typeredest.com/x/c"); 466a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) RunTest(ASCIIToUTF16("typeredest"), false, expected_urls, true, 467a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASCIIToUTF16("typeredest.com/y/a"), 468a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASCIIToUTF16(".com/y/a")); 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(HistoryQuickProviderTest, DaysAgoMatches) { 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<std::string> expected_urls; 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_urls.push_back("http://daysagoest.com/y/a"); 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_urls.push_back("http://daysagoest.com/y/b"); 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_urls.push_back("http://daysagoest.com/x/c"); 476a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) RunTest(ASCIIToUTF16("daysagoest"), false, expected_urls, true, 477a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASCIIToUTF16("daysagoest.com/y/a"), 478a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASCIIToUTF16(".com/y/a")); 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(HistoryQuickProviderTest, EncodingLimitMatch) { 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<std::string> expected_urls; 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string url( 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "http://cda.com/Dogs%20Cats%20Gorillas%20Sea%20Slugs%20and%20Mice"); 4852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // First check that a mid-word match yield no results. 486a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) RunTest(ASCIIToUTF16("ice"), false, expected_urls, false, 487a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASCIIToUTF16("cda.com/Dogs Cats Gorillas Sea Slugs and Mice"), 488a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::string16()); 4892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Then check that we get results when the match is at a word start 4902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // that is present because of an encoded separate (%20 = space). 4912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) expected_urls.push_back(url); 492a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) RunTest(ASCIIToUTF16("Mice"), false, expected_urls, false, 493a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASCIIToUTF16("cda.com/Dogs Cats Gorillas Sea Slugs and Mice"), 494a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::string16()); 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify that the matches' ACMatchClassifications offsets are in range. 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ACMatchClassifications content(ac_matches_[0].contents_class); 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The max offset accounts for 6 occurrences of '%20' plus the 'http://'. 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const size_t max_offset = url.length() - ((6 * 2) + 7); 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (ACMatchClassifications::const_iterator citer = content.begin(); 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) citer != content.end(); ++citer) 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_LT(citer->offset, max_offset); 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ACMatchClassifications description(ac_matches_[0].description_class); 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string page_title("Dogs & Cats & Mice & Other Animals"); 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (ACMatchClassifications::const_iterator diter = description.begin(); 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) diter != description.end(); ++diter) 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_LT(diter->offset, page_title.length()); 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(HistoryQuickProviderTest, Spans) { 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test SpansFromTermMatch 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) history::TermMatches matches_a; 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulates matches: '.xx.xxx..xx...xxxxx..' which will test no match at 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // either beginning or end as well as adjacent matches. 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) matches_a.push_back(history::TermMatch(1, 1, 2)); 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) matches_a.push_back(history::TermMatch(2, 4, 3)); 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) matches_a.push_back(history::TermMatch(3, 9, 1)); 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) matches_a.push_back(history::TermMatch(3, 10, 1)); 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) matches_a.push_back(history::TermMatch(4, 14, 5)); 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ACMatchClassifications spans_a = 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HistoryQuickProvider::SpansFromTermMatch(matches_a, 20, false); 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ACMatch spans should be: 'NM-NM---N-M-N--M----N-' 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(9U, spans_a.size()); 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0U, spans_a[0].offset); 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ACMatchClassification::NONE, spans_a[0].style); 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1U, spans_a[1].offset); 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ACMatchClassification::MATCH, spans_a[1].style); 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(3U, spans_a[2].offset); 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ACMatchClassification::NONE, spans_a[2].style); 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(4U, spans_a[3].offset); 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ACMatchClassification::MATCH, spans_a[3].style); 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(7U, spans_a[4].offset); 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ACMatchClassification::NONE, spans_a[4].style); 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(9U, spans_a[5].offset); 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ACMatchClassification::MATCH, spans_a[5].style); 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(11U, spans_a[6].offset); 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ACMatchClassification::NONE, spans_a[6].style); 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(14U, spans_a[7].offset); 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ACMatchClassification::MATCH, spans_a[7].style); 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(19U, spans_a[8].offset); 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ACMatchClassification::NONE, spans_a[8].style); 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulates matches: 'xx.xx' which will test matches at both beginning and 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // end. 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) history::TermMatches matches_b; 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) matches_b.push_back(history::TermMatch(1, 0, 2)); 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) matches_b.push_back(history::TermMatch(2, 3, 2)); 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ACMatchClassifications spans_b = 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HistoryQuickProvider::SpansFromTermMatch(matches_b, 5, true); 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ACMatch spans should be: 'M-NM-' 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(3U, spans_b.size()); 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0U, spans_b[0].offset); 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ACMatchClassification::MATCH | ACMatchClassification::URL, 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) spans_b[0].style); 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2U, spans_b[1].offset); 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ACMatchClassification::URL, spans_b[1].style); 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(3U, spans_b[2].offset); 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ACMatchClassification::MATCH | ACMatchClassification::URL, 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) spans_b[2].style); 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(HistoryQuickProviderTest, DeleteMatch) { 561f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GURL test_url("http://slashdot.org/favorite_page.html"); 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<std::string> expected_urls; 563f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) expected_urls.push_back(test_url.spec()); 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Fill up ac_matches_; we don't really care about the test yet. 565a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) RunTest(ASCIIToUTF16("slashdot"), false, expected_urls, true, 566a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASCIIToUTF16("slashdot.org/favorite_page.html"), 567a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASCIIToUTF16(".org/favorite_page.html")); 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1U, ac_matches_.size()); 569f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(history_backend()->GetURL(test_url, NULL)); 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) provider_->DeleteMatch(ac_matches_[0]); 571f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 572f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Check that the underlying URL is deleted from the history DB (this implies 573f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // that all visits are gone as well). Also verify that a deletion notification 574f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // is sent, in response to which the secondary data stores (InMemoryDatabase, 575f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // InMemoryURLIndex) will drop any data they might have pertaining to the URL. 576f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // To ensure that the deletion has been propagated everywhere before we start 577f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // verifying post-deletion states, first wait until we see the notification. 578f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) content::WindowedNotificationObserver observer( 579f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) chrome::NOTIFICATION_HISTORY_URLS_DELETED, 580f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) content::NotificationService::AllSources()); 581f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) observer.Wait(); 582f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_FALSE(history_backend()->GetURL(test_url, NULL)); 583f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 584f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Just to be on the safe side, explicitly verify that we have deleted enough 585f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // data so that we will not be serving the same result again. 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_urls.clear(); 587a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) RunTest(ASCIIToUTF16("slashdot"), false, expected_urls, true, 588a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASCIIToUTF16("NONE EXPECTED"), base::string16()); 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(HistoryQuickProviderTest, PreventBeatingURLWhatYouTypedMatch) { 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<std::string> expected_urls; 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_urls.clear(); 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_urls.push_back("http://popularsitewithroot.com/"); 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If the user enters a hostname (no path) that he/she has visited 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // before, we should make sure that all HistoryQuickProvider results 5982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // have scores less than what HistoryURLProvider will assign the 5992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // URL-what-you-typed match. 600a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) RunTest(ASCIIToUTF16("popularsitewithroot.com"), false, expected_urls, true, 601a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASCIIToUTF16("popularsitewithroot.com"), base::string16()); 6022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_LT(ac_matches_[0].relevance, 6032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) HistoryURLProvider::kScoreForBestInlineableResult); 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that if the user didn't quite enter the full hostname, this 6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // hostname would've normally scored above the URL-what-you-typed match. 607a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) RunTest(ASCIIToUTF16("popularsitewithroot.c"), false, expected_urls, true, 608a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASCIIToUTF16("popularsitewithroot.com"), 609a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASCIIToUTF16("om")); 6102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_GE(ac_matches_[0].relevance, 6112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) HistoryURLProvider::kScoreForWhatYouTypedResult); 6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_urls.clear(); 6142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) expected_urls.push_back("http://popularsitewithpathonly.com/moo"); 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If the user enters a hostname of a host that he/she has visited 6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // but never visited the root page of, we should make sure that all 6172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // HistoryQuickProvider results have scores less than what the 6182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // HistoryURLProvider will assign the URL-what-you-typed match. 619a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) RunTest(ASCIIToUTF16("popularsitewithpathonly.com"), false, expected_urls, 620a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) true, 621a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASCIIToUTF16("popularsitewithpathonly.com/moo"), 622a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASCIIToUTF16("/moo")); 6232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_LT(ac_matches_[0].relevance, 6247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) HistoryURLProvider::kScoreForUnvisitedIntranetResult); 6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify the same thing happens if the user adds a / to end of the 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // hostname. 628a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) RunTest(ASCIIToUTF16("popularsitewithpathonly.com/"), false, expected_urls, 629a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) true, ASCIIToUTF16("popularsitewithpathonly.com/moo"), 630a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASCIIToUTF16("moo")); 6312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_LT(ac_matches_[0].relevance, 6327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) HistoryURLProvider::kScoreForUnvisitedIntranetResult); 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that if the user didn't quite enter the full hostname, this 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // page would've normally scored above the URL-what-you-typed match. 636a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) RunTest(ASCIIToUTF16("popularsitewithpathonly.co"), false, expected_urls, 637a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) true, ASCIIToUTF16("popularsitewithpathonly.com/moo"), 638a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASCIIToUTF16("m/moo")); 6392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_GE(ac_matches_[0].relevance, 6402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) HistoryURLProvider::kScoreForWhatYouTypedResult); 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If the user enters a hostname + path that he/she has not visited 6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // before (but visited other things on the host), we can allow 6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // inline autocompletions. 645a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) RunTest(ASCIIToUTF16("popularsitewithpathonly.com/mo"), false, expected_urls, 646a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) true, 647a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASCIIToUTF16("popularsitewithpathonly.com/moo"), 648a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASCIIToUTF16("o")); 6492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_GE(ac_matches_[0].relevance, 6502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) HistoryURLProvider::kScoreForWhatYouTypedResult); 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If the user enters a hostname + path that he/she has visited 6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // before, we should make sure that all HistoryQuickProvider results 6542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // have scores less than what the HistoryURLProvider will assign 6552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // the URL-what-you-typed match. 656a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) RunTest(ASCIIToUTF16("popularsitewithpathonly.com/moo"), false, 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_urls, true, 658a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASCIIToUTF16("popularsitewithpathonly.com/moo"), base::string16()); 6592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_LT(ac_matches_[0].relevance, 6602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) HistoryURLProvider::kScoreForBestInlineableResult); 6612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 663a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)TEST_F(HistoryQuickProviderTest, PreventInlineAutocomplete) { 664a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) std::vector<std::string> expected_urls; 665a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) expected_urls.push_back("http://popularsitewithroot.com/"); 666a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 667a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Check that the desired URL is normally allowed to be the default match 668a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // against input that is a prefex of the URL. 669a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) RunTest(ASCIIToUTF16("popularsitewithr"), false, expected_urls, true, 670a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASCIIToUTF16("popularsitewithroot.com"), 671a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASCIIToUTF16("oot.com")); 672a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 673a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Check that it's not allowed to be the default match if 674a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // prevent_inline_autocomplete is true. 675a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) RunTest(ASCIIToUTF16("popularsitewithr"), true, expected_urls, false, 676a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASCIIToUTF16("popularsitewithroot.com"), 677a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASCIIToUTF16("oot.com")); 678a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 679a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // But the exact hostname can still match even if prevent inline autocomplete 680a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // is true. i.e., there's no autocompletion necessary; this is effectively 681a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // URL-what-you-typed. 682a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) RunTest(ASCIIToUTF16("popularsitewithroot.com"), true, expected_urls, true, 683a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASCIIToUTF16("popularsitewithroot.com"), base::string16()); 684a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 685a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // The above still holds even with an extra trailing slash. 686a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) RunTest(ASCIIToUTF16("popularsitewithroot.com/"), true, expected_urls, true, 687a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASCIIToUTF16("popularsitewithroot.com"), base::string16()); 688a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 689a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 6902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(HistoryQuickProviderTest, CullSearchResults) { 6912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Set up a default search engine. 6922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TemplateURLData data; 6932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) data.SetKeyword(ASCIIToUTF16("TestEngine")); 6942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) data.SetURL("http://testsearch.com/?q={searchTerms}"); 6952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TemplateURLService* template_url_service = 6962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TemplateURLServiceFactory::GetForProfile(profile_.get()); 697f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) TemplateURL* template_url = new TemplateURL(data); 6982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) template_url_service->Add(template_url); 6995c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu template_url_service->SetUserSelectedDefaultSearchProvider(template_url); 7002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) template_url_service->Load(); 7012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // A search results page should not be returned when typing a query. 7032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::vector<std::string> expected_urls; 7042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) expected_urls.push_back("http://anotherengine.com/?q=thequery"); 705a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) RunTest(ASCIIToUTF16("thequery"), false, expected_urls, false, 706a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASCIIToUTF16("anotherengine.com/?q=thequery"), base::string16()); 7072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // A search results page should not be returned when typing the engine URL. 7092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) expected_urls.clear(); 7102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) expected_urls.push_back("http://testsearch.com/"); 711a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) RunTest(ASCIIToUTF16("testsearch"), false, expected_urls, true, 712a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASCIIToUTF16("testsearch.com"), 713a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASCIIToUTF16(".com")); 7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// HQPOrderingTest ------------------------------------------------------------- 7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TestURLInfo ordering_test_db[] = { 7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"http://www.teamliquid.net/tlpd/korean/games/21648_bisu_vs_iris", "", 6, 3, 7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 256}, 7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"http://www.amazon.com/", "amazon.com: online shopping for electronics, " 7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "apparel, computers, books, dvds & more", 20, 20, 10}, 7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"http://www.teamliquid.net/forum/viewmessage.php?topic_id=52045&" 7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "currentpage=83", "google images", 6, 6, 0}, 7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"http://www.tempurpedic.com/", "tempur-pedic", 7, 7, 0}, 7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"http://www.teamfortress.com/", "", 5, 5, 6}, 7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"http://www.rottentomatoes.com/", "", 3, 3, 7}, 7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"http://music.google.com/music/listen?u=0#start_pl", "", 3, 3, 9}, 7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"https://www.emigrantdirect.com/", "high interest savings account, high " 7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "yield savings - emigrantdirect", 5, 5, 3}, 7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"http://store.steampowered.com/", "", 6, 6, 1}, 7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"http://techmeme.com/", "techmeme", 111, 110, 4}, 7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"http://www.teamliquid.net/tlpd", "team liquid progaming database", 15, 15, 7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2}, 7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"http://store.steampowered.com/", "the steam summer camp sale", 6, 6, 1}, 7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"http://www.teamliquid.net/tlpd/korean/players", "tlpd - bw korean - player " 7377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) "index", 25, 7, 219}, 7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"http://slashdot.org/", "slashdot: news for nerds, stuff that matters", 3, 3, 7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6}, 7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"http://translate.google.com/", "google translate", 3, 3, 0}, 7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"http://arstechnica.com/", "ars technica", 3, 3, 3}, 7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"http://www.rottentomatoes.com/", "movies | movie trailers | reviews - " 7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "rotten tomatoes", 3, 3, 7}, 7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"http://www.teamliquid.net/", "team liquid - starcraft 2 and brood war pro " 7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "gaming news", 26, 25, 3}, 7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"http://metaleater.com/", "metaleater", 4, 3, 8}, 7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"http://half.com/", "half.com: textbooks , books , music , movies , games , " 7485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "video games", 4, 4, 6}, 7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"http://teamliquid.net/", "team liquid - starcraft 2 and brood war pro " 7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "gaming news", 8, 5, 9}, 7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class HQPOrderingTest : public HistoryQuickProviderTest { 7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 7555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void GetTestData(size_t* data_count, 7565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestURLInfo** test_data) OVERRIDE; 7575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 7585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void HQPOrderingTest::GetTestData(size_t* data_count, TestURLInfo** test_data) { 7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(data_count); 7615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(test_data); 7625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *data_count = arraysize(ordering_test_db); 7635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *test_data = &ordering_test_db[0]; 7645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(HQPOrderingTest, TEMatch) { 7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<std::string> expected_urls; 7685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_urls.push_back("http://techmeme.com/"); 7695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_urls.push_back("http://www.teamliquid.net/"); 7705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_urls.push_back("http://www.teamliquid.net/tlpd"); 771a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) RunTest(ASCIIToUTF16("te"), false, expected_urls, true, 772a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASCIIToUTF16("techmeme.com"), 773a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASCIIToUTF16("chmeme.com")); 7745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(HQPOrderingTest, TEAMatch) { 7775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<std::string> expected_urls; 7785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_urls.push_back("http://www.teamliquid.net/"); 7795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_urls.push_back("http://www.teamliquid.net/tlpd"); 7805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_urls.push_back("http://www.teamliquid.net/tlpd/korean/players"); 781a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) RunTest(ASCIIToUTF16("tea"), false, expected_urls, true, 782a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASCIIToUTF16("www.teamliquid.net"), 783a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASCIIToUTF16("mliquid.net")); 7845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 785