Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / search_engines / template_url_service_test_util.cc
1 // Copyright (c) 2012 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 "chrome/browser/search_engines/template_url_service_test_util.h"
6
7 #include "base/bind.h"
8 #include "base/run_loop.h"
9 #include "base/strings/string_split.h"
10 #include "base/threading/thread.h"
11 #include "chrome/browser/search_engines/chrome_template_url_service_client.h"
12 #include "chrome/browser/search_engines/ui_thread_search_terms_data.h"
13 #include "chrome/browser/webdata/web_data_service_factory.h"
14 #include "chrome/test/base/testing_pref_service_syncable.h"
15 #include "chrome/test/base/testing_profile.h"
16 #include "components/google/core/browser/google_url_tracker.h"
17 #include "components/search_engines/default_search_manager.h"
18 #include "components/search_engines/default_search_pref_test_util.h"
19 #include "components/search_engines/template_url_service.h"
20 #include "testing/gtest/include/gtest/gtest.h"
21
22 #if defined(OS_CHROMEOS)
23 #include "chrome/browser/google/google_brand_chromeos.h"
24 #endif
25
26 // Trivial subclass of TemplateURLService that records the last invocation of
27 // SetKeywordSearchTermsForURL.
28 class TestingTemplateURLService : public TemplateURLService {
29  public:
30   explicit TestingTemplateURLService(Profile* profile)
31       : TemplateURLService(
32             profile->GetPrefs(),
33             scoped_ptr<SearchTermsData>(new UIThreadSearchTermsData(profile)),
34             WebDataServiceFactory::GetKeywordWebDataForProfile(
35                 profile, Profile::EXPLICIT_ACCESS),
36             scoped_ptr<TemplateURLServiceClient>(
37                 new ChromeTemplateURLServiceClient(profile)), NULL, NULL,
38             base::Closure()) {
39   }
40
41   base::string16 GetAndClearSearchTerm() {
42     base::string16 search_term;
43     search_term.swap(search_term_);
44     return search_term;
45   }
46
47  protected:
48   virtual void SetKeywordSearchTermsForURL(
49       const TemplateURL* t_url,
50       const GURL& url,
51       const base::string16& term) OVERRIDE {
52     search_term_ = term;
53   }
54
55  private:
56   base::string16 search_term_;
57
58   DISALLOW_COPY_AND_ASSIGN(TestingTemplateURLService);
59 };
60
61
62 TemplateURLServiceTestUtil::TemplateURLServiceTestUtil()
63     : thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP),
64       changed_count_(0) {
65   // Make unique temp directory.
66   EXPECT_TRUE(temp_dir_.CreateUniqueTempDir());
67   profile_.reset(new TestingProfile(temp_dir_.path()));
68
69   profile()->CreateWebDataService();
70
71   model_.reset(new TestingTemplateURLService(profile()));
72   model_->AddObserver(this);
73
74 #if defined(OS_CHROMEOS)
75   google_brand::chromeos::ClearBrandForCurrentSession();
76 #endif
77 }
78
79 TemplateURLServiceTestUtil::~TemplateURLServiceTestUtil() {
80   ClearModel();
81   profile_.reset();
82
83   UIThreadSearchTermsData::SetGoogleBaseURL(std::string());
84
85   // Flush the message loop to make application verifiers happy.
86   base::RunLoop().RunUntilIdle();
87 }
88
89 void TemplateURLServiceTestUtil::OnTemplateURLServiceChanged() {
90   changed_count_++;
91 }
92
93 int TemplateURLServiceTestUtil::GetObserverCount() {
94   return changed_count_;
95 }
96
97 void TemplateURLServiceTestUtil::ResetObserverCount() {
98   changed_count_ = 0;
99 }
100
101 void TemplateURLServiceTestUtil::VerifyLoad() {
102   ASSERT_FALSE(model()->loaded());
103   model()->Load();
104   base::RunLoop().RunUntilIdle();
105   EXPECT_EQ(1, GetObserverCount());
106   ResetObserverCount();
107 }
108
109 void TemplateURLServiceTestUtil::ChangeModelToLoadState() {
110   model()->ChangeToLoadedState();
111   // Initialize the web data service so that the database gets updated with
112   // any changes made.
113
114   model()->web_data_service_ =
115       WebDataServiceFactory::GetKeywordWebDataForProfile(
116           profile(), Profile::EXPLICIT_ACCESS);
117   base::RunLoop().RunUntilIdle();
118 }
119
120 void TemplateURLServiceTestUtil::ClearModel() {
121   model_->Shutdown();
122   model_.reset();
123 }
124
125 void TemplateURLServiceTestUtil::ResetModel(bool verify_load) {
126   if (model_)
127     ClearModel();
128   model_.reset(new TestingTemplateURLService(profile()));
129   model()->AddObserver(this);
130   changed_count_ = 0;
131   if (verify_load)
132     VerifyLoad();
133 }
134
135 base::string16 TemplateURLServiceTestUtil::GetAndClearSearchTerm() {
136   return model_->GetAndClearSearchTerm();
137 }
138
139 void TemplateURLServiceTestUtil::SetGoogleBaseURL(const GURL& base_url) {
140   DCHECK(base_url.is_valid());
141   UIThreadSearchTermsData data(profile());
142   UIThreadSearchTermsData::SetGoogleBaseURL(base_url.spec());
143   model_->GoogleBaseURLChanged();
144 }
145
146 void TemplateURLServiceTestUtil::SetManagedDefaultSearchPreferences(
147     bool enabled,
148     const std::string& name,
149     const std::string& keyword,
150     const std::string& search_url,
151     const std::string& suggest_url,
152     const std::string& icon_url,
153     const std::string& encodings,
154     const std::string& alternate_url,
155     const std::string& search_terms_replacement_key) {
156   DefaultSearchPrefTestUtil::SetManagedPref(
157       profile()->GetTestingPrefService(),
158       enabled, name, keyword, search_url, suggest_url, icon_url, encodings,
159       alternate_url, search_terms_replacement_key);
160 }
161
162 void TemplateURLServiceTestUtil::RemoveManagedDefaultSearchPreferences() {
163   DefaultSearchPrefTestUtil::RemoveManagedPref(
164       profile()->GetTestingPrefService());
165 }
166
167 TemplateURLService* TemplateURLServiceTestUtil::model() {
168   return model_.get();
169 }