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/json/json_string_value_serializer.h" | 7 #include "base/json/json_string_value_serializer.h" |
8 #include "base/prefs/pref_service.h" | 8 #include "base/prefs/pref_service.h" |
9 #include "base/strings/utf_string_conversions.h" | 9 #include "base/strings/utf_string_conversions.h" |
10 #include "chrome/browser/content_settings/host_content_settings_map.h" | 10 #include "chrome/browser/content_settings/host_content_settings_map.h" |
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
221 fetcher->set_response_headers(download_headers); | 221 fetcher->set_response_headers(download_headers); |
222 return fetcher.Pass(); | 222 return fetcher.Pass(); |
223 } | 223 } |
224 | 224 |
225 | 225 |
226 // helper functions ----------------------------------------------------------- | 226 // helper functions ----------------------------------------------------------- |
227 | 227 |
228 scoped_refptr<Extension> CreateExtension(const std::string& name, | 228 scoped_refptr<Extension> CreateExtension(const std::string& name, |
229 const base::FilePath& path, | 229 const base::FilePath& path, |
230 Manifest::Location location, | 230 Manifest::Location location, |
231 bool theme) { | 231 extensions::Manifest::Type type, |
| 232 bool installed_by_default) { |
232 DictionaryValue manifest; | 233 DictionaryValue manifest; |
233 manifest.SetString(extension_manifest_keys::kVersion, "1.0.0.0"); | 234 manifest.SetString(extension_manifest_keys::kVersion, "1.0.0.0"); |
234 manifest.SetString(extension_manifest_keys::kName, name); | 235 manifest.SetString(extension_manifest_keys::kName, name); |
235 manifest.SetString("app.launch.web_url", "http://www.google.com"); | 236 switch (type) { |
236 if (theme) | 237 case extensions::Manifest::TYPE_THEME: |
237 manifest.Set(extension_manifest_keys::kTheme, new DictionaryValue); | 238 manifest.Set(extension_manifest_keys::kTheme, new DictionaryValue); |
| 239 break; |
| 240 case extensions::Manifest::TYPE_HOSTED_APP: |
| 241 manifest.SetString(extension_manifest_keys::kLaunchWebURL, |
| 242 "http://www.google.com"); |
| 243 manifest.SetString(extension_manifest_keys::kUpdateURL, |
| 244 "http://clients2.google.com/service/update2/crx"); |
| 245 break; |
| 246 case extensions::Manifest::TYPE_EXTENSION: |
| 247 // do nothing |
| 248 break; |
| 249 default: |
| 250 NOTREACHED(); |
| 251 } |
238 manifest.SetString(extension_manifest_keys::kOmniboxKeyword, name); | 252 manifest.SetString(extension_manifest_keys::kOmniboxKeyword, name); |
239 std::string error; | 253 std::string error; |
240 scoped_refptr<Extension> extension = Extension::Create( | 254 scoped_refptr<Extension> extension = Extension::Create( |
241 path, | 255 path, |
242 location, | 256 location, |
243 manifest, | 257 manifest, |
244 Extension::NO_FLAGS, | 258 installed_by_default ? Extension::WAS_INSTALLED_BY_DEFAULT |
| 259 : Extension::NO_FLAGS, |
245 &error); | 260 &error); |
246 EXPECT_TRUE(extension.get() != NULL) << error; | 261 EXPECT_TRUE(extension.get() != NULL) << error; |
247 return extension; | 262 return extension; |
248 } | 263 } |
249 | 264 |
250 void ReplaceString(std::string* str, | 265 void ReplaceString(std::string* str, |
251 const std::string& placeholder, | 266 const std::string& placeholder, |
252 const std::string& substitution) { | 267 const std::string& substitution) { |
253 ASSERT_NE(static_cast<std::string*>(NULL), str); | 268 ASSERT_NE(static_cast<std::string*>(NULL), str); |
254 size_t placeholder_pos = str->find(placeholder); | 269 size_t placeholder_pos = str->find(placeholder); |
255 ASSERT_NE(std::string::npos, placeholder_pos); | 270 ASSERT_NE(std::string::npos, placeholder_pos); |
256 str->replace(placeholder_pos, placeholder.size(), substitution); | 271 str->replace(placeholder_pos, placeholder.size(), substitution); |
257 } | 272 } |
258 | 273 |
259 | 274 |
260 /********************* Tests *********************/ | 275 /********************* Tests *********************/ |
261 | 276 |
262 TEST_F(ProfileResetterTest, ResetDefaultSearchEngine) { | 277 TEST_F(ProfileResetterTest, ResetDefaultSearchEngine) { |
263 // Search engine's logic is tested by | 278 // Search engine's logic is tested by |
264 // TemplateURLServiceTest.ResetURLs. | 279 // TemplateURLServiceTest.ResetURLs. |
265 PrefService* prefs = profile()->GetPrefs(); | 280 PrefService* prefs = profile()->GetPrefs(); |
266 DCHECK(prefs); | 281 DCHECK(prefs); |
267 prefs->SetString(prefs::kLastPromptedGoogleURL, "http://www.foo.com/"); | 282 prefs->SetString(prefs::kLastPromptedGoogleURL, "http://www.foo.com/"); |
268 | 283 |
269 scoped_refptr<Extension> extension = CreateExtension( | 284 scoped_refptr<Extension> extension = CreateExtension( |
270 "xxx", | 285 "xxx", |
271 base::FilePath(FILE_PATH_LITERAL("//nonexistent")), | 286 base::FilePath(FILE_PATH_LITERAL("//nonexistent")), |
272 Manifest::COMPONENT, | 287 Manifest::COMPONENT, |
| 288 extensions::Manifest::TYPE_EXTENSION, |
273 false); | 289 false); |
274 service_->AddExtension(extension.get()); | 290 service_->AddExtension(extension.get()); |
275 | 291 |
276 ResetAndWait(ProfileResetter::DEFAULT_SEARCH_ENGINE); | 292 ResetAndWait(ProfileResetter::DEFAULT_SEARCH_ENGINE); |
277 | 293 |
278 // TemplateURLService should reset extension search engines. | 294 // TemplateURLService should reset extension search engines. |
279 TemplateURLService* model = | 295 TemplateURLService* model = |
280 TemplateURLServiceFactory::GetForProfile(profile()); | 296 TemplateURLServiceFactory::GetForProfile(profile()); |
281 TemplateURL* ext_url = model->GetTemplateURLForKeyword(ASCIIToUTF16("xxx")); | 297 TemplateURL* ext_url = model->GetTemplateURLForKeyword(ASCIIToUTF16("xxx")); |
282 ASSERT_TRUE(ext_url); | 298 ASSERT_TRUE(ext_url); |
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
427 } | 443 } |
428 } | 444 } |
429 } | 445 } |
430 | 446 |
431 TEST_F(ProfileResetterTest, ResetExtensionsByDisabling) { | 447 TEST_F(ProfileResetterTest, ResetExtensionsByDisabling) { |
432 service_->Init(); | 448 service_->Init(); |
433 | 449 |
434 base::ScopedTempDir temp_dir; | 450 base::ScopedTempDir temp_dir; |
435 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); | 451 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
436 | 452 |
437 scoped_refptr<Extension> theme = CreateExtension("example1", temp_dir.path(), | 453 scoped_refptr<Extension> theme = |
438 Manifest::INVALID_LOCATION, | 454 CreateExtension("example1", |
439 true); | 455 temp_dir.path(), |
| 456 Manifest::INVALID_LOCATION, |
| 457 extensions::Manifest::TYPE_THEME, |
| 458 false); |
440 service_->FinishInstallationForTest(theme.get()); | 459 service_->FinishInstallationForTest(theme.get()); |
441 // Let ThemeService finish creating the theme pack. | 460 // Let ThemeService finish creating the theme pack. |
442 base::MessageLoop::current()->RunUntilIdle(); | 461 base::MessageLoop::current()->RunUntilIdle(); |
443 | 462 |
444 // ThemeService isn't compiled for Android. | |
445 ThemeService* theme_service = | 463 ThemeService* theme_service = |
446 ThemeServiceFactory::GetForProfile(profile()); | 464 ThemeServiceFactory::GetForProfile(profile()); |
447 EXPECT_FALSE(theme_service->UsingDefaultTheme()); | 465 EXPECT_FALSE(theme_service->UsingDefaultTheme()); |
448 | 466 |
449 scoped_refptr<Extension> ext2 = CreateExtension( | 467 scoped_refptr<Extension> ext2 = CreateExtension( |
450 "example2", | 468 "example2", |
451 base::FilePath(FILE_PATH_LITERAL("//nonexistent")), | 469 base::FilePath(FILE_PATH_LITERAL("//nonexistent")), |
452 Manifest::INVALID_LOCATION, | 470 Manifest::INVALID_LOCATION, |
| 471 extensions::Manifest::TYPE_EXTENSION, |
453 false); | 472 false); |
454 service_->AddExtension(ext2.get()); | 473 service_->AddExtension(ext2.get()); |
455 // Components and external policy extensions shouldn't be deleted. | 474 // Components and external policy extensions shouldn't be deleted. |
456 scoped_refptr<Extension> ext3 = CreateExtension( | 475 scoped_refptr<Extension> ext3 = CreateExtension( |
457 "example3", | 476 "example3", |
458 base::FilePath(FILE_PATH_LITERAL("//nonexistent2")), | 477 base::FilePath(FILE_PATH_LITERAL("//nonexistent2")), |
459 Manifest::COMPONENT, | 478 Manifest::COMPONENT, |
| 479 extensions::Manifest::TYPE_EXTENSION, |
460 false); | 480 false); |
461 service_->AddExtension(ext3.get()); | 481 service_->AddExtension(ext3.get()); |
462 scoped_refptr<Extension> ext4 = | 482 scoped_refptr<Extension> ext4 = |
463 CreateExtension("example4", | 483 CreateExtension("example4", |
464 base::FilePath(FILE_PATH_LITERAL("//nonexistent3")), | 484 base::FilePath(FILE_PATH_LITERAL("//nonexistent3")), |
465 Manifest::EXTERNAL_POLICY_DOWNLOAD, | 485 Manifest::EXTERNAL_POLICY_DOWNLOAD, |
| 486 extensions::Manifest::TYPE_EXTENSION, |
466 false); | 487 false); |
467 service_->AddExtension(ext4.get()); | 488 service_->AddExtension(ext4.get()); |
468 EXPECT_EQ(4u, service_->extensions()->size()); | 489 EXPECT_EQ(4u, service_->extensions()->size()); |
469 | 490 |
470 ResetAndWait(ProfileResetter::EXTENSIONS); | 491 ResetAndWait(ProfileResetter::EXTENSIONS); |
471 | |
472 EXPECT_EQ(2u, service_->extensions()->size()); | 492 EXPECT_EQ(2u, service_->extensions()->size()); |
| 493 EXPECT_FALSE(service_->extensions()->Contains(theme->id())); |
| 494 EXPECT_FALSE(service_->extensions()->Contains(ext2->id())); |
473 EXPECT_TRUE(service_->extensions()->Contains(ext3->id())); | 495 EXPECT_TRUE(service_->extensions()->Contains(ext3->id())); |
474 EXPECT_TRUE(service_->extensions()->Contains(ext4->id())); | 496 EXPECT_TRUE(service_->extensions()->Contains(ext4->id())); |
475 EXPECT_TRUE(theme_service->UsingDefaultTheme()); | 497 EXPECT_TRUE(theme_service->UsingDefaultTheme()); |
476 } | 498 } |
477 | 499 |
478 TEST_F(ProfileResetterTest, ResetExtensionsByDisablingNonOrganic) { | 500 TEST_F(ProfileResetterTest, ResetExtensionsByDisablingNonOrganic) { |
479 scoped_refptr<Extension> ext2 = CreateExtension( | 501 scoped_refptr<Extension> ext2 = CreateExtension( |
480 "example2", | 502 "example2", |
481 base::FilePath(FILE_PATH_LITERAL("//nonexistent")), | 503 base::FilePath(FILE_PATH_LITERAL("//nonexistent")), |
482 Manifest::INVALID_LOCATION, | 504 Manifest::INVALID_LOCATION, |
| 505 extensions::Manifest::TYPE_EXTENSION, |
483 false); | 506 false); |
484 service_->AddExtension(ext2.get()); | 507 service_->AddExtension(ext2.get()); |
485 // Components and external policy extensions shouldn't be deleted. | 508 // Components and external policy extensions shouldn't be deleted. |
486 scoped_refptr<Extension> ext3 = CreateExtension( | 509 scoped_refptr<Extension> ext3 = CreateExtension( |
487 "example3", | 510 "example3", |
488 base::FilePath(FILE_PATH_LITERAL("//nonexistent2")), | 511 base::FilePath(FILE_PATH_LITERAL("//nonexistent2")), |
489 Manifest::INVALID_LOCATION, | 512 Manifest::INVALID_LOCATION, |
| 513 extensions::Manifest::TYPE_EXTENSION, |
490 false); | 514 false); |
491 service_->AddExtension(ext3.get()); | 515 service_->AddExtension(ext3.get()); |
492 EXPECT_EQ(2u, service_->extensions()->size()); | 516 EXPECT_EQ(2u, service_->extensions()->size()); |
493 | 517 |
494 std::string master_prefs(kDistributionConfig); | 518 std::string master_prefs(kDistributionConfig); |
495 ReplaceString(&master_prefs, "placeholder_for_id", ext3->id()); | 519 ReplaceString(&master_prefs, "placeholder_for_id", ext3->id()); |
496 | 520 |
497 ResetAndWait(ProfileResetter::EXTENSIONS, master_prefs); | 521 ResetAndWait(ProfileResetter::EXTENSIONS, master_prefs); |
498 | 522 |
499 EXPECT_EQ(1u, service_->extensions()->size()); | 523 EXPECT_EQ(1u, service_->extensions()->size()); |
500 EXPECT_TRUE(service_->extensions()->Contains(ext3->id())); | 524 EXPECT_TRUE(service_->extensions()->Contains(ext3->id())); |
501 } | 525 } |
502 | 526 |
| 527 TEST_F(ProfileResetterTest, ResetExtensionsAndDefaultApps) { |
| 528 service_->Init(); |
| 529 |
| 530 base::ScopedTempDir temp_dir; |
| 531 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
| 532 |
| 533 scoped_refptr<Extension> ext1 = |
| 534 CreateExtension("example1", |
| 535 temp_dir.path(), |
| 536 Manifest::INVALID_LOCATION, |
| 537 extensions::Manifest::TYPE_THEME, |
| 538 false); |
| 539 service_->FinishInstallationForTest(ext1.get()); |
| 540 // Let ThemeService finish creating the theme pack. |
| 541 base::MessageLoop::current()->RunUntilIdle(); |
| 542 |
| 543 ThemeService* theme_service = |
| 544 ThemeServiceFactory::GetForProfile(profile()); |
| 545 EXPECT_FALSE(theme_service->UsingDefaultTheme()); |
| 546 |
| 547 scoped_refptr<Extension> ext2 = |
| 548 CreateExtension("example2", |
| 549 base::FilePath(FILE_PATH_LITERAL("//nonexistent2")), |
| 550 Manifest::INVALID_LOCATION, |
| 551 extensions::Manifest::TYPE_EXTENSION, |
| 552 false); |
| 553 service_->AddExtension(ext2.get()); |
| 554 |
| 555 scoped_refptr<Extension> ext3 = |
| 556 CreateExtension("example2", |
| 557 base::FilePath(FILE_PATH_LITERAL("//nonexistent3")), |
| 558 Manifest::INVALID_LOCATION, |
| 559 extensions::Manifest::TYPE_HOSTED_APP, |
| 560 true); |
| 561 service_->AddExtension(ext3.get()); |
| 562 EXPECT_EQ(3u, service_->extensions()->size()); |
| 563 |
| 564 ResetAndWait(ProfileResetter::EXTENSIONS); |
| 565 |
| 566 EXPECT_EQ(1u, service_->extensions()->size()); |
| 567 EXPECT_FALSE(service_->extensions()->Contains(ext1->id())); |
| 568 EXPECT_FALSE(service_->extensions()->Contains(ext2->id())); |
| 569 EXPECT_TRUE(service_->extensions()->Contains(ext3->id())); |
| 570 EXPECT_TRUE(theme_service->UsingDefaultTheme()); |
| 571 } |
| 572 |
503 TEST_F(ProfileResetterTest, ResetStartPage) { | 573 TEST_F(ProfileResetterTest, ResetStartPage) { |
504 PrefService* prefs = profile()->GetPrefs(); | 574 PrefService* prefs = profile()->GetPrefs(); |
505 DCHECK(prefs); | 575 DCHECK(prefs); |
506 | 576 |
507 SessionStartupPref startup_pref(SessionStartupPref::URLS); | 577 SessionStartupPref startup_pref(SessionStartupPref::URLS); |
508 startup_pref.urls.push_back(GURL("http://foo")); | 578 startup_pref.urls.push_back(GURL("http://foo")); |
509 startup_pref.urls.push_back(GURL("http://bar")); | 579 startup_pref.urls.push_back(GURL("http://bar")); |
510 SessionStartupPref::SetStartupPref(prefs, startup_pref); | 580 SessionStartupPref::SetStartupPref(prefs, startup_pref); |
511 | 581 |
512 ResetAndWait(ProfileResetter::STARTUP_PAGES); | 582 ResetAndWait(ProfileResetter::STARTUP_PAGES); |
(...skipping 16 matching lines...) Expand all Loading... |
529 EXPECT_EQ(SessionStartupPref::URLS, startup_pref.type); | 599 EXPECT_EQ(SessionStartupPref::URLS, startup_pref.type); |
530 const GURL urls[] = {GURL("http://goo.gl"), GURL("http://foo.de")}; | 600 const GURL urls[] = {GURL("http://goo.gl"), GURL("http://foo.de")}; |
531 EXPECT_EQ(std::vector<GURL>(urls, urls + arraysize(urls)), startup_pref.urls); | 601 EXPECT_EQ(std::vector<GURL>(urls, urls + arraysize(urls)), startup_pref.urls); |
532 } | 602 } |
533 | 603 |
534 TEST_F(PinnedTabsResetTest, ResetPinnedTabs) { | 604 TEST_F(PinnedTabsResetTest, ResetPinnedTabs) { |
535 scoped_refptr<Extension> extension_app = CreateExtension( | 605 scoped_refptr<Extension> extension_app = CreateExtension( |
536 "hello!", | 606 "hello!", |
537 base::FilePath(FILE_PATH_LITERAL("//nonexistent")), | 607 base::FilePath(FILE_PATH_LITERAL("//nonexistent")), |
538 Manifest::INVALID_LOCATION, | 608 Manifest::INVALID_LOCATION, |
| 609 extensions::Manifest::TYPE_HOSTED_APP, |
539 false); | 610 false); |
540 scoped_ptr<content::WebContents> contents1(CreateWebContents()); | 611 scoped_ptr<content::WebContents> contents1(CreateWebContents()); |
541 extensions::TabHelper::CreateForWebContents(contents1.get()); | 612 extensions::TabHelper::CreateForWebContents(contents1.get()); |
542 extensions::TabHelper::FromWebContents(contents1.get())-> | 613 extensions::TabHelper::FromWebContents(contents1.get())-> |
543 SetExtensionApp(extension_app.get()); | 614 SetExtensionApp(extension_app.get()); |
544 scoped_ptr<content::WebContents> contents2(CreateWebContents()); | 615 scoped_ptr<content::WebContents> contents2(CreateWebContents()); |
545 scoped_ptr<content::WebContents> contents3(CreateWebContents()); | 616 scoped_ptr<content::WebContents> contents3(CreateWebContents()); |
546 scoped_ptr<content::WebContents> contents4(CreateWebContents()); | 617 scoped_ptr<content::WebContents> contents4(CreateWebContents()); |
547 TabStripModel* tab_strip_model = browser()->tab_strip_model(); | 618 TabStripModel* tab_strip_model = browser()->tab_strip_model(); |
548 | 619 |
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
703 EXPECT_EQ(!!(field_mask & ResettableSettingsSnapshot::HOMEPAGE), | 774 EXPECT_EQ(!!(field_mask & ResettableSettingsSnapshot::HOMEPAGE), |
704 dict->GetString("homepage", &homepage)); | 775 dict->GetString("homepage", &homepage)); |
705 EXPECT_EQ(!!(field_mask & ResettableSettingsSnapshot::HOMEPAGE_IS_NTP), | 776 EXPECT_EQ(!!(field_mask & ResettableSettingsSnapshot::HOMEPAGE_IS_NTP), |
706 dict->GetBoolean("homepage_is_ntp", &homepage_is_ntp)); | 777 dict->GetBoolean("homepage_is_ntp", &homepage_is_ntp)); |
707 EXPECT_EQ(!!(field_mask & ResettableSettingsSnapshot::DSE_URL), | 778 EXPECT_EQ(!!(field_mask & ResettableSettingsSnapshot::DSE_URL), |
708 dict->GetString("default_search_engine", &default_search_engine)); | 779 dict->GetString("default_search_engine", &default_search_engine)); |
709 } | 780 } |
710 } | 781 } |
711 | 782 |
712 } // namespace | 783 } // namespace |
OLD | NEW |