1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. Use of this 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// source code is governed by a BSD-style license that can be found in the 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/profiles/profile.h" 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/search_engines/template_url_model.h" 7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/search_engines/template_url_prepopulate_data.h" 84a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "chrome/browser/ui/browser.h" 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/test/in_process_browser_test.h" 10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/test/ui_test_utils.h" 11ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/notification_registrar.h" 12ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/notification_source.h" 13ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/notification_type.h" 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "net/base/mock_host_resolver.h" 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "net/base/net_util.h" 16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace { 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass TemplateURLScraperTest : public InProcessBrowserTest { 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TemplateURLScraperTest() { 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(TemplateURLScraperTest); 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass TemplateURLModelLoader : public NotificationObserver { 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch explicit TemplateURLModelLoader(TemplateURLModel* model) : model_(model) { 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch registrar_.Add(this, NotificationType::TEMPLATE_URL_MODEL_LOADED, 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Source<TemplateURLModel>(model)); 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch model_->Load(); 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ui_test_utils::RunMessageLoop(); 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void Observe(NotificationType type, 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NotificationSource& source, 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NotificationDetails& details) { 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (type == NotificationType::TEMPLATE_URL_MODEL_LOADED && 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Source<TemplateURLModel>(source).ptr() == model_) { 41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MessageLoop::current()->Quit(); 42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NotificationRegistrar registrar_; 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TemplateURLModel* model_; 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(TemplateURLModelLoader); 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} // namespace 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch/* 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochIN_PROC_BROWSER_TEST_F(TemplateURLScraperTest, ScrapeWithOnSubmit) { 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch host_resolver()->AddRule("*.foo.com", "localhost"); 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TemplateURLModel* template_urls = browser()->profile()->GetTemplateURLModel(); 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TemplateURLModelLoader loader(template_urls); 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::vector<const TemplateURL*> all_urls = template_urls->GetTemplateURLs(); 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // We need to substract the default pre-populated engines that the profile is 65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // set up with. 66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch size_t default_index = 0; 67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::vector<TemplateURL*> prepopulate_urls; 68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TemplateURLPrepopulateData::GetPrepopulatedEngines( 69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch browser()->profile()->GetPrefs(), 70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch &prepopulate_urls, 71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch &default_index); 72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(prepopulate_urls.size(), all_urls.size()); 74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<HTTPTestServer> server( 76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch HTTPTestServer::CreateServerWithFileRootURL( 77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch L"chrome/test/data/template_url_scraper/submit_handler", L"/", 78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch g_browser_process->io_thread()->message_loop())); 79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ui_test_utils::NavigateToURLBlockUntilNavigationsComplete( 80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch browser(), GURL("http://www.foo.com:1337/"), 2); 81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch all_urls = template_urls->GetTemplateURLs(); 83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(1, all_urls.size() - prepopulate_urls.size()); 84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch*/ 86