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/search_engines/template_url_service_test_util.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/message_loop/message_loop_proxy.h" 8a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch#include "base/run_loop.h" 9116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/search_engines/chrome_template_url_service_client.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/test/base/testing_pref_service_syncable.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/testing_profile.h" 12116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/search_engines/default_search_pref_test_util.h" 131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/search_engines/keyword_table.h" 141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/search_engines/keyword_web_data_service.h" 15116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/search_engines/template_url_service.h" 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/search_engines/testing_search_terms_data.h" 171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/webdata/common/web_database_service.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace { 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass TestingTemplateURLServiceClient : public ChromeTemplateURLServiceClient { 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci TestingTemplateURLServiceClient(Profile* profile, 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::string16* search_term) 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci : ChromeTemplateURLServiceClient(profile), 271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci search_term_(search_term) {} 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 29a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual void SetKeywordSearchTermsForURL( 30a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const GURL& url, 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci TemplateURLID id, 32a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& term) OVERRIDE { 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *search_term_ = term; 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::string16* search_term_; 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DISALLOW_COPY_AND_ASSIGN(TestingTemplateURLServiceClient); 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} // namespace 43ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 44116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTemplateURLServiceTestUtil::TemplateURLServiceTestUtil() 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci : changed_count_(0), 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci search_terms_data_(NULL) { 47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Make unique temp directory. 48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(temp_dir_.CreateUniqueTempDir()); 49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch profile_.reset(new TestingProfile(temp_dir_.path())); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_refptr<WebDatabaseService> web_database_service = 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci new WebDatabaseService(temp_dir_.path().AppendASCII("webdata"), 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::MessageLoopProxy::current(), 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::MessageLoopProxy::current()); 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci web_database_service->AddTable( 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<WebDatabaseTable>(new KeywordTable())); 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci web_database_service->LoadDatabase(); 58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci web_data_service_ = new KeywordWebDataService( 601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci web_database_service.get(), base::MessageLoopProxy::current(), 611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci KeywordWebDataService::ProfileErrorCallback()); 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci web_data_service_->Init(); 63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ResetModel(false); 65a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch} 66ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 67116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTemplateURLServiceTestUtil::~TemplateURLServiceTestUtil() { 68116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ClearModel(); 69116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch profile_.reset(); 70116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 71116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Flush the message loop to make application verifiers happy. 72116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::RunLoop().RunUntilIdle(); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid TemplateURLServiceTestUtil::OnTemplateURLServiceChanged() { 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) changed_count_++; 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 79116680a4aac90f2aa7413d9095a592090648e557Ben Murdochint TemplateURLServiceTestUtil::GetObserverCount() { 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return changed_count_; 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 83116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid TemplateURLServiceTestUtil::ResetObserverCount() { 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) changed_count_ = 0; 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 87116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid TemplateURLServiceTestUtil::VerifyLoad() { 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(model()->loaded()); 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model()->Load(); 90a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch base::RunLoop().RunUntilIdle(); 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, GetObserverCount()); 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ResetObserverCount(); 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 95116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid TemplateURLServiceTestUtil::ChangeModelToLoadState() { 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model()->ChangeToLoadedState(); 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Initialize the web data service so that the database gets updated with 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // any changes made. 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci model()->web_data_service_ = web_data_service_; 101a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch base::RunLoop().RunUntilIdle(); 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 104116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid TemplateURLServiceTestUtil::ClearModel() { 105116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch model_->Shutdown(); 106116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch model_.reset(); 1071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci search_terms_data_ = NULL; 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 110116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid TemplateURLServiceTestUtil::ResetModel(bool verify_load) { 111116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (model_) 112116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ClearModel(); 1131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci search_terms_data_ = new TestingSearchTermsData("http://www.google.com/"); 1141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci model_.reset(new TemplateURLService( 1151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci profile()->GetPrefs(), scoped_ptr<SearchTermsData>(search_terms_data_), 1161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci web_data_service_.get(), 1171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<TemplateURLServiceClient>( 1181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci new TestingTemplateURLServiceClient(profile(), &search_term_)), 1191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci NULL, NULL, base::Closure())); 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model()->AddObserver(this); 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) changed_count_ = 0; 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (verify_load) 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyLoad(); 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 126116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbase::string16 TemplateURLServiceTestUtil::GetAndClearSearchTerm() { 1271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::string16 search_term; 1281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci search_term.swap(search_term_); 1291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return search_term; 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 132116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid TemplateURLServiceTestUtil::SetGoogleBaseURL(const GURL& base_url) { 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(base_url.is_valid()); 1341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci search_terms_data_->set_google_base_url(base_url.spec()); 135116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch model_->GoogleBaseURLChanged(); 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 138116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid TemplateURLServiceTestUtil::SetManagedDefaultSearchPreferences( 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool enabled, 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& name, 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& keyword, 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& search_url, 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& suggest_url, 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& icon_url, 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& encodings, 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& alternate_url, 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& search_terms_replacement_key) { 148116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DefaultSearchPrefTestUtil::SetManagedPref( 149116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch profile()->GetTestingPrefService(), 150116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch enabled, name, keyword, search_url, suggest_url, icon_url, encodings, 151116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch alternate_url, search_terms_replacement_key); 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 154116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid TemplateURLServiceTestUtil::RemoveManagedDefaultSearchPreferences() { 155116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DefaultSearchPrefTestUtil::RemoveManagedPref( 156116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch profile()->GetTestingPrefService()); 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 158