172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Use of this source code is governed by a BSD-style license that can be 3bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// found in the LICENSE file. 4bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 5bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include <string> 6bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 7bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "base/basictypes.h" 8ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/ref_counted.h" 9bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "base/message_loop.h" 10bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "base/task.h" 1172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "base/utf_string_conversions.h" 12bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/search_engines/search_provider_install_data.h" 13bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/search_engines/template_url.h" 14bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/search_engines/template_url_model.h" 15bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/search_engines/template_url_model_test_util.h" 16731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "chrome/common/pref_names.h" 17731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "chrome/test/testing_pref_service.h" 18731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "chrome/test/testing_profile.h" 19dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/browser_thread.h" 20ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/notification_service.h" 21ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/notification_source.h" 22ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/notification_type.h" 23bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "testing/gtest/include/gtest/gtest.h" 24bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 25bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Create a TemplateURL. The caller owns the returned TemplateURL*. 26bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenstatic TemplateURL* CreateTemplateURL(const std::string& url, 2772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const std::string& keyword) { 28bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen TemplateURL* t_url = new TemplateURL(); 29bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen t_url->SetURL(url, 0, 0); 3072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen t_url->set_keyword(UTF8ToUTF16(keyword)); 3172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen t_url->set_short_name(UTF8ToUTF16(keyword)); 32bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return t_url; 33bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 34bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 35bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Test the SearchProviderInstallData::GetInstallState. 36bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass TestGetInstallState : 37bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen public base::RefCountedThreadSafe<TestGetInstallState> { 38bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen public: 39bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen explicit TestGetInstallState(SearchProviderInstallData* install_data) 40bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen : install_data_(install_data), 41bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen main_loop_(NULL), 42bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen passed_(false) { 43bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 44bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 45bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen void set_search_provider_host( 46bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const std::string& search_provider_host) { 47bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen search_provider_host_ = search_provider_host; 48bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 49bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 50bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen void set_default_search_provider_host( 51bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const std::string& default_search_provider_host) { 52bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen default_search_provider_host_ = default_search_provider_host; 53bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 54bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 55bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Runs the test. Returns true if all passed. False if any failed. 56731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick bool RunTests(); 57bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 58bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen private: 59bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen friend class base::RefCountedThreadSafe<TestGetInstallState>; 60bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ~TestGetInstallState(); 61bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 62bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Starts the test run on the IO thread. 63bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen void StartTestOnIOThread(); 64bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 65bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Callback for when SearchProviderInstallData is ready to have 66bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // GetInstallState called. Runs all of the test cases. 67bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen void DoInstallStateTests(); 68bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 69bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Does a verification for one url and its expected state. 70bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen void VerifyInstallState(SearchProviderInstallData::State expected_state, 71bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const std::string& url); 72bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 73bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen SearchProviderInstallData* install_data_; 74bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen MessageLoop* main_loop_; 75bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 76bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // A host which should be a search provider but not the default. 77bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen std::string search_provider_host_; 78bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 79bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // A host which should be a search provider but not the default. 80bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen std::string default_search_provider_host_; 81bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 82bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Used to indicate if DoInstallStateTests passed all test. 83bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen bool passed_; 84bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 85bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DISALLOW_COPY_AND_ASSIGN(TestGetInstallState); 86bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}; 87bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 88731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickbool TestGetInstallState::RunTests() { 89bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen passed_ = true; 90bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 91bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen main_loop_ = MessageLoop::current(); 92bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 93731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BrowserThread::GetMessageLoopProxyForThread(BrowserThread::IO)->PostTask( 94bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen FROM_HERE, 95bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen NewRunnableMethod(this, &TestGetInstallState::StartTestOnIOThread)); 96bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Run the current message loop. When the test is finished on the I/O thread, 97bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // it invokes Quit, which unblocks this. 98bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen MessageLoop::current()->Run(); 99bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen main_loop_ = NULL; 100bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 101bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Let the testing code know what the result is. 102bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return passed_; 103bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 104bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 105bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenTestGetInstallState::~TestGetInstallState() { 106bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 107bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 108bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestGetInstallState::StartTestOnIOThread() { 109bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen install_data_->CallWhenLoaded( 110bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen NewRunnableMethod(this, 111bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen &TestGetInstallState::DoInstallStateTests)); 112bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 113bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 114bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestGetInstallState::DoInstallStateTests() { 115bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Installed but not default. 116bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen VerifyInstallState(SearchProviderInstallData::INSTALLED_BUT_NOT_DEFAULT, 117bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen "http://" + search_provider_host_ + "/"); 118bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen VerifyInstallState(SearchProviderInstallData::INSTALLED_BUT_NOT_DEFAULT, 119bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen "http://" + search_provider_host_ + ":80/"); 120bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 121bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Not installed. 122bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen VerifyInstallState(SearchProviderInstallData::NOT_INSTALLED, 123bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen "http://" + search_provider_host_ + ":96/"); 124bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 125bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Not installed due to different scheme. 126bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen VerifyInstallState(SearchProviderInstallData::NOT_INSTALLED, 127bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen "https://" + search_provider_host_ + "/"); 128bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 129bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Not installed. 130bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen VerifyInstallState(SearchProviderInstallData::NOT_INSTALLED, 131bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen "http://a" + search_provider_host_ + "/"); 132bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 133bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Installed as default. 134bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (!default_search_provider_host_.empty()) { 135bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen VerifyInstallState(SearchProviderInstallData::INSTALLED_AS_DEFAULT, 136bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen "http://" + default_search_provider_host_ + "/"); 137bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 138bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 139bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // All done. 140bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen main_loop_->PostTask(FROM_HERE, new MessageLoop::QuitTask()); 141bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 142bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 143bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenvoid TestGetInstallState::VerifyInstallState( 144bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen SearchProviderInstallData::State expected_state, 145bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const std::string& url) { 146bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 147bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen SearchProviderInstallData::State actual_state = 148bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen install_data_->GetInstallState(GURL(url)); 149bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (expected_state == actual_state) 150bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return; 151bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 152bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen passed_ = false; 153bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen LOG(ERROR) << "GetInstallState for " << url << " failed. Expected " << 154bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen expected_state << ". Actual " << actual_state << "."; 155bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 156bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 157bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Provides basic test set-up/tear-down functionality needed by all tests 158bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// that use TemplateURLModelTestUtil. 159bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass SearchProviderInstallDataTest : public testing::Test { 160bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen public: 161bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen SearchProviderInstallDataTest() 162bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen : install_data_(NULL) {} 163bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 164bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void SetUp() { 165bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen testing::Test::SetUp(); 166bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen util_.SetUp(); 167731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick util_.StartIOThread(); 168bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen install_data_ = new SearchProviderInstallData( 169bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen util_.GetWebDataService(), 170bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen NotificationType::RENDERER_PROCESS_TERMINATED, 171bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Source<SearchProviderInstallDataTest>(this)); 172bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 173bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 174bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void TearDown() { 175731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BrowserThread::GetMessageLoopProxyForThread(BrowserThread::IO)->PostTask( 176bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen FROM_HERE, 177bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen new DeleteTask<SearchProviderInstallData>(install_data_)); 178bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen install_data_ = NULL; 179bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 180bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Make sure that the install data class on the UI thread gets cleaned up. 181bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // It doesn't matter that this happens after install_data_ is deleted. 182bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen NotificationService::current()->Notify( 183bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen NotificationType::RENDERER_PROCESS_TERMINATED, 184bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Source<SearchProviderInstallDataTest>(this), 185bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen NotificationService::NoDetails()); 186bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 187bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen util_.TearDown(); 188bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen testing::Test::TearDown(); 189bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 190bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 191731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick void SimulateDefaultSearchIsManaged(const std::string& url) { 192731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ASSERT_FALSE(url.empty()); 193731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick TestingPrefService* service = util_.profile()->GetTestingPrefService(); 19421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen service->SetManagedPref( 195731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick prefs::kDefaultSearchProviderEnabled, 196731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick Value::CreateBooleanValue(true)); 19721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen service->SetManagedPref( 198731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick prefs::kDefaultSearchProviderSearchURL, 199731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick Value::CreateStringValue(url)); 20021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen service->SetManagedPref( 201731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick prefs::kDefaultSearchProviderName, 202731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick Value::CreateStringValue("managed")); 203731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Clear the IDs that are not specified via policy. 20421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen service->SetManagedPref( 205731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick prefs::kDefaultSearchProviderID, new StringValue("")); 20621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen service->SetManagedPref( 207731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick prefs::kDefaultSearchProviderPrepopulateID, new StringValue("")); 208731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick util_.model()->Observe( 209731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick NotificationType::PREF_CHANGED, 210731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick Source<PrefService>(util_.profile()->GetTestingPrefService()), 211731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick Details<std::string>(NULL)); 212731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } 213731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 214bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen protected: 215bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen TemplateURLModelTestUtil util_; 216bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 217bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Provides the search provider install state on the I/O thread. It must be 218bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // deleted on the I/O thread, which is why it isn't a scoped_ptr. 219bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen SearchProviderInstallData* install_data_; 220bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 221bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DISALLOW_COPY_AND_ASSIGN(SearchProviderInstallDataTest); 222bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}; 223bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 224bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenTEST_F(SearchProviderInstallDataTest, GetInstallState) { 225bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Set up the database. 226bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen util_.ChangeModelToLoadState(); 227bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen std::string host = "www.unittest.com"; 228bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen TemplateURL* t_url = CreateTemplateURL("http://" + host + "/path", 22972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen "unittest"); 230bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen util_.model()->Add(t_url); 231bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 232bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Wait for the changes to be saved. 233731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick TemplateURLModelTestUtil::BlockTillServiceProcessesRequests(); 234bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 235bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Verify the search providers install state (with no default set). 236bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen scoped_refptr<TestGetInstallState> test_get_install_state( 237bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen new TestGetInstallState(install_data_)); 238bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen test_get_install_state->set_search_provider_host(host); 239731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick EXPECT_TRUE(test_get_install_state->RunTests()); 240bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 241bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Set-up a default and try it all one more time. 242bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen std::string default_host = "www.mmm.com"; 243bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen TemplateURL* default_url = CreateTemplateURL("http://" + default_host + "/", 24472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen "mmm"); 245bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen util_.model()->Add(default_url); 246bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen util_.model()->SetDefaultSearchProvider(default_url); 247bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen test_get_install_state->set_default_search_provider_host(default_host); 248731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick EXPECT_TRUE(test_get_install_state->RunTests()); 249731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick} 250731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 251731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 252731df977c0511bca2206b5f333555b1205ff1f43Iain MerrickTEST_F(SearchProviderInstallDataTest, ManagedDefaultSearch) { 253731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Set up the database. 254731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick util_.ChangeModelToLoadState(); 255731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick std::string host = "www.unittest.com"; 256731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick TemplateURL* t_url = CreateTemplateURL("http://" + host + "/path", 25772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen "unittest"); 258731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick util_.model()->Add(t_url); 259731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 260731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Set a managed preference that establishes a default search provider. 261731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick std::string host2 = "www.managedtest.com"; 262731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick std::string url2 = "http://" + host2 + "/p{searchTerms}"; 263731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick SimulateDefaultSearchIsManaged(url2); 264731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick EXPECT_TRUE(util_.model()->is_default_search_managed()); 265731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 266731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Wait for the changes to be saved. 267731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick util_.BlockTillServiceProcessesRequests(); 268731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 269731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Verify the search providers install state. The default search should be 270731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // the managed one we previously set. 271731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick scoped_refptr<TestGetInstallState> test_get_install_state( 272731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick new TestGetInstallState(install_data_)); 273731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick test_get_install_state->set_search_provider_host(host); 274731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick test_get_install_state->set_default_search_provider_host(host2); 275731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick EXPECT_TRUE(test_get_install_state->RunTests()); 276bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 277bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 278bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 279bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenTEST_F(SearchProviderInstallDataTest, GoogleBaseUrlChange) { 280bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen scoped_refptr<TestGetInstallState> test_get_install_state( 281bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen new TestGetInstallState(install_data_)); 282bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 283bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Set up the database. 284bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen util_.ChangeModelToLoadState(); 285bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen std::string google_host = "w.com"; 286bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen util_.SetGoogleBaseURL("http://" + google_host + "/"); 287bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Wait for the I/O thread to process the update notification. 288731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick TemplateURLModelTestUtil::BlockTillIOThreadProcessesRequests(); 289bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 290bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen TemplateURL* t_url = CreateTemplateURL("{google:baseURL}?q={searchTerms}", 29172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen "t"); 292bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen util_.model()->Add(t_url); 293bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen TemplateURL* default_url = CreateTemplateURL("http://d.com/", 29472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen "d"); 295bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen util_.model()->Add(default_url); 296bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen util_.model()->SetDefaultSearchProvider(default_url); 297bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 298bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Wait for the changes to be saved. 299731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick TemplateURLModelTestUtil::BlockTillServiceProcessesRequests(); 300bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 301bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Verify the search providers install state (with no default set). 302bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen test_get_install_state->set_search_provider_host(google_host); 303731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick EXPECT_TRUE(test_get_install_state->RunTests()); 304bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 305bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Change the Google base url. 306bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen google_host = "foo.com"; 307bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen util_.SetGoogleBaseURL("http://" + google_host + "/"); 308bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Wait for the I/O thread to process the update notification. 309731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick TemplateURLModelTestUtil::BlockTillIOThreadProcessesRequests(); 310bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 311bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Verify that the change got picked up. 312bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen test_get_install_state->set_search_provider_host(google_host); 313731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick EXPECT_TRUE(test_get_install_state->RunTests()); 314bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 315