Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(740)

Side by Side Diff: chrome/browser/extensions/extension_service_unittest.cc

Issue 9369013: Take extensions out of Profile into a profile-keyed service, ExtensionSystem. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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
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
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
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
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
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698