settings_overrides_browsertest.cc revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
1// Copyright 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "base/prefs/pref_service.h"
6#include "base/run_loop.h"
7#include "base/strings/utf_string_conversions.h"
8#include "chrome/browser/extensions/extension_browsertest.h"
9#include "chrome/browser/prefs/session_startup_pref.h"
10#include "chrome/browser/profiles/profile.h"
11#include "chrome/browser/search_engines/template_url.h"
12#include "chrome/browser/search_engines/template_url_service.h"
13#include "chrome/browser/search_engines/template_url_service_factory.h"
14#include "chrome/common/pref_names.h"
15
16namespace {
17
18class TemplateURLServiceObserver {
19 public:
20  TemplateURLServiceObserver(TemplateURLService* service,
21                             base::RunLoop* loop)
22      : runner_(loop) {
23    DCHECK(loop);
24    template_url_sub_ = service->RegisterOnLoadedCallback(
25        base::Bind(&TemplateURLServiceObserver::StopLoop,
26                   base::Unretained(this)));
27    service->Load();
28  }
29  ~TemplateURLServiceObserver() {}
30
31 private:
32  void StopLoop() {
33    runner_->Quit();
34  }
35  base::RunLoop* runner_;
36  scoped_ptr<TemplateURLService::Subscription> template_url_sub_;
37
38  DISALLOW_COPY_AND_ASSIGN(TemplateURLServiceObserver);
39};
40
41testing::AssertionResult VerifyTemplateURLServiceLoad(
42    TemplateURLService* service) {
43  if (service->loaded())
44    return testing::AssertionSuccess();
45  base::RunLoop runner;
46  TemplateURLServiceObserver observer(service, &runner);
47  runner.Run();
48  if (service->loaded())
49    return testing::AssertionSuccess();
50  return testing::AssertionFailure() << "TemplateURLService isn't loaded";
51}
52
53IN_PROC_BROWSER_TEST_F(ExtensionBrowserTest, OverrideSettings) {
54  PrefService* prefs = profile()->GetPrefs();
55  ASSERT_TRUE(prefs);
56  prefs->SetString(prefs::kHomePage, "http://google.com/");
57  prefs->SetBoolean(prefs::kHomePageIsNewTabPage, true);
58  const GURL urls[] = {GURL("http://foo"), GURL("http://bar")};
59  SessionStartupPref startup_pref(SessionStartupPref::LAST);
60  startup_pref.urls.assign(urls, urls + arraysize(urls));
61  SessionStartupPref::SetStartupPref(prefs, startup_pref);
62  TemplateURLService* url_service =
63      TemplateURLServiceFactory::GetForProfile(profile());
64  ASSERT_TRUE(url_service);
65  EXPECT_TRUE(VerifyTemplateURLServiceLoad(url_service));
66  TemplateURL* default_provider = url_service->GetDefaultSearchProvider();
67  ASSERT_TRUE(default_provider);
68  EXPECT_EQ(TemplateURL::NORMAL, default_provider->GetType());
69
70  const extensions::Extension* extension = LoadExtension(
71      test_data_dir_.AppendASCII("settings_override"));
72  ASSERT_TRUE(extension);
73  EXPECT_EQ("http://www.homepage.com/", prefs->GetString(prefs::kHomePage));
74  EXPECT_FALSE(prefs->GetBoolean(prefs::kHomePageIsNewTabPage));
75  startup_pref = SessionStartupPref::GetStartupPref(prefs);
76  EXPECT_EQ(SessionStartupPref::URLS, startup_pref.type);
77  EXPECT_EQ(std::vector<GURL>(1, GURL("http://www.startup.com")),
78            startup_pref.urls);
79  TemplateURL* extension_provider = url_service->GetDefaultSearchProvider();
80  EXPECT_EQ(TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION,
81            extension_provider->GetType());
82  EXPECT_EQ(base::ASCIIToUTF16("name.de"), extension_provider->short_name());
83  EXPECT_EQ(base::ASCIIToUTF16("keyword.de"), extension_provider->keyword());
84  EXPECT_EQ("http://www.foo.de/s?q={searchTerms}", extension_provider->url());
85  EXPECT_EQ(GURL("http://www.foo.de/favicon.ico"),
86            extension_provider->favicon_url());
87  EXPECT_EQ("http://www.foo.de/suggest?q={searchTerms}",
88            extension_provider->suggestions_url());
89  EXPECT_EQ("http://www.foo.de/instant?q={searchTerms}",
90            extension_provider->instant_url());
91  EXPECT_EQ("http://www.foo.de/image?q={searchTerms}",
92              extension_provider->image_url());
93  EXPECT_EQ("search_lang=de", extension_provider->search_url_post_params());
94  EXPECT_EQ("suggest_lang=de",
95            extension_provider->suggestions_url_post_params());
96  EXPECT_EQ("instant_lang=de", extension_provider->instant_url_post_params());
97  EXPECT_EQ("image_lang=de", extension_provider->image_url_post_params());
98  const std::string alternate_urls[] = {
99      "http://www.moo.de/s?q={searchTerms}",
100      "http://www.noo.de/s?q={searchTerms}"
101  };
102  EXPECT_EQ(std::vector<std::string>(
103                alternate_urls, alternate_urls + arraysize(alternate_urls)),
104            extension_provider->alternate_urls());
105  EXPECT_EQ(std::vector<std::string>(1, "UTF-8"),
106            extension_provider->input_encodings());
107
108  UnloadExtension(extension->id());
109  EXPECT_EQ("http://google.com/", prefs->GetString(prefs::kHomePage));
110  EXPECT_TRUE(prefs->GetBoolean(prefs::kHomePageIsNewTabPage));
111  startup_pref = SessionStartupPref::GetStartupPref(prefs);
112  EXPECT_EQ(SessionStartupPref::LAST, startup_pref.type);
113  EXPECT_EQ(std::vector<GURL>(urls, urls + arraysize(urls)), startup_pref.urls);
114  EXPECT_EQ(default_provider, url_service->GetDefaultSearchProvider());
115}
116
117}  // namespace
118