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