| 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 |