OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 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/extensions/extension_service_unittest.h" | 5 #include "chrome/browser/extensions/extension_service_unittest.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <set> | 8 #include <set> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 15 matching lines...) Expand all Loading... |
26 #include "base/utf_string_conversions.h" | 26 #include "base/utf_string_conversions.h" |
27 #include "base/version.h" | 27 #include "base/version.h" |
28 #include "chrome/browser/browser_process.h" | 28 #include "chrome/browser/browser_process.h" |
29 #include "chrome/browser/extensions/component_loader.h" | 29 #include "chrome/browser/extensions/component_loader.h" |
30 #include "chrome/browser/extensions/crx_installer.h" | 30 #include "chrome/browser/extensions/crx_installer.h" |
31 #include "chrome/browser/extensions/extension_creator.h" | 31 #include "chrome/browser/extensions/extension_creator.h" |
32 #include "chrome/browser/extensions/extension_error_reporter.h" | 32 #include "chrome/browser/extensions/extension_error_reporter.h" |
33 #include "chrome/browser/extensions/extension_service.h" | 33 #include "chrome/browser/extensions/extension_service.h" |
34 #include "chrome/browser/extensions/extension_special_storage_policy.h" | 34 #include "chrome/browser/extensions/extension_special_storage_policy.h" |
35 #include "chrome/browser/extensions/extension_sync_data.h" | 35 #include "chrome/browser/extensions/extension_sync_data.h" |
| 36 #include "chrome/browser/extensions/extension_system.h" |
| 37 #include "chrome/browser/extensions/extension_system_factory.h" |
36 #include "chrome/browser/extensions/extension_updater.h" | 38 #include "chrome/browser/extensions/extension_updater.h" |
37 #include "chrome/browser/extensions/external_extension_provider_impl.h" | 39 #include "chrome/browser/extensions/external_extension_provider_impl.h" |
38 #include "chrome/browser/extensions/external_extension_provider_interface.h" | 40 #include "chrome/browser/extensions/external_extension_provider_interface.h" |
39 #include "chrome/browser/extensions/external_pref_extension_loader.h" | 41 #include "chrome/browser/extensions/external_pref_extension_loader.h" |
40 #include "chrome/browser/extensions/extension_sorting.h" | 42 #include "chrome/browser/extensions/extension_sorting.h" |
41 #include "chrome/browser/extensions/installed_loader.h" | 43 #include "chrome/browser/extensions/installed_loader.h" |
42 #include "chrome/browser/extensions/pack_extension_job.cc" | 44 #include "chrome/browser/extensions/pack_extension_job.cc" |
43 #include "chrome/browser/extensions/pending_extension_info.h" | 45 #include "chrome/browser/extensions/pending_extension_info.h" |
44 #include "chrome/browser/extensions/pending_extension_manager.h" | 46 #include "chrome/browser/extensions/pending_extension_manager.h" |
| 47 #include "chrome/browser/extensions/test_extension_system.h" |
45 #include "chrome/browser/extensions/unpacked_installer.h" | 48 #include "chrome/browser/extensions/unpacked_installer.h" |
46 #include "chrome/browser/plugin_prefs_factory.h" | 49 #include "chrome/browser/plugin_prefs_factory.h" |
47 #include "chrome/browser/prefs/browser_prefs.h" | 50 #include "chrome/browser/prefs/browser_prefs.h" |
48 #include "chrome/browser/prefs/pref_service_mock_builder.h" | 51 #include "chrome/browser/prefs/pref_service_mock_builder.h" |
49 #include "chrome/browser/prefs/scoped_user_pref_update.h" | 52 #include "chrome/browser/prefs/scoped_user_pref_update.h" |
50 #include "chrome/browser/sync/protocol/app_specifics.pb.h" | 53 #include "chrome/browser/sync/protocol/app_specifics.pb.h" |
51 #include "chrome/browser/sync/protocol/extension_specifics.pb.h" | 54 #include "chrome/browser/sync/protocol/extension_specifics.pb.h" |
52 #include "chrome/common/chrome_notification_types.h" | 55 #include "chrome/common/chrome_notification_types.h" |
53 #include "chrome/common/chrome_paths.h" | 56 #include "chrome/common/chrome_paths.h" |
54 #include "chrome/common/chrome_switches.h" | 57 #include "chrome/common/chrome_switches.h" |
(...skipping 304 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
359 int ids_found_; | 362 int ids_found_; |
360 FilePath fake_base_path_; | 363 FilePath fake_base_path_; |
361 scoped_ptr<ExternalExtensionProviderImpl> provider_; | 364 scoped_ptr<ExternalExtensionProviderImpl> provider_; |
362 scoped_ptr<DictionaryValue> prefs_; | 365 scoped_ptr<DictionaryValue> prefs_; |
363 | 366 |
364 DISALLOW_COPY_AND_ASSIGN(MockProviderVisitor); | 367 DISALLOW_COPY_AND_ASSIGN(MockProviderVisitor); |
365 }; | 368 }; |
366 | 369 |
367 class ExtensionTestingProfile : public TestingProfile { | 370 class ExtensionTestingProfile : public TestingProfile { |
368 public: | 371 public: |
369 ExtensionTestingProfile() : service_(NULL) { | 372 ExtensionTestingProfile() { |
370 } | 373 } |
371 | 374 |
372 void set_extensions_service(ExtensionService* service) { | 375 virtual ExtensionService* GetExtensionService() { |
373 service_ = service; | 376 return ExtensionSystemFactory::GetForProfile(this)->extension_service(); |
374 } | 377 } |
375 virtual ExtensionService* GetExtensionService() { return service_; } | |
376 | 378 |
377 virtual ChromeAppCacheService* GetAppCacheService() { | 379 virtual ChromeAppCacheService* GetAppCacheService() { |
378 if (!appcache_service_) { | 380 if (!appcache_service_) { |
379 appcache_service_ = new ChromeAppCacheService(NULL); | 381 appcache_service_ = new ChromeAppCacheService(NULL); |
380 if (!BrowserThread::PostTask( | 382 if (!BrowserThread::PostTask( |
381 BrowserThread::IO, FROM_HERE, | 383 BrowserThread::IO, FROM_HERE, |
382 base::Bind( | 384 base::Bind( |
383 &ChromeAppCacheService::InitializeOnIOThread, | 385 &ChromeAppCacheService::InitializeOnIOThread, |
384 appcache_service_.get(), | 386 appcache_service_.get(), |
385 IsOffTheRecord() | 387 IsOffTheRecord() |
(...skipping 10 matching lines...) Expand all Loading... |
396 quota::QuotaManager* quota_manager = GetQuotaManager(); | 398 quota::QuotaManager* quota_manager = GetQuotaManager(); |
397 file_system_context_ = CreateFileSystemContext( | 399 file_system_context_ = CreateFileSystemContext( |
398 GetPath(), IsOffTheRecord(), | 400 GetPath(), IsOffTheRecord(), |
399 GetExtensionSpecialStoragePolicy(), | 401 GetExtensionSpecialStoragePolicy(), |
400 quota_manager ? quota_manager->proxy() : NULL); | 402 quota_manager ? quota_manager->proxy() : NULL); |
401 } | 403 } |
402 return file_system_context_; | 404 return file_system_context_; |
403 } | 405 } |
404 | 406 |
405 private: | 407 private: |
406 ExtensionService* service_; | |
407 scoped_refptr<ChromeAppCacheService> appcache_service_; | 408 scoped_refptr<ChromeAppCacheService> appcache_service_; |
408 scoped_refptr<fileapi::FileSystemContext> file_system_context_; | 409 scoped_refptr<fileapi::FileSystemContext> file_system_context_; |
409 }; | 410 }; |
410 | 411 |
411 // Our message loop may be used in tests which require it to be an IO loop. | 412 // Our message loop may be used in tests which require it to be an IO loop. |
412 ExtensionServiceTestBase::ExtensionServiceTestBase() | 413 ExtensionServiceTestBase::ExtensionServiceTestBase() |
413 : loop_(MessageLoop::TYPE_IO), | 414 : loop_(MessageLoop::TYPE_IO), |
414 service_(NULL), | 415 service_(NULL), |
415 expected_extensions_count_(0), | 416 expected_extensions_count_(0), |
416 ui_thread_(BrowserThread::UI, &loop_), | 417 ui_thread_(BrowserThread::UI, &loop_), |
(...skipping 27 matching lines...) Expand all Loading... |
444 PrefService* prefs = | 445 PrefService* prefs = |
445 PrefServiceMockBuilder().WithUserFilePrefs(pref_file).Create(); | 446 PrefServiceMockBuilder().WithUserFilePrefs(pref_file).Create(); |
446 Profile::RegisterUserPrefs(prefs); | 447 Profile::RegisterUserPrefs(prefs); |
447 browser::RegisterUserPrefs(prefs); | 448 browser::RegisterUserPrefs(prefs); |
448 profile->SetPrefService(prefs); | 449 profile->SetPrefService(prefs); |
449 | 450 |
450 PluginPrefsFactory::GetInstance()->ForceRegisterPrefsForTest(prefs); | 451 PluginPrefsFactory::GetInstance()->ForceRegisterPrefsForTest(prefs); |
451 | 452 |
452 profile_.reset(profile); | 453 profile_.reset(profile); |
453 | 454 |
454 service_ = profile->CreateExtensionService( | 455 service_ = static_cast<TestExtensionSystem*>( |
455 CommandLine::ForCurrentProcess(), | 456 ExtensionSystemFactory::GetForProfile(profile))->CreateExtensionService( |
456 extensions_install_dir, | 457 CommandLine::ForCurrentProcess(), |
457 autoupdate_enabled); | 458 extensions_install_dir, |
| 459 autoupdate_enabled); |
458 service_->set_extensions_enabled(true); | 460 service_->set_extensions_enabled(true); |
459 service_->set_show_extensions_prompts(false); | 461 service_->set_show_extensions_prompts(false); |
460 profile->set_extensions_service(service_); | |
461 | 462 |
462 // When we start up, we want to make sure there is no external provider, | 463 // When we start up, we want to make sure there is no external provider, |
463 // since the ExtensionService on Windows will use the Registry as a default | 464 // since the ExtensionService on Windows will use the Registry as a default |
464 // provider and if there is something already registered there then it will | 465 // provider and if there is something already registered there then it will |
465 // interfere with the tests. Those tests that need an external provider | 466 // interfere with the tests. Those tests that need an external provider |
466 // will register one specifically. | 467 // will register one specifically. |
467 service_->ClearProvidersForTesting(); | 468 service_->ClearProvidersForTesting(); |
468 | 469 |
469 expected_extensions_count_ = 0; | 470 expected_extensions_count_ = 0; |
470 } | 471 } |
(...skipping 13 matching lines...) Expand all Loading... |
484 file_util::CopyDirectory(source_install_dir, extensions_install_dir_, true); | 485 file_util::CopyDirectory(source_install_dir, extensions_install_dir_, true); |
485 | 486 |
486 InitializeExtensionService(temp_prefs, extensions_install_dir_, false); | 487 InitializeExtensionService(temp_prefs, extensions_install_dir_, false); |
487 } | 488 } |
488 | 489 |
489 void ExtensionServiceTestBase::InitializeEmptyExtensionService() { | 490 void ExtensionServiceTestBase::InitializeEmptyExtensionService() { |
490 InitializeExtensionServiceHelper(false); | 491 InitializeExtensionServiceHelper(false); |
491 } | 492 } |
492 | 493 |
493 void ExtensionServiceTestBase::InitializeExtensionProcessManager() { | 494 void ExtensionServiceTestBase::InitializeExtensionProcessManager() { |
494 profile_->CreateExtensionProcessManager(); | 495 static_cast<TestExtensionSystem*>( |
| 496 ExtensionSystemFactory::GetForProfile(profile_.get()))-> |
| 497 CreateExtensionProcessManager(); |
495 } | 498 } |
496 | 499 |
497 void ExtensionServiceTestBase::InitializeExtensionServiceWithUpdater() { | 500 void ExtensionServiceTestBase::InitializeExtensionServiceWithUpdater() { |
498 InitializeExtensionServiceHelper(true); | 501 InitializeExtensionServiceHelper(true); |
499 service_->updater()->Start(); | 502 service_->updater()->Start(); |
500 } | 503 } |
501 | 504 |
502 void ExtensionServiceTestBase::InitializeExtensionServiceHelper( | 505 void ExtensionServiceTestBase::InitializeExtensionServiceHelper( |
503 bool autoupdate_enabled) { | 506 bool autoupdate_enabled) { |
504 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); | 507 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); |
(...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
759 int expected_installed_extension_count = | 762 int expected_installed_extension_count = |
760 (expected_state >= INSTALLED) ? 1 : 0; | 763 (expected_state >= INSTALLED) ? 1 : 0; |
761 int expected_enabled_extension_count = | 764 int expected_enabled_extension_count = |
762 (expected_state >= ENABLED) ? 1 : 0; | 765 (expected_state >= ENABLED) ? 1 : 0; |
763 EXPECT_EQ(expected_installed_extension_count, | 766 EXPECT_EQ(expected_installed_extension_count, |
764 installed_extension_count); | 767 installed_extension_count); |
765 EXPECT_EQ(expected_enabled_extension_count, | 768 EXPECT_EQ(expected_enabled_extension_count, |
766 enabled_extension_count); | 769 enabled_extension_count); |
767 } | 770 } |
768 | 771 |
769 // Update() should delete the temporary input file. | 772 // Update() should the temporary input file. |
770 EXPECT_FALSE(file_util::PathExists(path)); | 773 EXPECT_FALSE(file_util::PathExists(path)); |
771 } | 774 } |
772 | 775 |
773 void TerminateExtension(const std::string& id) { | 776 void TerminateExtension(const std::string& id) { |
774 const Extension* extension = service_->GetInstalledExtension(id); | 777 const Extension* extension = service_->GetInstalledExtension(id); |
775 if (!extension) { | 778 if (!extension) { |
776 ADD_FAILURE(); | 779 ADD_FAILURE(); |
777 return; | 780 return; |
778 } | 781 } |
779 service_->TrackTerminatedExtensionForTest(extension); | 782 service_->TrackTerminatedExtensionForTest(extension); |
(...skipping 3060 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3840 content::TestBrowserThread ui_thread(BrowserThread::UI, &loop); | 3843 content::TestBrowserThread ui_thread(BrowserThread::UI, &loop); |
3841 content::TestBrowserThread file_thread(BrowserThread::FILE, &loop); | 3844 content::TestBrowserThread file_thread(BrowserThread::FILE, &loop); |
3842 scoped_ptr<CommandLine> command_line; | 3845 scoped_ptr<CommandLine> command_line; |
3843 FilePath install_dir = profile->GetPath() | 3846 FilePath install_dir = profile->GetPath() |
3844 .AppendASCII(ExtensionService::kInstallDirectoryName); | 3847 .AppendASCII(ExtensionService::kInstallDirectoryName); |
3845 webkit::npapi::MockPluginList plugin_list(NULL, 0); | 3848 webkit::npapi::MockPluginList plugin_list(NULL, 0); |
3846 PluginService::GetInstance()->SetPluginListForTesting(&plugin_list); | 3849 PluginService::GetInstance()->SetPluginListForTesting(&plugin_list); |
3847 | 3850 |
3848 // By default, we are enabled. | 3851 // By default, we are enabled. |
3849 command_line.reset(new CommandLine(CommandLine::NO_PROGRAM)); | 3852 command_line.reset(new CommandLine(CommandLine::NO_PROGRAM)); |
3850 // Owned by |profile|. | 3853 ExtensionService* service = static_cast<TestExtensionSystem*>( |
3851 ExtensionService* service = | 3854 ExtensionSystemFactory::GetForProfile(profile.get()))-> |
3852 profile->CreateExtensionService(command_line.get(), | 3855 CreateExtensionService( |
3853 install_dir, | 3856 command_line.get(), |
3854 false); | 3857 install_dir, |
| 3858 false); |
3855 EXPECT_TRUE(service->extensions_enabled()); | 3859 EXPECT_TRUE(service->extensions_enabled()); |
3856 service->Init(); | 3860 service->Init(); |
3857 loop.RunAllPending(); | 3861 loop.RunAllPending(); |
3858 EXPECT_TRUE(recorder.ready()); | 3862 EXPECT_TRUE(recorder.ready()); |
3859 | 3863 |
3860 // If either the command line or pref is set, we are disabled. | 3864 // If either the command line or pref is set, we are disabled. |
3861 recorder.set_ready(false); | 3865 recorder.set_ready(false); |
3862 profile.reset(new TestingProfile()); | 3866 profile.reset(new TestingProfile()); |
3863 command_line->AppendSwitch(switches::kDisableExtensions); | 3867 command_line->AppendSwitch(switches::kDisableExtensions); |
3864 service = profile->CreateExtensionService(command_line.get(), | 3868 service = static_cast<TestExtensionSystem*>( |
3865 install_dir, | 3869 ExtensionSystemFactory::GetForProfile(profile.get()))-> |
3866 false); | 3870 CreateExtensionService( |
| 3871 command_line.get(), |
| 3872 install_dir, |
| 3873 false); |
3867 EXPECT_FALSE(service->extensions_enabled()); | 3874 EXPECT_FALSE(service->extensions_enabled()); |
3868 service->Init(); | 3875 service->Init(); |
3869 loop.RunAllPending(); | 3876 loop.RunAllPending(); |
3870 EXPECT_TRUE(recorder.ready()); | 3877 EXPECT_TRUE(recorder.ready()); |
3871 | 3878 |
3872 recorder.set_ready(false); | 3879 recorder.set_ready(false); |
3873 profile.reset(new TestingProfile()); | 3880 profile.reset(new TestingProfile()); |
3874 profile->GetPrefs()->SetBoolean(prefs::kDisableExtensions, true); | 3881 profile->GetPrefs()->SetBoolean(prefs::kDisableExtensions, true); |
3875 service = profile->CreateExtensionService(command_line.get(), | 3882 service = static_cast<TestExtensionSystem*>( |
3876 install_dir, | 3883 ExtensionSystemFactory::GetForProfile(profile.get()))-> |
3877 false); | 3884 CreateExtensionService( |
| 3885 command_line.get(), |
| 3886 install_dir, |
| 3887 false); |
3878 EXPECT_FALSE(service->extensions_enabled()); | 3888 EXPECT_FALSE(service->extensions_enabled()); |
3879 service->Init(); | 3889 service->Init(); |
3880 loop.RunAllPending(); | 3890 loop.RunAllPending(); |
3881 EXPECT_TRUE(recorder.ready()); | 3891 EXPECT_TRUE(recorder.ready()); |
3882 | 3892 |
3883 recorder.set_ready(false); | 3893 recorder.set_ready(false); |
3884 profile.reset(new TestingProfile()); | 3894 profile.reset(new TestingProfile()); |
3885 profile->GetPrefs()->SetBoolean(prefs::kDisableExtensions, true); | 3895 profile->GetPrefs()->SetBoolean(prefs::kDisableExtensions, true); |
3886 command_line.reset(new CommandLine(CommandLine::NO_PROGRAM)); | 3896 command_line.reset(new CommandLine(CommandLine::NO_PROGRAM)); |
3887 service = profile->CreateExtensionService(command_line.get(), | 3897 service = static_cast<TestExtensionSystem*>( |
3888 install_dir, | 3898 ExtensionSystemFactory::GetForProfile(profile.get()))-> |
3889 false); | 3899 CreateExtensionService( |
| 3900 command_line.get(), |
| 3901 install_dir, |
| 3902 false); |
3890 EXPECT_FALSE(service->extensions_enabled()); | 3903 EXPECT_FALSE(service->extensions_enabled()); |
3891 service->Init(); | 3904 service->Init(); |
3892 loop.RunAllPending(); | 3905 loop.RunAllPending(); |
3893 EXPECT_TRUE(recorder.ready()); | 3906 EXPECT_TRUE(recorder.ready()); |
3894 | 3907 |
3895 // Explicitly delete all the resources used in this test. | 3908 // Explicitly delete all the resources used in this test. |
3896 profile.reset(); | 3909 profile.reset(); |
3897 service = NULL; | 3910 service = NULL; |
3898 } | 3911 } |
3899 | 3912 |
(...skipping 888 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4788 ASSERT_FALSE(AddPendingSyncInstall()); | 4801 ASSERT_FALSE(AddPendingSyncInstall()); |
4789 | 4802 |
4790 // Wait for the external source to install. | 4803 // Wait for the external source to install. |
4791 WaitForCrxInstall(crx_path_, INSTALL_NEW); | 4804 WaitForCrxInstall(crx_path_, INSTALL_NEW); |
4792 ASSERT_TRUE(IsCrxInstalled()); | 4805 ASSERT_TRUE(IsCrxInstalled()); |
4793 | 4806 |
4794 // Now that the extension is installed, sync request should fail | 4807 // Now that the extension is installed, sync request should fail |
4795 // because the extension is already installed. | 4808 // because the extension is already installed. |
4796 ASSERT_FALSE(AddPendingSyncInstall()); | 4809 ASSERT_FALSE(AddPendingSyncInstall()); |
4797 } | 4810 } |
OLD | NEW |