OLD | NEW |
---|---|
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/profile_resetter/profile_resetter.h" | 5 #include "chrome/browser/profile_resetter/profile_resetter.h" |
6 | 6 |
7 #include "base/bind.h" | |
8 #include "base/prefs/pref_service.h" | 7 #include "base/prefs/pref_service.h" |
9 #include "chrome/browser/extensions/extension_service_unittest.h" | 8 #include "chrome/browser/extensions/extension_service_unittest.h" |
10 #include "chrome/browser/extensions/tab_helper.h" | 9 #include "chrome/browser/extensions/tab_helper.h" |
11 #include "chrome/browser/prefs/session_startup_pref.h" | 10 #include "chrome/browser/prefs/session_startup_pref.h" |
11 #include "chrome/browser/profile_resetter/profile_resetter_test_base.h" | |
12 #include "chrome/browser/search_engines/template_url_service_test_util.h" | 12 #include "chrome/browser/search_engines/template_url_service_test_util.h" |
13 #include "chrome/browser/themes/theme_service.h" | 13 #include "chrome/browser/themes/theme_service.h" |
14 #include "chrome/browser/themes/theme_service_factory.h" | 14 #include "chrome/browser/themes/theme_service_factory.h" |
15 #include "chrome/browser/ui/tabs/tab_strip_model.h" | 15 #include "chrome/browser/ui/tabs/tab_strip_model.h" |
16 #include "chrome/common/extensions/extension.h" | 16 #include "chrome/common/extensions/extension.h" |
17 #include "chrome/common/extensions/extension_manifest_constants.h" | 17 #include "chrome/common/extensions/extension_manifest_constants.h" |
18 #include "chrome/common/pref_names.h" | 18 #include "chrome/common/pref_names.h" |
19 #include "chrome/test/base/browser_with_test_window_test.h" | 19 #include "chrome/test/base/browser_with_test_window_test.h" |
20 #include "chrome/test/base/testing_profile.h" | |
21 #include "content/public/browser/web_contents.h" | 20 #include "content/public/browser/web_contents.h" |
22 #include "content/public/test/test_utils.h" | 21 |
23 #include "testing/gmock/include/gmock/gmock.h" | |
24 | 22 |
25 namespace { | 23 namespace { |
26 | 24 |
27 using extensions::Extension; | 25 using extensions::Extension; |
28 using extensions::Manifest; | 26 using extensions::Manifest; |
29 | 27 |
30 class MockObject { | |
31 public: | |
32 void RunLoop() { | |
33 EXPECT_CALL(*this, Callback()); | |
34 runner_ = new content::MessageLoopRunner; | |
35 runner_->Run(); | |
36 } | |
37 | |
38 void StopLoop() { | |
39 DCHECK(runner_.get()); | |
40 Callback(); | |
41 runner_->Quit(); | |
42 } | |
43 | |
44 private: | |
45 MOCK_METHOD0(Callback, void(void)); | |
46 | |
47 scoped_refptr<content::MessageLoopRunner> runner_; | |
48 }; | |
49 | |
50 class ProfileResetterTestBase { | |
51 public: | |
52 ProfileResetterTestBase(); | |
53 ~ProfileResetterTestBase(); | |
54 protected: | |
55 testing::StrictMock<MockObject> mock_object_; | |
56 scoped_ptr<ProfileResetter> resetter_; | |
57 | |
58 private: | |
59 DISALLOW_COPY_AND_ASSIGN(ProfileResetterTestBase); | |
60 }; | |
61 | |
62 ProfileResetterTestBase::ProfileResetterTestBase() {} | |
63 | |
64 ProfileResetterTestBase::~ProfileResetterTestBase() {} | |
65 | |
66 class ProfileResetterTest : public testing::Test, | 28 class ProfileResetterTest : public testing::Test, |
67 public ProfileResetterTestBase { | 29 public ProfileResetterTestBase { |
68 protected: | 30 protected: |
69 // testing::Test: | 31 // testing::Test: |
70 virtual void SetUp() OVERRIDE; | 32 virtual void SetUp() OVERRIDE; |
71 virtual void TearDown() OVERRIDE; | 33 virtual void TearDown() OVERRIDE; |
72 | 34 |
73 TemplateURLServiceTestUtil test_util_; | 35 TemplateURLServiceTestUtil test_util_; |
74 }; | 36 }; |
75 | 37 |
(...skipping 12 matching lines...) Expand all Loading... | |
88 protected: | 50 protected: |
89 virtual void SetUp() OVERRIDE; | 51 virtual void SetUp() OVERRIDE; |
90 }; | 52 }; |
91 | 53 |
92 void ExtensionsResetTest::SetUp() { | 54 void ExtensionsResetTest::SetUp() { |
93 ExtensionServiceTestBase::SetUp(); | 55 ExtensionServiceTestBase::SetUp(); |
94 InitializeEmptyExtensionService(); | 56 InitializeEmptyExtensionService(); |
95 resetter_.reset(new ProfileResetter(profile_.get())); | 57 resetter_.reset(new ProfileResetter(profile_.get())); |
96 } | 58 } |
97 | 59 |
98 // Returns a barebones test Extension object with the specified |name|. The | |
99 // returned extension will include background permission iff | |
100 // |background_permission| is true. | |
101 scoped_refptr<Extension> CreateExtension(const std::string& name, | 60 scoped_refptr<Extension> CreateExtension(const std::string& name, |
102 const base::FilePath& path, | 61 const base::FilePath& path, |
103 Manifest::Location location, | 62 Manifest::Location location, |
104 bool theme) { | 63 bool theme) { |
105 DictionaryValue manifest; | 64 DictionaryValue manifest; |
106 manifest.SetString(extension_manifest_keys::kVersion, "1.0.0.0"); | 65 manifest.SetString(extension_manifest_keys::kVersion, "1.0.0.0"); |
107 manifest.SetString(extension_manifest_keys::kName, name); | 66 manifest.SetString(extension_manifest_keys::kName, name); |
108 manifest.SetString("app.launch.web_url", "http://www.google.com"); | 67 manifest.SetString("app.launch.web_url", "http://www.google.com"); |
109 if (theme) | 68 if (theme) |
110 manifest.Set(extension_manifest_keys::kTheme, new DictionaryValue()); | 69 manifest.Set(extension_manifest_keys::kTheme, new DictionaryValue()); |
(...skipping 22 matching lines...) Expand all Loading... | |
133 } | 92 } |
134 | 93 |
135 content::WebContents* PinnedTabsResetTest::CreateWebContents() { | 94 content::WebContents* PinnedTabsResetTest::CreateWebContents() { |
136 return content::WebContents::Create( | 95 return content::WebContents::Create( |
137 content::WebContents::CreateParams(profile())); | 96 content::WebContents::CreateParams(profile())); |
138 } | 97 } |
139 | 98 |
140 /********************* Tests *********************/ | 99 /********************* Tests *********************/ |
141 | 100 |
142 TEST_F(ProfileResetterTest, ResetDefaultSearchEngine) { | 101 TEST_F(ProfileResetterTest, ResetDefaultSearchEngine) { |
102 PrefService* prefs = test_util_.profile()->GetPrefs(); | |
103 DCHECK(prefs); | |
104 prefs->SetString(prefs::kLastPromptedGoogleURL, "http://www.foo.com/"); | |
105 | |
143 resetter_->Reset( | 106 resetter_->Reset( |
144 ProfileResetter::DEFAULT_SEARCH_ENGINE, | 107 ProfileResetter::DEFAULT_SEARCH_ENGINE, |
145 base::Bind(&MockObject::StopLoop, base::Unretained(&mock_object_))); | 108 base::Bind(&ProfileResetterMockObject::StopLoop, |
109 base::Unretained(&mock_object_))); | |
146 mock_object_.RunLoop(); | 110 mock_object_.RunLoop(); |
111 | |
112 EXPECT_EQ("", prefs->GetString(prefs::kLastPromptedGoogleURL)); | |
147 } | 113 } |
148 | 114 |
149 TEST_F(ProfileResetterTest, ResetHomepage) { | 115 TEST_F(ProfileResetterTest, ResetHomepage) { |
150 PrefService* prefs = test_util_.profile()->GetPrefs(); | 116 PrefService* prefs = test_util_.profile()->GetPrefs(); |
151 DCHECK(prefs); | 117 DCHECK(prefs); |
152 prefs->SetBoolean(prefs::kHomePageIsNewTabPage, false); | 118 prefs->SetBoolean(prefs::kHomePageIsNewTabPage, false); |
153 prefs->SetString(prefs::kHomePage, "http://google.com"); | 119 prefs->SetString(prefs::kHomePage, "http://google.com"); |
154 prefs->SetBoolean(prefs::kShowHomeButton, true); | 120 prefs->SetBoolean(prefs::kShowHomeButton, true); |
155 | 121 |
156 resetter_->Reset( | 122 resetter_->Reset( |
157 ProfileResetter::HOMEPAGE, | 123 ProfileResetter::HOMEPAGE, |
158 base::Bind(&MockObject::StopLoop, base::Unretained(&mock_object_))); | 124 base::Bind(&ProfileResetterMockObject::StopLoop, |
125 base::Unretained(&mock_object_))); | |
159 mock_object_.RunLoop(); | 126 mock_object_.RunLoop(); |
160 | 127 |
161 EXPECT_TRUE(prefs->GetBoolean(prefs::kHomePageIsNewTabPage)); | 128 EXPECT_TRUE(prefs->GetBoolean(prefs::kHomePageIsNewTabPage)); |
162 EXPECT_EQ(std::string(), prefs->GetString(prefs::kHomePage)); | 129 EXPECT_EQ(std::string(), prefs->GetString(prefs::kHomePage)); |
163 EXPECT_FALSE(prefs->GetBoolean(prefs::kShowHomeButton)); | 130 EXPECT_FALSE(prefs->GetBoolean(prefs::kShowHomeButton)); |
164 } | 131 } |
165 | 132 |
166 TEST_F(ProfileResetterTest, ResetContentSettings) { | 133 TEST_F(ProfileResetterTest, ResetContentSettings) { |
167 resetter_->Reset( | 134 resetter_->Reset( |
168 ProfileResetter::CONTENT_SETTINGS, | 135 ProfileResetter::CONTENT_SETTINGS, |
169 base::Bind(&MockObject::StopLoop, base::Unretained(&mock_object_))); | 136 base::Bind(&ProfileResetterMockObject::StopLoop, |
137 base::Unretained(&mock_object_))); | |
170 mock_object_.RunLoop(); | 138 mock_object_.RunLoop(); |
171 } | 139 } |
172 | 140 |
173 TEST_F(ProfileResetterTest, ResetCookiesAndSiteData) { | |
174 resetter_->Reset( | |
175 ProfileResetter::COOKIES_AND_SITE_DATA, | |
176 base::Bind(&MockObject::StopLoop, base::Unretained(&mock_object_))); | |
177 mock_object_.RunLoop(); | |
178 } | |
179 | |
180 TEST_F(ExtensionsResetTest, ResetExtensionsByDisabling) { | 141 TEST_F(ExtensionsResetTest, ResetExtensionsByDisabling) { |
181 base::ScopedTempDir temp_dir; | 142 base::ScopedTempDir temp_dir; |
182 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); | 143 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
183 | 144 |
184 scoped_refptr<Extension> theme = CreateExtension("example1", temp_dir.path(), | 145 scoped_refptr<Extension> theme = CreateExtension("example1", temp_dir.path(), |
185 Manifest::INVALID_LOCATION, | 146 Manifest::INVALID_LOCATION, |
186 true); | 147 true); |
187 service_->FinishInstallationForTest(theme.get()); | 148 service_->FinishInstallationForTest(theme.get()); |
188 // Let ThemeService finish creating the theme pack. | 149 // Let ThemeService finish creating the theme pack. |
189 base::MessageLoop::current()->RunUntilIdle(); | 150 base::MessageLoop::current()->RunUntilIdle(); |
(...skipping 19 matching lines...) Expand all Loading... | |
209 scoped_refptr<Extension> ext4 = | 170 scoped_refptr<Extension> ext4 = |
210 CreateExtension("example4", | 171 CreateExtension("example4", |
211 base::FilePath(FILE_PATH_LITERAL("//nonexistent3")), | 172 base::FilePath(FILE_PATH_LITERAL("//nonexistent3")), |
212 Manifest::EXTERNAL_POLICY_DOWNLOAD, | 173 Manifest::EXTERNAL_POLICY_DOWNLOAD, |
213 false); | 174 false); |
214 service_->AddExtension(ext4.get()); | 175 service_->AddExtension(ext4.get()); |
215 EXPECT_EQ(4u, service_->extensions()->size()); | 176 EXPECT_EQ(4u, service_->extensions()->size()); |
216 | 177 |
217 resetter_->Reset( | 178 resetter_->Reset( |
218 ProfileResetter::EXTENSIONS, | 179 ProfileResetter::EXTENSIONS, |
219 base::Bind(&MockObject::StopLoop, base::Unretained(&mock_object_))); | 180 base::Bind(&ProfileResetterMockObject::StopLoop, |
181 base::Unretained(&mock_object_))); | |
220 mock_object_.RunLoop(); | 182 mock_object_.RunLoop(); |
221 | 183 |
222 EXPECT_EQ(2u, service_->extensions()->size()); | 184 EXPECT_EQ(2u, service_->extensions()->size()); |
223 EXPECT_TRUE(service_->extensions()->Contains(ext3->id())); | 185 EXPECT_TRUE(service_->extensions()->Contains(ext3->id())); |
224 EXPECT_TRUE(service_->extensions()->Contains(ext4->id())); | 186 EXPECT_TRUE(service_->extensions()->Contains(ext4->id())); |
225 EXPECT_TRUE(theme_service->UsingDefaultTheme()); | 187 EXPECT_TRUE(theme_service->UsingDefaultTheme()); |
226 } | 188 } |
227 | 189 |
228 TEST_F(ProfileResetterTest, ResetStartPage) { | 190 TEST_F(ProfileResetterTest, ResetStartPage) { |
229 PrefService* prefs = test_util_.profile()->GetPrefs(); | 191 PrefService* prefs = test_util_.profile()->GetPrefs(); |
230 DCHECK(prefs); | 192 DCHECK(prefs); |
231 | 193 |
232 SessionStartupPref startup_pref(SessionStartupPref::URLS); | 194 SessionStartupPref startup_pref(SessionStartupPref::URLS); |
233 startup_pref.urls.push_back(GURL("http://foo")); | 195 startup_pref.urls.push_back(GURL("http://foo")); |
234 startup_pref.urls.push_back(GURL("http://bar")); | 196 startup_pref.urls.push_back(GURL("http://bar")); |
235 SessionStartupPref::SetStartupPref(prefs, startup_pref); | 197 SessionStartupPref::SetStartupPref(prefs, startup_pref); |
236 | 198 |
237 resetter_->Reset( | 199 resetter_->Reset( |
238 ProfileResetter::STARTUP_PAGES, | 200 ProfileResetter::STARTUP_PAGES, |
239 base::Bind(&MockObject::StopLoop, base::Unretained(&mock_object_))); | 201 base::Bind(&ProfileResetterMockObject::StopLoop, |
202 base::Unretained(&mock_object_))); | |
240 mock_object_.RunLoop(); | 203 mock_object_.RunLoop(); |
241 | 204 |
242 startup_pref = SessionStartupPref::GetStartupPref(prefs); | 205 startup_pref = SessionStartupPref::GetStartupPref(prefs); |
243 EXPECT_EQ(SessionStartupPref::GetDefaultStartupType(), startup_pref.type); | 206 EXPECT_EQ(SessionStartupPref::GetDefaultStartupType(), startup_pref.type); |
244 EXPECT_EQ(std::vector<GURL>(), startup_pref.urls); | 207 EXPECT_EQ(std::vector<GURL>(), startup_pref.urls); |
245 } | 208 } |
246 | 209 |
247 TEST_F(PinnedTabsResetTest, ResetPinnedTabs) { | 210 TEST_F(PinnedTabsResetTest, ResetPinnedTabs) { |
248 scoped_refptr<Extension> extension_app = CreateExtension( | 211 scoped_refptr<Extension> extension_app = CreateExtension( |
249 "hello!", | 212 "hello!", |
250 base::FilePath(FILE_PATH_LITERAL("//nonexistent")), | 213 base::FilePath(FILE_PATH_LITERAL("//nonexistent")), |
251 Manifest::INVALID_LOCATION, | 214 Manifest::INVALID_LOCATION, |
252 false); | 215 false); |
253 content::WebContents* contents1 = CreateWebContents(); | 216 scoped_ptr<content::WebContents> contents1(CreateWebContents()); |
battre
2013/06/20 06:15:57
did this leak in the past?
vasilii
2013/06/20 13:08:22
No, BrowserWithTestWindowTest cleans up all the ta
| |
254 extensions::TabHelper::CreateForWebContents(contents1); | 217 extensions::TabHelper::CreateForWebContents(contents1.get()); |
255 extensions::TabHelper::FromWebContents(contents1)-> | 218 extensions::TabHelper::FromWebContents(contents1.get())-> |
256 SetExtensionApp(extension_app.get()); | 219 SetExtensionApp(extension_app.get()); |
257 content::WebContents* contents2 = CreateWebContents(); | 220 scoped_ptr<content::WebContents> contents2(CreateWebContents()); |
258 content::WebContents* contents3 = CreateWebContents(); | 221 scoped_ptr<content::WebContents> contents3(CreateWebContents()); |
259 content::WebContents* contents4 = CreateWebContents(); | 222 scoped_ptr<content::WebContents> contents4(CreateWebContents()); |
260 TabStripModel* tab_strip_model = browser()->tab_strip_model(); | 223 TabStripModel* tab_strip_model = browser()->tab_strip_model(); |
261 | 224 |
262 tab_strip_model->AppendWebContents(contents4, true); | 225 tab_strip_model->AppendWebContents(contents4.get(), true); |
263 tab_strip_model->AppendWebContents(contents3, true); | 226 tab_strip_model->AppendWebContents(contents3.get(), true); |
264 tab_strip_model->AppendWebContents(contents2, true); | 227 tab_strip_model->AppendWebContents(contents2.get(), true); |
265 tab_strip_model->SetTabPinned(2, true); | 228 tab_strip_model->SetTabPinned(2, true); |
266 tab_strip_model->AppendWebContents(contents1, true); | 229 tab_strip_model->AppendWebContents(contents1.get(), true); |
267 tab_strip_model->SetTabPinned(3, true); | 230 tab_strip_model->SetTabPinned(3, true); |
268 | 231 |
269 EXPECT_EQ(contents2, tab_strip_model->GetWebContentsAt(0)); | 232 EXPECT_EQ(contents2, tab_strip_model->GetWebContentsAt(0)); |
270 EXPECT_EQ(contents1, tab_strip_model->GetWebContentsAt(1)); | 233 EXPECT_EQ(contents1, tab_strip_model->GetWebContentsAt(1)); |
271 EXPECT_EQ(contents3, tab_strip_model->GetWebContentsAt(2)); | 234 EXPECT_EQ(contents3, tab_strip_model->GetWebContentsAt(2)); |
272 EXPECT_EQ(contents4, tab_strip_model->GetWebContentsAt(3)); | 235 EXPECT_EQ(contents4, tab_strip_model->GetWebContentsAt(3)); |
273 EXPECT_EQ(3, tab_strip_model->IndexOfFirstNonMiniTab()); | 236 EXPECT_EQ(3, tab_strip_model->IndexOfFirstNonMiniTab()); |
274 | 237 |
275 resetter_->Reset( | 238 resetter_->Reset( |
276 ProfileResetter::PINNED_TABS, | 239 ProfileResetter::PINNED_TABS, |
277 base::Bind(&MockObject::StopLoop, base::Unretained(&mock_object_))); | 240 base::Bind(&ProfileResetterMockObject::StopLoop, |
241 base::Unretained(&mock_object_))); | |
278 mock_object_.RunLoop(); | 242 mock_object_.RunLoop(); |
279 | 243 |
280 EXPECT_EQ(contents1, tab_strip_model->GetWebContentsAt(0)); | 244 EXPECT_EQ(contents1, tab_strip_model->GetWebContentsAt(0)); |
281 EXPECT_EQ(contents2, tab_strip_model->GetWebContentsAt(1)); | 245 EXPECT_EQ(contents2, tab_strip_model->GetWebContentsAt(1)); |
282 EXPECT_EQ(contents3, tab_strip_model->GetWebContentsAt(2)); | 246 EXPECT_EQ(contents3, tab_strip_model->GetWebContentsAt(2)); |
283 EXPECT_EQ(contents4, tab_strip_model->GetWebContentsAt(3)); | 247 EXPECT_EQ(contents4, tab_strip_model->GetWebContentsAt(3)); |
284 EXPECT_EQ(1, tab_strip_model->IndexOfFirstNonMiniTab()); | 248 EXPECT_EQ(1, tab_strip_model->IndexOfFirstNonMiniTab()); |
285 } | 249 } |
286 | 250 |
287 TEST_F(ProfileResetterTest, ResetFewFlags) { | 251 TEST_F(ProfileResetterTest, ResetFewFlags) { |
288 // mock_object_ is a StrictMock, so we verify that it is called only once. | 252 // mock_object_ is a StrictMock, so we verify that it is called only once. |
289 resetter_->Reset( | 253 resetter_->Reset( |
290 ProfileResetter::DEFAULT_SEARCH_ENGINE | ProfileResetter::HOMEPAGE, | 254 ProfileResetter::DEFAULT_SEARCH_ENGINE | ProfileResetter::HOMEPAGE, |
291 base::Bind(&MockObject::StopLoop, base::Unretained(&mock_object_))); | 255 base::Bind(&ProfileResetterMockObject::StopLoop, |
256 base::Unretained(&mock_object_))); | |
292 mock_object_.RunLoop(); | 257 mock_object_.RunLoop(); |
293 } | 258 } |
294 | 259 |
295 } // namespace | 260 } // namespace |
OLD | NEW |