14e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 24e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 34e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// found in the LICENSE file. 44e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 54e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chrome/browser/ui/views/frame/test_with_browser_view.h" 64e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 74e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chrome/browser/autocomplete/autocomplete_classifier.h" 84e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chrome/browser/autocomplete/autocomplete_classifier_factory.h" 9116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/autocomplete/autocomplete_controller.h" 104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chrome/browser/predictors/predictor_database.h" 11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/search_engines/chrome_template_url_service_client.h" 124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chrome/browser/search_engines/template_url_service_factory.h" 13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/search_engines/ui_thread_search_terms_data.h" 144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chrome/browser/ui/tabs/tab_strip_model.h" 154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chrome/browser/ui/views/frame/browser_view.h" 16116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/webdata/web_data_service_factory.h" 174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chrome/test/base/browser_with_test_window_test.h" 184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chrome/test/base/scoped_testing_local_state.h" 194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chrome/test/base/testing_browser_process.h" 204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chrome/test/base/testing_io_thread_state.h" 215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "components/omnibox/test_scheme_classifier.h" 22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/search_engines/search_terms_data.h" 23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/search_engines/template_url_service.h" 244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "content/public/test/test_utils.h" 254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined(OS_CHROMEOS) 274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chrome/browser/chromeos/input_method/input_method_configuration.h" 284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chrome/browser/chromeos/input_method/mock_input_method_manager.h" 294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif 304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)namespace { 324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Caller owns the returned service. 34116680a4aac90f2aa7413d9095a592090648e557Ben MurdochKeyedService* CreateTemplateURLService(content::BrowserContext* context) { 35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch Profile* profile = static_cast<Profile*>(context); 36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return new TemplateURLService( 37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch profile->GetPrefs(), 38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_ptr<SearchTermsData>(new UIThreadSearchTermsData(profile)), 39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch WebDataServiceFactory::GetKeywordWebDataForProfile( 40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch profile, Profile::EXPLICIT_ACCESS), 41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_ptr<TemplateURLServiceClient>( 42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch new ChromeTemplateURLServiceClient(profile)), 43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch NULL, NULL, base::Closure()); 444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 46116680a4aac90f2aa7413d9095a592090648e557Ben MurdochKeyedService* CreateAutocompleteClassifier(content::BrowserContext* context) { 47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch Profile* profile = static_cast<Profile*>(context); 48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return new AutocompleteClassifier( 49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch make_scoped_ptr(new AutocompleteController( 50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch profile, TemplateURLServiceFactory::GetForProfile(profile), NULL, 51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch AutocompleteClassifier::kDefaultOmniboxProviders)), 52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_ptr<AutocompleteSchemeClassifier>(new TestSchemeClassifier())); 534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} // namespace 564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)TestWithBrowserView::TestWithBrowserView() { 584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 594e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TestWithBrowserView::TestWithBrowserView( 615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Browser::Type browser_type, 625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) chrome::HostDesktopType host_desktop_type, 635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool hosted_app) 645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) : BrowserWithTestWindowTest(browser_type, 655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) host_desktop_type, 665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) hosted_app) { 675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 694e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)TestWithBrowserView::~TestWithBrowserView() { 704e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 714e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void TestWithBrowserView::SetUp() { 734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) local_state_.reset( 744e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) new ScopedTestingLocalState(TestingBrowserProcess::GetGlobal())); 754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined(OS_CHROMEOS) 764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) chromeos::input_method::InitializeForTesting( 774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) new chromeos::input_method::MockInputMethodManager); 784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif 794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) testing_io_thread_state_.reset(new chrome::TestingIOThreadState()); 804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) BrowserWithTestWindowTest::SetUp(); 814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) predictor_db_.reset(new predictors::PredictorDatabase(GetProfile())); 824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) browser_view_ = static_cast<BrowserView*>(browser()->window()); 834e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 844e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 854e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void TestWithBrowserView::TearDown() { 864e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Both BrowserView and BrowserWithTestWindowTest believe they have ownership 874e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // of the Browser. Force BrowserWithTestWindowTest to give up ownership. 884e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ASSERT_TRUE(release_browser()); 894e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 904e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Clean up any tabs we opened, otherwise Browser crashes in destruction. 914e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) browser_view_->browser()->tab_strip_model()->CloseAllTabs(); 924e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Ensure the Browser is reset before BrowserWithTestWindowTest cleans up 934e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // the Profile. 944e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) browser_view_->GetWidget()->CloseNow(); 954e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) browser_view_ = NULL; 964e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) content::RunAllPendingInMessageLoop(content::BrowserThread::DB); 974e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) BrowserWithTestWindowTest::TearDown(); 984e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) testing_io_thread_state_.reset(); 994e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) predictor_db_.reset(); 1004e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined(OS_CHROMEOS) 1014e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) chromeos::input_method::Shutdown(); 1024e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif 1034e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) local_state_.reset(NULL); 1044e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 1054e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1064e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)TestingProfile* TestWithBrowserView::CreateProfile() { 1074e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) TestingProfile* profile = BrowserWithTestWindowTest::CreateProfile(); 1084e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // TemplateURLService is normally NULL during testing. Instant extended 1094e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // needs this service so set a custom factory function. 1104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) TemplateURLServiceFactory::GetInstance()->SetTestingFactory( 1114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) profile, &CreateTemplateURLService); 1124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // TODO(jamescook): Eliminate this by introducing a mock toolbar or mock 1134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // location bar. 1144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) AutocompleteClassifierFactory::GetInstance()->SetTestingFactory( 1154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) profile, &CreateAutocompleteClassifier); 1164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return profile; 1174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 1184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)BrowserWindow* TestWithBrowserView::CreateBrowserWindow() { 1204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Allow BrowserWithTestWindowTest to use Browser to create the default 1214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // BrowserView and BrowserFrame. 1224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return NULL; 1234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 124