123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// found in the LICENSE file. 423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "chrome/browser/autocomplete/shortcuts_backend.h" 623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "base/files/scoped_temp_dir.h" 823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "base/message_loop/message_loop.h" 923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "base/path_service.h" 1023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "base/strings/stringprintf.h" 1123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "base/strings/utf_string_conversions.h" 1223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "chrome/browser/autocomplete/shortcuts_backend_factory.h" 1323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "chrome/browser/history/shortcuts_database.h" 14effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/search_engines/template_url_service_factory.h" 1523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "chrome/test/base/testing_profile.h" 16effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/test/base/ui_test_utils.h" 17116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/search_engines/template_url_service.h" 1823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "content/public/test/test_browser_thread.h" 1923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "sql/statement.h" 2023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 2123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 2223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 2323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 2423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// ShortcutsBackendTest ------------------------------------------------------- 2523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 2623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)class ShortcutsBackendTest : public testing::Test, 2723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) public ShortcutsBackend::ShortcutsBackendObserver { 2823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) public: 2923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) ShortcutsBackendTest(); 3023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 3123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) history::ShortcutsDatabase::Shortcut::MatchCore MatchCoreForTesting( 3223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) const std::string& url, 3323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) const std::string& contents_class = std::string(), 3423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) const std::string& description_class = std::string(), 3523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) AutocompleteMatch::Type type = AutocompleteMatchType::URL_WHAT_YOU_TYPED); 36effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch void SetSearchProvider(); 3723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 3823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) virtual void SetUp(); 3923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) virtual void TearDown(); 4023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 4123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) virtual void OnShortcutsLoaded() OVERRIDE; 4223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) virtual void OnShortcutsChanged() OVERRIDE; 4323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 4423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) const ShortcutsBackend::ShortcutMap& shortcuts_map() const { 4523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) return backend_->shortcuts_map(); 4623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) } 4723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) bool changed_notified() const { return changed_notified_; } 4823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) void set_changed_notified(bool changed_notified) { 4923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) changed_notified_ = changed_notified; 5023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) } 5123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 5223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) void InitBackend(); 5323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) bool AddShortcut(const history::ShortcutsDatabase::Shortcut& shortcut); 5423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) bool UpdateShortcut(const history::ShortcutsDatabase::Shortcut& shortcut); 5523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) bool DeleteShortcutsWithURL(const GURL& url); 5623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) bool DeleteShortcutsWithIDs( 5723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) const history::ShortcutsDatabase::ShortcutIDs& deleted_ids); 5823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 59effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch protected: 60effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch TestingProfile profile_; 6123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 6223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) private: 6323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) scoped_refptr<ShortcutsBackend> backend_; 6423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) base::MessageLoopForUI ui_message_loop_; 6523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) content::TestBrowserThread ui_thread_; 6623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) content::TestBrowserThread db_thread_; 6723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 6823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) bool load_notified_; 6923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) bool changed_notified_; 7023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 7123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(ShortcutsBackendTest); 7223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)}; 7323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 7423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)ShortcutsBackendTest::ShortcutsBackendTest() 7523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) : ui_thread_(content::BrowserThread::UI, &ui_message_loop_), 7623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) db_thread_(content::BrowserThread::DB), 7723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) load_notified_(false), 7823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) changed_notified_(false) { 7923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 8023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 8123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)history::ShortcutsDatabase::Shortcut::MatchCore 8223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) ShortcutsBackendTest::MatchCoreForTesting( 8323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) const std::string& url, 8423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) const std::string& contents_class, 8523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) const std::string& description_class, 8623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) AutocompleteMatch::Type type) { 8723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) AutocompleteMatch match(NULL, 0, 0, type); 8823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) match.destination_url = GURL(url); 8923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) match.contents = base::ASCIIToUTF16("test"); 9023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) match.contents_class = 9123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) AutocompleteMatch::ClassificationsFromString(contents_class); 9223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) match.description_class = 9323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) AutocompleteMatch::ClassificationsFromString(description_class); 94effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch match.search_terms_args.reset( 95effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new TemplateURLRef::SearchTermsArgs(match.contents)); 96effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return ShortcutsBackend::MatchToMatchCore(match, &profile_); 97effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 98effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 99effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid ShortcutsBackendTest::SetSearchProvider() { 100effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch TemplateURLService* template_url_service = 101effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch TemplateURLServiceFactory::GetForProfile(&profile_); 102effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch TemplateURLData data; 103effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch data.SetURL("http://foo.com/search?bar={searchTerms}"); 104effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch data.SetKeyword(base::UTF8ToUTF16("foo")); 105effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 106f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) TemplateURL* template_url = new TemplateURL(data); 107effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Takes ownership of |template_url|. 108effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch template_url_service->Add(template_url); 1095c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu template_url_service->SetUserSelectedDefaultSearchProvider(template_url); 11023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 11123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 11223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)void ShortcutsBackendTest::SetUp() { 11323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) db_thread_.Start(); 11423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) ShortcutsBackendFactory::GetInstance()->SetTestingFactoryAndUse( 11523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) &profile_, &ShortcutsBackendFactory::BuildProfileForTesting); 11623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) backend_ = ShortcutsBackendFactory::GetForProfile(&profile_); 11723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) ASSERT_TRUE(backend_.get()); 11823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) backend_->AddObserver(this); 119effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 120effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch TemplateURLServiceFactory::GetInstance()->SetTestingFactoryAndUse( 121effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch &profile_, &TemplateURLServiceFactory::BuildInstanceFor); 122effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch TemplateURLService* template_url_service = 123effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch TemplateURLServiceFactory::GetForProfile(&profile_); 124effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ui_test_utils::WaitForTemplateURLServiceToLoad(template_url_service); 12523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 12623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 12723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)void ShortcutsBackendTest::TearDown() { 12823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) backend_->RemoveObserver(this); 12923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) db_thread_.Stop(); 13023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 13123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 13223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)void ShortcutsBackendTest::OnShortcutsLoaded() { 13323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) load_notified_ = true; 13423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) base::MessageLoop::current()->Quit(); 13523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 13623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 13723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)void ShortcutsBackendTest::OnShortcutsChanged() { 13823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) changed_notified_ = true; 13923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 14023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 14123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)void ShortcutsBackendTest::InitBackend() { 14223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) ShortcutsBackend* backend = 14323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) ShortcutsBackendFactory::GetForProfile(&profile_).get(); 14423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) ASSERT_TRUE(backend); 14523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) ASSERT_FALSE(load_notified_); 14623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) ASSERT_FALSE(backend_->initialized()); 14723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) base::MessageLoop::current()->Run(); 14823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) EXPECT_TRUE(load_notified_); 14923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) EXPECT_TRUE(backend_->initialized()); 15023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 15123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 15223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)bool ShortcutsBackendTest::AddShortcut( 15323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) const history::ShortcutsDatabase::Shortcut& shortcut) { 15423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) return backend_->AddShortcut(shortcut); 15523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 15623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 15723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)bool ShortcutsBackendTest::UpdateShortcut( 15823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) const history::ShortcutsDatabase::Shortcut& shortcut) { 15923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) return backend_->UpdateShortcut(shortcut); 16023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 16123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 16223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)bool ShortcutsBackendTest::DeleteShortcutsWithURL(const GURL& url) { 16323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) return backend_->DeleteShortcutsWithURL(url); 16423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 16523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 16623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)bool ShortcutsBackendTest::DeleteShortcutsWithIDs( 16723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) const history::ShortcutsDatabase::ShortcutIDs& deleted_ids) { 16823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) return backend_->DeleteShortcutsWithIDs(deleted_ids); 16923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 17023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 17123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 17223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// Actual tests --------------------------------------------------------------- 17323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 17423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// Verifies that creating MatchCores strips classifications and sanitizes match 17523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// types. 17623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)TEST_F(ShortcutsBackendTest, SanitizeMatchCore) { 17723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) struct { 17823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) std::string input_contents_class; 17923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) std::string input_description_class; 18023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) AutocompleteMatch::Type input_type; 18123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) std::string output_contents_class; 18223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) std::string output_description_class; 18323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) AutocompleteMatch::Type output_type; 18423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) } cases[] = { 185effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch { "0,1,4,0", "0,3,4,1", AutocompleteMatchType::URL_WHAT_YOU_TYPED, 186effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch "0,1,4,0", "0,1", AutocompleteMatchType::HISTORY_URL }, 187effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch { "0,3,5,1", "0,2,5,0", AutocompleteMatchType::NAVSUGGEST, 188effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch "0,1", "0,0", AutocompleteMatchType::HISTORY_URL }, 189effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch { "0,1", "0,0,11,2,15,0", 190effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, 191effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch "0,1", "0,0", AutocompleteMatchType::SEARCH_HISTORY }, 192effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch { "0,1", "0,0", AutocompleteMatchType::SEARCH_SUGGEST, 193effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch "0,1", "0,0", AutocompleteMatchType::SEARCH_HISTORY }, 194effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch { "0,1", "0,0", AutocompleteMatchType::SEARCH_SUGGEST_ENTITY, 195effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch "", "", AutocompleteMatchType::SEARCH_HISTORY }, 196effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch { "0,1", "0,0", AutocompleteMatchType::SEARCH_SUGGEST_INFINITE, 197effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch "", "", AutocompleteMatchType::SEARCH_HISTORY }, 198effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch { "0,1", "0,0", AutocompleteMatchType::SEARCH_SUGGEST_PERSONALIZED, 199effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch "", "", AutocompleteMatchType::SEARCH_HISTORY }, 200effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch { "0,1", "0,0", AutocompleteMatchType::SEARCH_SUGGEST_PROFILE, 201effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch "", "", AutocompleteMatchType::SEARCH_HISTORY }, 202f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { "0,1", "0,0", AutocompleteMatchType::SEARCH_SUGGEST_ANSWER, 203f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "", "", AutocompleteMatchType::SEARCH_HISTORY }, 20423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) }; 20523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 20623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); ++i) { 20723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) history::ShortcutsDatabase::Shortcut::MatchCore match_core( 20823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) MatchCoreForTesting(std::string(), cases[i].input_contents_class, 20923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) cases[i].input_description_class, 21023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) cases[i].input_type)); 211effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_EQ(cases[i].output_contents_class, match_core.contents_class) 212effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch << ":i:" << i << ":type:" << cases[i].input_type; 213effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_EQ(cases[i].output_description_class, match_core.description_class) 214effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch << ":i:" << i << ":type:" << cases[i].input_type; 215effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_EQ(cases[i].output_type, match_core.type) 216effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch << ":i:" << i << ":type:" << cases[i].input_type; 21723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) } 21823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 21923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 220effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochTEST_F(ShortcutsBackendTest, EntitySuggestionTest) { 221effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch SetSearchProvider(); 222effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch AutocompleteMatch match; 223effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch match.fill_into_edit = base::UTF8ToUTF16("franklin d roosevelt"); 224effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch match.type = AutocompleteMatchType::SEARCH_SUGGEST_ENTITY; 225effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch match.contents = base::UTF8ToUTF16("roosevelt"); 226effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch match.contents_class = 227effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch AutocompleteMatch::ClassificationsFromString("0,0,5,2"); 228effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch match.description = base::UTF8ToUTF16("Franklin D. Roosevelt"); 229effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch match.description_class = AutocompleteMatch::ClassificationsFromString("0,4"); 230effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch match.destination_url = GURL( 231effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch "http://www.foo.com/search?bar=franklin+d+roosevelt&gs_ssp=1234"); 232effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch match.keyword = base::UTF8ToUTF16("foo"); 233effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch match.search_terms_args.reset( 234effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new TemplateURLRef::SearchTermsArgs(match.fill_into_edit)); 235effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 236effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch history::ShortcutsDatabase::Shortcut::MatchCore match_core = 237effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ShortcutsBackend::MatchToMatchCore(match, &profile_); 238effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 239effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_EQ("http://foo.com/search?bar=franklin+d+roosevelt", 240effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch match_core.destination_url.spec()); 241effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_EQ(match.fill_into_edit, match_core.contents); 242effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_EQ("0,0", match_core.contents_class); 243effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_EQ(base::string16(), match_core.description); 244effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_TRUE(match_core.description_class.empty()); 245effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 246effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 24723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)TEST_F(ShortcutsBackendTest, AddAndUpdateShortcut) { 24823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) InitBackend(); 24923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) EXPECT_FALSE(changed_notified()); 25023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 25123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) history::ShortcutsDatabase::Shortcut shortcut( 25223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) "BD85DBA2-8C29-49F9-84AE-48E1E90880DF", base::ASCIIToUTF16("goog"), 25323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) MatchCoreForTesting("http://www.google.com"), base::Time::Now(), 100); 25423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) EXPECT_TRUE(AddShortcut(shortcut)); 25523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) EXPECT_TRUE(changed_notified()); 25623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) ShortcutsBackend::ShortcutMap::const_iterator shortcut_iter( 25723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) shortcuts_map().find(shortcut.text)); 25823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) ASSERT_TRUE(shortcut_iter != shortcuts_map().end()); 25923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) EXPECT_EQ(shortcut.id, shortcut_iter->second.id); 26023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) EXPECT_EQ(shortcut.match_core.contents, 26123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) shortcut_iter->second.match_core.contents); 26223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 26323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) set_changed_notified(false); 26423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) shortcut.match_core.contents = base::ASCIIToUTF16("Google Web Search"); 26523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) EXPECT_TRUE(UpdateShortcut(shortcut)); 26623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) EXPECT_TRUE(changed_notified()); 26723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) shortcut_iter = shortcuts_map().find(shortcut.text); 26823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) ASSERT_TRUE(shortcut_iter != shortcuts_map().end()); 26923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) EXPECT_EQ(shortcut.id, shortcut_iter->second.id); 27023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) EXPECT_EQ(shortcut.match_core.contents, 27123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) shortcut_iter->second.match_core.contents); 27223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 27323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 27423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)TEST_F(ShortcutsBackendTest, DeleteShortcuts) { 27523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) InitBackend(); 27623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) history::ShortcutsDatabase::Shortcut shortcut1( 27723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) "BD85DBA2-8C29-49F9-84AE-48E1E90880DF", base::ASCIIToUTF16("goog"), 27823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) MatchCoreForTesting("http://www.google.com"), base::Time::Now(), 100); 27923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) EXPECT_TRUE(AddShortcut(shortcut1)); 28023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 28123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) history::ShortcutsDatabase::Shortcut shortcut2( 28223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) "BD85DBA2-8C29-49F9-84AE-48E1E90880E0", base::ASCIIToUTF16("gle"), 28323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) MatchCoreForTesting("http://www.google.com"), base::Time::Now(), 100); 28423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) EXPECT_TRUE(AddShortcut(shortcut2)); 28523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 28623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) history::ShortcutsDatabase::Shortcut shortcut3( 28723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) "BD85DBA2-8C29-49F9-84AE-48E1E90880E1", base::ASCIIToUTF16("sp"), 28823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) MatchCoreForTesting("http://www.sport.com"), base::Time::Now(), 10); 28923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) EXPECT_TRUE(AddShortcut(shortcut3)); 29023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 29123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) history::ShortcutsDatabase::Shortcut shortcut4( 29223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) "BD85DBA2-8C29-49F9-84AE-48E1E90880E2", base::ASCIIToUTF16("mov"), 29323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) MatchCoreForTesting("http://www.film.com"), base::Time::Now(), 10); 29423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) EXPECT_TRUE(AddShortcut(shortcut4)); 29523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 29623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) ASSERT_EQ(4U, shortcuts_map().size()); 29723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) EXPECT_EQ(shortcut1.id, shortcuts_map().find(shortcut1.text)->second.id); 29823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) EXPECT_EQ(shortcut2.id, shortcuts_map().find(shortcut2.text)->second.id); 29923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) EXPECT_EQ(shortcut3.id, shortcuts_map().find(shortcut3.text)->second.id); 30023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) EXPECT_EQ(shortcut4.id, shortcuts_map().find(shortcut4.text)->second.id); 30123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 30223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) EXPECT_TRUE(DeleteShortcutsWithURL(shortcut1.match_core.destination_url)); 30323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 30423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) ASSERT_EQ(2U, shortcuts_map().size()); 30523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) EXPECT_EQ(0U, shortcuts_map().count(shortcut1.text)); 30623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) EXPECT_EQ(0U, shortcuts_map().count(shortcut2.text)); 30723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) const ShortcutsBackend::ShortcutMap::const_iterator shortcut3_iter( 30823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) shortcuts_map().find(shortcut3.text)); 30923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) ASSERT_TRUE(shortcut3_iter != shortcuts_map().end()); 31023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) EXPECT_EQ(shortcut3.id, shortcut3_iter->second.id); 31123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) const ShortcutsBackend::ShortcutMap::const_iterator shortcut4_iter( 31223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) shortcuts_map().find(shortcut4.text)); 31323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) ASSERT_TRUE(shortcut4_iter != shortcuts_map().end()); 31423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) EXPECT_EQ(shortcut4.id, shortcut4_iter->second.id); 31523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 31623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) history::ShortcutsDatabase::ShortcutIDs deleted_ids; 31723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) deleted_ids.push_back(shortcut3.id); 31823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) deleted_ids.push_back(shortcut4.id); 31923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) EXPECT_TRUE(DeleteShortcutsWithIDs(deleted_ids)); 32023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 32123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) ASSERT_EQ(0U, shortcuts_map().size()); 32223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 323