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/profiles/profile.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/search_engines/template_url_service_factory.h"
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/in_process_browser_test.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/ui_test_utils.h"
10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/search_engines/template_url_prepopulate_data.h"
11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/search_engines/template_url_service.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/net_util.h"
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/dns/mock_host_resolver.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TemplateURLScraperTest : public InProcessBrowserTest {
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TemplateURLScraperTest() {
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(TemplateURLScraperTest);
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class TemplateURLServiceLoader {
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  explicit TemplateURLServiceLoader(TemplateURLService* model) : model_(model) {
284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    scoped_refptr<content::MessageLoopRunner> message_loop_runner =
294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)        new content::MessageLoopRunner;
304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    scoped_ptr<TemplateURLService::Subscription> subscription =
314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)        model_->RegisterOnLoadedCallback(
324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)            message_loop_runner->QuitClosure());
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    model_->Load();
344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    message_loop_runner->Run();
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TemplateURLService* model_;
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(TemplateURLServiceLoader);
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TemplateURLScraperTest, ScrapeWithOnSubmit) {
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  host_resolver()->AddRule("*.foo.com", "localhost");
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TemplateURLService* template_urls =
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      TemplateURLServiceFactory::GetInstance(browser()->profile());
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TemplateURLServiceLoader loader(template_urls);
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TemplateURLService::TemplateURLVector all_urls =
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      template_urls->GetTemplateURLs();
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // We need to substract the default pre-populated engines that the profile is
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // set up with.
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  size_t default_index = 0;
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<TemplateURL*> prepopulate_urls;
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TemplateURLPrepopulateData::GetPrepopulatedEngines(
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      browser()->profile()->GetPrefs(),
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      &prepopulate_urls,
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      &default_index);
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(prepopulate_urls.size(), all_urls.size());
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<HTTPTestServer> server(
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      HTTPTestServer::CreateServerWithFileRootURL(
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          L"chrome/test/data/template_url_scraper/submit_handler", L"/",
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          g_browser_process->io_thread()->message_loop()));
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ui_test_utils::NavigateToURLBlockUntilNavigationsComplete(
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      browser(), GURL("http://www.foo.com:1337/"), 2);
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  all_urls = template_urls->GetTemplateURLs();
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(1, all_urls.size() - prepopulate_urls.size());
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
78