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/extensions/extension_service_unittest.h" | |
6 | |
7 #include <algorithm> | 5 #include <algorithm> |
8 #include <set> | 6 #include <set> |
9 #include <vector> | 7 #include <vector> |
10 | 8 |
11 #include "base/at_exit.h" | 9 #include "base/at_exit.h" |
12 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
13 #include "base/bind.h" | 11 #include "base/bind.h" |
14 #include "base/command_line.h" | 12 #include "base/command_line.h" |
15 #include "base/file_util.h" | 13 #include "base/file_util.h" |
16 #include "base/files/file_enumerator.h" | 14 #include "base/files/file_enumerator.h" |
17 #include "base/files/scoped_temp_dir.h" | 15 #include "base/files/scoped_temp_dir.h" |
18 #include "base/json/json_file_value_serializer.h" | 16 #include "base/json/json_file_value_serializer.h" |
19 #include "base/json/json_reader.h" | 17 #include "base/json/json_reader.h" |
20 #include "base/json/json_string_value_serializer.h" | 18 #include "base/json/json_string_value_serializer.h" |
21 #include "base/memory/scoped_ptr.h" | 19 #include "base/memory/scoped_ptr.h" |
22 #include "base/memory/weak_ptr.h" | 20 #include "base/memory/weak_ptr.h" |
23 #include "base/message_loop/message_loop.h" | 21 #include "base/message_loop/message_loop.h" |
24 #include "base/path_service.h" | |
25 #include "base/prefs/scoped_user_pref_update.h" | 22 #include "base/prefs/scoped_user_pref_update.h" |
26 #include "base/stl_util.h" | 23 #include "base/stl_util.h" |
27 #include "base/strings/string16.h" | 24 #include "base/strings/string16.h" |
28 #include "base/strings/string_number_conversions.h" | 25 #include "base/strings/string_number_conversions.h" |
29 #include "base/strings/string_util.h" | 26 #include "base/strings/string_util.h" |
30 #include "base/strings/utf_string_conversions.h" | 27 #include "base/strings/utf_string_conversions.h" |
31 #include "base/version.h" | 28 #include "base/version.h" |
32 #include "chrome/browser/browser_process.h" | 29 #include "chrome/browser/browser_process.h" |
33 #include "chrome/browser/chrome_notification_types.h" | 30 #include "chrome/browser/chrome_notification_types.h" |
34 #include "chrome/browser/extensions/app_sync_data.h" | 31 #include "chrome/browser/extensions/app_sync_data.h" |
35 #include "chrome/browser/extensions/blacklist.h" | 32 #include "chrome/browser/extensions/blacklist.h" |
36 #include "chrome/browser/extensions/chrome_app_sorting.h" | 33 #include "chrome/browser/extensions/chrome_app_sorting.h" |
37 #include "chrome/browser/extensions/component_loader.h" | 34 #include "chrome/browser/extensions/component_loader.h" |
38 #include "chrome/browser/extensions/crx_installer.h" | 35 #include "chrome/browser/extensions/crx_installer.h" |
39 #include "chrome/browser/extensions/default_apps.h" | 36 #include "chrome/browser/extensions/default_apps.h" |
40 #include "chrome/browser/extensions/extension_creator.h" | 37 #include "chrome/browser/extensions/extension_creator.h" |
41 #include "chrome/browser/extensions/extension_error_reporter.h" | 38 #include "chrome/browser/extensions/extension_error_reporter.h" |
42 #include "chrome/browser/extensions/extension_error_ui.h" | 39 #include "chrome/browser/extensions/extension_error_ui.h" |
43 #include "chrome/browser/extensions/extension_garbage_collector_factory.h" | |
44 #include "chrome/browser/extensions/extension_notification_observer.h" | 40 #include "chrome/browser/extensions/extension_notification_observer.h" |
45 #include "chrome/browser/extensions/extension_service.h" | 41 #include "chrome/browser/extensions/extension_service.h" |
| 42 #include "chrome/browser/extensions/extension_service_test_base.h" |
46 #include "chrome/browser/extensions/extension_special_storage_policy.h" | 43 #include "chrome/browser/extensions/extension_special_storage_policy.h" |
47 #include "chrome/browser/extensions/extension_sync_data.h" | 44 #include "chrome/browser/extensions/extension_sync_data.h" |
48 #include "chrome/browser/extensions/extension_sync_service.h" | 45 #include "chrome/browser/extensions/extension_sync_service.h" |
49 #include "chrome/browser/extensions/extension_util.h" | 46 #include "chrome/browser/extensions/extension_util.h" |
50 #include "chrome/browser/extensions/external_install_ui.h" | 47 #include "chrome/browser/extensions/external_install_ui.h" |
51 #include "chrome/browser/extensions/external_policy_loader.h" | 48 #include "chrome/browser/extensions/external_policy_loader.h" |
52 #include "chrome/browser/extensions/external_pref_loader.h" | 49 #include "chrome/browser/extensions/external_pref_loader.h" |
53 #include "chrome/browser/extensions/external_provider_impl.h" | 50 #include "chrome/browser/extensions/external_provider_impl.h" |
54 #include "chrome/browser/extensions/fake_safe_browsing_database_manager.h" | 51 #include "chrome/browser/extensions/fake_safe_browsing_database_manager.h" |
55 #include "chrome/browser/extensions/installed_loader.h" | 52 #include "chrome/browser/extensions/installed_loader.h" |
56 #include "chrome/browser/extensions/pack_extension_job.h" | 53 #include "chrome/browser/extensions/pack_extension_job.h" |
57 #include "chrome/browser/extensions/pending_extension_info.h" | 54 #include "chrome/browser/extensions/pending_extension_info.h" |
58 #include "chrome/browser/extensions/pending_extension_manager.h" | 55 #include "chrome/browser/extensions/pending_extension_manager.h" |
59 #include "chrome/browser/extensions/test_blacklist.h" | 56 #include "chrome/browser/extensions/test_blacklist.h" |
60 #include "chrome/browser/extensions/test_extension_system.h" | 57 #include "chrome/browser/extensions/test_extension_system.h" |
61 #include "chrome/browser/extensions/unpacked_installer.h" | 58 #include "chrome/browser/extensions/unpacked_installer.h" |
62 #include "chrome/browser/extensions/updater/extension_updater.h" | 59 #include "chrome/browser/extensions/updater/extension_updater.h" |
63 #include "chrome/browser/prefs/browser_prefs.h" | |
64 #include "chrome/browser/prefs/pref_service_mock_factory.h" | |
65 #include "chrome/browser/prefs/pref_service_syncable.h" | 60 #include "chrome/browser/prefs/pref_service_syncable.h" |
66 #include "chrome/browser/sync/profile_sync_service.h" | 61 #include "chrome/browser/sync/profile_sync_service.h" |
67 #include "chrome/browser/sync/profile_sync_service_factory.h" | 62 #include "chrome/browser/sync/profile_sync_service_factory.h" |
68 #include "chrome/common/chrome_constants.h" | 63 #include "chrome/common/chrome_constants.h" |
69 #include "chrome/common/chrome_paths.h" | |
70 #include "chrome/common/chrome_switches.h" | 64 #include "chrome/common/chrome_switches.h" |
71 #include "chrome/common/extensions/api/plugins/plugins_handler.h" | 65 #include "chrome/common/extensions/api/plugins/plugins_handler.h" |
72 #include "chrome/common/extensions/manifest_handlers/app_launch_info.h" | 66 #include "chrome/common/extensions/manifest_handlers/app_launch_info.h" |
73 #include "chrome/common/extensions/manifest_handlers/content_scripts_handler.h" | 67 #include "chrome/common/extensions/manifest_handlers/content_scripts_handler.h" |
74 #include "chrome/common/extensions/manifest_url_handler.h" | 68 #include "chrome/common/extensions/manifest_url_handler.h" |
75 #include "chrome/common/pref_names.h" | 69 #include "chrome/common/pref_names.h" |
76 #include "chrome/common/url_constants.h" | 70 #include "chrome/common/url_constants.h" |
77 #include "chrome/test/base/scoped_browser_locale.h" | 71 #include "chrome/test/base/scoped_browser_locale.h" |
78 #include "chrome/test/base/testing_profile.h" | 72 #include "chrome/test/base/testing_profile.h" |
79 #include "components/pref_registry/pref_registry_syncable.h" | 73 #include "components/pref_registry/pref_registry_syncable.h" |
(...skipping 11 matching lines...) Expand all Loading... |
91 #include "extensions/browser/extension_system.h" | 85 #include "extensions/browser/extension_system.h" |
92 #include "extensions/browser/external_provider_interface.h" | 86 #include "extensions/browser/external_provider_interface.h" |
93 #include "extensions/browser/management_policy.h" | 87 #include "extensions/browser/management_policy.h" |
94 #include "extensions/browser/pref_names.h" | 88 #include "extensions/browser/pref_names.h" |
95 #include "extensions/browser/test_management_policy.h" | 89 #include "extensions/browser/test_management_policy.h" |
96 #include "extensions/common/constants.h" | 90 #include "extensions/common/constants.h" |
97 #include "extensions/common/extension.h" | 91 #include "extensions/common/extension.h" |
98 #include "extensions/common/extension_builder.h" | 92 #include "extensions/common/extension_builder.h" |
99 #include "extensions/common/extension_l10n_util.h" | 93 #include "extensions/common/extension_l10n_util.h" |
100 #include "extensions/common/extension_resource.h" | 94 #include "extensions/common/extension_resource.h" |
| 95 #include "extensions/common/feature_switch.h" |
101 #include "extensions/common/manifest_constants.h" | 96 #include "extensions/common/manifest_constants.h" |
102 #include "extensions/common/manifest_handlers/background_info.h" | 97 #include "extensions/common/manifest_handlers/background_info.h" |
103 #include "extensions/common/permissions/permission_set.h" | 98 #include "extensions/common/permissions/permission_set.h" |
104 #include "extensions/common/permissions/permissions_data.h" | 99 #include "extensions/common/permissions/permissions_data.h" |
105 #include "extensions/common/switches.h" | 100 #include "extensions/common/switches.h" |
106 #include "extensions/common/url_pattern.h" | 101 #include "extensions/common/url_pattern.h" |
107 #include "extensions/common/value_builder.h" | 102 #include "extensions/common/value_builder.h" |
108 #include "gpu/config/gpu_info.h" | 103 #include "gpu/config/gpu_info.h" |
109 #include "grit/browser_resources.h" | 104 #include "grit/browser_resources.h" |
110 #include "net/cookies/canonical_cookie.h" | 105 #include "net/cookies/canonical_cookie.h" |
(...skipping 11 matching lines...) Expand all Loading... |
122 #include "sync/protocol/extension_specifics.pb.h" | 117 #include "sync/protocol/extension_specifics.pb.h" |
123 #include "sync/protocol/sync.pb.h" | 118 #include "sync/protocol/sync.pb.h" |
124 #include "testing/gtest/include/gtest/gtest.h" | 119 #include "testing/gtest/include/gtest/gtest.h" |
125 #include "testing/platform_test.h" | 120 #include "testing/platform_test.h" |
126 #include "url/gurl.h" | 121 #include "url/gurl.h" |
127 #include "webkit/browser/database/database_tracker.h" | 122 #include "webkit/browser/database/database_tracker.h" |
128 #include "webkit/browser/quota/quota_manager.h" | 123 #include "webkit/browser/quota/quota_manager.h" |
129 #include "webkit/common/database/database_identifier.h" | 124 #include "webkit/common/database/database_identifier.h" |
130 | 125 |
131 #if defined(OS_CHROMEOS) | 126 #if defined(OS_CHROMEOS) |
132 #include "chrome/browser/chromeos/extensions/install_limiter.h" | |
133 #include "chrome/browser/chromeos/login/users/user_manager.h" | 127 #include "chrome/browser/chromeos/login/users/user_manager.h" |
134 #include "chrome/browser/chromeos/settings/cros_settings.h" | 128 #include "chrome/browser/chromeos/settings/cros_settings.h" |
135 #include "chrome/browser/chromeos/settings/device_settings_service.h" | 129 #include "chrome/browser/chromeos/settings/device_settings_service.h" |
136 #endif | 130 #endif |
137 | 131 |
138 // The blacklist tests rely on safe browsing. | 132 // The blacklist tests rely on safe browsing. |
139 #if defined(FULL_SAFE_BROWSING) || defined(MOBILE_SAFE_BROWSING) | 133 #if defined(FULL_SAFE_BROWSING) || defined(MOBILE_SAFE_BROWSING) |
140 #define ENABLE_BLACKLIST_TESTS | 134 #define ENABLE_BLACKLIST_TESTS |
141 #endif | 135 #endif |
142 | 136 |
(...skipping 311 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
454 int ids_found_; | 448 int ids_found_; |
455 base::FilePath fake_base_path_; | 449 base::FilePath fake_base_path_; |
456 int expected_creation_flags_; | 450 int expected_creation_flags_; |
457 scoped_ptr<extensions::ExternalProviderImpl> provider_; | 451 scoped_ptr<extensions::ExternalProviderImpl> provider_; |
458 scoped_ptr<base::DictionaryValue> prefs_; | 452 scoped_ptr<base::DictionaryValue> prefs_; |
459 scoped_ptr<TestingProfile> profile_; | 453 scoped_ptr<TestingProfile> profile_; |
460 | 454 |
461 DISALLOW_COPY_AND_ASSIGN(MockProviderVisitor); | 455 DISALLOW_COPY_AND_ASSIGN(MockProviderVisitor); |
462 }; | 456 }; |
463 | 457 |
464 ExtensionServiceTestBase::ExtensionServiceInitParams:: | 458 class ExtensionServiceTest : public extensions::ExtensionServiceTestBase, |
465 ExtensionServiceInitParams() | 459 public content::NotificationObserver { |
466 : autoupdate_enabled(false), is_first_run(true), profile_is_managed(false) { | |
467 } | |
468 | |
469 // Our message loop may be used in tests which require it to be an IO loop. | |
470 ExtensionServiceTestBase::ExtensionServiceTestBase() | |
471 : thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP), | |
472 service_(NULL), | |
473 management_policy_(NULL), | |
474 expected_extensions_count_(0), | |
475 registry_(NULL) { | |
476 base::FilePath test_data_dir; | |
477 if (!PathService::Get(chrome::DIR_TEST_DATA, &test_data_dir)) { | |
478 ADD_FAILURE(); | |
479 return; | |
480 } | |
481 data_dir_ = test_data_dir.AppendASCII("extensions"); | |
482 } | |
483 | |
484 ExtensionServiceTestBase::~ExtensionServiceTestBase() { | |
485 service_ = NULL; | |
486 } | |
487 | |
488 void ExtensionServiceTestBase::InitializeExtensionService( | |
489 const ExtensionServiceTestBase::ExtensionServiceInitParams& params) { | |
490 profile_ = CreateTestingProfile(params); | |
491 service_ = InitializeExtensionServiceForProfile(params, profile_.get()); | |
492 management_policy_ = | |
493 ExtensionSystem::Get(profile_.get())->management_policy(); | |
494 extensions_install_dir_ = params.extensions_install_dir; | |
495 expected_extensions_count_ = 0; | |
496 registry_ = extensions::ExtensionRegistry::Get(profile_.get()); | |
497 extensions::ExtensionGarbageCollectorFactory::GetInstance() | |
498 ->SetTestingFactoryAndUse( | |
499 profile_.get(), | |
500 &extensions::ExtensionGarbageCollectorFactory::BuildInstanceFor); | |
501 } | |
502 | |
503 // static | |
504 scoped_ptr<TestingProfile> ExtensionServiceTestBase::CreateTestingProfile( | |
505 const ExtensionServiceInitParams& params) { | |
506 TestingProfile::Builder profile_builder; | |
507 // Create a PrefService that only contains user defined preference values. | |
508 PrefServiceMockFactory factory; | |
509 // If pref_file is empty, TestingProfile automatically creates | |
510 // TestingPrefServiceSyncable instance. | |
511 if (!params.pref_file.empty()) { | |
512 factory.SetUserPrefsFile(params.pref_file, | |
513 base::MessageLoopProxy::current().get()); | |
514 scoped_refptr<user_prefs::PrefRegistrySyncable> registry( | |
515 new user_prefs::PrefRegistrySyncable); | |
516 scoped_ptr<PrefServiceSyncable> prefs( | |
517 factory.CreateSyncable(registry.get())); | |
518 chrome::RegisterUserProfilePrefs(registry.get()); | |
519 profile_builder.SetPrefService(prefs.Pass()); | |
520 } | |
521 | |
522 if (params.profile_is_managed) | |
523 profile_builder.SetManagedUserId("asdf"); | |
524 | |
525 profile_builder.SetPath(params.profile_path); | |
526 return profile_builder.Build(); | |
527 } | |
528 | |
529 // static | |
530 ExtensionService* | |
531 ExtensionServiceTestBase::InitializeExtensionServiceForProfile( | |
532 const ExtensionServiceInitParams& params, | |
533 Profile* profile) { | |
534 TestExtensionSystem* system = static_cast<TestExtensionSystem*>( | |
535 ExtensionSystem::Get(profile)); | |
536 if (!params.is_first_run) { | |
537 ExtensionPrefs* prefs = system->CreateExtensionPrefs( | |
538 CommandLine::ForCurrentProcess(), | |
539 params.extensions_install_dir); | |
540 prefs->SetAlertSystemFirstRun(); | |
541 } | |
542 | |
543 ExtensionService* service = system->CreateExtensionService( | |
544 CommandLine::ForCurrentProcess(), | |
545 params.extensions_install_dir, | |
546 params.autoupdate_enabled); | |
547 | |
548 service->SetFileTaskRunnerForTesting( | |
549 base::MessageLoopProxy::current().get()); | |
550 service->set_extensions_enabled(true); | |
551 service->set_show_extensions_prompts(false); | |
552 service->set_install_updates_when_idle_for_test(false); | |
553 | |
554 // When we start up, we want to make sure there is no external provider, | |
555 // since the ExtensionService on Windows will use the Registry as a default | |
556 // provider and if there is something already registered there then it will | |
557 // interfere with the tests. Those tests that need an external provider | |
558 // will register one specifically. | |
559 service->ClearProvidersForTesting(); | |
560 | |
561 #if defined(OS_CHROMEOS) | |
562 extensions::InstallLimiter::Get(profile)->DisableForTest(); | |
563 #endif | |
564 return service; | |
565 } | |
566 | |
567 void ExtensionServiceTestBase::InitializeInstalledExtensionService( | |
568 const base::FilePath& prefs_file, | |
569 const base::FilePath& source_install_dir) { | |
570 EXPECT_TRUE(temp_dir_.CreateUniqueTempDir()); | |
571 base::FilePath path = temp_dir_.path(); | |
572 path = path.Append(FILE_PATH_LITERAL("TestingExtensionsPath")); | |
573 EXPECT_TRUE(base::DeleteFile(path, true)); | |
574 base::File::Error error = base::File::FILE_OK; | |
575 EXPECT_TRUE(base::CreateDirectoryAndGetError(path, &error)) << error; | |
576 base::FilePath temp_prefs = path.Append(chrome::kPreferencesFilename); | |
577 EXPECT_TRUE(base::CopyFile(prefs_file, temp_prefs)); | |
578 | |
579 base::FilePath extensions_install_dir = | |
580 path.Append(FILE_PATH_LITERAL("Extensions")); | |
581 EXPECT_TRUE(base::DeleteFile(extensions_install_dir, true)); | |
582 EXPECT_TRUE( | |
583 base::CopyDirectory(source_install_dir, extensions_install_dir, true)); | |
584 | |
585 ExtensionServiceInitParams params; | |
586 params.profile_path = path; | |
587 params.pref_file = temp_prefs; | |
588 params.extensions_install_dir = extensions_install_dir; | |
589 InitializeExtensionService(params); | |
590 } | |
591 | |
592 void ExtensionServiceTestBase::InitializeGoodInstalledExtensionService() { | |
593 base::FilePath source_install_dir = data_dir_ | |
594 .AppendASCII("good") | |
595 .AppendASCII("Extensions"); | |
596 base::FilePath pref_path = | |
597 source_install_dir.DirName().Append(chrome::kPreferencesFilename); | |
598 InitializeInstalledExtensionService(pref_path, source_install_dir); | |
599 } | |
600 | |
601 void ExtensionServiceTestBase::InitializeEmptyExtensionService() { | |
602 InitializeExtensionService(CreateDefaultInitParams()); | |
603 } | |
604 | |
605 void ExtensionServiceTestBase::InitializeProcessManager() { | |
606 static_cast<extensions::TestExtensionSystem*>( | |
607 ExtensionSystem::Get(profile_.get()))-> | |
608 CreateProcessManager(); | |
609 } | |
610 | |
611 void ExtensionServiceTestBase::InitializeExtensionServiceWithUpdater() { | |
612 ExtensionServiceInitParams params = CreateDefaultInitParams(); | |
613 params.autoupdate_enabled = true; | |
614 InitializeExtensionService(params); | |
615 service_->updater()->Start(); | |
616 } | |
617 | |
618 void ExtensionServiceTestBase::InitializeExtensionSyncService() { | |
619 extension_sync_service_.reset(new ExtensionSyncService( | |
620 profile_.get(), ExtensionPrefs::Get(profile_.get()), service_)); | |
621 } | |
622 | |
623 // static | |
624 void ExtensionServiceTestBase::SetUpTestCase() { | |
625 ExtensionErrorReporter::Init(false); // no noisy errors | |
626 } | |
627 | |
628 void ExtensionServiceTestBase::SetUp() { | |
629 ExtensionErrorReporter::GetInstance()->ClearErrors(); | |
630 } | |
631 | |
632 void ExtensionServiceTestBase::TearDown() { | |
633 } | |
634 | |
635 ExtensionServiceTestBase::ExtensionServiceInitParams | |
636 ExtensionServiceTestBase::CreateDefaultInitParams() { | |
637 return CreateDefaultInitParamsInTempDir(&temp_dir_); | |
638 } | |
639 | |
640 // static | |
641 ExtensionServiceTestBase::ExtensionServiceInitParams | |
642 ExtensionServiceTestBase::CreateDefaultInitParamsInTempDir( | |
643 base::ScopedTempDir* temp_dir) { | |
644 ExtensionServiceInitParams params; | |
645 EXPECT_TRUE(temp_dir->CreateUniqueTempDir()); | |
646 base::FilePath path = temp_dir->path(); | |
647 path = path.Append(FILE_PATH_LITERAL("TestingExtensionsPath")); | |
648 EXPECT_TRUE(base::DeleteFile(path, true)); | |
649 base::File::Error error = base::File::FILE_OK; | |
650 EXPECT_TRUE(base::CreateDirectoryAndGetError(path, &error)) << error; | |
651 base::FilePath prefs_filename = | |
652 path.Append(FILE_PATH_LITERAL("TestPreferences")); | |
653 base::FilePath extensions_install_dir = | |
654 path.Append(FILE_PATH_LITERAL("Extensions")); | |
655 EXPECT_TRUE(base::DeleteFile(extensions_install_dir, true)); | |
656 EXPECT_TRUE(base::CreateDirectoryAndGetError(extensions_install_dir, | |
657 &error)) << error; | |
658 | |
659 params.profile_path = path; | |
660 params.pref_file = prefs_filename; | |
661 params.extensions_install_dir = extensions_install_dir; | |
662 return params; | |
663 } | |
664 | |
665 class ExtensionServiceTest | |
666 : public ExtensionServiceTestBase, public content::NotificationObserver { | |
667 public: | 460 public: |
668 ExtensionServiceTest() | 461 ExtensionServiceTest() |
669 : unloaded_reason_(UnloadedExtensionInfo::REASON_UNDEFINED), | 462 : unloaded_reason_(UnloadedExtensionInfo::REASON_UNDEFINED), |
670 installed_(NULL), | 463 installed_(NULL), |
671 was_update_(false), | 464 was_update_(false), |
672 override_external_install_prompt_( | 465 override_external_install_prompt_( |
673 FeatureSwitch::prompt_for_external_extensions(), | 466 FeatureSwitch::prompt_for_external_extensions(), |
674 false) { | 467 false), |
| 468 expected_extensions_count_(0) { |
675 registrar_.Add(this, | 469 registrar_.Add(this, |
676 chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED, | 470 chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED, |
677 content::NotificationService::AllSources()); | 471 content::NotificationService::AllSources()); |
678 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED, | 472 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED, |
679 content::NotificationService::AllSources()); | 473 content::NotificationService::AllSources()); |
680 registrar_.Add(this, | 474 registrar_.Add(this, |
681 chrome::NOTIFICATION_EXTENSION_INSTALLED_DEPRECATED, | 475 chrome::NOTIFICATION_EXTENSION_INSTALLED_DEPRECATED, |
682 content::NotificationService::AllSources()); | 476 content::NotificationService::AllSources()); |
683 } | 477 } |
684 | 478 |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
721 break; | 515 break; |
722 } | 516 } |
723 | 517 |
724 default: | 518 default: |
725 DCHECK(false); | 519 DCHECK(false); |
726 } | 520 } |
727 } | 521 } |
728 | 522 |
729 void AddMockExternalProvider( | 523 void AddMockExternalProvider( |
730 extensions::ExternalProviderInterface* provider) { | 524 extensions::ExternalProviderInterface* provider) { |
731 service_->AddProviderForTesting(provider); | 525 service()->AddProviderForTesting(provider); |
732 } | 526 } |
733 | 527 |
734 void MockSyncStartFlare(bool* was_called, | 528 void MockSyncStartFlare(bool* was_called, |
735 syncer::ModelType* model_type_passed_in, | 529 syncer::ModelType* model_type_passed_in, |
736 syncer::ModelType model_type) { | 530 syncer::ModelType model_type) { |
737 *was_called = true; | 531 *was_called = true; |
738 *model_type_passed_in = model_type; | 532 *model_type_passed_in = model_type; |
739 } | 533 } |
740 | 534 |
741 protected: | 535 protected: |
742 // Paths to some of the fake extensions. | 536 // Paths to some of the fake extensions. |
743 base::FilePath good0_path() { | 537 base::FilePath good0_path() { |
744 return data_dir_.AppendASCII("good").AppendASCII("Extensions") | 538 return data_dir() |
745 .AppendASCII(good0).AppendASCII("1.0.0.0"); | 539 .AppendASCII("good") |
| 540 .AppendASCII("Extensions") |
| 541 .AppendASCII(good0) |
| 542 .AppendASCII("1.0.0.0"); |
746 } | 543 } |
747 | 544 |
748 base::FilePath good1_path() { | 545 base::FilePath good1_path() { |
749 return data_dir_.AppendASCII("good").AppendASCII("Extensions") | 546 return data_dir() |
750 .AppendASCII(good1).AppendASCII("2"); | 547 .AppendASCII("good") |
| 548 .AppendASCII("Extensions") |
| 549 .AppendASCII(good1) |
| 550 .AppendASCII("2"); |
751 } | 551 } |
752 | 552 |
753 base::FilePath good2_path() { | 553 base::FilePath good2_path() { |
754 return data_dir_.AppendASCII("good").AppendASCII("Extensions") | 554 return data_dir() |
755 .AppendASCII(good2).AppendASCII("1.0"); | 555 .AppendASCII("good") |
| 556 .AppendASCII("Extensions") |
| 557 .AppendASCII(good2) |
| 558 .AppendASCII("1.0"); |
756 } | 559 } |
757 | 560 |
758 void TestExternalProvider(MockExtensionProvider* provider, | 561 void TestExternalProvider(MockExtensionProvider* provider, |
759 Manifest::Location location); | 562 Manifest::Location location); |
760 | 563 |
761 void PackCRX(const base::FilePath& dir_path, | 564 void PackCRX(const base::FilePath& dir_path, |
762 const base::FilePath& pem_path, | 565 const base::FilePath& pem_path, |
763 const base::FilePath& crx_path) { | 566 const base::FilePath& crx_path) { |
764 // Use the existing pem key, if provided. | 567 // Use the existing pem key, if provided. |
765 base::FilePath pem_output_path; | 568 base::FilePath pem_output_path; |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
847 InstallCRXInternal(path, Extension::FROM_WEBSTORE); | 650 InstallCRXInternal(path, Extension::FROM_WEBSTORE); |
848 return VerifyCrxInstall(path, install_state); | 651 return VerifyCrxInstall(path, install_state); |
849 } | 652 } |
850 | 653 |
851 const Extension* InstallCRXWithLocation(const base::FilePath& crx_path, | 654 const Extension* InstallCRXWithLocation(const base::FilePath& crx_path, |
852 Manifest::Location install_location, | 655 Manifest::Location install_location, |
853 InstallState install_state) { | 656 InstallState install_state) { |
854 EXPECT_TRUE(base::PathExists(crx_path)) | 657 EXPECT_TRUE(base::PathExists(crx_path)) |
855 << "Path does not exist: "<< crx_path.value().c_str(); | 658 << "Path does not exist: "<< crx_path.value().c_str(); |
856 // no client (silent install) | 659 // no client (silent install) |
857 scoped_refptr<CrxInstaller> installer(CrxInstaller::CreateSilent(service_)); | 660 scoped_refptr<CrxInstaller> installer( |
| 661 CrxInstaller::CreateSilent(service())); |
858 installer->set_install_source(install_location); | 662 installer->set_install_source(install_location); |
859 | 663 |
860 content::WindowedNotificationObserver observer( | 664 content::WindowedNotificationObserver observer( |
861 chrome::NOTIFICATION_CRX_INSTALLER_DONE, | 665 chrome::NOTIFICATION_CRX_INSTALLER_DONE, |
862 content::NotificationService::AllSources()); | 666 content::NotificationService::AllSources()); |
863 installer->InstallCrx(crx_path); | 667 installer->InstallCrx(crx_path); |
864 observer.Wait(); | 668 observer.Wait(); |
865 | 669 |
866 return VerifyCrxInstall(crx_path, install_state); | 670 return VerifyCrxInstall(crx_path, install_state); |
867 } | 671 } |
(...skipping 27 matching lines...) Expand all Loading... |
895 << path.value(); | 699 << path.value(); |
896 // If INSTALL_UPDATED, old_name_ should match the given string. | 700 // If INSTALL_UPDATED, old_name_ should match the given string. |
897 if (install_state == INSTALL_UPDATED && !expected_old_name.empty()) | 701 if (install_state == INSTALL_UPDATED && !expected_old_name.empty()) |
898 EXPECT_EQ(expected_old_name, old_name_); | 702 EXPECT_EQ(expected_old_name, old_name_); |
899 EXPECT_EQ(0u, errors.size()) << path.value(); | 703 EXPECT_EQ(0u, errors.size()) << path.value(); |
900 | 704 |
901 if (install_state == INSTALL_WITHOUT_LOAD) { | 705 if (install_state == INSTALL_WITHOUT_LOAD) { |
902 EXPECT_EQ(0u, loaded_.size()) << path.value(); | 706 EXPECT_EQ(0u, loaded_.size()) << path.value(); |
903 } else { | 707 } else { |
904 EXPECT_EQ(1u, loaded_.size()) << path.value(); | 708 EXPECT_EQ(1u, loaded_.size()) << path.value(); |
905 size_t actual_extension_count = registry_->enabled_extensions().size() + | 709 size_t actual_extension_count = |
906 registry_->disabled_extensions().size(); | 710 registry()->enabled_extensions().size() + |
| 711 registry()->disabled_extensions().size(); |
907 EXPECT_EQ(expected_extensions_count_, actual_extension_count) << | 712 EXPECT_EQ(expected_extensions_count_, actual_extension_count) << |
908 path.value(); | 713 path.value(); |
909 extension = loaded_[0].get(); | 714 extension = loaded_[0].get(); |
910 EXPECT_TRUE(service_->GetExtensionById(extension->id(), false)) | 715 EXPECT_TRUE(service()->GetExtensionById(extension->id(), false)) |
911 << path.value(); | 716 << path.value(); |
912 } | 717 } |
913 | 718 |
914 for (std::vector<base::string16>::iterator err = errors.begin(); | 719 for (std::vector<base::string16>::iterator err = errors.begin(); |
915 err != errors.end(); ++err) { | 720 err != errors.end(); ++err) { |
916 LOG(ERROR) << *err; | 721 LOG(ERROR) << *err; |
917 } | 722 } |
918 } else { | 723 } else { |
919 EXPECT_FALSE(installed_) << path.value(); | 724 EXPECT_FALSE(installed_) << path.value(); |
920 EXPECT_EQ(0u, loaded_.size()) << path.value(); | 725 EXPECT_EQ(0u, loaded_.size()) << path.value(); |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
964 *installer; | 769 *installer; |
965 } | 770 } |
966 | 771 |
967 void UpdateExtension(const std::string& id, | 772 void UpdateExtension(const std::string& id, |
968 const base::FilePath& in_path, | 773 const base::FilePath& in_path, |
969 UpdateState expected_state) { | 774 UpdateState expected_state) { |
970 ASSERT_TRUE(base::PathExists(in_path)); | 775 ASSERT_TRUE(base::PathExists(in_path)); |
971 | 776 |
972 // We need to copy this to a temporary location because Update() will delete | 777 // We need to copy this to a temporary location because Update() will delete |
973 // it. | 778 // it. |
974 base::FilePath path = temp_dir_.path(); | 779 base::FilePath path = temp_dir().path(); |
975 path = path.Append(in_path.BaseName()); | 780 path = path.Append(in_path.BaseName()); |
976 ASSERT_TRUE(base::CopyFile(in_path, path)); | 781 ASSERT_TRUE(base::CopyFile(in_path, path)); |
977 | 782 |
978 int previous_enabled_extension_count = | 783 int previous_enabled_extension_count = |
979 registry_->enabled_extensions().size(); | 784 registry()->enabled_extensions().size(); |
980 int previous_installed_extension_count = | 785 int previous_installed_extension_count = |
981 previous_enabled_extension_count + | 786 previous_enabled_extension_count + |
982 registry_->disabled_extensions().size(); | 787 registry()->disabled_extensions().size(); |
983 | 788 |
984 extensions::CrxInstaller* installer = NULL; | 789 extensions::CrxInstaller* installer = NULL; |
985 content::WindowedNotificationObserver observer( | 790 content::WindowedNotificationObserver observer( |
986 chrome::NOTIFICATION_CRX_INSTALLER_DONE, | 791 chrome::NOTIFICATION_CRX_INSTALLER_DONE, |
987 base::Bind(&IsCrxInstallerDone, &installer)); | 792 base::Bind(&IsCrxInstallerDone, &installer)); |
988 service_->UpdateExtension(id, path, true, &installer); | 793 service()->UpdateExtension(id, path, true, &installer); |
989 | 794 |
990 if (installer) | 795 if (installer) |
991 observer.Wait(); | 796 observer.Wait(); |
992 else | 797 else |
993 base::RunLoop().RunUntilIdle(); | 798 base::RunLoop().RunUntilIdle(); |
994 | 799 |
995 std::vector<base::string16> errors = GetErrors(); | 800 std::vector<base::string16> errors = GetErrors(); |
996 int error_count = errors.size(); | 801 int error_count = errors.size(); |
997 int enabled_extension_count = registry_->enabled_extensions().size(); | 802 int enabled_extension_count = registry()->enabled_extensions().size(); |
998 int installed_extension_count = | 803 int installed_extension_count = |
999 enabled_extension_count + registry_->disabled_extensions().size(); | 804 enabled_extension_count + registry()->disabled_extensions().size(); |
1000 | 805 |
1001 int expected_error_count = (expected_state == FAILED) ? 1 : 0; | 806 int expected_error_count = (expected_state == FAILED) ? 1 : 0; |
1002 EXPECT_EQ(expected_error_count, error_count) << path.value(); | 807 EXPECT_EQ(expected_error_count, error_count) << path.value(); |
1003 | 808 |
1004 if (expected_state <= FAILED) { | 809 if (expected_state <= FAILED) { |
1005 EXPECT_EQ(previous_enabled_extension_count, | 810 EXPECT_EQ(previous_enabled_extension_count, |
1006 enabled_extension_count); | 811 enabled_extension_count); |
1007 EXPECT_EQ(previous_installed_extension_count, | 812 EXPECT_EQ(previous_installed_extension_count, |
1008 installed_extension_count); | 813 installed_extension_count); |
1009 } else { | 814 } else { |
1010 int expected_installed_extension_count = | 815 int expected_installed_extension_count = |
1011 (expected_state >= INSTALLED) ? 1 : 0; | 816 (expected_state >= INSTALLED) ? 1 : 0; |
1012 int expected_enabled_extension_count = | 817 int expected_enabled_extension_count = |
1013 (expected_state >= ENABLED) ? 1 : 0; | 818 (expected_state >= ENABLED) ? 1 : 0; |
1014 EXPECT_EQ(expected_installed_extension_count, | 819 EXPECT_EQ(expected_installed_extension_count, |
1015 installed_extension_count); | 820 installed_extension_count); |
1016 EXPECT_EQ(expected_enabled_extension_count, | 821 EXPECT_EQ(expected_enabled_extension_count, |
1017 enabled_extension_count); | 822 enabled_extension_count); |
1018 } | 823 } |
1019 | 824 |
1020 // Update() should the temporary input file. | 825 // Update() should the temporary input file. |
1021 EXPECT_FALSE(base::PathExists(path)); | 826 EXPECT_FALSE(base::PathExists(path)); |
1022 } | 827 } |
1023 | 828 |
1024 void TerminateExtension(const std::string& id) { | 829 void TerminateExtension(const std::string& id) { |
1025 const Extension* extension = service_->GetInstalledExtension(id); | 830 const Extension* extension = service()->GetInstalledExtension(id); |
1026 if (!extension) { | 831 if (!extension) { |
1027 ADD_FAILURE(); | 832 ADD_FAILURE(); |
1028 return; | 833 return; |
1029 } | 834 } |
1030 service_->TrackTerminatedExtensionForTest(extension); | 835 service()->TrackTerminatedExtensionForTest(extension); |
1031 } | 836 } |
1032 | 837 |
1033 size_t GetPrefKeyCount() { | 838 size_t GetPrefKeyCount() { |
1034 const base::DictionaryValue* dict = | 839 const base::DictionaryValue* dict = |
1035 profile_->GetPrefs()->GetDictionary("extensions.settings"); | 840 profile()->GetPrefs()->GetDictionary("extensions.settings"); |
1036 if (!dict) { | 841 if (!dict) { |
1037 ADD_FAILURE(); | 842 ADD_FAILURE(); |
1038 return 0; | 843 return 0; |
1039 } | 844 } |
1040 return dict->size(); | 845 return dict->size(); |
1041 } | 846 } |
1042 | 847 |
1043 void UninstallExtension(const std::string& id, bool use_helper) { | 848 void UninstallExtension(const std::string& id, bool use_helper) { |
1044 // Verify that the extension is installed. | 849 // Verify that the extension is installed. |
1045 base::FilePath extension_path = extensions_install_dir_.AppendASCII(id); | 850 base::FilePath extension_path = extensions_install_dir().AppendASCII(id); |
1046 EXPECT_TRUE(base::PathExists(extension_path)); | 851 EXPECT_TRUE(base::PathExists(extension_path)); |
1047 size_t pref_key_count = GetPrefKeyCount(); | 852 size_t pref_key_count = GetPrefKeyCount(); |
1048 EXPECT_GT(pref_key_count, 0u); | 853 EXPECT_GT(pref_key_count, 0u); |
1049 ValidateIntegerPref(id, "state", Extension::ENABLED); | 854 ValidateIntegerPref(id, "state", Extension::ENABLED); |
1050 | 855 |
1051 // Uninstall it. | 856 // Uninstall it. |
1052 if (use_helper) { | 857 if (use_helper) { |
1053 EXPECT_TRUE(ExtensionService::UninstallExtensionHelper(service_, id)); | 858 EXPECT_TRUE(ExtensionService::UninstallExtensionHelper(service(), id)); |
1054 } else { | 859 } else { |
1055 EXPECT_TRUE(service_->UninstallExtension(id, false, NULL)); | 860 EXPECT_TRUE(service()->UninstallExtension(id, false, NULL)); |
1056 } | 861 } |
1057 --expected_extensions_count_; | 862 --expected_extensions_count_; |
1058 | 863 |
1059 // We should get an unload notification. | 864 // We should get an unload notification. |
1060 EXPECT_FALSE(unloaded_id_.empty()); | 865 EXPECT_FALSE(unloaded_id_.empty()); |
1061 EXPECT_EQ(id, unloaded_id_); | 866 EXPECT_EQ(id, unloaded_id_); |
1062 | 867 |
1063 // Verify uninstalled state. | 868 // Verify uninstalled state. |
1064 size_t new_pref_key_count = GetPrefKeyCount(); | 869 size_t new_pref_key_count = GetPrefKeyCount(); |
1065 if (new_pref_key_count == pref_key_count) { | 870 if (new_pref_key_count == pref_key_count) { |
1066 ValidateIntegerPref(id, "location", | 871 ValidateIntegerPref(id, "location", |
1067 Extension::EXTERNAL_EXTENSION_UNINSTALLED); | 872 Extension::EXTERNAL_EXTENSION_UNINSTALLED); |
1068 } else { | 873 } else { |
1069 EXPECT_EQ(new_pref_key_count, pref_key_count - 1); | 874 EXPECT_EQ(new_pref_key_count, pref_key_count - 1); |
1070 } | 875 } |
1071 | 876 |
1072 // The extension should not be in the service anymore. | 877 // The extension should not be in the service anymore. |
1073 EXPECT_FALSE(service_->GetInstalledExtension(id)); | 878 EXPECT_FALSE(service()->GetInstalledExtension(id)); |
1074 base::RunLoop().RunUntilIdle(); | 879 base::RunLoop().RunUntilIdle(); |
1075 | 880 |
1076 // The directory should be gone. | 881 // The directory should be gone. |
1077 EXPECT_FALSE(base::PathExists(extension_path)); | 882 EXPECT_FALSE(base::PathExists(extension_path)); |
1078 } | 883 } |
1079 | 884 |
1080 void ValidatePrefKeyCount(size_t count) { | 885 void ValidatePrefKeyCount(size_t count) { |
1081 EXPECT_EQ(count, GetPrefKeyCount()); | 886 EXPECT_EQ(count, GetPrefKeyCount()); |
1082 } | 887 } |
1083 | 888 |
1084 testing::AssertionResult ValidateBooleanPref( | 889 testing::AssertionResult ValidateBooleanPref( |
1085 const std::string& extension_id, | 890 const std::string& extension_id, |
1086 const std::string& pref_path, | 891 const std::string& pref_path, |
1087 bool expected_val) { | 892 bool expected_val) { |
1088 std::string msg = "while checking: "; | 893 std::string msg = "while checking: "; |
1089 msg += extension_id; | 894 msg += extension_id; |
1090 msg += " "; | 895 msg += " "; |
1091 msg += pref_path; | 896 msg += pref_path; |
1092 msg += " == "; | 897 msg += " == "; |
1093 msg += expected_val ? "true" : "false"; | 898 msg += expected_val ? "true" : "false"; |
1094 | 899 |
1095 PrefService* prefs = profile_->GetPrefs(); | 900 PrefService* prefs = profile()->GetPrefs(); |
1096 const base::DictionaryValue* dict = | 901 const base::DictionaryValue* dict = |
1097 prefs->GetDictionary("extensions.settings"); | 902 prefs->GetDictionary("extensions.settings"); |
1098 if (!dict) { | 903 if (!dict) { |
1099 return testing::AssertionFailure() | 904 return testing::AssertionFailure() |
1100 << "extension.settings does not exist " << msg; | 905 << "extension.settings does not exist " << msg; |
1101 } | 906 } |
1102 | 907 |
1103 const base::DictionaryValue* pref = NULL; | 908 const base::DictionaryValue* pref = NULL; |
1104 if (!dict->GetDictionary(extension_id, &pref)) { | 909 if (!dict->GetDictionary(extension_id, &pref)) { |
1105 return testing::AssertionFailure() | 910 return testing::AssertionFailure() |
1106 << "extension pref does not exist " << msg; | 911 << "extension pref does not exist " << msg; |
1107 } | 912 } |
1108 | 913 |
1109 bool val; | 914 bool val; |
1110 if (!pref->GetBoolean(pref_path, &val)) { | 915 if (!pref->GetBoolean(pref_path, &val)) { |
1111 return testing::AssertionFailure() | 916 return testing::AssertionFailure() |
1112 << pref_path << " pref not found " << msg; | 917 << pref_path << " pref not found " << msg; |
1113 } | 918 } |
1114 | 919 |
1115 return expected_val == val | 920 return expected_val == val |
1116 ? testing::AssertionSuccess() | 921 ? testing::AssertionSuccess() |
1117 : testing::AssertionFailure() << "base::Value is incorrect " << msg; | 922 : testing::AssertionFailure() << "base::Value is incorrect " << msg; |
1118 } | 923 } |
1119 | 924 |
1120 bool IsPrefExist(const std::string& extension_id, | 925 bool IsPrefExist(const std::string& extension_id, |
1121 const std::string& pref_path) { | 926 const std::string& pref_path) { |
1122 const base::DictionaryValue* dict = | 927 const base::DictionaryValue* dict = |
1123 profile_->GetPrefs()->GetDictionary("extensions.settings"); | 928 profile()->GetPrefs()->GetDictionary("extensions.settings"); |
1124 if (dict == NULL) return false; | 929 if (dict == NULL) return false; |
1125 const base::DictionaryValue* pref = NULL; | 930 const base::DictionaryValue* pref = NULL; |
1126 if (!dict->GetDictionary(extension_id, &pref)) { | 931 if (!dict->GetDictionary(extension_id, &pref)) { |
1127 return false; | 932 return false; |
1128 } | 933 } |
1129 if (pref == NULL) { | 934 if (pref == NULL) { |
1130 return false; | 935 return false; |
1131 } | 936 } |
1132 bool val; | 937 bool val; |
1133 if (!pref->GetBoolean(pref_path, &val)) { | 938 if (!pref->GetBoolean(pref_path, &val)) { |
1134 return false; | 939 return false; |
1135 } | 940 } |
1136 return true; | 941 return true; |
1137 } | 942 } |
1138 | 943 |
1139 void ValidateIntegerPref(const std::string& extension_id, | 944 void ValidateIntegerPref(const std::string& extension_id, |
1140 const std::string& pref_path, | 945 const std::string& pref_path, |
1141 int expected_val) { | 946 int expected_val) { |
1142 std::string msg = " while checking: "; | 947 std::string msg = " while checking: "; |
1143 msg += extension_id; | 948 msg += extension_id; |
1144 msg += " "; | 949 msg += " "; |
1145 msg += pref_path; | 950 msg += pref_path; |
1146 msg += " == "; | 951 msg += " == "; |
1147 msg += base::IntToString(expected_val); | 952 msg += base::IntToString(expected_val); |
1148 | 953 |
1149 PrefService* prefs = profile_->GetPrefs(); | 954 PrefService* prefs = profile()->GetPrefs(); |
1150 const base::DictionaryValue* dict = | 955 const base::DictionaryValue* dict = |
1151 prefs->GetDictionary("extensions.settings"); | 956 prefs->GetDictionary("extensions.settings"); |
1152 ASSERT_TRUE(dict != NULL) << msg; | 957 ASSERT_TRUE(dict != NULL) << msg; |
1153 const base::DictionaryValue* pref = NULL; | 958 const base::DictionaryValue* pref = NULL; |
1154 ASSERT_TRUE(dict->GetDictionary(extension_id, &pref)) << msg; | 959 ASSERT_TRUE(dict->GetDictionary(extension_id, &pref)) << msg; |
1155 EXPECT_TRUE(pref != NULL) << msg; | 960 EXPECT_TRUE(pref != NULL) << msg; |
1156 int val; | 961 int val; |
1157 ASSERT_TRUE(pref->GetInteger(pref_path, &val)) << msg; | 962 ASSERT_TRUE(pref->GetInteger(pref_path, &val)) << msg; |
1158 EXPECT_EQ(expected_val, val) << msg; | 963 EXPECT_EQ(expected_val, val) << msg; |
1159 } | 964 } |
1160 | 965 |
1161 void ValidateStringPref(const std::string& extension_id, | 966 void ValidateStringPref(const std::string& extension_id, |
1162 const std::string& pref_path, | 967 const std::string& pref_path, |
1163 const std::string& expected_val) { | 968 const std::string& expected_val) { |
1164 std::string msg = " while checking: "; | 969 std::string msg = " while checking: "; |
1165 msg += extension_id; | 970 msg += extension_id; |
1166 msg += ".manifest."; | 971 msg += ".manifest."; |
1167 msg += pref_path; | 972 msg += pref_path; |
1168 msg += " == "; | 973 msg += " == "; |
1169 msg += expected_val; | 974 msg += expected_val; |
1170 | 975 |
1171 const base::DictionaryValue* dict = | 976 const base::DictionaryValue* dict = |
1172 profile_->GetPrefs()->GetDictionary("extensions.settings"); | 977 profile()->GetPrefs()->GetDictionary("extensions.settings"); |
1173 ASSERT_TRUE(dict != NULL) << msg; | 978 ASSERT_TRUE(dict != NULL) << msg; |
1174 const base::DictionaryValue* pref = NULL; | 979 const base::DictionaryValue* pref = NULL; |
1175 std::string manifest_path = extension_id + ".manifest"; | 980 std::string manifest_path = extension_id + ".manifest"; |
1176 ASSERT_TRUE(dict->GetDictionary(manifest_path, &pref)) << msg; | 981 ASSERT_TRUE(dict->GetDictionary(manifest_path, &pref)) << msg; |
1177 EXPECT_TRUE(pref != NULL) << msg; | 982 EXPECT_TRUE(pref != NULL) << msg; |
1178 std::string val; | 983 std::string val; |
1179 ASSERT_TRUE(pref->GetString(pref_path, &val)) << msg; | 984 ASSERT_TRUE(pref->GetString(pref_path, &val)) << msg; |
1180 EXPECT_EQ(expected_val, val) << msg; | 985 EXPECT_EQ(expected_val, val) << msg; |
1181 } | 986 } |
1182 | 987 |
1183 void SetPref(const std::string& extension_id, | 988 void SetPref(const std::string& extension_id, |
1184 const std::string& pref_path, | 989 const std::string& pref_path, |
1185 base::Value* value, | 990 base::Value* value, |
1186 const std::string& msg) { | 991 const std::string& msg) { |
1187 DictionaryPrefUpdate update(profile_->GetPrefs(), "extensions.settings"); | 992 DictionaryPrefUpdate update(profile()->GetPrefs(), "extensions.settings"); |
1188 base::DictionaryValue* dict = update.Get(); | 993 base::DictionaryValue* dict = update.Get(); |
1189 ASSERT_TRUE(dict != NULL) << msg; | 994 ASSERT_TRUE(dict != NULL) << msg; |
1190 base::DictionaryValue* pref = NULL; | 995 base::DictionaryValue* pref = NULL; |
1191 ASSERT_TRUE(dict->GetDictionary(extension_id, &pref)) << msg; | 996 ASSERT_TRUE(dict->GetDictionary(extension_id, &pref)) << msg; |
1192 EXPECT_TRUE(pref != NULL) << msg; | 997 EXPECT_TRUE(pref != NULL) << msg; |
1193 pref->Set(pref_path, value); | 998 pref->Set(pref_path, value); |
1194 } | 999 } |
1195 | 1000 |
1196 void SetPrefInteg(const std::string& extension_id, | 1001 void SetPrefInteg(const std::string& extension_id, |
1197 const std::string& pref_path, | 1002 const std::string& pref_path, |
(...skipping 17 matching lines...) Expand all Loading... |
1215 msg += (value ? "true" : "false"); | 1020 msg += (value ? "true" : "false"); |
1216 | 1021 |
1217 SetPref(extension_id, pref_path, new base::FundamentalValue(value), msg); | 1022 SetPref(extension_id, pref_path, new base::FundamentalValue(value), msg); |
1218 } | 1023 } |
1219 | 1024 |
1220 void ClearPref(const std::string& extension_id, | 1025 void ClearPref(const std::string& extension_id, |
1221 const std::string& pref_path) { | 1026 const std::string& pref_path) { |
1222 std::string msg = " while clearing: "; | 1027 std::string msg = " while clearing: "; |
1223 msg += extension_id + " " + pref_path; | 1028 msg += extension_id + " " + pref_path; |
1224 | 1029 |
1225 DictionaryPrefUpdate update(profile_->GetPrefs(), "extensions.settings"); | 1030 DictionaryPrefUpdate update(profile()->GetPrefs(), "extensions.settings"); |
1226 base::DictionaryValue* dict = update.Get(); | 1031 base::DictionaryValue* dict = update.Get(); |
1227 ASSERT_TRUE(dict != NULL) << msg; | 1032 ASSERT_TRUE(dict != NULL) << msg; |
1228 base::DictionaryValue* pref = NULL; | 1033 base::DictionaryValue* pref = NULL; |
1229 ASSERT_TRUE(dict->GetDictionary(extension_id, &pref)) << msg; | 1034 ASSERT_TRUE(dict->GetDictionary(extension_id, &pref)) << msg; |
1230 EXPECT_TRUE(pref != NULL) << msg; | 1035 EXPECT_TRUE(pref != NULL) << msg; |
1231 pref->Remove(pref_path, NULL); | 1036 pref->Remove(pref_path, NULL); |
1232 } | 1037 } |
1233 | 1038 |
1234 void SetPrefStringSet(const std::string& extension_id, | 1039 void SetPrefStringSet(const std::string& extension_id, |
1235 const std::string& pref_path, | 1040 const std::string& pref_path, |
1236 const std::set<std::string>& value) { | 1041 const std::set<std::string>& value) { |
1237 std::string msg = " while setting: "; | 1042 std::string msg = " while setting: "; |
1238 msg += extension_id + " " + pref_path; | 1043 msg += extension_id + " " + pref_path; |
1239 | 1044 |
1240 base::ListValue* list_value = new base::ListValue(); | 1045 base::ListValue* list_value = new base::ListValue(); |
1241 for (std::set<std::string>::const_iterator iter = value.begin(); | 1046 for (std::set<std::string>::const_iterator iter = value.begin(); |
1242 iter != value.end(); ++iter) | 1047 iter != value.end(); ++iter) |
1243 list_value->Append(new base::StringValue(*iter)); | 1048 list_value->Append(new base::StringValue(*iter)); |
1244 | 1049 |
1245 SetPref(extension_id, pref_path, list_value, msg); | 1050 SetPref(extension_id, pref_path, list_value, msg); |
1246 } | 1051 } |
1247 | 1052 |
1248 void InitPluginService() { | 1053 void InitPluginService() { |
1249 #if defined(ENABLE_PLUGINS) | 1054 #if defined(ENABLE_PLUGINS) |
1250 PluginService::GetInstance()->Init(); | 1055 PluginService::GetInstance()->Init(); |
1251 #endif | 1056 #endif |
1252 } | 1057 } |
1253 | 1058 |
| 1059 void InitializeExtensionSyncService() { |
| 1060 extension_sync_service_.reset(new ExtensionSyncService( |
| 1061 profile(), ExtensionPrefs::Get(browser_context()), service())); |
| 1062 } |
| 1063 |
| 1064 extensions::ManagementPolicy* GetManagementPolicy() { |
| 1065 return ExtensionSystem::Get(browser_context())->management_policy(); |
| 1066 } |
| 1067 |
| 1068 ExtensionSyncService* extension_sync_service() { |
| 1069 return extension_sync_service_.get(); |
| 1070 } |
| 1071 |
1254 protected: | 1072 protected: |
| 1073 scoped_ptr<ExtensionSyncService> extension_sync_service_; |
1255 extensions::ExtensionList loaded_; | 1074 extensions::ExtensionList loaded_; |
1256 std::string unloaded_id_; | 1075 std::string unloaded_id_; |
1257 UnloadedExtensionInfo::Reason unloaded_reason_; | 1076 UnloadedExtensionInfo::Reason unloaded_reason_; |
1258 const Extension* installed_; | 1077 const Extension* installed_; |
1259 bool was_update_; | 1078 bool was_update_; |
1260 std::string old_name_; | 1079 std::string old_name_; |
1261 FeatureSwitch::ScopedOverride override_external_install_prompt_; | 1080 FeatureSwitch::ScopedOverride override_external_install_prompt_; |
1262 | 1081 |
1263 private: | 1082 private: |
1264 // Create a CrxInstaller and install the CRX file. | 1083 // Create a CrxInstaller and install the CRX file. |
1265 // Instead of calling this method yourself, use InstallCRX(), which does extra | 1084 // Instead of calling this method yourself, use InstallCRX(), which does extra |
1266 // error checking. | 1085 // error checking. |
1267 void InstallCRXInternal(const base::FilePath& crx_path) { | 1086 void InstallCRXInternal(const base::FilePath& crx_path) { |
1268 InstallCRXInternal(crx_path, Extension::NO_FLAGS); | 1087 InstallCRXInternal(crx_path, Extension::NO_FLAGS); |
1269 } | 1088 } |
1270 | 1089 |
1271 void InstallCRXInternal(const base::FilePath& crx_path, int creation_flags) { | 1090 void InstallCRXInternal(const base::FilePath& crx_path, int creation_flags) { |
1272 ASSERT_TRUE(base::PathExists(crx_path)) | 1091 ASSERT_TRUE(base::PathExists(crx_path)) |
1273 << "Path does not exist: "<< crx_path.value().c_str(); | 1092 << "Path does not exist: "<< crx_path.value().c_str(); |
1274 scoped_refptr<CrxInstaller> installer(CrxInstaller::CreateSilent(service_)); | 1093 scoped_refptr<CrxInstaller> installer( |
| 1094 CrxInstaller::CreateSilent(service())); |
1275 installer->set_creation_flags(creation_flags); | 1095 installer->set_creation_flags(creation_flags); |
1276 if (!(creation_flags & Extension::WAS_INSTALLED_BY_DEFAULT)) | 1096 if (!(creation_flags & Extension::WAS_INSTALLED_BY_DEFAULT)) |
1277 installer->set_allow_silent_install(true); | 1097 installer->set_allow_silent_install(true); |
1278 | 1098 |
1279 content::WindowedNotificationObserver observer( | 1099 content::WindowedNotificationObserver observer( |
1280 chrome::NOTIFICATION_CRX_INSTALLER_DONE, | 1100 chrome::NOTIFICATION_CRX_INSTALLER_DONE, |
1281 content::Source<extensions::CrxInstaller>(installer)); | 1101 content::Source<extensions::CrxInstaller>(installer)); |
1282 | 1102 |
1283 installer->InstallCrx(crx_path); | 1103 installer->InstallCrx(crx_path); |
1284 | 1104 |
1285 observer.Wait(); | 1105 observer.Wait(); |
1286 } | 1106 } |
1287 | 1107 |
| 1108 size_t expected_extensions_count_; |
1288 content::NotificationRegistrar registrar_; | 1109 content::NotificationRegistrar registrar_; |
1289 }; | 1110 }; |
1290 | 1111 |
1291 // Receives notifications from a PackExtensionJob, indicating either that | 1112 // Receives notifications from a PackExtensionJob, indicating either that |
1292 // packing succeeded or that there was some error. | 1113 // packing succeeded or that there was some error. |
1293 class PackExtensionTestClient : public extensions::PackExtensionJob::Client { | 1114 class PackExtensionTestClient : public extensions::PackExtensionJob::Client { |
1294 public: | 1115 public: |
1295 PackExtensionTestClient(const base::FilePath& expected_crx_path, | 1116 PackExtensionTestClient(const base::FilePath& expected_crx_path, |
1296 const base::FilePath& expected_private_key_path); | 1117 const base::FilePath& expected_private_key_path); |
1297 virtual void OnPackSuccess(const base::FilePath& crx_path, | 1118 virtual void OnPackSuccess(const base::FilePath& crx_path, |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1333 if (type == ExtensionCreator::kCRXExists) | 1154 if (type == ExtensionCreator::kCRXExists) |
1334 FAIL() << "Packing should not fail."; | 1155 FAIL() << "Packing should not fail."; |
1335 else | 1156 else |
1336 FAIL() << "Existing CRX should have been overwritten."; | 1157 FAIL() << "Existing CRX should have been overwritten."; |
1337 } | 1158 } |
1338 | 1159 |
1339 // Test loading good extensions from the profile directory. | 1160 // Test loading good extensions from the profile directory. |
1340 TEST_F(ExtensionServiceTest, LoadAllExtensionsFromDirectorySuccess) { | 1161 TEST_F(ExtensionServiceTest, LoadAllExtensionsFromDirectorySuccess) { |
1341 InitPluginService(); | 1162 InitPluginService(); |
1342 InitializeGoodInstalledExtensionService(); | 1163 InitializeGoodInstalledExtensionService(); |
1343 service_->Init(); | 1164 service()->Init(); |
1344 | 1165 |
1345 uint32 expected_num_extensions = 3u; | 1166 uint32 expected_num_extensions = 3u; |
1346 ASSERT_EQ(expected_num_extensions, loaded_.size()); | 1167 ASSERT_EQ(expected_num_extensions, loaded_.size()); |
1347 | 1168 |
1348 EXPECT_EQ(std::string(good0), loaded_[0]->id()); | 1169 EXPECT_EQ(std::string(good0), loaded_[0]->id()); |
1349 EXPECT_EQ(std::string("My extension 1"), | 1170 EXPECT_EQ(std::string("My extension 1"), |
1350 loaded_[0]->name()); | 1171 loaded_[0]->name()); |
1351 EXPECT_EQ(std::string("The first extension that I made."), | 1172 EXPECT_EQ(std::string("The first extension that I made."), |
1352 loaded_[0]->description()); | 1173 loaded_[0]->description()); |
1353 EXPECT_EQ(Manifest::INTERNAL, loaded_[0]->location()); | 1174 EXPECT_EQ(Manifest::INTERNAL, loaded_[0]->location()); |
1354 EXPECT_TRUE(service_->GetExtensionById(loaded_[0]->id(), false)); | 1175 EXPECT_TRUE(service()->GetExtensionById(loaded_[0]->id(), false)); |
1355 EXPECT_EQ(expected_num_extensions, registry_->enabled_extensions().size()); | 1176 EXPECT_EQ(expected_num_extensions, registry()->enabled_extensions().size()); |
1356 | 1177 |
1357 ValidatePrefKeyCount(3); | 1178 ValidatePrefKeyCount(3); |
1358 ValidateIntegerPref(good0, "state", Extension::ENABLED); | 1179 ValidateIntegerPref(good0, "state", Extension::ENABLED); |
1359 ValidateIntegerPref(good0, "location", Manifest::INTERNAL); | 1180 ValidateIntegerPref(good0, "location", Manifest::INTERNAL); |
1360 ValidateIntegerPref(good1, "state", Extension::ENABLED); | 1181 ValidateIntegerPref(good1, "state", Extension::ENABLED); |
1361 ValidateIntegerPref(good1, "location", Manifest::INTERNAL); | 1182 ValidateIntegerPref(good1, "location", Manifest::INTERNAL); |
1362 ValidateIntegerPref(good2, "state", Extension::ENABLED); | 1183 ValidateIntegerPref(good2, "state", Extension::ENABLED); |
1363 ValidateIntegerPref(good2, "location", Manifest::INTERNAL); | 1184 ValidateIntegerPref(good2, "location", Manifest::INTERNAL); |
1364 | 1185 |
1365 URLPatternSet expected_patterns; | 1186 URLPatternSet expected_patterns; |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1437 EXPECT_EQ(std::string(), loaded_[index]->description()); | 1258 EXPECT_EQ(std::string(), loaded_[index]->description()); |
1438 EXPECT_EQ(0u, | 1259 EXPECT_EQ(0u, |
1439 extensions::ContentScriptsInfo::GetContentScripts( | 1260 extensions::ContentScriptsInfo::GetContentScripts( |
1440 loaded_[index].get()).size()); | 1261 loaded_[index].get()).size()); |
1441 EXPECT_EQ(Manifest::INTERNAL, loaded_[index]->location()); | 1262 EXPECT_EQ(Manifest::INTERNAL, loaded_[index]->location()); |
1442 }; | 1263 }; |
1443 | 1264 |
1444 // Test loading bad extensions from the profile directory. | 1265 // Test loading bad extensions from the profile directory. |
1445 TEST_F(ExtensionServiceTest, LoadAllExtensionsFromDirectoryFail) { | 1266 TEST_F(ExtensionServiceTest, LoadAllExtensionsFromDirectoryFail) { |
1446 // Initialize the test dir with a bad Preferences/extensions. | 1267 // Initialize the test dir with a bad Preferences/extensions. |
1447 base::FilePath source_install_dir = data_dir_ | 1268 base::FilePath source_install_dir = |
1448 .AppendASCII("bad") | 1269 data_dir().AppendASCII("bad").AppendASCII("Extensions"); |
1449 .AppendASCII("Extensions"); | |
1450 base::FilePath pref_path = | 1270 base::FilePath pref_path = |
1451 source_install_dir.DirName().Append(chrome::kPreferencesFilename); | 1271 source_install_dir.DirName().Append(chrome::kPreferencesFilename); |
1452 | 1272 |
1453 InitializeInstalledExtensionService(pref_path, source_install_dir); | 1273 InitializeInstalledExtensionService(pref_path, source_install_dir); |
1454 | 1274 |
1455 service_->Init(); | 1275 service()->Init(); |
1456 | 1276 |
1457 ASSERT_EQ(4u, GetErrors().size()); | 1277 ASSERT_EQ(4u, GetErrors().size()); |
1458 ASSERT_EQ(0u, loaded_.size()); | 1278 ASSERT_EQ(0u, loaded_.size()); |
1459 | 1279 |
1460 EXPECT_TRUE(MatchPattern(base::UTF16ToUTF8(GetErrors()[0]), | 1280 EXPECT_TRUE(MatchPattern(base::UTF16ToUTF8(GetErrors()[0]), |
1461 std::string("Could not load extension from '*'. ") + | 1281 std::string("Could not load extension from '*'. ") + |
1462 extensions::manifest_errors::kManifestUnreadable)) << | 1282 extensions::manifest_errors::kManifestUnreadable)) << |
1463 base::UTF16ToUTF8(GetErrors()[0]); | 1283 base::UTF16ToUTF8(GetErrors()[0]); |
1464 | 1284 |
1465 EXPECT_TRUE(MatchPattern(base::UTF16ToUTF8(GetErrors()[1]), | 1285 EXPECT_TRUE(MatchPattern(base::UTF16ToUTF8(GetErrors()[1]), |
1466 std::string("Could not load extension from '*'. ") + | 1286 std::string("Could not load extension from '*'. ") + |
1467 extensions::manifest_errors::kManifestUnreadable)) << | 1287 extensions::manifest_errors::kManifestUnreadable)) << |
1468 base::UTF16ToUTF8(GetErrors()[1]); | 1288 base::UTF16ToUTF8(GetErrors()[1]); |
1469 | 1289 |
1470 EXPECT_TRUE(MatchPattern(base::UTF16ToUTF8(GetErrors()[2]), | 1290 EXPECT_TRUE(MatchPattern(base::UTF16ToUTF8(GetErrors()[2]), |
1471 std::string("Could not load extension from '*'. ") + | 1291 std::string("Could not load extension from '*'. ") + |
1472 extensions::manifest_errors::kMissingFile)) << | 1292 extensions::manifest_errors::kMissingFile)) << |
1473 base::UTF16ToUTF8(GetErrors()[2]); | 1293 base::UTF16ToUTF8(GetErrors()[2]); |
1474 | 1294 |
1475 EXPECT_TRUE(MatchPattern(base::UTF16ToUTF8(GetErrors()[3]), | 1295 EXPECT_TRUE(MatchPattern(base::UTF16ToUTF8(GetErrors()[3]), |
1476 std::string("Could not load extension from '*'. ") + | 1296 std::string("Could not load extension from '*'. ") + |
1477 extensions::manifest_errors::kManifestUnreadable)) << | 1297 extensions::manifest_errors::kManifestUnreadable)) << |
1478 base::UTF16ToUTF8(GetErrors()[3]); | 1298 base::UTF16ToUTF8(GetErrors()[3]); |
1479 }; | 1299 }; |
1480 | 1300 |
1481 // Test various cases for delayed install because of missing imports. | 1301 // Test various cases for delayed install because of missing imports. |
1482 TEST_F(ExtensionServiceTest, PendingImports) { | 1302 TEST_F(ExtensionServiceTest, PendingImports) { |
1483 InitPluginService(); | 1303 InitPluginService(); |
1484 | 1304 |
1485 base::FilePath source_install_dir = data_dir_ | 1305 base::FilePath source_install_dir = |
1486 .AppendASCII("pending_updates_with_imports") | 1306 data_dir().AppendASCII("pending_updates_with_imports").AppendASCII( |
1487 .AppendASCII("Extensions"); | 1307 "Extensions"); |
1488 base::FilePath pref_path = | 1308 base::FilePath pref_path = |
1489 source_install_dir.DirName().Append(chrome::kPreferencesFilename); | 1309 source_install_dir.DirName().Append(chrome::kPreferencesFilename); |
1490 | 1310 |
1491 InitializeInstalledExtensionService(pref_path, source_install_dir); | 1311 InitializeInstalledExtensionService(pref_path, source_install_dir); |
1492 | 1312 |
1493 // Verify there are no pending extensions initially. | 1313 // Verify there are no pending extensions initially. |
1494 EXPECT_FALSE(service_->pending_extension_manager()->HasPendingExtensions()); | 1314 EXPECT_FALSE(service()->pending_extension_manager()->HasPendingExtensions()); |
1495 | 1315 |
1496 service_->Init(); | 1316 service()->Init(); |
1497 // Wait for GarbageCollectExtensions task to complete. | 1317 // Wait for GarbageCollectExtensions task to complete. |
1498 base::RunLoop().RunUntilIdle(); | 1318 base::RunLoop().RunUntilIdle(); |
1499 | 1319 |
1500 // These extensions are used by the extensions we test below, they must be | 1320 // These extensions are used by the extensions we test below, they must be |
1501 // installed. | 1321 // installed. |
1502 EXPECT_TRUE(base::PathExists(extensions_install_dir_.AppendASCII( | 1322 EXPECT_TRUE(base::PathExists(extensions_install_dir().AppendASCII( |
1503 "bjafgdebaacbbbecmhlhpofkepfkgcpa/1.0"))); | 1323 "bjafgdebaacbbbecmhlhpofkepfkgcpa/1.0"))); |
1504 EXPECT_TRUE(base::PathExists(extensions_install_dir_.AppendASCII( | 1324 EXPECT_TRUE(base::PathExists(extensions_install_dir().AppendASCII( |
1505 "hpiknbiabeeppbpihjehijgoemciehgk/2"))); | 1325 "hpiknbiabeeppbpihjehijgoemciehgk/2"))); |
1506 | 1326 |
1507 // Each of these extensions should have been rejected because of dependencies | 1327 // Each of these extensions should have been rejected because of dependencies |
1508 // that cannot be satisfied. | 1328 // that cannot be satisfied. |
1509 ExtensionPrefs* prefs = ExtensionPrefs::Get(profile_.get()); | 1329 ExtensionPrefs* prefs = ExtensionPrefs::Get(profile()); |
1510 EXPECT_FALSE( | 1330 EXPECT_FALSE( |
1511 prefs->GetDelayedInstallInfo("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")); | 1331 prefs->GetDelayedInstallInfo("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")); |
1512 EXPECT_FALSE( | 1332 EXPECT_FALSE( |
1513 prefs->GetInstalledExtensionInfo("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")); | 1333 prefs->GetInstalledExtensionInfo("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")); |
1514 EXPECT_FALSE( | 1334 EXPECT_FALSE( |
1515 prefs->GetDelayedInstallInfo("bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb")); | 1335 prefs->GetDelayedInstallInfo("bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb")); |
1516 EXPECT_FALSE( | 1336 EXPECT_FALSE( |
1517 prefs->GetInstalledExtensionInfo("bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb")); | 1337 prefs->GetInstalledExtensionInfo("bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb")); |
1518 EXPECT_FALSE( | 1338 EXPECT_FALSE( |
1519 prefs->GetDelayedInstallInfo("cccccccccccccccccccccccccccccccc")); | 1339 prefs->GetDelayedInstallInfo("cccccccccccccccccccccccccccccccc")); |
1520 EXPECT_FALSE( | 1340 EXPECT_FALSE( |
1521 prefs->GetInstalledExtensionInfo("cccccccccccccccccccccccccccccccc")); | 1341 prefs->GetInstalledExtensionInfo("cccccccccccccccccccccccccccccccc")); |
1522 | 1342 |
1523 // Make sure the import started for the extension with a dependency. | 1343 // Make sure the import started for the extension with a dependency. |
1524 EXPECT_TRUE( | 1344 EXPECT_TRUE( |
1525 prefs->GetDelayedInstallInfo("behllobkkfkfnphdnhnkndlbkcpglgmj")); | 1345 prefs->GetDelayedInstallInfo("behllobkkfkfnphdnhnkndlbkcpglgmj")); |
1526 EXPECT_EQ(ExtensionPrefs::DELAY_REASON_WAIT_FOR_IMPORTS, | 1346 EXPECT_EQ(ExtensionPrefs::DELAY_REASON_WAIT_FOR_IMPORTS, |
1527 prefs->GetDelayedInstallReason("behllobkkfkfnphdnhnkndlbkcpglgmj")); | 1347 prefs->GetDelayedInstallReason("behllobkkfkfnphdnhnkndlbkcpglgmj")); |
1528 | 1348 |
1529 EXPECT_FALSE(base::PathExists(extensions_install_dir_.AppendASCII( | 1349 EXPECT_FALSE(base::PathExists(extensions_install_dir().AppendASCII( |
1530 "behllobkkfkfnphdnhnkndlbkcpglgmj/1.0.0.0"))); | 1350 "behllobkkfkfnphdnhnkndlbkcpglgmj/1.0.0.0"))); |
1531 | 1351 |
1532 EXPECT_TRUE(service_->pending_extension_manager()->HasPendingExtensions()); | 1352 EXPECT_TRUE(service()->pending_extension_manager()->HasPendingExtensions()); |
1533 std::string pending_id("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"); | 1353 std::string pending_id("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"); |
1534 EXPECT_TRUE(service_->pending_extension_manager()->IsIdPending(pending_id)); | 1354 EXPECT_TRUE(service()->pending_extension_manager()->IsIdPending(pending_id)); |
1535 // Remove it because we are not testing the pending extension manager's | 1355 // Remove it because we are not testing the pending extension manager's |
1536 // ability to download and install extensions. | 1356 // ability to download and install extensions. |
1537 EXPECT_TRUE(service_->pending_extension_manager()->Remove(pending_id)); | 1357 EXPECT_TRUE(service()->pending_extension_manager()->Remove(pending_id)); |
1538 } | 1358 } |
1539 | 1359 |
1540 // Test installing extensions. This test tries to install few extensions using | 1360 // Test installing extensions. This test tries to install few extensions using |
1541 // crx files. If you need to change those crx files, feel free to repackage | 1361 // crx files. If you need to change those crx files, feel free to repackage |
1542 // them, throw away the key used and change the id's above. | 1362 // them, throw away the key used and change the id's above. |
1543 TEST_F(ExtensionServiceTest, InstallExtension) { | 1363 TEST_F(ExtensionServiceTest, InstallExtension) { |
1544 InitializeEmptyExtensionService(); | 1364 InitializeEmptyExtensionService(); |
1545 | 1365 |
1546 // Extensions not enabled. | 1366 // Extensions not enabled. |
1547 set_extensions_enabled(false); | 1367 service()->set_extensions_enabled(false); |
1548 base::FilePath path = data_dir_.AppendASCII("good.crx"); | 1368 base::FilePath path = data_dir().AppendASCII("good.crx"); |
1549 InstallCRX(path, INSTALL_FAILED); | 1369 InstallCRX(path, INSTALL_FAILED); |
1550 set_extensions_enabled(true); | 1370 service()->set_extensions_enabled(true); |
1551 | 1371 |
1552 ValidatePrefKeyCount(0); | 1372 ValidatePrefKeyCount(0); |
1553 | 1373 |
1554 // A simple extension that should install without error. | 1374 // A simple extension that should install without error. |
1555 path = data_dir_.AppendASCII("good.crx"); | 1375 path = data_dir().AppendASCII("good.crx"); |
1556 InstallCRX(path, INSTALL_NEW); | 1376 InstallCRX(path, INSTALL_NEW); |
1557 // TODO(erikkay): verify the contents of the installed extension. | 1377 // TODO(erikkay): verify the contents of the installed extension. |
1558 | 1378 |
1559 int pref_count = 0; | 1379 int pref_count = 0; |
1560 ValidatePrefKeyCount(++pref_count); | 1380 ValidatePrefKeyCount(++pref_count); |
1561 ValidateIntegerPref(good_crx, "state", Extension::ENABLED); | 1381 ValidateIntegerPref(good_crx, "state", Extension::ENABLED); |
1562 ValidateIntegerPref(good_crx, "location", Manifest::INTERNAL); | 1382 ValidateIntegerPref(good_crx, "location", Manifest::INTERNAL); |
1563 | 1383 |
1564 // An extension with page actions. | 1384 // An extension with page actions. |
1565 path = data_dir_.AppendASCII("page_action.crx"); | 1385 path = data_dir().AppendASCII("page_action.crx"); |
1566 InstallCRX(path, INSTALL_NEW); | 1386 InstallCRX(path, INSTALL_NEW); |
1567 ValidatePrefKeyCount(++pref_count); | 1387 ValidatePrefKeyCount(++pref_count); |
1568 ValidateIntegerPref(page_action, "state", Extension::ENABLED); | 1388 ValidateIntegerPref(page_action, "state", Extension::ENABLED); |
1569 ValidateIntegerPref(page_action, "location", Manifest::INTERNAL); | 1389 ValidateIntegerPref(page_action, "location", Manifest::INTERNAL); |
1570 | 1390 |
1571 // Bad signature. | 1391 // Bad signature. |
1572 path = data_dir_.AppendASCII("bad_signature.crx"); | 1392 path = data_dir().AppendASCII("bad_signature.crx"); |
1573 InstallCRX(path, INSTALL_FAILED); | 1393 InstallCRX(path, INSTALL_FAILED); |
1574 ValidatePrefKeyCount(pref_count); | 1394 ValidatePrefKeyCount(pref_count); |
1575 | 1395 |
1576 // 0-length extension file. | 1396 // 0-length extension file. |
1577 path = data_dir_.AppendASCII("not_an_extension.crx"); | 1397 path = data_dir().AppendASCII("not_an_extension.crx"); |
1578 InstallCRX(path, INSTALL_FAILED); | 1398 InstallCRX(path, INSTALL_FAILED); |
1579 ValidatePrefKeyCount(pref_count); | 1399 ValidatePrefKeyCount(pref_count); |
1580 | 1400 |
1581 // Bad magic number. | 1401 // Bad magic number. |
1582 path = data_dir_.AppendASCII("bad_magic.crx"); | 1402 path = data_dir().AppendASCII("bad_magic.crx"); |
1583 InstallCRX(path, INSTALL_FAILED); | 1403 InstallCRX(path, INSTALL_FAILED); |
1584 ValidatePrefKeyCount(pref_count); | 1404 ValidatePrefKeyCount(pref_count); |
1585 | 1405 |
1586 // Packed extensions may have folders or files that have underscores. | 1406 // Packed extensions may have folders or files that have underscores. |
1587 // This will only cause a warning, rather than a fatal error. | 1407 // This will only cause a warning, rather than a fatal error. |
1588 path = data_dir_.AppendASCII("bad_underscore.crx"); | 1408 path = data_dir().AppendASCII("bad_underscore.crx"); |
1589 InstallCRX(path, INSTALL_NEW); | 1409 InstallCRX(path, INSTALL_NEW); |
1590 ValidatePrefKeyCount(++pref_count); | 1410 ValidatePrefKeyCount(++pref_count); |
1591 | 1411 |
1592 // A test for an extension with a 2048-bit public key. | 1412 // A test for an extension with a 2048-bit public key. |
1593 path = data_dir_.AppendASCII("good2048.crx"); | 1413 path = data_dir().AppendASCII("good2048.crx"); |
1594 InstallCRX(path, INSTALL_NEW); | 1414 InstallCRX(path, INSTALL_NEW); |
1595 ValidatePrefKeyCount(++pref_count); | 1415 ValidatePrefKeyCount(++pref_count); |
1596 ValidateIntegerPref(good2048, "state", Extension::ENABLED); | 1416 ValidateIntegerPref(good2048, "state", Extension::ENABLED); |
1597 ValidateIntegerPref(good2048, "location", Manifest::INTERNAL); | 1417 ValidateIntegerPref(good2048, "location", Manifest::INTERNAL); |
1598 | 1418 |
1599 // TODO(erikkay): add more tests for many of the failure cases. | 1419 // TODO(erikkay): add more tests for many of the failure cases. |
1600 // TODO(erikkay): add tests for upgrade cases. | 1420 // TODO(erikkay): add tests for upgrade cases. |
1601 } | 1421 } |
1602 | 1422 |
1603 struct MockExtensionRegistryObserver | 1423 struct MockExtensionRegistryObserver |
(...skipping 15 matching lines...) Expand all Loading... |
1619 std::string last_extension_installed; | 1439 std::string last_extension_installed; |
1620 std::string last_extension_uninstalled; | 1440 std::string last_extension_uninstalled; |
1621 }; | 1441 }; |
1622 | 1442 |
1623 // Test that correct notifications are sent to ExtensionRegistryObserver on | 1443 // Test that correct notifications are sent to ExtensionRegistryObserver on |
1624 // extension install and uninstall. | 1444 // extension install and uninstall. |
1625 TEST_F(ExtensionServiceTest, InstallObserverNotified) { | 1445 TEST_F(ExtensionServiceTest, InstallObserverNotified) { |
1626 InitializeEmptyExtensionService(); | 1446 InitializeEmptyExtensionService(); |
1627 | 1447 |
1628 extensions::ExtensionRegistry* registry( | 1448 extensions::ExtensionRegistry* registry( |
1629 extensions::ExtensionRegistry::Get(profile_.get())); | 1449 extensions::ExtensionRegistry::Get(profile())); |
1630 MockExtensionRegistryObserver observer; | 1450 MockExtensionRegistryObserver observer; |
1631 registry->AddObserver(&observer); | 1451 registry->AddObserver(&observer); |
1632 | 1452 |
1633 // A simple extension that should install without error. | 1453 // A simple extension that should install without error. |
1634 ASSERT_TRUE(observer.last_extension_installed.empty()); | 1454 ASSERT_TRUE(observer.last_extension_installed.empty()); |
1635 base::FilePath path = data_dir_.AppendASCII("good.crx"); | 1455 base::FilePath path = data_dir().AppendASCII("good.crx"); |
1636 InstallCRX(path, INSTALL_NEW); | 1456 InstallCRX(path, INSTALL_NEW); |
1637 ASSERT_EQ(good_crx, observer.last_extension_installed); | 1457 ASSERT_EQ(good_crx, observer.last_extension_installed); |
1638 | 1458 |
1639 // Uninstall the extension. | 1459 // Uninstall the extension. |
1640 ASSERT_TRUE(observer.last_extension_uninstalled.empty()); | 1460 ASSERT_TRUE(observer.last_extension_uninstalled.empty()); |
1641 UninstallExtension(good_crx, false); | 1461 UninstallExtension(good_crx, false); |
1642 ASSERT_EQ(good_crx, observer.last_extension_uninstalled); | 1462 ASSERT_EQ(good_crx, observer.last_extension_uninstalled); |
1643 | 1463 |
1644 registry->RemoveObserver(&observer); | 1464 registry->RemoveObserver(&observer); |
1645 } | 1465 } |
1646 | 1466 |
1647 // Tests that flags passed to OnExternalExtensionFileFound() make it to the | 1467 // Tests that flags passed to OnExternalExtensionFileFound() make it to the |
1648 // extension object. | 1468 // extension object. |
1649 TEST_F(ExtensionServiceTest, InstallingExternalExtensionWithFlags) { | 1469 TEST_F(ExtensionServiceTest, InstallingExternalExtensionWithFlags) { |
1650 const char kPrefFromBookmark[] = "from_bookmark"; | 1470 const char kPrefFromBookmark[] = "from_bookmark"; |
1651 | 1471 |
1652 InitializeEmptyExtensionService(); | 1472 InitializeEmptyExtensionService(); |
1653 | 1473 |
1654 base::FilePath path = data_dir_.AppendASCII("good.crx"); | 1474 base::FilePath path = data_dir().AppendASCII("good.crx"); |
1655 set_extensions_enabled(true); | 1475 service()->set_extensions_enabled(true); |
1656 | 1476 |
1657 // Register and install an external extension. | 1477 // Register and install an external extension. |
1658 Version version("1.0.0.0"); | 1478 Version version("1.0.0.0"); |
1659 content::WindowedNotificationObserver observer( | 1479 content::WindowedNotificationObserver observer( |
1660 chrome::NOTIFICATION_CRX_INSTALLER_DONE, | 1480 chrome::NOTIFICATION_CRX_INSTALLER_DONE, |
1661 content::NotificationService::AllSources()); | 1481 content::NotificationService::AllSources()); |
1662 if (service_->OnExternalExtensionFileFound( | 1482 if (service()->OnExternalExtensionFileFound(good_crx, |
1663 good_crx, | 1483 &version, |
1664 &version, | 1484 path, |
1665 path, | 1485 Manifest::EXTERNAL_PREF, |
1666 Manifest::EXTERNAL_PREF, | 1486 Extension::FROM_BOOKMARK, |
1667 Extension::FROM_BOOKMARK, | 1487 false /* mark_acknowledged */)) { |
1668 false /* mark_acknowledged */)) { | |
1669 observer.Wait(); | 1488 observer.Wait(); |
1670 } | 1489 } |
1671 | 1490 |
1672 const Extension* extension = service_->GetExtensionById(good_crx, false); | 1491 const Extension* extension = service()->GetExtensionById(good_crx, false); |
1673 ASSERT_TRUE(extension); | 1492 ASSERT_TRUE(extension); |
1674 ASSERT_TRUE(extension->from_bookmark()); | 1493 ASSERT_TRUE(extension->from_bookmark()); |
1675 ASSERT_TRUE(ValidateBooleanPref(good_crx, kPrefFromBookmark, true)); | 1494 ASSERT_TRUE(ValidateBooleanPref(good_crx, kPrefFromBookmark, true)); |
1676 | 1495 |
1677 // Upgrade to version 2.0, the flag should be preserved. | 1496 // Upgrade to version 2.0, the flag should be preserved. |
1678 path = data_dir_.AppendASCII("good2.crx"); | 1497 path = data_dir().AppendASCII("good2.crx"); |
1679 UpdateExtension(good_crx, path, ENABLED); | 1498 UpdateExtension(good_crx, path, ENABLED); |
1680 ASSERT_TRUE(ValidateBooleanPref(good_crx, kPrefFromBookmark, true)); | 1499 ASSERT_TRUE(ValidateBooleanPref(good_crx, kPrefFromBookmark, true)); |
1681 extension = service_->GetExtensionById(good_crx, false); | 1500 extension = service()->GetExtensionById(good_crx, false); |
1682 ASSERT_TRUE(extension); | 1501 ASSERT_TRUE(extension); |
1683 ASSERT_TRUE(extension->from_bookmark()); | 1502 ASSERT_TRUE(extension->from_bookmark()); |
1684 } | 1503 } |
1685 | 1504 |
1686 // Test the handling of Extension::EXTERNAL_EXTENSION_UNINSTALLED | 1505 // Test the handling of Extension::EXTERNAL_EXTENSION_UNINSTALLED |
1687 TEST_F(ExtensionServiceTest, UninstallingExternalExtensions) { | 1506 TEST_F(ExtensionServiceTest, UninstallingExternalExtensions) { |
1688 InitializeEmptyExtensionService(); | 1507 InitializeEmptyExtensionService(); |
1689 | 1508 |
1690 base::FilePath path = data_dir_.AppendASCII("good.crx"); | 1509 base::FilePath path = data_dir().AppendASCII("good.crx"); |
1691 set_extensions_enabled(true); | 1510 service()->set_extensions_enabled(true); |
1692 | 1511 |
1693 // Install an external extension. | 1512 // Install an external extension. |
1694 Version version("1.0.0.0"); | 1513 Version version("1.0.0.0"); |
1695 content::WindowedNotificationObserver observer( | 1514 content::WindowedNotificationObserver observer( |
1696 chrome::NOTIFICATION_CRX_INSTALLER_DONE, | 1515 chrome::NOTIFICATION_CRX_INSTALLER_DONE, |
1697 content::NotificationService::AllSources()); | 1516 content::NotificationService::AllSources()); |
1698 if (service_->OnExternalExtensionFileFound(good_crx, &version, | 1517 if (service()->OnExternalExtensionFileFound(good_crx, |
1699 path, Manifest::EXTERNAL_PREF, | 1518 &version, |
1700 Extension::NO_FLAGS, false)) { | 1519 path, |
| 1520 Manifest::EXTERNAL_PREF, |
| 1521 Extension::NO_FLAGS, |
| 1522 false)) { |
1701 observer.Wait(); | 1523 observer.Wait(); |
1702 } | 1524 } |
1703 | 1525 |
1704 ASSERT_TRUE(service_->GetExtensionById(good_crx, false)); | 1526 ASSERT_TRUE(service()->GetExtensionById(good_crx, false)); |
1705 | 1527 |
1706 // Uninstall it and check that its killbit gets set. | 1528 // Uninstall it and check that its killbit gets set. |
1707 UninstallExtension(good_crx, false); | 1529 UninstallExtension(good_crx, false); |
1708 ValidateIntegerPref(good_crx, "location", | 1530 ValidateIntegerPref(good_crx, "location", |
1709 Extension::EXTERNAL_EXTENSION_UNINSTALLED); | 1531 Extension::EXTERNAL_EXTENSION_UNINSTALLED); |
1710 | 1532 |
1711 // Try to re-install it externally. This should fail because of the killbit. | 1533 // Try to re-install it externally. This should fail because of the killbit. |
1712 service_->OnExternalExtensionFileFound(good_crx, &version, | 1534 service()->OnExternalExtensionFileFound(good_crx, |
1713 path, Manifest::EXTERNAL_PREF, | 1535 &version, |
1714 Extension::NO_FLAGS, false); | 1536 path, |
| 1537 Manifest::EXTERNAL_PREF, |
| 1538 Extension::NO_FLAGS, |
| 1539 false); |
1715 base::RunLoop().RunUntilIdle(); | 1540 base::RunLoop().RunUntilIdle(); |
1716 ASSERT_TRUE(NULL == service_->GetExtensionById(good_crx, false)); | 1541 ASSERT_TRUE(NULL == service()->GetExtensionById(good_crx, false)); |
1717 ValidateIntegerPref(good_crx, "location", | 1542 ValidateIntegerPref(good_crx, "location", |
1718 Extension::EXTERNAL_EXTENSION_UNINSTALLED); | 1543 Extension::EXTERNAL_EXTENSION_UNINSTALLED); |
1719 | 1544 |
1720 version = Version("1.0.0.1"); | 1545 version = Version("1.0.0.1"); |
1721 // Repeat the same thing with a newer version of the extension. | 1546 // Repeat the same thing with a newer version of the extension. |
1722 path = data_dir_.AppendASCII("good2.crx"); | 1547 path = data_dir().AppendASCII("good2.crx"); |
1723 service_->OnExternalExtensionFileFound(good_crx, &version, | 1548 service()->OnExternalExtensionFileFound(good_crx, |
1724 path, Manifest::EXTERNAL_PREF, | 1549 &version, |
1725 Extension::NO_FLAGS, false); | 1550 path, |
| 1551 Manifest::EXTERNAL_PREF, |
| 1552 Extension::NO_FLAGS, |
| 1553 false); |
1726 base::RunLoop().RunUntilIdle(); | 1554 base::RunLoop().RunUntilIdle(); |
1727 ASSERT_TRUE(NULL == service_->GetExtensionById(good_crx, false)); | 1555 ASSERT_TRUE(NULL == service()->GetExtensionById(good_crx, false)); |
1728 ValidateIntegerPref(good_crx, "location", | 1556 ValidateIntegerPref(good_crx, "location", |
1729 Extension::EXTERNAL_EXTENSION_UNINSTALLED); | 1557 Extension::EXTERNAL_EXTENSION_UNINSTALLED); |
1730 | 1558 |
1731 // Try adding the same extension from an external update URL. | 1559 // Try adding the same extension from an external update URL. |
1732 ASSERT_FALSE(service_->pending_extension_manager()->AddFromExternalUpdateUrl( | 1560 ASSERT_FALSE(service()->pending_extension_manager()->AddFromExternalUpdateUrl( |
1733 good_crx, | 1561 good_crx, |
1734 std::string(), | 1562 std::string(), |
1735 GURL("http:://fake.update/url"), | 1563 GURL("http:://fake.update/url"), |
1736 Manifest::EXTERNAL_PREF_DOWNLOAD, | 1564 Manifest::EXTERNAL_PREF_DOWNLOAD, |
1737 Extension::NO_FLAGS, | 1565 Extension::NO_FLAGS, |
1738 false)); | 1566 false)); |
1739 | 1567 |
1740 ASSERT_FALSE(service_->pending_extension_manager()->IsIdPending(good_crx)); | 1568 ASSERT_FALSE(service()->pending_extension_manager()->IsIdPending(good_crx)); |
1741 } | 1569 } |
1742 | 1570 |
1743 // Test that uninstalling an external extension does not crash when | 1571 // Test that uninstalling an external extension does not crash when |
1744 // the extension could not be loaded. | 1572 // the extension could not be loaded. |
1745 // This extension shown in preferences file requires an experimental permission. | 1573 // This extension shown in preferences file requires an experimental permission. |
1746 // It could not be loaded without such permission. | 1574 // It could not be loaded without such permission. |
1747 TEST_F(ExtensionServiceTest, UninstallingNotLoadedExtension) { | 1575 TEST_F(ExtensionServiceTest, UninstallingNotLoadedExtension) { |
1748 base::FilePath source_install_dir = data_dir_ | 1576 base::FilePath source_install_dir = |
1749 .AppendASCII("good") | 1577 data_dir().AppendASCII("good").AppendASCII("Extensions"); |
1750 .AppendASCII("Extensions"); | |
1751 // The preference contains an external extension | 1578 // The preference contains an external extension |
1752 // that requires 'experimental' permission. | 1579 // that requires 'experimental' permission. |
1753 base::FilePath pref_path = source_install_dir | 1580 base::FilePath pref_path = source_install_dir |
1754 .DirName() | 1581 .DirName() |
1755 .AppendASCII("PreferencesExperimental"); | 1582 .AppendASCII("PreferencesExperimental"); |
1756 | 1583 |
1757 // Aforementioned extension will not be loaded if | 1584 // Aforementioned extension will not be loaded if |
1758 // there is no '--enable-experimental-extension-apis' command line flag. | 1585 // there is no '--enable-experimental-extension-apis' command line flag. |
1759 InitializeInstalledExtensionService(pref_path, source_install_dir); | 1586 InitializeInstalledExtensionService(pref_path, source_install_dir); |
1760 | 1587 |
1761 service_->Init(); | 1588 service()->Init(); |
1762 | 1589 |
1763 // Check and try to uninstall it. | 1590 // Check and try to uninstall it. |
1764 // If we don't check whether the extension is loaded before we uninstall it | 1591 // If we don't check whether the extension is loaded before we uninstall it |
1765 // in CheckExternalUninstall, a crash will happen here because we will get or | 1592 // in CheckExternalUninstall, a crash will happen here because we will get or |
1766 // dereference a NULL pointer (extension) inside UninstallExtension. | 1593 // dereference a NULL pointer (extension) inside UninstallExtension. |
1767 MockExtensionProvider provider(NULL, Manifest::EXTERNAL_REGISTRY); | 1594 MockExtensionProvider provider(NULL, Manifest::EXTERNAL_REGISTRY); |
1768 service_->OnExternalProviderReady(&provider); | 1595 service()->OnExternalProviderReady(&provider); |
1769 } | 1596 } |
1770 | 1597 |
1771 // Test that external extensions with incorrect IDs are not installed. | 1598 // Test that external extensions with incorrect IDs are not installed. |
1772 TEST_F(ExtensionServiceTest, FailOnWrongId) { | 1599 TEST_F(ExtensionServiceTest, FailOnWrongId) { |
1773 InitializeEmptyExtensionService(); | 1600 InitializeEmptyExtensionService(); |
1774 base::FilePath path = data_dir_.AppendASCII("good.crx"); | 1601 base::FilePath path = data_dir().AppendASCII("good.crx"); |
1775 set_extensions_enabled(true); | 1602 service()->set_extensions_enabled(true); |
1776 | 1603 |
1777 Version version("1.0.0.0"); | 1604 Version version("1.0.0.0"); |
1778 | 1605 |
1779 const std::string wrong_id = all_zero; | 1606 const std::string wrong_id = all_zero; |
1780 const std::string correct_id = good_crx; | 1607 const std::string correct_id = good_crx; |
1781 ASSERT_NE(correct_id, wrong_id); | 1608 ASSERT_NE(correct_id, wrong_id); |
1782 | 1609 |
1783 // Install an external extension with an ID from the external | 1610 // Install an external extension with an ID from the external |
1784 // source that is not equal to the ID in the extension manifest. | 1611 // source that is not equal to the ID in the extension manifest. |
1785 content::WindowedNotificationObserver observer( | 1612 content::WindowedNotificationObserver observer( |
1786 chrome::NOTIFICATION_CRX_INSTALLER_DONE, | 1613 chrome::NOTIFICATION_CRX_INSTALLER_DONE, |
1787 content::NotificationService::AllSources()); | 1614 content::NotificationService::AllSources()); |
1788 service_->OnExternalExtensionFileFound( | 1615 service()->OnExternalExtensionFileFound(wrong_id, |
1789 wrong_id, &version, path, Manifest::EXTERNAL_PREF, | 1616 &version, |
1790 Extension::NO_FLAGS, false); | 1617 path, |
| 1618 Manifest::EXTERNAL_PREF, |
| 1619 Extension::NO_FLAGS, |
| 1620 false); |
1791 | 1621 |
1792 observer.Wait(); | 1622 observer.Wait(); |
1793 ASSERT_FALSE(service_->GetExtensionById(good_crx, false)); | 1623 ASSERT_FALSE(service()->GetExtensionById(good_crx, false)); |
1794 | 1624 |
1795 // Try again with the right ID. Expect success. | 1625 // Try again with the right ID. Expect success. |
1796 content::WindowedNotificationObserver observer2( | 1626 content::WindowedNotificationObserver observer2( |
1797 chrome::NOTIFICATION_CRX_INSTALLER_DONE, | 1627 chrome::NOTIFICATION_CRX_INSTALLER_DONE, |
1798 content::NotificationService::AllSources()); | 1628 content::NotificationService::AllSources()); |
1799 if (service_->OnExternalExtensionFileFound( | 1629 if (service()->OnExternalExtensionFileFound(correct_id, |
1800 correct_id, &version, path, Manifest::EXTERNAL_PREF, | 1630 &version, |
1801 Extension::NO_FLAGS, false)) { | 1631 path, |
| 1632 Manifest::EXTERNAL_PREF, |
| 1633 Extension::NO_FLAGS, |
| 1634 false)) { |
1802 observer2.Wait(); | 1635 observer2.Wait(); |
1803 } | 1636 } |
1804 ASSERT_TRUE(service_->GetExtensionById(good_crx, false)); | 1637 ASSERT_TRUE(service()->GetExtensionById(good_crx, false)); |
1805 } | 1638 } |
1806 | 1639 |
1807 // Test that external extensions with incorrect versions are not installed. | 1640 // Test that external extensions with incorrect versions are not installed. |
1808 TEST_F(ExtensionServiceTest, FailOnWrongVersion) { | 1641 TEST_F(ExtensionServiceTest, FailOnWrongVersion) { |
1809 InitializeEmptyExtensionService(); | 1642 InitializeEmptyExtensionService(); |
1810 base::FilePath path = data_dir_.AppendASCII("good.crx"); | 1643 base::FilePath path = data_dir().AppendASCII("good.crx"); |
1811 set_extensions_enabled(true); | 1644 service()->set_extensions_enabled(true); |
1812 | 1645 |
1813 // Install an external extension with a version from the external | 1646 // Install an external extension with a version from the external |
1814 // source that is not equal to the version in the extension manifest. | 1647 // source that is not equal to the version in the extension manifest. |
1815 Version wrong_version("1.2.3.4"); | 1648 Version wrong_version("1.2.3.4"); |
1816 content::WindowedNotificationObserver observer( | 1649 content::WindowedNotificationObserver observer( |
1817 chrome::NOTIFICATION_CRX_INSTALLER_DONE, | 1650 chrome::NOTIFICATION_CRX_INSTALLER_DONE, |
1818 content::NotificationService::AllSources()); | 1651 content::NotificationService::AllSources()); |
1819 service_->OnExternalExtensionFileFound( | 1652 service()->OnExternalExtensionFileFound(good_crx, |
1820 good_crx, &wrong_version, path, Manifest::EXTERNAL_PREF, | 1653 &wrong_version, |
1821 Extension::NO_FLAGS, false); | 1654 path, |
| 1655 Manifest::EXTERNAL_PREF, |
| 1656 Extension::NO_FLAGS, |
| 1657 false); |
1822 | 1658 |
1823 observer.Wait(); | 1659 observer.Wait(); |
1824 ASSERT_FALSE(service_->GetExtensionById(good_crx, false)); | 1660 ASSERT_FALSE(service()->GetExtensionById(good_crx, false)); |
1825 | 1661 |
1826 // Try again with the right version. Expect success. | 1662 // Try again with the right version. Expect success. |
1827 service_->pending_extension_manager()->Remove(good_crx); | 1663 service()->pending_extension_manager()->Remove(good_crx); |
1828 Version correct_version("1.0.0.0"); | 1664 Version correct_version("1.0.0.0"); |
1829 content::WindowedNotificationObserver observer2( | 1665 content::WindowedNotificationObserver observer2( |
1830 chrome::NOTIFICATION_CRX_INSTALLER_DONE, | 1666 chrome::NOTIFICATION_CRX_INSTALLER_DONE, |
1831 content::NotificationService::AllSources()); | 1667 content::NotificationService::AllSources()); |
1832 if (service_->OnExternalExtensionFileFound( | 1668 if (service()->OnExternalExtensionFileFound(good_crx, |
1833 good_crx, &correct_version, path, Manifest::EXTERNAL_PREF, | 1669 &correct_version, |
1834 Extension::NO_FLAGS, false)) { | 1670 path, |
| 1671 Manifest::EXTERNAL_PREF, |
| 1672 Extension::NO_FLAGS, |
| 1673 false)) { |
1835 observer2.Wait(); | 1674 observer2.Wait(); |
1836 } | 1675 } |
1837 ASSERT_TRUE(service_->GetExtensionById(good_crx, false)); | 1676 ASSERT_TRUE(service()->GetExtensionById(good_crx, false)); |
1838 } | 1677 } |
1839 | 1678 |
1840 // Install a user script (they get converted automatically to an extension) | 1679 // Install a user script (they get converted automatically to an extension) |
1841 TEST_F(ExtensionServiceTest, InstallUserScript) { | 1680 TEST_F(ExtensionServiceTest, InstallUserScript) { |
1842 // The details of script conversion are tested elsewhere, this just tests | 1681 // The details of script conversion are tested elsewhere, this just tests |
1843 // integration with ExtensionService. | 1682 // integration with ExtensionService. |
1844 InitializeEmptyExtensionService(); | 1683 InitializeEmptyExtensionService(); |
1845 | 1684 |
1846 base::FilePath path = data_dir_ | 1685 base::FilePath path = data_dir().AppendASCII("user_script_basic.user.js"); |
1847 .AppendASCII("user_script_basic.user.js"); | |
1848 | 1686 |
1849 ASSERT_TRUE(base::PathExists(path)); | 1687 ASSERT_TRUE(base::PathExists(path)); |
1850 scoped_refptr<CrxInstaller> installer(CrxInstaller::CreateSilent(service_)); | 1688 scoped_refptr<CrxInstaller> installer(CrxInstaller::CreateSilent(service())); |
1851 installer->set_allow_silent_install(true); | 1689 installer->set_allow_silent_install(true); |
1852 installer->InstallUserScript( | 1690 installer->InstallUserScript( |
1853 path, | 1691 path, |
1854 GURL("http://www.aaronboodman.com/scripts/user_script_basic.user.js")); | 1692 GURL("http://www.aaronboodman.com/scripts/user_script_basic.user.js")); |
1855 | 1693 |
1856 base::RunLoop().RunUntilIdle(); | 1694 base::RunLoop().RunUntilIdle(); |
1857 std::vector<base::string16> errors = GetErrors(); | 1695 std::vector<base::string16> errors = GetErrors(); |
1858 EXPECT_TRUE(installed_) << "Nothing was installed."; | 1696 EXPECT_TRUE(installed_) << "Nothing was installed."; |
1859 EXPECT_FALSE(was_update_) << path.value(); | 1697 EXPECT_FALSE(was_update_) << path.value(); |
1860 ASSERT_EQ(1u, loaded_.size()) << "Nothing was loaded."; | 1698 ASSERT_EQ(1u, loaded_.size()) << "Nothing was loaded."; |
1861 EXPECT_EQ(0u, errors.size()) << "There were errors: " | 1699 EXPECT_EQ(0u, errors.size()) << "There were errors: " |
1862 << JoinString(errors, ','); | 1700 << JoinString(errors, ','); |
1863 EXPECT_TRUE(service_->GetExtensionById(loaded_[0]->id(), false)) << | 1701 EXPECT_TRUE(service()->GetExtensionById(loaded_[0]->id(), false)) |
1864 path.value(); | 1702 << path.value(); |
1865 | 1703 |
1866 installed_ = NULL; | 1704 installed_ = NULL; |
1867 was_update_ = false; | 1705 was_update_ = false; |
1868 loaded_.clear(); | 1706 loaded_.clear(); |
1869 ExtensionErrorReporter::GetInstance()->ClearErrors(); | 1707 ExtensionErrorReporter::GetInstance()->ClearErrors(); |
1870 } | 1708 } |
1871 | 1709 |
1872 // Extensions don't install during shutdown. | 1710 // Extensions don't install during shutdown. |
1873 TEST_F(ExtensionServiceTest, InstallExtensionDuringShutdown) { | 1711 TEST_F(ExtensionServiceTest, InstallExtensionDuringShutdown) { |
1874 InitializeEmptyExtensionService(); | 1712 InitializeEmptyExtensionService(); |
1875 | 1713 |
1876 // Simulate shutdown. | 1714 // Simulate shutdown. |
1877 service_->set_browser_terminating_for_test(true); | 1715 service()->set_browser_terminating_for_test(true); |
1878 | 1716 |
1879 base::FilePath path = data_dir_.AppendASCII("good.crx"); | 1717 base::FilePath path = data_dir().AppendASCII("good.crx"); |
1880 scoped_refptr<CrxInstaller> installer(CrxInstaller::CreateSilent(service_)); | 1718 scoped_refptr<CrxInstaller> installer(CrxInstaller::CreateSilent(service())); |
1881 installer->set_allow_silent_install(true); | 1719 installer->set_allow_silent_install(true); |
1882 installer->InstallCrx(path); | 1720 installer->InstallCrx(path); |
1883 base::RunLoop().RunUntilIdle(); | 1721 base::RunLoop().RunUntilIdle(); |
1884 | 1722 |
1885 EXPECT_FALSE(installed_) << "Extension installed during shutdown."; | 1723 EXPECT_FALSE(installed_) << "Extension installed during shutdown."; |
1886 ASSERT_EQ(0u, loaded_.size()) << "Extension loaded during shutdown."; | 1724 ASSERT_EQ(0u, loaded_.size()) << "Extension loaded during shutdown."; |
1887 } | 1725 } |
1888 | 1726 |
1889 // This tests that the granted permissions preferences are correctly set when | 1727 // This tests that the granted permissions preferences are correctly set when |
1890 // installing an extension. | 1728 // installing an extension. |
1891 TEST_F(ExtensionServiceTest, GrantedPermissions) { | 1729 TEST_F(ExtensionServiceTest, GrantedPermissions) { |
1892 InitializeEmptyExtensionService(); | 1730 InitializeEmptyExtensionService(); |
1893 base::FilePath path = data_dir_ | 1731 base::FilePath path = data_dir().AppendASCII("permissions"); |
1894 .AppendASCII("permissions"); | |
1895 | 1732 |
1896 base::FilePath pem_path = path.AppendASCII("unknown.pem"); | 1733 base::FilePath pem_path = path.AppendASCII("unknown.pem"); |
1897 path = path.AppendASCII("unknown"); | 1734 path = path.AppendASCII("unknown"); |
1898 | 1735 |
1899 ASSERT_TRUE(base::PathExists(pem_path)); | 1736 ASSERT_TRUE(base::PathExists(pem_path)); |
1900 ASSERT_TRUE(base::PathExists(path)); | 1737 ASSERT_TRUE(base::PathExists(path)); |
1901 | 1738 |
1902 ExtensionPrefs* prefs = ExtensionPrefs::Get(profile_.get()); | 1739 ExtensionPrefs* prefs = ExtensionPrefs::Get(profile()); |
1903 | 1740 |
1904 APIPermissionSet expected_api_perms; | 1741 APIPermissionSet expected_api_perms; |
1905 URLPatternSet expected_host_perms; | 1742 URLPatternSet expected_host_perms; |
1906 | 1743 |
1907 // Make sure there aren't any granted permissions before the | 1744 // Make sure there aren't any granted permissions before the |
1908 // extension is installed. | 1745 // extension is installed. |
1909 scoped_refptr<PermissionSet> known_perms( | 1746 scoped_refptr<PermissionSet> known_perms( |
1910 prefs->GetGrantedPermissions(permissions_crx)); | 1747 prefs->GetGrantedPermissions(permissions_crx)); |
1911 EXPECT_FALSE(known_perms.get()); | 1748 EXPECT_FALSE(known_perms.get()); |
1912 | 1749 |
1913 const Extension* extension = PackAndInstallCRX(path, pem_path, INSTALL_NEW); | 1750 const Extension* extension = PackAndInstallCRX(path, pem_path, INSTALL_NEW); |
1914 | 1751 |
1915 EXPECT_EQ(0u, GetErrors().size()); | 1752 EXPECT_EQ(0u, GetErrors().size()); |
1916 ASSERT_EQ(1u, registry_->enabled_extensions().size()); | 1753 ASSERT_EQ(1u, registry()->enabled_extensions().size()); |
1917 EXPECT_EQ(permissions_crx, extension->id()); | 1754 EXPECT_EQ(permissions_crx, extension->id()); |
1918 | 1755 |
1919 // Verify that the valid API permissions have been recognized. | 1756 // Verify that the valid API permissions have been recognized. |
1920 expected_api_perms.insert(APIPermission::kTab); | 1757 expected_api_perms.insert(APIPermission::kTab); |
1921 | 1758 |
1922 AddPattern(&expected_host_perms, "http://*.google.com/*"); | 1759 AddPattern(&expected_host_perms, "http://*.google.com/*"); |
1923 AddPattern(&expected_host_perms, "https://*.google.com/*"); | 1760 AddPattern(&expected_host_perms, "https://*.google.com/*"); |
1924 AddPattern(&expected_host_perms, "http://*.google.com.hk/*"); | 1761 AddPattern(&expected_host_perms, "http://*.google.com.hk/*"); |
1925 AddPattern(&expected_host_perms, "http://www.example.com/*"); | 1762 AddPattern(&expected_host_perms, "http://www.example.com/*"); |
1926 | 1763 |
1927 known_perms = prefs->GetGrantedPermissions(extension->id()); | 1764 known_perms = prefs->GetGrantedPermissions(extension->id()); |
1928 EXPECT_TRUE(known_perms.get()); | 1765 EXPECT_TRUE(known_perms.get()); |
1929 EXPECT_FALSE(known_perms->IsEmpty()); | 1766 EXPECT_FALSE(known_perms->IsEmpty()); |
1930 EXPECT_EQ(expected_api_perms, known_perms->apis()); | 1767 EXPECT_EQ(expected_api_perms, known_perms->apis()); |
1931 EXPECT_FALSE(known_perms->HasEffectiveFullAccess()); | 1768 EXPECT_FALSE(known_perms->HasEffectiveFullAccess()); |
1932 EXPECT_EQ(expected_host_perms, known_perms->effective_hosts()); | 1769 EXPECT_EQ(expected_host_perms, known_perms->effective_hosts()); |
1933 } | 1770 } |
1934 | 1771 |
1935 | 1772 |
1936 #if !defined(OS_CHROMEOS) | 1773 #if !defined(OS_CHROMEOS) |
1937 // This tests that the granted permissions preferences are correctly set for | 1774 // This tests that the granted permissions preferences are correctly set for |
1938 // default apps. | 1775 // default apps. |
1939 TEST_F(ExtensionServiceTest, DefaultAppsGrantedPermissions) { | 1776 TEST_F(ExtensionServiceTest, DefaultAppsGrantedPermissions) { |
1940 InitializeEmptyExtensionService(); | 1777 InitializeEmptyExtensionService(); |
1941 base::FilePath path = data_dir_ | 1778 base::FilePath path = data_dir().AppendASCII("permissions"); |
1942 .AppendASCII("permissions"); | |
1943 | 1779 |
1944 base::FilePath pem_path = path.AppendASCII("unknown.pem"); | 1780 base::FilePath pem_path = path.AppendASCII("unknown.pem"); |
1945 path = path.AppendASCII("unknown"); | 1781 path = path.AppendASCII("unknown"); |
1946 | 1782 |
1947 ASSERT_TRUE(base::PathExists(pem_path)); | 1783 ASSERT_TRUE(base::PathExists(pem_path)); |
1948 ASSERT_TRUE(base::PathExists(path)); | 1784 ASSERT_TRUE(base::PathExists(path)); |
1949 | 1785 |
1950 ExtensionPrefs* prefs = ExtensionPrefs::Get(profile_.get()); | 1786 ExtensionPrefs* prefs = ExtensionPrefs::Get(profile()); |
1951 | 1787 |
1952 APIPermissionSet expected_api_perms; | 1788 APIPermissionSet expected_api_perms; |
1953 URLPatternSet expected_host_perms; | 1789 URLPatternSet expected_host_perms; |
1954 | 1790 |
1955 // Make sure there aren't any granted permissions before the | 1791 // Make sure there aren't any granted permissions before the |
1956 // extension is installed. | 1792 // extension is installed. |
1957 scoped_refptr<PermissionSet> known_perms( | 1793 scoped_refptr<PermissionSet> known_perms( |
1958 prefs->GetGrantedPermissions(permissions_crx)); | 1794 prefs->GetGrantedPermissions(permissions_crx)); |
1959 EXPECT_FALSE(known_perms.get()); | 1795 EXPECT_FALSE(known_perms.get()); |
1960 | 1796 |
1961 const Extension* extension = PackAndInstallCRX( | 1797 const Extension* extension = PackAndInstallCRX( |
1962 path, pem_path, INSTALL_NEW, Extension::WAS_INSTALLED_BY_DEFAULT); | 1798 path, pem_path, INSTALL_NEW, Extension::WAS_INSTALLED_BY_DEFAULT); |
1963 | 1799 |
1964 EXPECT_EQ(0u, GetErrors().size()); | 1800 EXPECT_EQ(0u, GetErrors().size()); |
1965 ASSERT_EQ(1u, registry_->enabled_extensions().size()); | 1801 ASSERT_EQ(1u, registry()->enabled_extensions().size()); |
1966 EXPECT_EQ(permissions_crx, extension->id()); | 1802 EXPECT_EQ(permissions_crx, extension->id()); |
1967 | 1803 |
1968 // Verify that the valid API permissions have been recognized. | 1804 // Verify that the valid API permissions have been recognized. |
1969 expected_api_perms.insert(APIPermission::kTab); | 1805 expected_api_perms.insert(APIPermission::kTab); |
1970 | 1806 |
1971 known_perms = prefs->GetGrantedPermissions(extension->id()); | 1807 known_perms = prefs->GetGrantedPermissions(extension->id()); |
1972 EXPECT_TRUE(known_perms.get()); | 1808 EXPECT_TRUE(known_perms.get()); |
1973 EXPECT_FALSE(known_perms->IsEmpty()); | 1809 EXPECT_FALSE(known_perms->IsEmpty()); |
1974 EXPECT_EQ(expected_api_perms, known_perms->apis()); | 1810 EXPECT_EQ(expected_api_perms, known_perms->apis()); |
1975 EXPECT_FALSE(known_perms->HasEffectiveFullAccess()); | 1811 EXPECT_FALSE(known_perms->HasEffectiveFullAccess()); |
1976 } | 1812 } |
1977 #endif | 1813 #endif |
1978 | 1814 |
1979 #if !defined(OS_POSIX) || defined(OS_MACOSX) | 1815 #if !defined(OS_POSIX) || defined(OS_MACOSX) |
1980 // Tests that the granted permissions full_access bit gets set correctly when | 1816 // Tests that the granted permissions full_access bit gets set correctly when |
1981 // an extension contains an NPAPI plugin. | 1817 // an extension contains an NPAPI plugin. |
1982 // Only run this on platforms that support NPAPI plugins. | 1818 // Only run this on platforms that support NPAPI plugins. |
1983 TEST_F(ExtensionServiceTest, GrantedFullAccessPermissions) { | 1819 TEST_F(ExtensionServiceTest, GrantedFullAccessPermissions) { |
1984 InitPluginService(); | 1820 InitPluginService(); |
1985 | 1821 |
1986 InitializeEmptyExtensionService(); | 1822 InitializeEmptyExtensionService(); |
1987 | 1823 |
1988 ASSERT_TRUE(base::PathExists(good1_path())); | 1824 ASSERT_TRUE(base::PathExists(good1_path())); |
1989 const Extension* extension = PackAndInstallCRX(good1_path(), INSTALL_NEW); | 1825 const Extension* extension = PackAndInstallCRX(good1_path(), INSTALL_NEW); |
1990 EXPECT_EQ(0u, GetErrors().size()); | 1826 EXPECT_EQ(0u, GetErrors().size()); |
1991 EXPECT_EQ(1u, registry_->enabled_extensions().size()); | 1827 EXPECT_EQ(1u, registry()->enabled_extensions().size()); |
1992 ExtensionPrefs* prefs = ExtensionPrefs::Get(profile_.get()); | 1828 ExtensionPrefs* prefs = ExtensionPrefs::Get(profile()); |
1993 | 1829 |
1994 scoped_refptr<PermissionSet> permissions( | 1830 scoped_refptr<PermissionSet> permissions( |
1995 prefs->GetGrantedPermissions(extension->id())); | 1831 prefs->GetGrantedPermissions(extension->id())); |
1996 EXPECT_FALSE(permissions->IsEmpty()); | 1832 EXPECT_FALSE(permissions->IsEmpty()); |
1997 EXPECT_TRUE(permissions->HasEffectiveFullAccess()); | 1833 EXPECT_TRUE(permissions->HasEffectiveFullAccess()); |
1998 EXPECT_FALSE(permissions->apis().empty()); | 1834 EXPECT_FALSE(permissions->apis().empty()); |
1999 EXPECT_TRUE(permissions->HasAPIPermission(APIPermission::kPlugin)); | 1835 EXPECT_TRUE(permissions->HasAPIPermission(APIPermission::kPlugin)); |
2000 | 1836 |
2001 // Full access implies full host access too... | 1837 // Full access implies full host access too... |
2002 EXPECT_TRUE(permissions->HasEffectiveAccessToAllHosts()); | 1838 EXPECT_TRUE(permissions->HasEffectiveAccessToAllHosts()); |
2003 } | 1839 } |
2004 #endif | 1840 #endif |
2005 | 1841 |
2006 // Tests that the extension is disabled when permissions are missing from | 1842 // Tests that the extension is disabled when permissions are missing from |
2007 // the extension's granted permissions preferences. (This simulates updating | 1843 // the extension's granted permissions preferences. (This simulates updating |
2008 // the browser to a version which recognizes more permissions). | 1844 // the browser to a version which recognizes more permissions). |
2009 TEST_F(ExtensionServiceTest, GrantedAPIAndHostPermissions) { | 1845 TEST_F(ExtensionServiceTest, GrantedAPIAndHostPermissions) { |
2010 InitializeEmptyExtensionService(); | 1846 InitializeEmptyExtensionService(); |
2011 | 1847 |
2012 base::FilePath path = data_dir_ | 1848 base::FilePath path = |
2013 .AppendASCII("permissions") | 1849 data_dir().AppendASCII("permissions").AppendASCII("unknown"); |
2014 .AppendASCII("unknown"); | |
2015 | 1850 |
2016 ASSERT_TRUE(base::PathExists(path)); | 1851 ASSERT_TRUE(base::PathExists(path)); |
2017 | 1852 |
2018 const Extension* extension = PackAndInstallCRX(path, INSTALL_NEW); | 1853 const Extension* extension = PackAndInstallCRX(path, INSTALL_NEW); |
2019 | 1854 |
2020 EXPECT_EQ(0u, GetErrors().size()); | 1855 EXPECT_EQ(0u, GetErrors().size()); |
2021 EXPECT_EQ(1u, registry_->enabled_extensions().size()); | 1856 EXPECT_EQ(1u, registry()->enabled_extensions().size()); |
2022 std::string extension_id = extension->id(); | 1857 std::string extension_id = extension->id(); |
2023 | 1858 |
2024 ExtensionPrefs* prefs = ExtensionPrefs::Get(profile_.get()); | 1859 ExtensionPrefs* prefs = ExtensionPrefs::Get(profile()); |
2025 | 1860 |
2026 APIPermissionSet expected_api_permissions; | 1861 APIPermissionSet expected_api_permissions; |
2027 URLPatternSet expected_host_permissions; | 1862 URLPatternSet expected_host_permissions; |
2028 | 1863 |
2029 expected_api_permissions.insert(APIPermission::kTab); | 1864 expected_api_permissions.insert(APIPermission::kTab); |
2030 AddPattern(&expected_host_permissions, "http://*.google.com/*"); | 1865 AddPattern(&expected_host_permissions, "http://*.google.com/*"); |
2031 AddPattern(&expected_host_permissions, "https://*.google.com/*"); | 1866 AddPattern(&expected_host_permissions, "https://*.google.com/*"); |
2032 AddPattern(&expected_host_permissions, "http://*.google.com.hk/*"); | 1867 AddPattern(&expected_host_permissions, "http://*.google.com.hk/*"); |
2033 AddPattern(&expected_host_permissions, "http://www.example.com/*"); | 1868 AddPattern(&expected_host_permissions, "http://www.example.com/*"); |
2034 | 1869 |
2035 std::set<std::string> host_permissions; | 1870 std::set<std::string> host_permissions; |
2036 | 1871 |
2037 // Test that the extension is disabled when an API permission is missing from | 1872 // Test that the extension is disabled when an API permission is missing from |
2038 // the extension's granted api permissions preference. (This simulates | 1873 // the extension's granted api permissions preference. (This simulates |
2039 // updating the browser to a version which recognizes a new API permission). | 1874 // updating the browser to a version which recognizes a new API permission). |
2040 SetPref(extension_id, "granted_permissions.api", | 1875 SetPref(extension_id, "granted_permissions.api", |
2041 new base::ListValue(), "granted_permissions.api"); | 1876 new base::ListValue(), "granted_permissions.api"); |
2042 service_->ReloadExtensionsForTest(); | 1877 service()->ReloadExtensionsForTest(); |
2043 | 1878 |
2044 EXPECT_EQ(1u, registry_->disabled_extensions().size()); | 1879 EXPECT_EQ(1u, registry()->disabled_extensions().size()); |
2045 extension = registry_->disabled_extensions().begin()->get(); | 1880 extension = registry()->disabled_extensions().begin()->get(); |
2046 | 1881 |
2047 ASSERT_TRUE(prefs->IsExtensionDisabled(extension_id)); | 1882 ASSERT_TRUE(prefs->IsExtensionDisabled(extension_id)); |
2048 ASSERT_FALSE(service_->IsExtensionEnabled(extension_id)); | 1883 ASSERT_FALSE(service()->IsExtensionEnabled(extension_id)); |
2049 ASSERT_TRUE(prefs->DidExtensionEscalatePermissions(extension_id)); | 1884 ASSERT_TRUE(prefs->DidExtensionEscalatePermissions(extension_id)); |
2050 | 1885 |
2051 // Now grant and re-enable the extension, making sure the prefs are updated. | 1886 // Now grant and re-enable the extension, making sure the prefs are updated. |
2052 service_->GrantPermissionsAndEnableExtension(extension); | 1887 service()->GrantPermissionsAndEnableExtension(extension); |
2053 | 1888 |
2054 ASSERT_FALSE(prefs->IsExtensionDisabled(extension_id)); | 1889 ASSERT_FALSE(prefs->IsExtensionDisabled(extension_id)); |
2055 ASSERT_TRUE(service_->IsExtensionEnabled(extension_id)); | 1890 ASSERT_TRUE(service()->IsExtensionEnabled(extension_id)); |
2056 ASSERT_FALSE(prefs->DidExtensionEscalatePermissions(extension_id)); | 1891 ASSERT_FALSE(prefs->DidExtensionEscalatePermissions(extension_id)); |
2057 | 1892 |
2058 scoped_refptr<PermissionSet> current_perms( | 1893 scoped_refptr<PermissionSet> current_perms( |
2059 prefs->GetGrantedPermissions(extension_id)); | 1894 prefs->GetGrantedPermissions(extension_id)); |
2060 ASSERT_TRUE(current_perms.get()); | 1895 ASSERT_TRUE(current_perms.get()); |
2061 ASSERT_FALSE(current_perms->IsEmpty()); | 1896 ASSERT_FALSE(current_perms->IsEmpty()); |
2062 ASSERT_FALSE(current_perms->HasEffectiveFullAccess()); | 1897 ASSERT_FALSE(current_perms->HasEffectiveFullAccess()); |
2063 ASSERT_EQ(expected_api_permissions, current_perms->apis()); | 1898 ASSERT_EQ(expected_api_permissions, current_perms->apis()); |
2064 ASSERT_EQ(expected_host_permissions, current_perms->effective_hosts()); | 1899 ASSERT_EQ(expected_host_permissions, current_perms->effective_hosts()); |
2065 | 1900 |
2066 // Tests that the extension is disabled when a host permission is missing from | 1901 // Tests that the extension is disabled when a host permission is missing from |
2067 // the extension's granted host permissions preference. (This simulates | 1902 // the extension's granted host permissions preference. (This simulates |
2068 // updating the browser to a version which recognizes additional host | 1903 // updating the browser to a version which recognizes additional host |
2069 // permissions). | 1904 // permissions). |
2070 host_permissions.clear(); | 1905 host_permissions.clear(); |
2071 current_perms = NULL; | 1906 current_perms = NULL; |
2072 | 1907 |
2073 host_permissions.insert("http://*.google.com/*"); | 1908 host_permissions.insert("http://*.google.com/*"); |
2074 host_permissions.insert("https://*.google.com/*"); | 1909 host_permissions.insert("https://*.google.com/*"); |
2075 host_permissions.insert("http://*.google.com.hk/*"); | 1910 host_permissions.insert("http://*.google.com.hk/*"); |
2076 | 1911 |
2077 base::ListValue* api_permissions = new base::ListValue(); | 1912 base::ListValue* api_permissions = new base::ListValue(); |
2078 api_permissions->Append( | 1913 api_permissions->Append( |
2079 new base::StringValue("tabs")); | 1914 new base::StringValue("tabs")); |
2080 SetPref(extension_id, "granted_permissions.api", | 1915 SetPref(extension_id, "granted_permissions.api", |
2081 api_permissions, "granted_permissions.api"); | 1916 api_permissions, "granted_permissions.api"); |
2082 SetPrefStringSet( | 1917 SetPrefStringSet( |
2083 extension_id, "granted_permissions.scriptable_host", host_permissions); | 1918 extension_id, "granted_permissions.scriptable_host", host_permissions); |
2084 | 1919 |
2085 service_->ReloadExtensionsForTest(); | 1920 service()->ReloadExtensionsForTest(); |
2086 | 1921 |
2087 EXPECT_EQ(1u, registry_->disabled_extensions().size()); | 1922 EXPECT_EQ(1u, registry()->disabled_extensions().size()); |
2088 extension = registry_->disabled_extensions().begin()->get(); | 1923 extension = registry()->disabled_extensions().begin()->get(); |
2089 | 1924 |
2090 ASSERT_TRUE(prefs->IsExtensionDisabled(extension_id)); | 1925 ASSERT_TRUE(prefs->IsExtensionDisabled(extension_id)); |
2091 ASSERT_FALSE(service_->IsExtensionEnabled(extension_id)); | 1926 ASSERT_FALSE(service()->IsExtensionEnabled(extension_id)); |
2092 ASSERT_TRUE(prefs->DidExtensionEscalatePermissions(extension_id)); | 1927 ASSERT_TRUE(prefs->DidExtensionEscalatePermissions(extension_id)); |
2093 | 1928 |
2094 // Now grant and re-enable the extension, making sure the prefs are updated. | 1929 // Now grant and re-enable the extension, making sure the prefs are updated. |
2095 service_->GrantPermissionsAndEnableExtension(extension); | 1930 service()->GrantPermissionsAndEnableExtension(extension); |
2096 | 1931 |
2097 ASSERT_TRUE(service_->IsExtensionEnabled(extension_id)); | 1932 ASSERT_TRUE(service()->IsExtensionEnabled(extension_id)); |
2098 ASSERT_FALSE(prefs->DidExtensionEscalatePermissions(extension_id)); | 1933 ASSERT_FALSE(prefs->DidExtensionEscalatePermissions(extension_id)); |
2099 | 1934 |
2100 current_perms = prefs->GetGrantedPermissions(extension_id); | 1935 current_perms = prefs->GetGrantedPermissions(extension_id); |
2101 ASSERT_TRUE(current_perms.get()); | 1936 ASSERT_TRUE(current_perms.get()); |
2102 ASSERT_FALSE(current_perms->IsEmpty()); | 1937 ASSERT_FALSE(current_perms->IsEmpty()); |
2103 ASSERT_FALSE(current_perms->HasEffectiveFullAccess()); | 1938 ASSERT_FALSE(current_perms->HasEffectiveFullAccess()); |
2104 ASSERT_EQ(expected_api_permissions, current_perms->apis()); | 1939 ASSERT_EQ(expected_api_permissions, current_perms->apis()); |
2105 ASSERT_EQ(expected_host_permissions, current_perms->effective_hosts()); | 1940 ASSERT_EQ(expected_host_permissions, current_perms->effective_hosts()); |
2106 } | 1941 } |
2107 | 1942 |
2108 // Test Packaging and installing an extension. | 1943 // Test Packaging and installing an extension. |
2109 TEST_F(ExtensionServiceTest, PackExtension) { | 1944 TEST_F(ExtensionServiceTest, PackExtension) { |
2110 InitializeEmptyExtensionService(); | 1945 InitializeEmptyExtensionService(); |
2111 base::FilePath input_directory = data_dir_ | 1946 base::FilePath input_directory = |
2112 .AppendASCII("good") | 1947 data_dir() |
2113 .AppendASCII("Extensions") | 1948 .AppendASCII("good") |
2114 .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj") | 1949 .AppendASCII("Extensions") |
2115 .AppendASCII("1.0.0.0"); | 1950 .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj") |
| 1951 .AppendASCII("1.0.0.0"); |
2116 | 1952 |
2117 base::ScopedTempDir temp_dir; | 1953 base::ScopedTempDir temp_dir; |
2118 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); | 1954 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
2119 base::FilePath output_directory = temp_dir.path(); | 1955 base::FilePath output_directory = temp_dir.path(); |
2120 | 1956 |
2121 base::FilePath crx_path(output_directory.AppendASCII("ex1.crx")); | 1957 base::FilePath crx_path(output_directory.AppendASCII("ex1.crx")); |
2122 base::FilePath privkey_path(output_directory.AppendASCII("privkey.pem")); | 1958 base::FilePath privkey_path(output_directory.AppendASCII("privkey.pem")); |
2123 | 1959 |
2124 scoped_ptr<ExtensionCreator> creator(new ExtensionCreator()); | 1960 scoped_ptr<ExtensionCreator> creator(new ExtensionCreator()); |
2125 ASSERT_TRUE(creator->Run(input_directory, crx_path, base::FilePath(), | 1961 ASSERT_TRUE(creator->Run(input_directory, crx_path, base::FilePath(), |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2163 std::string invalid_manifest_content = "I am not a manifest."; | 1999 std::string invalid_manifest_content = "I am not a manifest."; |
2164 ASSERT_TRUE(base::WriteFile( | 2000 ASSERT_TRUE(base::WriteFile( |
2165 temp_dir2.path().Append(extensions::kManifestFilename), | 2001 temp_dir2.path().Append(extensions::kManifestFilename), |
2166 invalid_manifest_content.c_str(), invalid_manifest_content.size())); | 2002 invalid_manifest_content.c_str(), invalid_manifest_content.size())); |
2167 creator.reset(new ExtensionCreator()); | 2003 creator.reset(new ExtensionCreator()); |
2168 ASSERT_FALSE(creator->Run(temp_dir2.path(), crx_path, privkey_path, | 2004 ASSERT_FALSE(creator->Run(temp_dir2.path(), crx_path, privkey_path, |
2169 base::FilePath(), ExtensionCreator::kOverwriteCRX)); | 2005 base::FilePath(), ExtensionCreator::kOverwriteCRX)); |
2170 | 2006 |
2171 // Try packing with a private key that is a valid key, but invalid for the | 2007 // Try packing with a private key that is a valid key, but invalid for the |
2172 // extension. | 2008 // extension. |
2173 base::FilePath bad_private_key_dir = data_dir_.AppendASCII("bad_private_key"); | 2009 base::FilePath bad_private_key_dir = |
| 2010 data_dir().AppendASCII("bad_private_key"); |
2174 crx_path = output_directory.AppendASCII("bad_private_key.crx"); | 2011 crx_path = output_directory.AppendASCII("bad_private_key.crx"); |
2175 privkey_path = data_dir_.AppendASCII("bad_private_key.pem"); | 2012 privkey_path = data_dir().AppendASCII("bad_private_key.pem"); |
2176 ASSERT_FALSE(creator->Run(bad_private_key_dir, crx_path, base::FilePath(), | 2013 ASSERT_FALSE(creator->Run(bad_private_key_dir, crx_path, base::FilePath(), |
2177 privkey_path, ExtensionCreator::kOverwriteCRX)); | 2014 privkey_path, ExtensionCreator::kOverwriteCRX)); |
2178 } | 2015 } |
2179 | 2016 |
2180 // Test Packaging and installing an extension whose name contains punctuation. | 2017 // Test Packaging and installing an extension whose name contains punctuation. |
2181 TEST_F(ExtensionServiceTest, PackPunctuatedExtension) { | 2018 TEST_F(ExtensionServiceTest, PackPunctuatedExtension) { |
2182 InitializeEmptyExtensionService(); | 2019 InitializeEmptyExtensionService(); |
2183 base::FilePath input_directory = data_dir_ | 2020 base::FilePath input_directory = data_dir() |
2184 .AppendASCII("good") | 2021 .AppendASCII("good") |
2185 .AppendASCII("Extensions") | 2022 .AppendASCII("Extensions") |
2186 .AppendASCII(good0) | 2023 .AppendASCII(good0) |
2187 .AppendASCII("1.0.0.0"); | 2024 .AppendASCII("1.0.0.0"); |
2188 | 2025 |
2189 base::ScopedTempDir temp_dir; | 2026 base::ScopedTempDir temp_dir; |
2190 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); | 2027 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
2191 | 2028 |
2192 // Extension names containing punctuation, and the expected names for the | 2029 // Extension names containing punctuation, and the expected names for the |
2193 // packed extensions. | 2030 // packed extensions. |
2194 const base::FilePath punctuated_names[] = { | 2031 const base::FilePath punctuated_names[] = { |
2195 base::FilePath(FILE_PATH_LITERAL("this.extensions.name.has.periods")), | 2032 base::FilePath(FILE_PATH_LITERAL("this.extensions.name.has.periods")), |
2196 base::FilePath(FILE_PATH_LITERAL(".thisextensionsnamestartswithaperiod")), | 2033 base::FilePath(FILE_PATH_LITERAL(".thisextensionsnamestartswithaperiod")), |
2197 base::FilePath(FILE_PATH_LITERAL("thisextensionhasaslashinitsname/")). | 2034 base::FilePath(FILE_PATH_LITERAL("thisextensionhasaslashinitsname/")). |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2243 InstallCRX(expected_crx_path, INSTALL_NEW); | 2080 InstallCRX(expected_crx_path, INSTALL_NEW); |
2244 } | 2081 } |
2245 } | 2082 } |
2246 | 2083 |
2247 TEST_F(ExtensionServiceTest, PackExtensionContainingKeyFails) { | 2084 TEST_F(ExtensionServiceTest, PackExtensionContainingKeyFails) { |
2248 InitializeEmptyExtensionService(); | 2085 InitializeEmptyExtensionService(); |
2249 | 2086 |
2250 base::ScopedTempDir extension_temp_dir; | 2087 base::ScopedTempDir extension_temp_dir; |
2251 ASSERT_TRUE(extension_temp_dir.CreateUniqueTempDir()); | 2088 ASSERT_TRUE(extension_temp_dir.CreateUniqueTempDir()); |
2252 base::FilePath input_directory = extension_temp_dir.path().AppendASCII("ext"); | 2089 base::FilePath input_directory = extension_temp_dir.path().AppendASCII("ext"); |
2253 ASSERT_TRUE(base::CopyDirectory( | 2090 ASSERT_TRUE( |
2254 data_dir_ | 2091 base::CopyDirectory(data_dir() |
2255 .AppendASCII("good") | 2092 .AppendASCII("good") |
2256 .AppendASCII("Extensions") | 2093 .AppendASCII("Extensions") |
2257 .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj") | 2094 .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj") |
2258 .AppendASCII("1.0.0.0"), | 2095 .AppendASCII("1.0.0.0"), |
2259 input_directory, | 2096 input_directory, |
2260 /*recursive=*/true)); | 2097 /*recursive=*/true)); |
2261 | 2098 |
2262 base::ScopedTempDir output_temp_dir; | 2099 base::ScopedTempDir output_temp_dir; |
2263 ASSERT_TRUE(output_temp_dir.CreateUniqueTempDir()); | 2100 ASSERT_TRUE(output_temp_dir.CreateUniqueTempDir()); |
2264 base::FilePath output_directory = output_temp_dir.path(); | 2101 base::FilePath output_directory = output_temp_dir.path(); |
2265 | 2102 |
2266 base::FilePath crx_path(output_directory.AppendASCII("ex1.crx")); | 2103 base::FilePath crx_path(output_directory.AppendASCII("ex1.crx")); |
2267 base::FilePath privkey_path(output_directory.AppendASCII("privkey.pem")); | 2104 base::FilePath privkey_path(output_directory.AppendASCII("privkey.pem")); |
2268 | 2105 |
2269 // Pack the extension once to get a private key. | 2106 // Pack the extension once to get a private key. |
2270 scoped_ptr<ExtensionCreator> creator(new ExtensionCreator()); | 2107 scoped_ptr<ExtensionCreator> creator(new ExtensionCreator()); |
(...skipping 17 matching lines...) Expand all Loading... |
2288 } | 2125 } |
2289 | 2126 |
2290 // Test Packaging and installing an extension using an openssl generated key. | 2127 // Test Packaging and installing an extension using an openssl generated key. |
2291 // The openssl is generated with the following: | 2128 // The openssl is generated with the following: |
2292 // > openssl genrsa -out privkey.pem 1024 | 2129 // > openssl genrsa -out privkey.pem 1024 |
2293 // > openssl pkcs8 -topk8 -nocrypt -in privkey.pem -out privkey_asn1.pem | 2130 // > openssl pkcs8 -topk8 -nocrypt -in privkey.pem -out privkey_asn1.pem |
2294 // The privkey.pem is a PrivateKey, and the pcks8 -topk8 creates a | 2131 // The privkey.pem is a PrivateKey, and the pcks8 -topk8 creates a |
2295 // PrivateKeyInfo ASN.1 structure, we our RSAPrivateKey expects. | 2132 // PrivateKeyInfo ASN.1 structure, we our RSAPrivateKey expects. |
2296 TEST_F(ExtensionServiceTest, PackExtensionOpenSSLKey) { | 2133 TEST_F(ExtensionServiceTest, PackExtensionOpenSSLKey) { |
2297 InitializeEmptyExtensionService(); | 2134 InitializeEmptyExtensionService(); |
2298 base::FilePath input_directory = data_dir_ | 2135 base::FilePath input_directory = |
2299 .AppendASCII("good") | 2136 data_dir() |
2300 .AppendASCII("Extensions") | 2137 .AppendASCII("good") |
2301 .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj") | 2138 .AppendASCII("Extensions") |
2302 .AppendASCII("1.0.0.0"); | 2139 .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj") |
2303 base::FilePath privkey_path(data_dir_.AppendASCII( | 2140 .AppendASCII("1.0.0.0"); |
2304 "openssl_privkey_asn1.pem")); | 2141 base::FilePath privkey_path( |
| 2142 data_dir().AppendASCII("openssl_privkey_asn1.pem")); |
2305 ASSERT_TRUE(base::PathExists(privkey_path)); | 2143 ASSERT_TRUE(base::PathExists(privkey_path)); |
2306 | 2144 |
2307 base::ScopedTempDir temp_dir; | 2145 base::ScopedTempDir temp_dir; |
2308 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); | 2146 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
2309 base::FilePath output_directory = temp_dir.path(); | 2147 base::FilePath output_directory = temp_dir.path(); |
2310 | 2148 |
2311 base::FilePath crx_path(output_directory.AppendASCII("ex1.crx")); | 2149 base::FilePath crx_path(output_directory.AppendASCII("ex1.crx")); |
2312 | 2150 |
2313 scoped_ptr<ExtensionCreator> creator(new ExtensionCreator()); | 2151 scoped_ptr<ExtensionCreator> creator(new ExtensionCreator()); |
2314 ASSERT_TRUE(creator->Run(input_directory, crx_path, privkey_path, | 2152 ASSERT_TRUE(creator->Run(input_directory, crx_path, privkey_path, |
2315 base::FilePath(), ExtensionCreator::kOverwriteCRX)); | 2153 base::FilePath(), ExtensionCreator::kOverwriteCRX)); |
2316 | 2154 |
2317 InstallCRX(crx_path, INSTALL_NEW); | 2155 InstallCRX(crx_path, INSTALL_NEW); |
2318 } | 2156 } |
2319 | 2157 |
2320 #if defined(THREAD_SANITIZER) | 2158 #if defined(THREAD_SANITIZER) |
2321 // Flaky under Tsan. http://crbug.com/377702 | 2159 // Flaky under Tsan. http://crbug.com/377702 |
2322 #define MAYBE_InstallTheme DISABLED_InstallTheme | 2160 #define MAYBE_InstallTheme DISABLED_InstallTheme |
2323 #else | 2161 #else |
2324 #define MAYBE_InstallTheme InstallTheme | 2162 #define MAYBE_InstallTheme InstallTheme |
2325 #endif | 2163 #endif |
2326 | 2164 |
2327 TEST_F(ExtensionServiceTest, MAYBE_InstallTheme) { | 2165 TEST_F(ExtensionServiceTest, MAYBE_InstallTheme) { |
2328 InitializeEmptyExtensionService(); | 2166 InitializeEmptyExtensionService(); |
2329 service_->Init(); | 2167 service()->Init(); |
2330 | 2168 |
2331 // A theme. | 2169 // A theme. |
2332 base::FilePath path = data_dir_.AppendASCII("theme.crx"); | 2170 base::FilePath path = data_dir().AppendASCII("theme.crx"); |
2333 InstallCRX(path, INSTALL_NEW); | 2171 InstallCRX(path, INSTALL_NEW); |
2334 int pref_count = 0; | 2172 int pref_count = 0; |
2335 ValidatePrefKeyCount(++pref_count); | 2173 ValidatePrefKeyCount(++pref_count); |
2336 ValidateIntegerPref(theme_crx, "state", Extension::ENABLED); | 2174 ValidateIntegerPref(theme_crx, "state", Extension::ENABLED); |
2337 ValidateIntegerPref(theme_crx, "location", Manifest::INTERNAL); | 2175 ValidateIntegerPref(theme_crx, "location", Manifest::INTERNAL); |
2338 | 2176 |
2339 // A theme when extensions are disabled. Themes can be installed, even when | 2177 // A theme when extensions are disabled. Themes can be installed, even when |
2340 // extensions are disabled. | 2178 // extensions are disabled. |
2341 set_extensions_enabled(false); | 2179 service()->set_extensions_enabled(false); |
2342 path = data_dir_.AppendASCII("theme2.crx"); | 2180 path = data_dir().AppendASCII("theme2.crx"); |
2343 InstallCRX(path, INSTALL_NEW); | 2181 InstallCRX(path, INSTALL_NEW); |
2344 ValidatePrefKeyCount(++pref_count); | 2182 ValidatePrefKeyCount(++pref_count); |
2345 ValidateIntegerPref(theme2_crx, "state", Extension::ENABLED); | 2183 ValidateIntegerPref(theme2_crx, "state", Extension::ENABLED); |
2346 ValidateIntegerPref(theme2_crx, "location", Manifest::INTERNAL); | 2184 ValidateIntegerPref(theme2_crx, "location", Manifest::INTERNAL); |
2347 | 2185 |
2348 // A theme with extension elements. Themes cannot have extension elements, | 2186 // A theme with extension elements. Themes cannot have extension elements, |
2349 // so any such elements (like content scripts) should be ignored. | 2187 // so any such elements (like content scripts) should be ignored. |
2350 set_extensions_enabled(true); | 2188 service()->set_extensions_enabled(true); |
2351 { | 2189 { |
2352 path = data_dir_.AppendASCII("theme_with_extension.crx"); | 2190 path = data_dir().AppendASCII("theme_with_extension.crx"); |
2353 const Extension* extension = InstallCRX(path, INSTALL_NEW); | 2191 const Extension* extension = InstallCRX(path, INSTALL_NEW); |
2354 ValidatePrefKeyCount(++pref_count); | 2192 ValidatePrefKeyCount(++pref_count); |
2355 ASSERT_TRUE(extension); | 2193 ASSERT_TRUE(extension); |
2356 EXPECT_TRUE(extension->is_theme()); | 2194 EXPECT_TRUE(extension->is_theme()); |
2357 EXPECT_EQ( | 2195 EXPECT_EQ( |
2358 0u, | 2196 0u, |
2359 extensions::ContentScriptsInfo::GetContentScripts(extension).size()); | 2197 extensions::ContentScriptsInfo::GetContentScripts(extension).size()); |
2360 } | 2198 } |
2361 | 2199 |
2362 // A theme with image resources missing (misspelt path). | 2200 // A theme with image resources missing (misspelt path). |
2363 path = data_dir_.AppendASCII("theme_missing_image.crx"); | 2201 path = data_dir().AppendASCII("theme_missing_image.crx"); |
2364 InstallCRX(path, INSTALL_FAILED); | 2202 InstallCRX(path, INSTALL_FAILED); |
2365 ValidatePrefKeyCount(pref_count); | 2203 ValidatePrefKeyCount(pref_count); |
2366 } | 2204 } |
2367 | 2205 |
2368 TEST_F(ExtensionServiceTest, LoadLocalizedTheme) { | 2206 TEST_F(ExtensionServiceTest, LoadLocalizedTheme) { |
2369 // Load. | 2207 // Load. |
2370 InitializeEmptyExtensionService(); | 2208 InitializeEmptyExtensionService(); |
2371 service_->Init(); | 2209 service()->Init(); |
2372 | 2210 |
2373 base::FilePath extension_path = data_dir_ | 2211 base::FilePath extension_path = data_dir().AppendASCII("theme_i18n"); |
2374 .AppendASCII("theme_i18n"); | |
2375 | 2212 |
2376 extensions::UnpackedInstaller::Create(service_)->Load(extension_path); | 2213 extensions::UnpackedInstaller::Create(service())->Load(extension_path); |
2377 base::RunLoop().RunUntilIdle(); | 2214 base::RunLoop().RunUntilIdle(); |
2378 EXPECT_EQ(0u, GetErrors().size()); | 2215 EXPECT_EQ(0u, GetErrors().size()); |
2379 ASSERT_EQ(1u, loaded_.size()); | 2216 ASSERT_EQ(1u, loaded_.size()); |
2380 EXPECT_EQ(1u, registry_->enabled_extensions().size()); | 2217 EXPECT_EQ(1u, registry()->enabled_extensions().size()); |
2381 const Extension* theme = registry_->enabled_extensions().begin()->get(); | 2218 const Extension* theme = registry()->enabled_extensions().begin()->get(); |
2382 EXPECT_EQ("name", theme->name()); | 2219 EXPECT_EQ("name", theme->name()); |
2383 EXPECT_EQ("description", theme->description()); | 2220 EXPECT_EQ("description", theme->description()); |
2384 | 2221 |
2385 // Cleanup the "Cached Theme.pak" file. Ideally, this would be installed in a | 2222 // Cleanup the "Cached Theme.pak" file. Ideally, this would be installed in a |
2386 // temporary directory, but it automatically installs to the extension's | 2223 // temporary directory, but it automatically installs to the extension's |
2387 // directory, and we don't want to copy the whole extension for a unittest. | 2224 // directory, and we don't want to copy the whole extension for a unittest. |
2388 base::FilePath theme_file = extension_path.Append(chrome::kThemePackFilename); | 2225 base::FilePath theme_file = extension_path.Append(chrome::kThemePackFilename); |
2389 ASSERT_TRUE(base::PathExists(theme_file)); | 2226 ASSERT_TRUE(base::PathExists(theme_file)); |
2390 ASSERT_TRUE(base::DeleteFile(theme_file, false)); // Not recursive. | 2227 ASSERT_TRUE(base::DeleteFile(theme_file, false)); // Not recursive. |
2391 } | 2228 } |
2392 | 2229 |
2393 // Tests that we can change the ID of an unpacked extension by adding a key | 2230 // Tests that we can change the ID of an unpacked extension by adding a key |
2394 // to its manifest. | 2231 // to its manifest. |
2395 TEST_F(ExtensionServiceTest, UnpackedExtensionCanChangeID) { | 2232 TEST_F(ExtensionServiceTest, UnpackedExtensionCanChangeID) { |
2396 InitializeEmptyExtensionService(); | 2233 InitializeEmptyExtensionService(); |
2397 | 2234 |
2398 base::ScopedTempDir temp; | 2235 base::ScopedTempDir temp; |
2399 ASSERT_TRUE(temp.CreateUniqueTempDir()); | 2236 ASSERT_TRUE(temp.CreateUniqueTempDir()); |
2400 | 2237 |
2401 base::FilePath extension_path = temp.path(); | 2238 base::FilePath extension_path = temp.path(); |
2402 base::FilePath manifest_path = | 2239 base::FilePath manifest_path = |
2403 extension_path.Append(extensions::kManifestFilename); | 2240 extension_path.Append(extensions::kManifestFilename); |
2404 base::FilePath manifest_no_key = data_dir_. | 2241 base::FilePath manifest_no_key = |
2405 AppendASCII("unpacked"). | 2242 data_dir().AppendASCII("unpacked").AppendASCII("manifest_no_key.json"); |
2406 AppendASCII("manifest_no_key.json"); | |
2407 | 2243 |
2408 base::FilePath manifest_with_key = data_dir_. | 2244 base::FilePath manifest_with_key = |
2409 AppendASCII("unpacked"). | 2245 data_dir().AppendASCII("unpacked").AppendASCII("manifest_with_key.json"); |
2410 AppendASCII("manifest_with_key.json"); | |
2411 | 2246 |
2412 ASSERT_TRUE(base::PathExists(manifest_no_key)); | 2247 ASSERT_TRUE(base::PathExists(manifest_no_key)); |
2413 ASSERT_TRUE(base::PathExists(manifest_with_key)); | 2248 ASSERT_TRUE(base::PathExists(manifest_with_key)); |
2414 | 2249 |
2415 // Load the unpacked extension with no key. | 2250 // Load the unpacked extension with no key. |
2416 base::CopyFile(manifest_no_key, manifest_path); | 2251 base::CopyFile(manifest_no_key, manifest_path); |
2417 extensions::UnpackedInstaller::Create(service_)->Load(extension_path); | 2252 extensions::UnpackedInstaller::Create(service())->Load(extension_path); |
2418 | 2253 |
2419 base::RunLoop().RunUntilIdle(); | 2254 base::RunLoop().RunUntilIdle(); |
2420 EXPECT_EQ(0u, GetErrors().size()); | 2255 EXPECT_EQ(0u, GetErrors().size()); |
2421 ASSERT_EQ(1u, loaded_.size()); | 2256 ASSERT_EQ(1u, loaded_.size()); |
2422 EXPECT_EQ(1u, registry_->enabled_extensions().size()); | 2257 EXPECT_EQ(1u, registry()->enabled_extensions().size()); |
2423 | 2258 |
2424 // Add the key to the manifest. | 2259 // Add the key to the manifest. |
2425 base::CopyFile(manifest_with_key, manifest_path); | 2260 base::CopyFile(manifest_with_key, manifest_path); |
2426 loaded_.clear(); | 2261 loaded_.clear(); |
2427 | 2262 |
2428 // Reload the extensions. | 2263 // Reload the extensions. |
2429 service_->ReloadExtensionsForTest(); | 2264 service()->ReloadExtensionsForTest(); |
2430 const Extension* extension = service_->GetExtensionById(unpacked, false); | 2265 const Extension* extension = service()->GetExtensionById(unpacked, false); |
2431 EXPECT_EQ(unpacked, extension->id()); | 2266 EXPECT_EQ(unpacked, extension->id()); |
2432 ASSERT_EQ(1u, loaded_.size()); | 2267 ASSERT_EQ(1u, loaded_.size()); |
2433 | 2268 |
2434 // TODO(jstritar): Right now this just makes sure we don't crash and burn, but | 2269 // TODO(jstritar): Right now this just makes sure we don't crash and burn, but |
2435 // we should also test that preferences are preserved. | 2270 // we should also test that preferences are preserved. |
2436 } | 2271 } |
2437 | 2272 |
2438 #if defined(OS_POSIX) | 2273 #if defined(OS_POSIX) |
2439 TEST_F(ExtensionServiceTest, UnpackedExtensionMayContainSymlinkedFiles) { | 2274 TEST_F(ExtensionServiceTest, UnpackedExtensionMayContainSymlinkedFiles) { |
2440 base::FilePath source_data_dir = data_dir_. | 2275 base::FilePath source_data_dir = |
2441 AppendASCII("unpacked"). | 2276 data_dir().AppendASCII("unpacked").AppendASCII("symlinks_allowed"); |
2442 AppendASCII("symlinks_allowed"); | |
2443 | 2277 |
2444 // Paths to test data files. | 2278 // Paths to test data files. |
2445 base::FilePath source_manifest = source_data_dir.AppendASCII("manifest.json"); | 2279 base::FilePath source_manifest = source_data_dir.AppendASCII("manifest.json"); |
2446 ASSERT_TRUE(base::PathExists(source_manifest)); | 2280 ASSERT_TRUE(base::PathExists(source_manifest)); |
2447 base::FilePath source_icon = source_data_dir.AppendASCII("icon.png"); | 2281 base::FilePath source_icon = source_data_dir.AppendASCII("icon.png"); |
2448 ASSERT_TRUE(base::PathExists(source_icon)); | 2282 ASSERT_TRUE(base::PathExists(source_icon)); |
2449 | 2283 |
2450 // Set up the temporary extension directory. | 2284 // Set up the temporary extension directory. |
2451 base::ScopedTempDir temp; | 2285 base::ScopedTempDir temp; |
2452 ASSERT_TRUE(temp.CreateUniqueTempDir()); | 2286 ASSERT_TRUE(temp.CreateUniqueTempDir()); |
2453 base::FilePath extension_path = temp.path(); | 2287 base::FilePath extension_path = temp.path(); |
2454 base::FilePath manifest = extension_path.Append( | 2288 base::FilePath manifest = extension_path.Append( |
2455 extensions::kManifestFilename); | 2289 extensions::kManifestFilename); |
2456 base::FilePath icon_symlink = extension_path.AppendASCII("icon.png"); | 2290 base::FilePath icon_symlink = extension_path.AppendASCII("icon.png"); |
2457 base::CopyFile(source_manifest, manifest); | 2291 base::CopyFile(source_manifest, manifest); |
2458 base::CreateSymbolicLink(source_icon, icon_symlink); | 2292 base::CreateSymbolicLink(source_icon, icon_symlink); |
2459 | 2293 |
2460 // Load extension. | 2294 // Load extension. |
2461 InitializeEmptyExtensionService(); | 2295 InitializeEmptyExtensionService(); |
2462 extensions::UnpackedInstaller::Create(service_)->Load(extension_path); | 2296 extensions::UnpackedInstaller::Create(service())->Load(extension_path); |
2463 base::RunLoop().RunUntilIdle(); | 2297 base::RunLoop().RunUntilIdle(); |
2464 | 2298 |
2465 EXPECT_TRUE(GetErrors().empty()); | 2299 EXPECT_TRUE(GetErrors().empty()); |
2466 ASSERT_EQ(1u, loaded_.size()); | 2300 ASSERT_EQ(1u, loaded_.size()); |
2467 EXPECT_EQ(1u, registry_->enabled_extensions().size()); | 2301 EXPECT_EQ(1u, registry()->enabled_extensions().size()); |
2468 } | 2302 } |
2469 #endif | 2303 #endif |
2470 | 2304 |
2471 TEST_F(ExtensionServiceTest, UnpackedExtensionMayNotHaveUnderscore) { | 2305 TEST_F(ExtensionServiceTest, UnpackedExtensionMayNotHaveUnderscore) { |
2472 InitializeEmptyExtensionService(); | 2306 InitializeEmptyExtensionService(); |
2473 base::FilePath extension_path = data_dir_ | 2307 base::FilePath extension_path = data_dir().AppendASCII("underscore_name"); |
2474 .AppendASCII("underscore_name"); | 2308 extensions::UnpackedInstaller::Create(service())->Load(extension_path); |
2475 extensions::UnpackedInstaller::Create(service_)->Load(extension_path); | |
2476 base::RunLoop().RunUntilIdle(); | 2309 base::RunLoop().RunUntilIdle(); |
2477 EXPECT_EQ(1u, GetErrors().size()); | 2310 EXPECT_EQ(1u, GetErrors().size()); |
2478 EXPECT_EQ(0u, registry_->enabled_extensions().size()); | 2311 EXPECT_EQ(0u, registry()->enabled_extensions().size()); |
2479 } | 2312 } |
2480 | 2313 |
2481 TEST_F(ExtensionServiceTest, InstallLocalizedTheme) { | 2314 TEST_F(ExtensionServiceTest, InstallLocalizedTheme) { |
2482 InitializeEmptyExtensionService(); | 2315 InitializeEmptyExtensionService(); |
2483 service_->Init(); | 2316 service()->Init(); |
2484 | 2317 |
2485 base::FilePath theme_path = data_dir_ | 2318 base::FilePath theme_path = data_dir().AppendASCII("theme_i18n"); |
2486 .AppendASCII("theme_i18n"); | |
2487 | 2319 |
2488 const Extension* theme = PackAndInstallCRX(theme_path, INSTALL_NEW); | 2320 const Extension* theme = PackAndInstallCRX(theme_path, INSTALL_NEW); |
2489 | 2321 |
2490 EXPECT_EQ(0u, GetErrors().size()); | 2322 EXPECT_EQ(0u, GetErrors().size()); |
2491 EXPECT_EQ(1u, registry_->enabled_extensions().size()); | 2323 EXPECT_EQ(1u, registry()->enabled_extensions().size()); |
2492 EXPECT_EQ("name", theme->name()); | 2324 EXPECT_EQ("name", theme->name()); |
2493 EXPECT_EQ("description", theme->description()); | 2325 EXPECT_EQ("description", theme->description()); |
2494 } | 2326 } |
2495 | 2327 |
2496 TEST_F(ExtensionServiceTest, InstallApps) { | 2328 TEST_F(ExtensionServiceTest, InstallApps) { |
2497 InitializeEmptyExtensionService(); | 2329 InitializeEmptyExtensionService(); |
2498 | 2330 |
2499 // An empty app. | 2331 // An empty app. |
2500 const Extension* app = PackAndInstallCRX(data_dir_.AppendASCII("app1"), | 2332 const Extension* app = |
2501 INSTALL_NEW); | 2333 PackAndInstallCRX(data_dir().AppendASCII("app1"), INSTALL_NEW); |
2502 int pref_count = 0; | 2334 int pref_count = 0; |
2503 ValidatePrefKeyCount(++pref_count); | 2335 ValidatePrefKeyCount(++pref_count); |
2504 ASSERT_EQ(1u, registry_->enabled_extensions().size()); | 2336 ASSERT_EQ(1u, registry()->enabled_extensions().size()); |
2505 ValidateIntegerPref(app->id(), "state", Extension::ENABLED); | 2337 ValidateIntegerPref(app->id(), "state", Extension::ENABLED); |
2506 ValidateIntegerPref(app->id(), "location", Manifest::INTERNAL); | 2338 ValidateIntegerPref(app->id(), "location", Manifest::INTERNAL); |
2507 | 2339 |
2508 // Another app with non-overlapping extent. Should succeed. | 2340 // Another app with non-overlapping extent. Should succeed. |
2509 PackAndInstallCRX(data_dir_.AppendASCII("app2"), INSTALL_NEW); | 2341 PackAndInstallCRX(data_dir().AppendASCII("app2"), INSTALL_NEW); |
2510 ValidatePrefKeyCount(++pref_count); | 2342 ValidatePrefKeyCount(++pref_count); |
2511 | 2343 |
2512 // A third app whose extent overlaps the first. Should fail. | 2344 // A third app whose extent overlaps the first. Should fail. |
2513 PackAndInstallCRX(data_dir_.AppendASCII("app3"), INSTALL_FAILED); | 2345 PackAndInstallCRX(data_dir().AppendASCII("app3"), INSTALL_FAILED); |
2514 ValidatePrefKeyCount(pref_count); | 2346 ValidatePrefKeyCount(pref_count); |
2515 } | 2347 } |
2516 | 2348 |
2517 // Tests that file access is OFF by default. | 2349 // Tests that file access is OFF by default. |
2518 TEST_F(ExtensionServiceTest, DefaultFileAccess) { | 2350 TEST_F(ExtensionServiceTest, DefaultFileAccess) { |
2519 InitializeEmptyExtensionService(); | 2351 InitializeEmptyExtensionService(); |
2520 const Extension* extension = | 2352 const Extension* extension = PackAndInstallCRX( |
2521 PackAndInstallCRX(data_dir_ | 2353 data_dir().AppendASCII("permissions").AppendASCII("files"), INSTALL_NEW); |
2522 .AppendASCII("permissions") | |
2523 .AppendASCII("files"), | |
2524 INSTALL_NEW); | |
2525 EXPECT_EQ(0u, GetErrors().size()); | 2354 EXPECT_EQ(0u, GetErrors().size()); |
2526 EXPECT_EQ(1u, registry_->enabled_extensions().size()); | 2355 EXPECT_EQ(1u, registry()->enabled_extensions().size()); |
2527 EXPECT_FALSE( | 2356 EXPECT_FALSE( |
2528 ExtensionPrefs::Get(profile_.get())->AllowFileAccess(extension->id())); | 2357 ExtensionPrefs::Get(profile())->AllowFileAccess(extension->id())); |
2529 } | 2358 } |
2530 | 2359 |
2531 TEST_F(ExtensionServiceTest, UpdateApps) { | 2360 TEST_F(ExtensionServiceTest, UpdateApps) { |
2532 InitializeEmptyExtensionService(); | 2361 InitializeEmptyExtensionService(); |
2533 base::FilePath extensions_path = data_dir_.AppendASCII("app_update"); | 2362 base::FilePath extensions_path = data_dir().AppendASCII("app_update"); |
2534 | 2363 |
2535 // First install v1 of a hosted app. | 2364 // First install v1 of a hosted app. |
2536 const Extension* extension = | 2365 const Extension* extension = |
2537 InstallCRX(extensions_path.AppendASCII("v1.crx"), INSTALL_NEW); | 2366 InstallCRX(extensions_path.AppendASCII("v1.crx"), INSTALL_NEW); |
2538 ASSERT_EQ(1u, registry_->enabled_extensions().size()); | 2367 ASSERT_EQ(1u, registry()->enabled_extensions().size()); |
2539 std::string id = extension->id(); | 2368 std::string id = extension->id(); |
2540 ASSERT_EQ(std::string("1"), extension->version()->GetString()); | 2369 ASSERT_EQ(std::string("1"), extension->version()->GetString()); |
2541 | 2370 |
2542 // Now try updating to v2. | 2371 // Now try updating to v2. |
2543 UpdateExtension(id, | 2372 UpdateExtension(id, |
2544 extensions_path.AppendASCII("v2.crx"), | 2373 extensions_path.AppendASCII("v2.crx"), |
2545 ENABLED); | 2374 ENABLED); |
2546 ASSERT_EQ(std::string("2"), | 2375 ASSERT_EQ(std::string("2"), |
2547 service_->GetExtensionById(id, false)->version()->GetString()); | 2376 service()->GetExtensionById(id, false)->version()->GetString()); |
2548 } | 2377 } |
2549 | 2378 |
2550 // Verifies that the NTP page and launch ordinals are kept when updating apps. | 2379 // Verifies that the NTP page and launch ordinals are kept when updating apps. |
2551 TEST_F(ExtensionServiceTest, UpdateAppsRetainOrdinals) { | 2380 TEST_F(ExtensionServiceTest, UpdateAppsRetainOrdinals) { |
2552 InitializeEmptyExtensionService(); | 2381 InitializeEmptyExtensionService(); |
2553 AppSorting* sorting = ExtensionPrefs::Get(profile_.get())->app_sorting(); | 2382 AppSorting* sorting = ExtensionPrefs::Get(profile())->app_sorting(); |
2554 base::FilePath extensions_path = data_dir_.AppendASCII("app_update"); | 2383 base::FilePath extensions_path = data_dir().AppendASCII("app_update"); |
2555 | 2384 |
2556 // First install v1 of a hosted app. | 2385 // First install v1 of a hosted app. |
2557 const Extension* extension = | 2386 const Extension* extension = |
2558 InstallCRX(extensions_path.AppendASCII("v1.crx"), INSTALL_NEW); | 2387 InstallCRX(extensions_path.AppendASCII("v1.crx"), INSTALL_NEW); |
2559 ASSERT_EQ(1u, registry_->enabled_extensions().size()); | 2388 ASSERT_EQ(1u, registry()->enabled_extensions().size()); |
2560 std::string id = extension->id(); | 2389 std::string id = extension->id(); |
2561 ASSERT_EQ(std::string("1"), extension->version()->GetString()); | 2390 ASSERT_EQ(std::string("1"), extension->version()->GetString()); |
2562 | 2391 |
2563 // Modify the ordinals so we can distinguish them from the defaults. | 2392 // Modify the ordinals so we can distinguish them from the defaults. |
2564 syncer::StringOrdinal new_page_ordinal = | 2393 syncer::StringOrdinal new_page_ordinal = |
2565 sorting->GetPageOrdinal(id).CreateAfter(); | 2394 sorting->GetPageOrdinal(id).CreateAfter(); |
2566 syncer::StringOrdinal new_launch_ordinal = | 2395 syncer::StringOrdinal new_launch_ordinal = |
2567 sorting->GetAppLaunchOrdinal(id).CreateBefore(); | 2396 sorting->GetAppLaunchOrdinal(id).CreateBefore(); |
2568 | 2397 |
2569 sorting->SetPageOrdinal(id, new_page_ordinal); | 2398 sorting->SetPageOrdinal(id, new_page_ordinal); |
2570 sorting->SetAppLaunchOrdinal(id, new_launch_ordinal); | 2399 sorting->SetAppLaunchOrdinal(id, new_launch_ordinal); |
2571 | 2400 |
2572 // Now try updating to v2. | 2401 // Now try updating to v2. |
2573 UpdateExtension(id, extensions_path.AppendASCII("v2.crx"), ENABLED); | 2402 UpdateExtension(id, extensions_path.AppendASCII("v2.crx"), ENABLED); |
2574 ASSERT_EQ(std::string("2"), | 2403 ASSERT_EQ(std::string("2"), |
2575 service_->GetExtensionById(id, false)->version()->GetString()); | 2404 service()->GetExtensionById(id, false)->version()->GetString()); |
2576 | 2405 |
2577 // Verify that the ordinals match. | 2406 // Verify that the ordinals match. |
2578 ASSERT_TRUE(new_page_ordinal.Equals(sorting->GetPageOrdinal(id))); | 2407 ASSERT_TRUE(new_page_ordinal.Equals(sorting->GetPageOrdinal(id))); |
2579 ASSERT_TRUE(new_launch_ordinal.Equals(sorting->GetAppLaunchOrdinal(id))); | 2408 ASSERT_TRUE(new_launch_ordinal.Equals(sorting->GetAppLaunchOrdinal(id))); |
2580 } | 2409 } |
2581 | 2410 |
2582 // Ensures that the CWS has properly initialized ordinals. | 2411 // Ensures that the CWS has properly initialized ordinals. |
2583 TEST_F(ExtensionServiceTest, EnsureCWSOrdinalsInitialized) { | 2412 TEST_F(ExtensionServiceTest, EnsureCWSOrdinalsInitialized) { |
2584 InitializeEmptyExtensionService(); | 2413 InitializeEmptyExtensionService(); |
2585 service_->component_loader()->Add( | 2414 service()->component_loader()->Add( |
2586 IDR_WEBSTORE_MANIFEST, base::FilePath(FILE_PATH_LITERAL("web_store"))); | 2415 IDR_WEBSTORE_MANIFEST, base::FilePath(FILE_PATH_LITERAL("web_store"))); |
2587 service_->Init(); | 2416 service()->Init(); |
2588 | 2417 |
2589 AppSorting* sorting = ExtensionPrefs::Get(profile_.get())->app_sorting(); | 2418 AppSorting* sorting = ExtensionPrefs::Get(profile())->app_sorting(); |
2590 EXPECT_TRUE( | 2419 EXPECT_TRUE( |
2591 sorting->GetPageOrdinal(extension_misc::kWebStoreAppId).IsValid()); | 2420 sorting->GetPageOrdinal(extension_misc::kWebStoreAppId).IsValid()); |
2592 EXPECT_TRUE( | 2421 EXPECT_TRUE( |
2593 sorting->GetAppLaunchOrdinal(extension_misc::kWebStoreAppId).IsValid()); | 2422 sorting->GetAppLaunchOrdinal(extension_misc::kWebStoreAppId).IsValid()); |
2594 } | 2423 } |
2595 | 2424 |
2596 TEST_F(ExtensionServiceTest, InstallAppsWithUnlimitedStorage) { | 2425 TEST_F(ExtensionServiceTest, InstallAppsWithUnlimitedStorage) { |
2597 InitializeEmptyExtensionService(); | 2426 InitializeEmptyExtensionService(); |
2598 EXPECT_TRUE(registry_->enabled_extensions().is_empty()); | 2427 EXPECT_TRUE(registry()->enabled_extensions().is_empty()); |
2599 | 2428 |
2600 int pref_count = 0; | 2429 int pref_count = 0; |
2601 | 2430 |
2602 // Install app1 with unlimited storage. | 2431 // Install app1 with unlimited storage. |
2603 const Extension* extension = | 2432 const Extension* extension = |
2604 PackAndInstallCRX(data_dir_.AppendASCII("app1"), INSTALL_NEW); | 2433 PackAndInstallCRX(data_dir().AppendASCII("app1"), INSTALL_NEW); |
2605 ValidatePrefKeyCount(++pref_count); | 2434 ValidatePrefKeyCount(++pref_count); |
2606 ASSERT_EQ(1u, registry_->enabled_extensions().size()); | 2435 ASSERT_EQ(1u, registry()->enabled_extensions().size()); |
2607 const std::string id1 = extension->id(); | 2436 const std::string id1 = extension->id(); |
2608 EXPECT_TRUE(extension->permissions_data()->HasAPIPermission( | 2437 EXPECT_TRUE(extension->permissions_data()->HasAPIPermission( |
2609 APIPermission::kUnlimitedStorage)); | 2438 APIPermission::kUnlimitedStorage)); |
2610 EXPECT_TRUE(extension->web_extent().MatchesURL( | 2439 EXPECT_TRUE(extension->web_extent().MatchesURL( |
2611 extensions::AppLaunchInfo::GetFullLaunchURL(extension))); | 2440 extensions::AppLaunchInfo::GetFullLaunchURL(extension))); |
2612 const GURL origin1( | 2441 const GURL origin1( |
2613 extensions::AppLaunchInfo::GetFullLaunchURL(extension).GetOrigin()); | 2442 extensions::AppLaunchInfo::GetFullLaunchURL(extension).GetOrigin()); |
2614 EXPECT_TRUE(profile_->GetExtensionSpecialStoragePolicy()-> | 2443 EXPECT_TRUE(profile()->GetExtensionSpecialStoragePolicy()->IsStorageUnlimited( |
2615 IsStorageUnlimited(origin1)); | 2444 origin1)); |
2616 | 2445 |
2617 // Install app2 from the same origin with unlimited storage. | 2446 // Install app2 from the same origin with unlimited storage. |
2618 extension = PackAndInstallCRX(data_dir_.AppendASCII("app2"), INSTALL_NEW); | 2447 extension = PackAndInstallCRX(data_dir().AppendASCII("app2"), INSTALL_NEW); |
2619 ValidatePrefKeyCount(++pref_count); | 2448 ValidatePrefKeyCount(++pref_count); |
2620 ASSERT_EQ(2u, registry_->enabled_extensions().size()); | 2449 ASSERT_EQ(2u, registry()->enabled_extensions().size()); |
2621 const std::string id2 = extension->id(); | 2450 const std::string id2 = extension->id(); |
2622 EXPECT_TRUE(extension->permissions_data()->HasAPIPermission( | 2451 EXPECT_TRUE(extension->permissions_data()->HasAPIPermission( |
2623 APIPermission::kUnlimitedStorage)); | 2452 APIPermission::kUnlimitedStorage)); |
2624 EXPECT_TRUE(extension->web_extent().MatchesURL( | 2453 EXPECT_TRUE(extension->web_extent().MatchesURL( |
2625 extensions::AppLaunchInfo::GetFullLaunchURL(extension))); | 2454 extensions::AppLaunchInfo::GetFullLaunchURL(extension))); |
2626 const GURL origin2( | 2455 const GURL origin2( |
2627 extensions::AppLaunchInfo::GetFullLaunchURL(extension).GetOrigin()); | 2456 extensions::AppLaunchInfo::GetFullLaunchURL(extension).GetOrigin()); |
2628 EXPECT_EQ(origin1, origin2); | 2457 EXPECT_EQ(origin1, origin2); |
2629 EXPECT_TRUE(profile_->GetExtensionSpecialStoragePolicy()-> | 2458 EXPECT_TRUE(profile()->GetExtensionSpecialStoragePolicy()->IsStorageUnlimited( |
2630 IsStorageUnlimited(origin2)); | 2459 origin2)); |
2631 | 2460 |
2632 // Uninstall one of them, unlimited storage should still be granted | 2461 // Uninstall one of them, unlimited storage should still be granted |
2633 // to the origin. | 2462 // to the origin. |
2634 UninstallExtension(id1, false); | 2463 UninstallExtension(id1, false); |
2635 EXPECT_EQ(1u, registry_->enabled_extensions().size()); | 2464 EXPECT_EQ(1u, registry()->enabled_extensions().size()); |
2636 EXPECT_TRUE(profile_->GetExtensionSpecialStoragePolicy()-> | 2465 EXPECT_TRUE(profile()->GetExtensionSpecialStoragePolicy()->IsStorageUnlimited( |
2637 IsStorageUnlimited(origin1)); | 2466 origin1)); |
2638 | 2467 |
2639 // Uninstall the other, unlimited storage should be revoked. | 2468 // Uninstall the other, unlimited storage should be revoked. |
2640 UninstallExtension(id2, false); | 2469 UninstallExtension(id2, false); |
2641 EXPECT_EQ(0u, registry_->enabled_extensions().size()); | 2470 EXPECT_EQ(0u, registry()->enabled_extensions().size()); |
2642 EXPECT_FALSE(profile_->GetExtensionSpecialStoragePolicy()-> | 2471 EXPECT_FALSE( |
2643 IsStorageUnlimited(origin2)); | 2472 profile()->GetExtensionSpecialStoragePolicy()->IsStorageUnlimited( |
| 2473 origin2)); |
2644 } | 2474 } |
2645 | 2475 |
2646 TEST_F(ExtensionServiceTest, InstallAppsAndCheckStorageProtection) { | 2476 TEST_F(ExtensionServiceTest, InstallAppsAndCheckStorageProtection) { |
2647 InitializeEmptyExtensionService(); | 2477 InitializeEmptyExtensionService(); |
2648 EXPECT_TRUE(registry_->enabled_extensions().is_empty()); | 2478 EXPECT_TRUE(registry()->enabled_extensions().is_empty()); |
2649 | 2479 |
2650 int pref_count = 0; | 2480 int pref_count = 0; |
2651 | 2481 |
2652 const Extension* extension = | 2482 const Extension* extension = |
2653 PackAndInstallCRX(data_dir_.AppendASCII("app1"), INSTALL_NEW); | 2483 PackAndInstallCRX(data_dir().AppendASCII("app1"), INSTALL_NEW); |
2654 ValidatePrefKeyCount(++pref_count); | 2484 ValidatePrefKeyCount(++pref_count); |
2655 ASSERT_EQ(1u, registry_->enabled_extensions().size()); | 2485 ASSERT_EQ(1u, registry()->enabled_extensions().size()); |
2656 EXPECT_TRUE(extension->is_app()); | 2486 EXPECT_TRUE(extension->is_app()); |
2657 const std::string id1 = extension->id(); | 2487 const std::string id1 = extension->id(); |
2658 const GURL origin1( | 2488 const GURL origin1( |
2659 extensions::AppLaunchInfo::GetFullLaunchURL(extension).GetOrigin()); | 2489 extensions::AppLaunchInfo::GetFullLaunchURL(extension).GetOrigin()); |
2660 EXPECT_TRUE(profile_->GetExtensionSpecialStoragePolicy()-> | 2490 EXPECT_TRUE(profile()->GetExtensionSpecialStoragePolicy()->IsStorageProtected( |
2661 IsStorageProtected(origin1)); | 2491 origin1)); |
2662 | 2492 |
2663 // App 4 has a different origin (maps.google.com). | 2493 // App 4 has a different origin (maps.google.com). |
2664 extension = PackAndInstallCRX(data_dir_.AppendASCII("app4"), INSTALL_NEW); | 2494 extension = PackAndInstallCRX(data_dir().AppendASCII("app4"), INSTALL_NEW); |
2665 ValidatePrefKeyCount(++pref_count); | 2495 ValidatePrefKeyCount(++pref_count); |
2666 ASSERT_EQ(2u, registry_->enabled_extensions().size()); | 2496 ASSERT_EQ(2u, registry()->enabled_extensions().size()); |
2667 const std::string id2 = extension->id(); | 2497 const std::string id2 = extension->id(); |
2668 const GURL origin2( | 2498 const GURL origin2( |
2669 extensions::AppLaunchInfo::GetFullLaunchURL(extension).GetOrigin()); | 2499 extensions::AppLaunchInfo::GetFullLaunchURL(extension).GetOrigin()); |
2670 ASSERT_NE(origin1, origin2); | 2500 ASSERT_NE(origin1, origin2); |
2671 EXPECT_TRUE(profile_->GetExtensionSpecialStoragePolicy()-> | 2501 EXPECT_TRUE(profile()->GetExtensionSpecialStoragePolicy()->IsStorageProtected( |
2672 IsStorageProtected(origin2)); | 2502 origin2)); |
2673 | 2503 |
2674 UninstallExtension(id1, false); | 2504 UninstallExtension(id1, false); |
2675 EXPECT_EQ(1u, registry_->enabled_extensions().size()); | 2505 EXPECT_EQ(1u, registry()->enabled_extensions().size()); |
2676 | 2506 |
2677 UninstallExtension(id2, false); | 2507 UninstallExtension(id2, false); |
2678 | 2508 |
2679 EXPECT_TRUE(registry_->enabled_extensions().is_empty()); | 2509 EXPECT_TRUE(registry()->enabled_extensions().is_empty()); |
2680 EXPECT_FALSE(profile_->GetExtensionSpecialStoragePolicy()-> | 2510 EXPECT_FALSE( |
2681 IsStorageProtected(origin1)); | 2511 profile()->GetExtensionSpecialStoragePolicy()->IsStorageProtected( |
2682 EXPECT_FALSE(profile_->GetExtensionSpecialStoragePolicy()-> | 2512 origin1)); |
2683 IsStorageProtected(origin2)); | 2513 EXPECT_FALSE( |
| 2514 profile()->GetExtensionSpecialStoragePolicy()->IsStorageProtected( |
| 2515 origin2)); |
2684 } | 2516 } |
2685 | 2517 |
2686 // Test that when an extension version is reinstalled, nothing happens. | 2518 // Test that when an extension version is reinstalled, nothing happens. |
2687 TEST_F(ExtensionServiceTest, Reinstall) { | 2519 TEST_F(ExtensionServiceTest, Reinstall) { |
2688 InitializeEmptyExtensionService(); | 2520 InitializeEmptyExtensionService(); |
2689 | 2521 |
2690 // A simple extension that should install without error. | 2522 // A simple extension that should install without error. |
2691 base::FilePath path = data_dir_.AppendASCII("good.crx"); | 2523 base::FilePath path = data_dir().AppendASCII("good.crx"); |
2692 InstallCRX(path, INSTALL_NEW); | 2524 InstallCRX(path, INSTALL_NEW); |
2693 | 2525 |
2694 ValidatePrefKeyCount(1); | 2526 ValidatePrefKeyCount(1); |
2695 ValidateIntegerPref(good_crx, "state", Extension::ENABLED); | 2527 ValidateIntegerPref(good_crx, "state", Extension::ENABLED); |
2696 ValidateIntegerPref(good_crx, "location", Manifest::INTERNAL); | 2528 ValidateIntegerPref(good_crx, "location", Manifest::INTERNAL); |
2697 | 2529 |
2698 // Reinstall the same version, it should overwrite the previous one. | 2530 // Reinstall the same version, it should overwrite the previous one. |
2699 InstallCRX(path, INSTALL_UPDATED); | 2531 InstallCRX(path, INSTALL_UPDATED); |
2700 | 2532 |
2701 ValidatePrefKeyCount(1); | 2533 ValidatePrefKeyCount(1); |
2702 ValidateIntegerPref(good_crx, "state", Extension::ENABLED); | 2534 ValidateIntegerPref(good_crx, "state", Extension::ENABLED); |
2703 ValidateIntegerPref(good_crx, "location", Manifest::INTERNAL); | 2535 ValidateIntegerPref(good_crx, "location", Manifest::INTERNAL); |
2704 } | 2536 } |
2705 | 2537 |
2706 // Test that we can determine if extensions came from the | 2538 // Test that we can determine if extensions came from the |
2707 // Chrome web store. | 2539 // Chrome web store. |
2708 TEST_F(ExtensionServiceTest, FromWebStore) { | 2540 TEST_F(ExtensionServiceTest, FromWebStore) { |
2709 InitializeEmptyExtensionService(); | 2541 InitializeEmptyExtensionService(); |
2710 | 2542 |
2711 // A simple extension that should install without error. | 2543 // A simple extension that should install without error. |
2712 base::FilePath path = data_dir_.AppendASCII("good.crx"); | 2544 base::FilePath path = data_dir().AppendASCII("good.crx"); |
2713 // Not from web store. | 2545 // Not from web store. |
2714 const Extension* extension = InstallCRX(path, INSTALL_NEW); | 2546 const Extension* extension = InstallCRX(path, INSTALL_NEW); |
2715 std::string id = extension->id(); | 2547 std::string id = extension->id(); |
2716 | 2548 |
2717 ValidatePrefKeyCount(1); | 2549 ValidatePrefKeyCount(1); |
2718 ASSERT_TRUE(ValidateBooleanPref(good_crx, "from_webstore", false)); | 2550 ASSERT_TRUE(ValidateBooleanPref(good_crx, "from_webstore", false)); |
2719 ASSERT_FALSE(extension->from_webstore()); | 2551 ASSERT_FALSE(extension->from_webstore()); |
2720 | 2552 |
2721 // Test install from web store. | 2553 // Test install from web store. |
2722 InstallCRXFromWebStore(path, INSTALL_UPDATED); // From web store. | 2554 InstallCRXFromWebStore(path, INSTALL_UPDATED); // From web store. |
2723 | 2555 |
2724 ValidatePrefKeyCount(1); | 2556 ValidatePrefKeyCount(1); |
2725 ASSERT_TRUE(ValidateBooleanPref(good_crx, "from_webstore", true)); | 2557 ASSERT_TRUE(ValidateBooleanPref(good_crx, "from_webstore", true)); |
2726 | 2558 |
2727 // Reload so extension gets reinitialized with new value. | 2559 // Reload so extension gets reinitialized with new value. |
2728 service_->ReloadExtensionsForTest(); | 2560 service()->ReloadExtensionsForTest(); |
2729 extension = service_->GetExtensionById(id, false); | 2561 extension = service()->GetExtensionById(id, false); |
2730 ASSERT_TRUE(extension->from_webstore()); | 2562 ASSERT_TRUE(extension->from_webstore()); |
2731 | 2563 |
2732 // Upgrade to version 2.0 | 2564 // Upgrade to version 2.0 |
2733 path = data_dir_.AppendASCII("good2.crx"); | 2565 path = data_dir().AppendASCII("good2.crx"); |
2734 UpdateExtension(good_crx, path, ENABLED); | 2566 UpdateExtension(good_crx, path, ENABLED); |
2735 ValidatePrefKeyCount(1); | 2567 ValidatePrefKeyCount(1); |
2736 ASSERT_TRUE(ValidateBooleanPref(good_crx, "from_webstore", true)); | 2568 ASSERT_TRUE(ValidateBooleanPref(good_crx, "from_webstore", true)); |
2737 } | 2569 } |
2738 | 2570 |
2739 // Test upgrading a signed extension. | 2571 // Test upgrading a signed extension. |
2740 TEST_F(ExtensionServiceTest, UpgradeSignedGood) { | 2572 TEST_F(ExtensionServiceTest, UpgradeSignedGood) { |
2741 InitializeEmptyExtensionService(); | 2573 InitializeEmptyExtensionService(); |
2742 | 2574 |
2743 base::FilePath path = data_dir_.AppendASCII("good.crx"); | 2575 base::FilePath path = data_dir().AppendASCII("good.crx"); |
2744 const Extension* extension = InstallCRX(path, INSTALL_NEW); | 2576 const Extension* extension = InstallCRX(path, INSTALL_NEW); |
2745 std::string id = extension->id(); | 2577 std::string id = extension->id(); |
2746 | 2578 |
2747 ASSERT_EQ("1.0.0.0", extension->version()->GetString()); | 2579 ASSERT_EQ("1.0.0.0", extension->version()->GetString()); |
2748 ASSERT_EQ(0u, GetErrors().size()); | 2580 ASSERT_EQ(0u, GetErrors().size()); |
2749 | 2581 |
2750 // Upgrade to version 1.0.0.1. | 2582 // Upgrade to version 1.0.0.1. |
2751 // Also test that the extension's old and new title are correctly retrieved. | 2583 // Also test that the extension's old and new title are correctly retrieved. |
2752 path = data_dir_.AppendASCII("good2.crx"); | 2584 path = data_dir().AppendASCII("good2.crx"); |
2753 InstallCRX(path, INSTALL_UPDATED, Extension::NO_FLAGS, "My extension 1"); | 2585 InstallCRX(path, INSTALL_UPDATED, Extension::NO_FLAGS, "My extension 1"); |
2754 extension = service_->GetExtensionById(id, false); | 2586 extension = service()->GetExtensionById(id, false); |
2755 | 2587 |
2756 ASSERT_EQ("1.0.0.1", extension->version()->GetString()); | 2588 ASSERT_EQ("1.0.0.1", extension->version()->GetString()); |
2757 ASSERT_EQ("My updated extension 1", extension->name()); | 2589 ASSERT_EQ("My updated extension 1", extension->name()); |
2758 ASSERT_EQ(0u, GetErrors().size()); | 2590 ASSERT_EQ(0u, GetErrors().size()); |
2759 } | 2591 } |
2760 | 2592 |
2761 // Test upgrading a signed extension with a bad signature. | 2593 // Test upgrading a signed extension with a bad signature. |
2762 TEST_F(ExtensionServiceTest, UpgradeSignedBad) { | 2594 TEST_F(ExtensionServiceTest, UpgradeSignedBad) { |
2763 InitializeEmptyExtensionService(); | 2595 InitializeEmptyExtensionService(); |
2764 | 2596 |
2765 base::FilePath path = data_dir_.AppendASCII("good.crx"); | 2597 base::FilePath path = data_dir().AppendASCII("good.crx"); |
2766 InstallCRX(path, INSTALL_NEW); | 2598 InstallCRX(path, INSTALL_NEW); |
2767 | 2599 |
2768 // Try upgrading with a bad signature. This should fail during the unpack, | 2600 // Try upgrading with a bad signature. This should fail during the unpack, |
2769 // because the key will not match the signature. | 2601 // because the key will not match the signature. |
2770 path = data_dir_.AppendASCII("bad_signature.crx"); | 2602 path = data_dir().AppendASCII("bad_signature.crx"); |
2771 InstallCRX(path, INSTALL_FAILED); | 2603 InstallCRX(path, INSTALL_FAILED); |
2772 } | 2604 } |
2773 | 2605 |
2774 // Test a normal update via the UpdateExtension API | 2606 // Test a normal update via the UpdateExtension API |
2775 TEST_F(ExtensionServiceTest, UpdateExtension) { | 2607 TEST_F(ExtensionServiceTest, UpdateExtension) { |
2776 InitializeEmptyExtensionService(); | 2608 InitializeEmptyExtensionService(); |
2777 | 2609 |
2778 base::FilePath path = data_dir_.AppendASCII("good.crx"); | 2610 base::FilePath path = data_dir().AppendASCII("good.crx"); |
2779 | 2611 |
2780 const Extension* good = InstallCRX(path, INSTALL_NEW); | 2612 const Extension* good = InstallCRX(path, INSTALL_NEW); |
2781 ASSERT_EQ("1.0.0.0", good->VersionString()); | 2613 ASSERT_EQ("1.0.0.0", good->VersionString()); |
2782 ASSERT_EQ(good_crx, good->id()); | 2614 ASSERT_EQ(good_crx, good->id()); |
2783 | 2615 |
2784 path = data_dir_.AppendASCII("good2.crx"); | 2616 path = data_dir().AppendASCII("good2.crx"); |
2785 UpdateExtension(good_crx, path, ENABLED); | 2617 UpdateExtension(good_crx, path, ENABLED); |
2786 ASSERT_EQ("1.0.0.1", | 2618 ASSERT_EQ( |
2787 service_->GetExtensionById(good_crx, false)-> | 2619 "1.0.0.1", |
2788 version()->GetString()); | 2620 service()->GetExtensionById(good_crx, false)->version()->GetString()); |
2789 } | 2621 } |
2790 | 2622 |
2791 // Extensions should not be updated during browser shutdown. | 2623 // Extensions should not be updated during browser shutdown. |
2792 TEST_F(ExtensionServiceTest, UpdateExtensionDuringShutdown) { | 2624 TEST_F(ExtensionServiceTest, UpdateExtensionDuringShutdown) { |
2793 InitializeEmptyExtensionService(); | 2625 InitializeEmptyExtensionService(); |
2794 | 2626 |
2795 // Install an extension. | 2627 // Install an extension. |
2796 base::FilePath path = data_dir_.AppendASCII("good.crx"); | 2628 base::FilePath path = data_dir().AppendASCII("good.crx"); |
2797 const Extension* good = InstallCRX(path, INSTALL_NEW); | 2629 const Extension* good = InstallCRX(path, INSTALL_NEW); |
2798 ASSERT_EQ(good_crx, good->id()); | 2630 ASSERT_EQ(good_crx, good->id()); |
2799 | 2631 |
2800 // Simulate shutdown. | 2632 // Simulate shutdown. |
2801 service_->set_browser_terminating_for_test(true); | 2633 service()->set_browser_terminating_for_test(true); |
2802 | 2634 |
2803 // Update should fail and extension should not be updated. | 2635 // Update should fail and extension should not be updated. |
2804 path = data_dir_.AppendASCII("good2.crx"); | 2636 path = data_dir().AppendASCII("good2.crx"); |
2805 bool updated = service_->UpdateExtension(good_crx, path, true, NULL); | 2637 bool updated = service()->UpdateExtension(good_crx, path, true, NULL); |
2806 ASSERT_FALSE(updated); | 2638 ASSERT_FALSE(updated); |
2807 ASSERT_EQ("1.0.0.0", | 2639 ASSERT_EQ( |
2808 service_->GetExtensionById(good_crx, false)-> | 2640 "1.0.0.0", |
2809 version()->GetString()); | 2641 service()->GetExtensionById(good_crx, false)->version()->GetString()); |
2810 } | 2642 } |
2811 | 2643 |
2812 // Test updating a not-already-installed extension - this should fail | 2644 // Test updating a not-already-installed extension - this should fail |
2813 TEST_F(ExtensionServiceTest, UpdateNotInstalledExtension) { | 2645 TEST_F(ExtensionServiceTest, UpdateNotInstalledExtension) { |
2814 InitializeEmptyExtensionService(); | 2646 InitializeEmptyExtensionService(); |
2815 | 2647 |
2816 base::FilePath path = data_dir_.AppendASCII("good.crx"); | 2648 base::FilePath path = data_dir().AppendASCII("good.crx"); |
2817 UpdateExtension(good_crx, path, UPDATED); | 2649 UpdateExtension(good_crx, path, UPDATED); |
2818 base::RunLoop().RunUntilIdle(); | 2650 base::RunLoop().RunUntilIdle(); |
2819 | 2651 |
2820 ASSERT_EQ(0u, registry_->enabled_extensions().size()); | 2652 ASSERT_EQ(0u, registry()->enabled_extensions().size()); |
2821 ASSERT_FALSE(installed_); | 2653 ASSERT_FALSE(installed_); |
2822 ASSERT_EQ(0u, loaded_.size()); | 2654 ASSERT_EQ(0u, loaded_.size()); |
2823 } | 2655 } |
2824 | 2656 |
2825 // Makes sure you can't downgrade an extension via UpdateExtension | 2657 // Makes sure you can't downgrade an extension via UpdateExtension |
2826 TEST_F(ExtensionServiceTest, UpdateWillNotDowngrade) { | 2658 TEST_F(ExtensionServiceTest, UpdateWillNotDowngrade) { |
2827 InitializeEmptyExtensionService(); | 2659 InitializeEmptyExtensionService(); |
2828 | 2660 |
2829 base::FilePath path = data_dir_.AppendASCII("good2.crx"); | 2661 base::FilePath path = data_dir().AppendASCII("good2.crx"); |
2830 | 2662 |
2831 const Extension* good = InstallCRX(path, INSTALL_NEW); | 2663 const Extension* good = InstallCRX(path, INSTALL_NEW); |
2832 ASSERT_EQ("1.0.0.1", good->VersionString()); | 2664 ASSERT_EQ("1.0.0.1", good->VersionString()); |
2833 ASSERT_EQ(good_crx, good->id()); | 2665 ASSERT_EQ(good_crx, good->id()); |
2834 | 2666 |
2835 // Change path from good2.crx -> good.crx | 2667 // Change path from good2.crx -> good.crx |
2836 path = data_dir_.AppendASCII("good.crx"); | 2668 path = data_dir().AppendASCII("good.crx"); |
2837 UpdateExtension(good_crx, path, FAILED); | 2669 UpdateExtension(good_crx, path, FAILED); |
2838 ASSERT_EQ("1.0.0.1", | 2670 ASSERT_EQ( |
2839 service_->GetExtensionById(good_crx, false)-> | 2671 "1.0.0.1", |
2840 version()->GetString()); | 2672 service()->GetExtensionById(good_crx, false)->version()->GetString()); |
2841 } | 2673 } |
2842 | 2674 |
2843 // Make sure calling update with an identical version does nothing | 2675 // Make sure calling update with an identical version does nothing |
2844 TEST_F(ExtensionServiceTest, UpdateToSameVersionIsNoop) { | 2676 TEST_F(ExtensionServiceTest, UpdateToSameVersionIsNoop) { |
2845 InitializeEmptyExtensionService(); | 2677 InitializeEmptyExtensionService(); |
2846 | 2678 |
2847 base::FilePath path = data_dir_.AppendASCII("good.crx"); | 2679 base::FilePath path = data_dir().AppendASCII("good.crx"); |
2848 | 2680 |
2849 const Extension* good = InstallCRX(path, INSTALL_NEW); | 2681 const Extension* good = InstallCRX(path, INSTALL_NEW); |
2850 ASSERT_EQ(good_crx, good->id()); | 2682 ASSERT_EQ(good_crx, good->id()); |
2851 UpdateExtension(good_crx, path, FAILED_SILENTLY); | 2683 UpdateExtension(good_crx, path, FAILED_SILENTLY); |
2852 } | 2684 } |
2853 | 2685 |
2854 // Tests that updating an extension does not clobber old state. | 2686 // Tests that updating an extension does not clobber old state. |
2855 TEST_F(ExtensionServiceTest, UpdateExtensionPreservesState) { | 2687 TEST_F(ExtensionServiceTest, UpdateExtensionPreservesState) { |
2856 InitializeEmptyExtensionService(); | 2688 InitializeEmptyExtensionService(); |
2857 | 2689 |
2858 base::FilePath path = data_dir_.AppendASCII("good.crx"); | 2690 base::FilePath path = data_dir().AppendASCII("good.crx"); |
2859 | 2691 |
2860 const Extension* good = InstallCRX(path, INSTALL_NEW); | 2692 const Extension* good = InstallCRX(path, INSTALL_NEW); |
2861 ASSERT_EQ("1.0.0.0", good->VersionString()); | 2693 ASSERT_EQ("1.0.0.0", good->VersionString()); |
2862 ASSERT_EQ(good_crx, good->id()); | 2694 ASSERT_EQ(good_crx, good->id()); |
2863 | 2695 |
2864 // Disable it and allow it to run in incognito. These settings should carry | 2696 // Disable it and allow it to run in incognito. These settings should carry |
2865 // over to the updated version. | 2697 // over to the updated version. |
2866 service_->DisableExtension(good->id(), Extension::DISABLE_USER_ACTION); | 2698 service()->DisableExtension(good->id(), Extension::DISABLE_USER_ACTION); |
2867 extensions::util::SetIsIncognitoEnabled(good->id(), profile_.get(), true); | 2699 extensions::util::SetIsIncognitoEnabled(good->id(), profile(), true); |
2868 ExtensionPrefs::Get(profile_.get()) | 2700 ExtensionPrefs::Get(profile()) |
2869 ->SetDidExtensionEscalatePermissions(good, true); | 2701 ->SetDidExtensionEscalatePermissions(good, true); |
2870 | 2702 |
2871 path = data_dir_.AppendASCII("good2.crx"); | 2703 path = data_dir().AppendASCII("good2.crx"); |
2872 UpdateExtension(good_crx, path, INSTALLED); | 2704 UpdateExtension(good_crx, path, INSTALLED); |
2873 ASSERT_EQ(1u, registry_->disabled_extensions().size()); | 2705 ASSERT_EQ(1u, registry()->disabled_extensions().size()); |
2874 const Extension* good2 = service_->GetExtensionById(good_crx, true); | 2706 const Extension* good2 = service()->GetExtensionById(good_crx, true); |
2875 ASSERT_EQ("1.0.0.1", good2->version()->GetString()); | 2707 ASSERT_EQ("1.0.0.1", good2->version()->GetString()); |
2876 EXPECT_TRUE(extensions::util::IsIncognitoEnabled( | 2708 EXPECT_TRUE(extensions::util::IsIncognitoEnabled(good2->id(), profile())); |
2877 good2->id(), profile_.get())); | 2709 EXPECT_TRUE(ExtensionPrefs::Get(profile()) |
2878 EXPECT_TRUE(ExtensionPrefs::Get(profile_.get()) | |
2879 ->DidExtensionEscalatePermissions(good2->id())); | 2710 ->DidExtensionEscalatePermissions(good2->id())); |
2880 } | 2711 } |
2881 | 2712 |
2882 // Tests that updating preserves extension location. | 2713 // Tests that updating preserves extension location. |
2883 TEST_F(ExtensionServiceTest, UpdateExtensionPreservesLocation) { | 2714 TEST_F(ExtensionServiceTest, UpdateExtensionPreservesLocation) { |
2884 InitializeEmptyExtensionService(); | 2715 InitializeEmptyExtensionService(); |
2885 | 2716 |
2886 base::FilePath path = data_dir_.AppendASCII("good.crx"); | 2717 base::FilePath path = data_dir().AppendASCII("good.crx"); |
2887 | 2718 |
2888 const Extension* good = | 2719 const Extension* good = |
2889 InstallCRXWithLocation(path, Manifest::EXTERNAL_PREF, INSTALL_NEW); | 2720 InstallCRXWithLocation(path, Manifest::EXTERNAL_PREF, INSTALL_NEW); |
2890 | 2721 |
2891 ASSERT_EQ("1.0.0.0", good->VersionString()); | 2722 ASSERT_EQ("1.0.0.0", good->VersionString()); |
2892 ASSERT_EQ(good_crx, good->id()); | 2723 ASSERT_EQ(good_crx, good->id()); |
2893 | 2724 |
2894 path = data_dir_.AppendASCII("good2.crx"); | 2725 path = data_dir().AppendASCII("good2.crx"); |
2895 UpdateExtension(good_crx, path, ENABLED); | 2726 UpdateExtension(good_crx, path, ENABLED); |
2896 const Extension* good2 = service_->GetExtensionById(good_crx, false); | 2727 const Extension* good2 = service()->GetExtensionById(good_crx, false); |
2897 ASSERT_EQ("1.0.0.1", good2->version()->GetString()); | 2728 ASSERT_EQ("1.0.0.1", good2->version()->GetString()); |
2898 EXPECT_EQ(good2->location(), Manifest::EXTERNAL_PREF); | 2729 EXPECT_EQ(good2->location(), Manifest::EXTERNAL_PREF); |
2899 } | 2730 } |
2900 | 2731 |
2901 // Makes sure that LOAD extension types can downgrade. | 2732 // Makes sure that LOAD extension types can downgrade. |
2902 TEST_F(ExtensionServiceTest, LoadExtensionsCanDowngrade) { | 2733 TEST_F(ExtensionServiceTest, LoadExtensionsCanDowngrade) { |
2903 InitializeEmptyExtensionService(); | 2734 InitializeEmptyExtensionService(); |
2904 | 2735 |
2905 base::ScopedTempDir temp; | 2736 base::ScopedTempDir temp; |
2906 ASSERT_TRUE(temp.CreateUniqueTempDir()); | 2737 ASSERT_TRUE(temp.CreateUniqueTempDir()); |
2907 | 2738 |
2908 // We'll write the extension manifest dynamically to a temporary path | 2739 // We'll write the extension manifest dynamically to a temporary path |
2909 // to make it easier to change the version number. | 2740 // to make it easier to change the version number. |
2910 base::FilePath extension_path = temp.path(); | 2741 base::FilePath extension_path = temp.path(); |
2911 base::FilePath manifest_path = | 2742 base::FilePath manifest_path = |
2912 extension_path.Append(extensions::kManifestFilename); | 2743 extension_path.Append(extensions::kManifestFilename); |
2913 ASSERT_FALSE(base::PathExists(manifest_path)); | 2744 ASSERT_FALSE(base::PathExists(manifest_path)); |
2914 | 2745 |
2915 // Start with version 2.0. | 2746 // Start with version 2.0. |
2916 base::DictionaryValue manifest; | 2747 base::DictionaryValue manifest; |
2917 manifest.SetString("version", "2.0"); | 2748 manifest.SetString("version", "2.0"); |
2918 manifest.SetString("name", "LOAD Downgrade Test"); | 2749 manifest.SetString("name", "LOAD Downgrade Test"); |
2919 manifest.SetInteger("manifest_version", 2); | 2750 manifest.SetInteger("manifest_version", 2); |
2920 | 2751 |
2921 JSONFileValueSerializer serializer(manifest_path); | 2752 JSONFileValueSerializer serializer(manifest_path); |
2922 ASSERT_TRUE(serializer.Serialize(manifest)); | 2753 ASSERT_TRUE(serializer.Serialize(manifest)); |
2923 | 2754 |
2924 extensions::UnpackedInstaller::Create(service_)->Load(extension_path); | 2755 extensions::UnpackedInstaller::Create(service())->Load(extension_path); |
2925 base::RunLoop().RunUntilIdle(); | 2756 base::RunLoop().RunUntilIdle(); |
2926 | 2757 |
2927 EXPECT_EQ(0u, GetErrors().size()); | 2758 EXPECT_EQ(0u, GetErrors().size()); |
2928 ASSERT_EQ(1u, loaded_.size()); | 2759 ASSERT_EQ(1u, loaded_.size()); |
2929 EXPECT_EQ(Manifest::UNPACKED, loaded_[0]->location()); | 2760 EXPECT_EQ(Manifest::UNPACKED, loaded_[0]->location()); |
2930 EXPECT_EQ(1u, registry_->enabled_extensions().size()); | 2761 EXPECT_EQ(1u, registry()->enabled_extensions().size()); |
2931 EXPECT_EQ("2.0", loaded_[0]->VersionString()); | 2762 EXPECT_EQ("2.0", loaded_[0]->VersionString()); |
2932 | 2763 |
2933 // Now set the version number to 1.0, reload the extensions and verify that | 2764 // Now set the version number to 1.0, reload the extensions and verify that |
2934 // the downgrade was accepted. | 2765 // the downgrade was accepted. |
2935 manifest.SetString("version", "1.0"); | 2766 manifest.SetString("version", "1.0"); |
2936 ASSERT_TRUE(serializer.Serialize(manifest)); | 2767 ASSERT_TRUE(serializer.Serialize(manifest)); |
2937 | 2768 |
2938 extensions::UnpackedInstaller::Create(service_)->Load(extension_path); | 2769 extensions::UnpackedInstaller::Create(service())->Load(extension_path); |
2939 base::RunLoop().RunUntilIdle(); | 2770 base::RunLoop().RunUntilIdle(); |
2940 | 2771 |
2941 EXPECT_EQ(0u, GetErrors().size()); | 2772 EXPECT_EQ(0u, GetErrors().size()); |
2942 ASSERT_EQ(1u, loaded_.size()); | 2773 ASSERT_EQ(1u, loaded_.size()); |
2943 EXPECT_EQ(Manifest::UNPACKED, loaded_[0]->location()); | 2774 EXPECT_EQ(Manifest::UNPACKED, loaded_[0]->location()); |
2944 EXPECT_EQ(1u, registry_->enabled_extensions().size()); | 2775 EXPECT_EQ(1u, registry()->enabled_extensions().size()); |
2945 EXPECT_EQ("1.0", loaded_[0]->VersionString()); | 2776 EXPECT_EQ("1.0", loaded_[0]->VersionString()); |
2946 } | 2777 } |
2947 | 2778 |
2948 #if !defined(OS_POSIX) || defined(OS_MACOSX) | 2779 #if !defined(OS_POSIX) || defined(OS_MACOSX) |
2949 // LOAD extensions with plugins require approval. | 2780 // LOAD extensions with plugins require approval. |
2950 // Only run this on platforms that support NPAPI plugins. | 2781 // Only run this on platforms that support NPAPI plugins. |
2951 TEST_F(ExtensionServiceTest, LoadExtensionsWithPlugins) { | 2782 TEST_F(ExtensionServiceTest, LoadExtensionsWithPlugins) { |
2952 base::FilePath extension_with_plugin_path = good1_path(); | 2783 base::FilePath extension_with_plugin_path = good1_path(); |
2953 base::FilePath extension_no_plugin_path = good2_path(); | 2784 base::FilePath extension_no_plugin_path = good2_path(); |
2954 | 2785 |
2955 InitPluginService(); | 2786 InitPluginService(); |
2956 InitializeEmptyExtensionService(); | 2787 InitializeEmptyExtensionService(); |
2957 InitializeProcessManager(); | 2788 InitializeProcessManager(); |
2958 service_->set_show_extensions_prompts(true); | 2789 service()->set_show_extensions_prompts(true); |
2959 | 2790 |
2960 // Start by canceling any install prompts. | 2791 // Start by canceling any install prompts. |
2961 CommandLine::ForCurrentProcess()->AppendSwitchASCII( | 2792 CommandLine::ForCurrentProcess()->AppendSwitchASCII( |
2962 switches::kAppsGalleryInstallAutoConfirmForTests, | 2793 switches::kAppsGalleryInstallAutoConfirmForTests, |
2963 "cancel"); | 2794 "cancel"); |
2964 | 2795 |
2965 // The extension that has a plugin should not install. | 2796 // The extension that has a plugin should not install. |
2966 extensions::UnpackedInstaller::Create(service_)->Load( | 2797 extensions::UnpackedInstaller::Create(service()) |
2967 extension_with_plugin_path); | 2798 ->Load(extension_with_plugin_path); |
2968 base::RunLoop().RunUntilIdle(); | 2799 base::RunLoop().RunUntilIdle(); |
2969 EXPECT_EQ(0u, GetErrors().size()); | 2800 EXPECT_EQ(0u, GetErrors().size()); |
2970 EXPECT_EQ(0u, loaded_.size()); | 2801 EXPECT_EQ(0u, loaded_.size()); |
2971 EXPECT_EQ(0u, registry_->enabled_extensions().size()); | 2802 EXPECT_EQ(0u, registry()->enabled_extensions().size()); |
2972 EXPECT_EQ(0u, registry_->disabled_extensions().size()); | 2803 EXPECT_EQ(0u, registry()->disabled_extensions().size()); |
2973 | 2804 |
2974 // But the extension with no plugin should since there's no prompt. | 2805 // But the extension with no plugin should since there's no prompt. |
2975 ExtensionErrorReporter::GetInstance()->ClearErrors(); | 2806 ExtensionErrorReporter::GetInstance()->ClearErrors(); |
2976 extensions::UnpackedInstaller::Create(service_)->Load( | 2807 extensions::UnpackedInstaller::Create(service()) |
2977 extension_no_plugin_path); | 2808 ->Load(extension_no_plugin_path); |
2978 base::RunLoop().RunUntilIdle(); | 2809 base::RunLoop().RunUntilIdle(); |
2979 EXPECT_EQ(0u, GetErrors().size()); | 2810 EXPECT_EQ(0u, GetErrors().size()); |
2980 EXPECT_EQ(1u, loaded_.size()); | 2811 EXPECT_EQ(1u, loaded_.size()); |
2981 EXPECT_EQ(1u, registry_->enabled_extensions().size()); | 2812 EXPECT_EQ(1u, registry()->enabled_extensions().size()); |
2982 EXPECT_EQ(0u, registry_->disabled_extensions().size()); | 2813 EXPECT_EQ(0u, registry()->disabled_extensions().size()); |
2983 EXPECT_TRUE(registry_->enabled_extensions().Contains(good2)); | 2814 EXPECT_TRUE(registry()->enabled_extensions().Contains(good2)); |
2984 | 2815 |
2985 // The plugin extension should install if we accept the dialog. | 2816 // The plugin extension should install if we accept the dialog. |
2986 CommandLine::ForCurrentProcess()->AppendSwitchASCII( | 2817 CommandLine::ForCurrentProcess()->AppendSwitchASCII( |
2987 switches::kAppsGalleryInstallAutoConfirmForTests, | 2818 switches::kAppsGalleryInstallAutoConfirmForTests, |
2988 "accept"); | 2819 "accept"); |
2989 | 2820 |
2990 ExtensionErrorReporter::GetInstance()->ClearErrors(); | 2821 ExtensionErrorReporter::GetInstance()->ClearErrors(); |
2991 extensions::UnpackedInstaller::Create(service_)->Load( | 2822 extensions::UnpackedInstaller::Create(service()) |
2992 extension_with_plugin_path); | 2823 ->Load(extension_with_plugin_path); |
2993 base::RunLoop().RunUntilIdle(); | 2824 base::RunLoop().RunUntilIdle(); |
2994 EXPECT_EQ(0u, GetErrors().size()); | 2825 EXPECT_EQ(0u, GetErrors().size()); |
2995 EXPECT_EQ(2u, loaded_.size()); | 2826 EXPECT_EQ(2u, loaded_.size()); |
2996 EXPECT_EQ(2u, registry_->enabled_extensions().size()); | 2827 EXPECT_EQ(2u, registry()->enabled_extensions().size()); |
2997 EXPECT_EQ(0u, registry_->disabled_extensions().size()); | 2828 EXPECT_EQ(0u, registry()->disabled_extensions().size()); |
2998 EXPECT_TRUE(registry_->enabled_extensions().Contains(good1)); | 2829 EXPECT_TRUE(registry()->enabled_extensions().Contains(good1)); |
2999 EXPECT_TRUE(registry_->enabled_extensions().Contains(good2)); | 2830 EXPECT_TRUE(registry()->enabled_extensions().Contains(good2)); |
3000 | 2831 |
3001 // Make sure the granted permissions have been setup. | 2832 // Make sure the granted permissions have been setup. |
3002 scoped_refptr<PermissionSet> permissions( | 2833 scoped_refptr<PermissionSet> permissions( |
3003 ExtensionPrefs::Get(profile_.get())->GetGrantedPermissions(good1)); | 2834 ExtensionPrefs::Get(profile())->GetGrantedPermissions(good1)); |
3004 EXPECT_FALSE(permissions->IsEmpty()); | 2835 EXPECT_FALSE(permissions->IsEmpty()); |
3005 EXPECT_TRUE(permissions->HasEffectiveFullAccess()); | 2836 EXPECT_TRUE(permissions->HasEffectiveFullAccess()); |
3006 EXPECT_FALSE(permissions->apis().empty()); | 2837 EXPECT_FALSE(permissions->apis().empty()); |
3007 EXPECT_TRUE(permissions->HasAPIPermission(APIPermission::kPlugin)); | 2838 EXPECT_TRUE(permissions->HasAPIPermission(APIPermission::kPlugin)); |
3008 | 2839 |
3009 // We should be able to reload the extension without getting another prompt. | 2840 // We should be able to reload the extension without getting another prompt. |
3010 loaded_.clear(); | 2841 loaded_.clear(); |
3011 CommandLine::ForCurrentProcess()->AppendSwitchASCII( | 2842 CommandLine::ForCurrentProcess()->AppendSwitchASCII( |
3012 switches::kAppsGalleryInstallAutoConfirmForTests, | 2843 switches::kAppsGalleryInstallAutoConfirmForTests, |
3013 "cancel"); | 2844 "cancel"); |
3014 | 2845 |
3015 service_->ReloadExtension(good1); | 2846 service()->ReloadExtension(good1); |
3016 base::RunLoop().RunUntilIdle(); | 2847 base::RunLoop().RunUntilIdle(); |
3017 EXPECT_EQ(1u, loaded_.size()); | 2848 EXPECT_EQ(1u, loaded_.size()); |
3018 EXPECT_EQ(2u, registry_->enabled_extensions().size()); | 2849 EXPECT_EQ(2u, registry()->enabled_extensions().size()); |
3019 EXPECT_EQ(0u, registry_->disabled_extensions().size()); | 2850 EXPECT_EQ(0u, registry()->disabled_extensions().size()); |
3020 } | 2851 } |
3021 #endif // !defined(OS_POSIX) || defined(OS_MACOSX) | 2852 #endif // !defined(OS_POSIX) || defined(OS_MACOSX) |
3022 | 2853 |
3023 namespace { | 2854 namespace { |
3024 | 2855 |
3025 bool IsExtension(const Extension* extension) { | 2856 bool IsExtension(const Extension* extension) { |
3026 return extension->GetType() == Manifest::TYPE_EXTENSION; | 2857 return extension->GetType() == Manifest::TYPE_EXTENSION; |
3027 } | 2858 } |
3028 | 2859 |
3029 #if defined(ENABLE_BLACKLIST_TESTS) | 2860 #if defined(ENABLE_BLACKLIST_TESTS) |
(...skipping 14 matching lines...) Expand all Loading... |
3044 // Test adding a pending extension. | 2875 // Test adding a pending extension. |
3045 TEST_F(ExtensionServiceTest, AddPendingExtensionFromSync) { | 2876 TEST_F(ExtensionServiceTest, AddPendingExtensionFromSync) { |
3046 InitializeEmptyExtensionService(); | 2877 InitializeEmptyExtensionService(); |
3047 | 2878 |
3048 const std::string kFakeId(all_zero); | 2879 const std::string kFakeId(all_zero); |
3049 const GURL kFakeUpdateURL("http:://fake.update/url"); | 2880 const GURL kFakeUpdateURL("http:://fake.update/url"); |
3050 const bool kFakeInstallSilently(true); | 2881 const bool kFakeInstallSilently(true); |
3051 const bool kFakeRemoteInstall(false); | 2882 const bool kFakeRemoteInstall(false); |
3052 | 2883 |
3053 EXPECT_TRUE( | 2884 EXPECT_TRUE( |
3054 service_->pending_extension_manager()->AddFromSync(kFakeId, | 2885 service()->pending_extension_manager()->AddFromSync(kFakeId, |
3055 kFakeUpdateURL, | 2886 kFakeUpdateURL, |
3056 &IsExtension, | 2887 &IsExtension, |
3057 kFakeInstallSilently, | 2888 kFakeInstallSilently, |
3058 kFakeRemoteInstall)); | 2889 kFakeRemoteInstall)); |
3059 | 2890 |
3060 const extensions::PendingExtensionInfo* pending_extension_info; | 2891 const extensions::PendingExtensionInfo* pending_extension_info; |
3061 ASSERT_TRUE((pending_extension_info = service_->pending_extension_manager()-> | 2892 ASSERT_TRUE((pending_extension_info = |
3062 GetById(kFakeId))); | 2893 service()->pending_extension_manager()->GetById(kFakeId))); |
3063 EXPECT_EQ(kFakeUpdateURL, pending_extension_info->update_url()); | 2894 EXPECT_EQ(kFakeUpdateURL, pending_extension_info->update_url()); |
3064 EXPECT_EQ(&IsExtension, pending_extension_info->should_allow_install_); | 2895 EXPECT_EQ(&IsExtension, pending_extension_info->should_allow_install_); |
3065 EXPECT_EQ(kFakeInstallSilently, pending_extension_info->install_silently()); | 2896 EXPECT_EQ(kFakeInstallSilently, pending_extension_info->install_silently()); |
3066 // Use | 2897 // Use |
3067 // EXPECT_TRUE(kFakeRemoteInstall == pending_extension_info->remote_install()) | 2898 // EXPECT_TRUE(kFakeRemoteInstall == pending_extension_info->remote_install()) |
3068 // instead of | 2899 // instead of |
3069 // EXPECT_EQ(kFakeRemoteInstall, pending_extension_info->remote_install()) | 2900 // EXPECT_EQ(kFakeRemoteInstall, pending_extension_info->remote_install()) |
3070 // as gcc 4.7 issues the following warning on EXPECT_EQ(false, x), which is | 2901 // as gcc 4.7 issues the following warning on EXPECT_EQ(false, x), which is |
3071 // turned into an error with -Werror=conversion-null: | 2902 // turned into an error with -Werror=conversion-null: |
3072 // converting 'false' to pointer type for argument 1 of | 2903 // converting 'false' to pointer type for argument 1 of |
3073 // 'char testing::internal::IsNullLiteralHelper(testing::internal::Secret*)' | 2904 // 'char testing::internal::IsNullLiteralHelper(testing::internal::Secret*)' |
3074 // https://code.google.com/p/googletest/issues/detail?id=458 | 2905 // https://code.google.com/p/googletest/issues/detail?id=458 |
3075 EXPECT_TRUE(kFakeRemoteInstall == pending_extension_info->remote_install()); | 2906 EXPECT_TRUE(kFakeRemoteInstall == pending_extension_info->remote_install()); |
3076 } | 2907 } |
3077 | 2908 |
3078 namespace { | 2909 namespace { |
3079 const char kGoodId[] = "ldnnhddmnhbkjipkidpdiheffobcpfmf"; | 2910 const char kGoodId[] = "ldnnhddmnhbkjipkidpdiheffobcpfmf"; |
3080 const char kGoodUpdateURL[] = "http://good.update/url"; | 2911 const char kGoodUpdateURL[] = "http://good.update/url"; |
3081 const bool kGoodIsFromSync = true; | 2912 const bool kGoodIsFromSync = true; |
3082 const bool kGoodInstallSilently = true; | 2913 const bool kGoodInstallSilently = true; |
3083 const bool kGoodRemoteInstall = false; | 2914 const bool kGoodRemoteInstall = false; |
3084 } // namespace | 2915 } // namespace |
3085 | 2916 |
3086 // Test updating a pending extension. | 2917 // Test updating a pending extension. |
3087 TEST_F(ExtensionServiceTest, UpdatePendingExtension) { | 2918 TEST_F(ExtensionServiceTest, UpdatePendingExtension) { |
3088 InitializeEmptyExtensionService(); | 2919 InitializeEmptyExtensionService(); |
3089 EXPECT_TRUE( | 2920 EXPECT_TRUE( |
3090 service_->pending_extension_manager()->AddFromSync(kGoodId, | 2921 service()->pending_extension_manager()->AddFromSync(kGoodId, |
3091 GURL(kGoodUpdateURL), | 2922 GURL(kGoodUpdateURL), |
3092 &IsExtension, | 2923 &IsExtension, |
3093 kGoodInstallSilently, | 2924 kGoodInstallSilently, |
3094 kGoodRemoteInstall)); | 2925 kGoodRemoteInstall)); |
3095 EXPECT_TRUE(service_->pending_extension_manager()->IsIdPending(kGoodId)); | 2926 EXPECT_TRUE(service()->pending_extension_manager()->IsIdPending(kGoodId)); |
3096 | 2927 |
3097 base::FilePath path = data_dir_.AppendASCII("good.crx"); | 2928 base::FilePath path = data_dir().AppendASCII("good.crx"); |
3098 UpdateExtension(kGoodId, path, ENABLED); | 2929 UpdateExtension(kGoodId, path, ENABLED); |
3099 | 2930 |
3100 EXPECT_FALSE(service_->pending_extension_manager()->IsIdPending(kGoodId)); | 2931 EXPECT_FALSE(service()->pending_extension_manager()->IsIdPending(kGoodId)); |
3101 | 2932 |
3102 const Extension* extension = service_->GetExtensionById(kGoodId, true); | 2933 const Extension* extension = service()->GetExtensionById(kGoodId, true); |
3103 ASSERT_TRUE(extension); | 2934 ASSERT_TRUE(extension); |
3104 } | 2935 } |
3105 | 2936 |
3106 namespace { | 2937 namespace { |
3107 | 2938 |
3108 bool IsTheme(const Extension* extension) { | 2939 bool IsTheme(const Extension* extension) { |
3109 return extension->is_theme(); | 2940 return extension->is_theme(); |
3110 } | 2941 } |
3111 | 2942 |
3112 } // namespace | 2943 } // namespace |
3113 | 2944 |
3114 // Test updating a pending theme. | 2945 // Test updating a pending theme. |
3115 // Disabled due to ASAN failure. http://crbug.com/108320 | 2946 // Disabled due to ASAN failure. http://crbug.com/108320 |
3116 TEST_F(ExtensionServiceTest, DISABLED_UpdatePendingTheme) { | 2947 TEST_F(ExtensionServiceTest, DISABLED_UpdatePendingTheme) { |
3117 InitializeEmptyExtensionService(); | 2948 InitializeEmptyExtensionService(); |
3118 EXPECT_TRUE(service_->pending_extension_manager()->AddFromSync( | 2949 EXPECT_TRUE(service()->pending_extension_manager()->AddFromSync( |
3119 theme_crx, GURL(), &IsTheme, false, false)); | 2950 theme_crx, GURL(), &IsTheme, false, false)); |
3120 EXPECT_TRUE(service_->pending_extension_manager()->IsIdPending(theme_crx)); | 2951 EXPECT_TRUE(service()->pending_extension_manager()->IsIdPending(theme_crx)); |
3121 | 2952 |
3122 base::FilePath path = data_dir_.AppendASCII("theme.crx"); | 2953 base::FilePath path = data_dir().AppendASCII("theme.crx"); |
3123 UpdateExtension(theme_crx, path, ENABLED); | 2954 UpdateExtension(theme_crx, path, ENABLED); |
3124 | 2955 |
3125 EXPECT_FALSE(service_->pending_extension_manager()->IsIdPending(theme_crx)); | 2956 EXPECT_FALSE(service()->pending_extension_manager()->IsIdPending(theme_crx)); |
3126 | 2957 |
3127 const Extension* extension = service_->GetExtensionById(theme_crx, true); | 2958 const Extension* extension = service()->GetExtensionById(theme_crx, true); |
3128 ASSERT_TRUE(extension); | 2959 ASSERT_TRUE(extension); |
3129 | 2960 |
3130 EXPECT_FALSE(ExtensionPrefs::Get(profile_.get()) | 2961 EXPECT_FALSE( |
3131 ->IsExtensionDisabled(extension->id())); | 2962 ExtensionPrefs::Get(profile())->IsExtensionDisabled(extension->id())); |
3132 EXPECT_TRUE(service_->IsExtensionEnabled(theme_crx)); | 2963 EXPECT_TRUE(service()->IsExtensionEnabled(theme_crx)); |
3133 } | 2964 } |
3134 | 2965 |
3135 #if defined(OS_CHROMEOS) | 2966 #if defined(OS_CHROMEOS) |
3136 // Always fails on ChromeOS: http://crbug.com/79737 | 2967 // Always fails on ChromeOS: http://crbug.com/79737 |
3137 #define MAYBE_UpdatePendingExternalCrx DISABLED_UpdatePendingExternalCrx | 2968 #define MAYBE_UpdatePendingExternalCrx DISABLED_UpdatePendingExternalCrx |
3138 #else | 2969 #else |
3139 #define MAYBE_UpdatePendingExternalCrx UpdatePendingExternalCrx | 2970 #define MAYBE_UpdatePendingExternalCrx UpdatePendingExternalCrx |
3140 #endif | 2971 #endif |
3141 // Test updating a pending CRX as if the source is an external extension | 2972 // Test updating a pending CRX as if the source is an external extension |
3142 // with an update URL. In this case we don't know if the CRX is a theme | 2973 // with an update URL. In this case we don't know if the CRX is a theme |
3143 // or not. | 2974 // or not. |
3144 TEST_F(ExtensionServiceTest, MAYBE_UpdatePendingExternalCrx) { | 2975 TEST_F(ExtensionServiceTest, MAYBE_UpdatePendingExternalCrx) { |
3145 InitializeEmptyExtensionService(); | 2976 InitializeEmptyExtensionService(); |
3146 EXPECT_TRUE(service_->pending_extension_manager()->AddFromExternalUpdateUrl( | 2977 EXPECT_TRUE(service()->pending_extension_manager()->AddFromExternalUpdateUrl( |
3147 theme_crx, | 2978 theme_crx, |
3148 std::string(), | 2979 std::string(), |
3149 GURL(), | 2980 GURL(), |
3150 Manifest::EXTERNAL_PREF_DOWNLOAD, | 2981 Manifest::EXTERNAL_PREF_DOWNLOAD, |
3151 Extension::NO_FLAGS, | 2982 Extension::NO_FLAGS, |
3152 false)); | 2983 false)); |
3153 | 2984 |
3154 EXPECT_TRUE(service_->pending_extension_manager()->IsIdPending(theme_crx)); | 2985 EXPECT_TRUE(service()->pending_extension_manager()->IsIdPending(theme_crx)); |
3155 | 2986 |
3156 base::FilePath path = data_dir_.AppendASCII("theme.crx"); | 2987 base::FilePath path = data_dir().AppendASCII("theme.crx"); |
3157 UpdateExtension(theme_crx, path, ENABLED); | 2988 UpdateExtension(theme_crx, path, ENABLED); |
3158 | 2989 |
3159 EXPECT_FALSE(service_->pending_extension_manager()->IsIdPending(theme_crx)); | 2990 EXPECT_FALSE(service()->pending_extension_manager()->IsIdPending(theme_crx)); |
3160 | 2991 |
3161 const Extension* extension = service_->GetExtensionById(theme_crx, true); | 2992 const Extension* extension = service()->GetExtensionById(theme_crx, true); |
3162 ASSERT_TRUE(extension); | 2993 ASSERT_TRUE(extension); |
3163 | 2994 |
3164 EXPECT_FALSE(ExtensionPrefs::Get(profile_.get()) | 2995 EXPECT_FALSE( |
3165 ->IsExtensionDisabled(extension->id())); | 2996 ExtensionPrefs::Get(profile())->IsExtensionDisabled(extension->id())); |
3166 EXPECT_TRUE(service_->IsExtensionEnabled(extension->id())); | 2997 EXPECT_TRUE(service()->IsExtensionEnabled(extension->id())); |
3167 EXPECT_FALSE(extensions::util::IsIncognitoEnabled(extension->id(), | 2998 EXPECT_FALSE( |
3168 profile_.get())); | 2999 extensions::util::IsIncognitoEnabled(extension->id(), profile())); |
3169 } | 3000 } |
3170 | 3001 |
3171 // Test updating a pending CRX as if the source is an external extension | 3002 // Test updating a pending CRX as if the source is an external extension |
3172 // with an update URL. The external update should overwrite a sync update, | 3003 // with an update URL. The external update should overwrite a sync update, |
3173 // but a sync update should not overwrite a non-sync update. | 3004 // but a sync update should not overwrite a non-sync update. |
3174 TEST_F(ExtensionServiceTest, UpdatePendingExternalCrxWinsOverSync) { | 3005 TEST_F(ExtensionServiceTest, UpdatePendingExternalCrxWinsOverSync) { |
3175 InitializeEmptyExtensionService(); | 3006 InitializeEmptyExtensionService(); |
3176 | 3007 |
3177 // Add a crx to be installed from the update mechanism. | 3008 // Add a crx to be installed from the update mechanism. |
3178 EXPECT_TRUE( | 3009 EXPECT_TRUE( |
3179 service_->pending_extension_manager()->AddFromSync(kGoodId, | 3010 service()->pending_extension_manager()->AddFromSync(kGoodId, |
3180 GURL(kGoodUpdateURL), | 3011 GURL(kGoodUpdateURL), |
3181 &IsExtension, | 3012 &IsExtension, |
3182 kGoodInstallSilently, | 3013 kGoodInstallSilently, |
3183 kGoodRemoteInstall)); | 3014 kGoodRemoteInstall)); |
3184 | 3015 |
3185 // Check that there is a pending crx, with is_from_sync set to true. | 3016 // Check that there is a pending crx, with is_from_sync set to true. |
3186 const extensions::PendingExtensionInfo* pending_extension_info; | 3017 const extensions::PendingExtensionInfo* pending_extension_info; |
3187 ASSERT_TRUE((pending_extension_info = service_->pending_extension_manager()-> | 3018 ASSERT_TRUE((pending_extension_info = |
3188 GetById(kGoodId))); | 3019 service()->pending_extension_manager()->GetById(kGoodId))); |
3189 EXPECT_TRUE(pending_extension_info->is_from_sync()); | 3020 EXPECT_TRUE(pending_extension_info->is_from_sync()); |
3190 | 3021 |
3191 // Add a crx to be updated, with the same ID, from a non-sync source. | 3022 // Add a crx to be updated, with the same ID, from a non-sync source. |
3192 EXPECT_TRUE(service_->pending_extension_manager()->AddFromExternalUpdateUrl( | 3023 EXPECT_TRUE(service()->pending_extension_manager()->AddFromExternalUpdateUrl( |
3193 kGoodId, | 3024 kGoodId, |
3194 std::string(), | 3025 std::string(), |
3195 GURL(kGoodUpdateURL), | 3026 GURL(kGoodUpdateURL), |
3196 Manifest::EXTERNAL_PREF_DOWNLOAD, | 3027 Manifest::EXTERNAL_PREF_DOWNLOAD, |
3197 Extension::NO_FLAGS, | 3028 Extension::NO_FLAGS, |
3198 false)); | 3029 false)); |
3199 | 3030 |
3200 // Check that there is a pending crx, with is_from_sync set to false. | 3031 // Check that there is a pending crx, with is_from_sync set to false. |
3201 ASSERT_TRUE((pending_extension_info = service_->pending_extension_manager()-> | 3032 ASSERT_TRUE((pending_extension_info = |
3202 GetById(kGoodId))); | 3033 service()->pending_extension_manager()->GetById(kGoodId))); |
3203 EXPECT_FALSE(pending_extension_info->is_from_sync()); | 3034 EXPECT_FALSE(pending_extension_info->is_from_sync()); |
3204 EXPECT_EQ(Manifest::EXTERNAL_PREF_DOWNLOAD, | 3035 EXPECT_EQ(Manifest::EXTERNAL_PREF_DOWNLOAD, |
3205 pending_extension_info->install_source()); | 3036 pending_extension_info->install_source()); |
3206 | 3037 |
3207 // Add a crx to be installed from the update mechanism. | 3038 // Add a crx to be installed from the update mechanism. |
3208 EXPECT_FALSE( | 3039 EXPECT_FALSE( |
3209 service_->pending_extension_manager()->AddFromSync(kGoodId, | 3040 service()->pending_extension_manager()->AddFromSync(kGoodId, |
3210 GURL(kGoodUpdateURL), | 3041 GURL(kGoodUpdateURL), |
3211 &IsExtension, | 3042 &IsExtension, |
3212 kGoodInstallSilently, | 3043 kGoodInstallSilently, |
3213 kGoodRemoteInstall)); | 3044 kGoodRemoteInstall)); |
3214 | 3045 |
3215 // Check that the external, non-sync update was not overridden. | 3046 // Check that the external, non-sync update was not overridden. |
3216 ASSERT_TRUE((pending_extension_info = service_->pending_extension_manager()-> | 3047 ASSERT_TRUE((pending_extension_info = |
3217 GetById(kGoodId))); | 3048 service()->pending_extension_manager()->GetById(kGoodId))); |
3218 EXPECT_FALSE(pending_extension_info->is_from_sync()); | 3049 EXPECT_FALSE(pending_extension_info->is_from_sync()); |
3219 EXPECT_EQ(Manifest::EXTERNAL_PREF_DOWNLOAD, | 3050 EXPECT_EQ(Manifest::EXTERNAL_PREF_DOWNLOAD, |
3220 pending_extension_info->install_source()); | 3051 pending_extension_info->install_source()); |
3221 } | 3052 } |
3222 | 3053 |
3223 // Updating a theme should fail if the updater is explicitly told that | 3054 // Updating a theme should fail if the updater is explicitly told that |
3224 // the CRX is not a theme. | 3055 // the CRX is not a theme. |
3225 TEST_F(ExtensionServiceTest, UpdatePendingCrxThemeMismatch) { | 3056 TEST_F(ExtensionServiceTest, UpdatePendingCrxThemeMismatch) { |
3226 InitializeEmptyExtensionService(); | 3057 InitializeEmptyExtensionService(); |
3227 EXPECT_TRUE(service_->pending_extension_manager()->AddFromSync( | 3058 EXPECT_TRUE(service()->pending_extension_manager()->AddFromSync( |
3228 theme_crx, GURL(), &IsExtension, true, false)); | 3059 theme_crx, GURL(), &IsExtension, true, false)); |
3229 | 3060 |
3230 EXPECT_TRUE(service_->pending_extension_manager()->IsIdPending(theme_crx)); | 3061 EXPECT_TRUE(service()->pending_extension_manager()->IsIdPending(theme_crx)); |
3231 | 3062 |
3232 base::FilePath path = data_dir_.AppendASCII("theme.crx"); | 3063 base::FilePath path = data_dir().AppendASCII("theme.crx"); |
3233 UpdateExtension(theme_crx, path, FAILED_SILENTLY); | 3064 UpdateExtension(theme_crx, path, FAILED_SILENTLY); |
3234 | 3065 |
3235 EXPECT_FALSE(service_->pending_extension_manager()->IsIdPending(theme_crx)); | 3066 EXPECT_FALSE(service()->pending_extension_manager()->IsIdPending(theme_crx)); |
3236 | 3067 |
3237 const Extension* extension = service_->GetExtensionById(theme_crx, true); | 3068 const Extension* extension = service()->GetExtensionById(theme_crx, true); |
3238 ASSERT_FALSE(extension); | 3069 ASSERT_FALSE(extension); |
3239 } | 3070 } |
3240 | 3071 |
3241 // TODO(akalin): Test updating a pending extension non-silently once | 3072 // TODO(akalin): Test updating a pending extension non-silently once |
3242 // we can mock out ExtensionInstallUI and inject our version into | 3073 // we can mock out ExtensionInstallUI and inject our version into |
3243 // UpdateExtension(). | 3074 // UpdateExtension(). |
3244 | 3075 |
3245 // Test updating a pending extension which fails the should-install test. | 3076 // Test updating a pending extension which fails the should-install test. |
3246 TEST_F(ExtensionServiceTest, UpdatePendingExtensionFailedShouldInstallTest) { | 3077 TEST_F(ExtensionServiceTest, UpdatePendingExtensionFailedShouldInstallTest) { |
3247 InitializeEmptyExtensionService(); | 3078 InitializeEmptyExtensionService(); |
3248 // Add pending extension with a flipped is_theme. | 3079 // Add pending extension with a flipped is_theme. |
3249 EXPECT_TRUE( | 3080 EXPECT_TRUE( |
3250 service_->pending_extension_manager()->AddFromSync(kGoodId, | 3081 service()->pending_extension_manager()->AddFromSync(kGoodId, |
3251 GURL(kGoodUpdateURL), | 3082 GURL(kGoodUpdateURL), |
3252 &IsTheme, | 3083 &IsTheme, |
3253 kGoodInstallSilently, | 3084 kGoodInstallSilently, |
3254 kGoodRemoteInstall)); | 3085 kGoodRemoteInstall)); |
3255 EXPECT_TRUE(service_->pending_extension_manager()->IsIdPending(kGoodId)); | 3086 EXPECT_TRUE(service()->pending_extension_manager()->IsIdPending(kGoodId)); |
3256 | 3087 |
3257 base::FilePath path = data_dir_.AppendASCII("good.crx"); | 3088 base::FilePath path = data_dir().AppendASCII("good.crx"); |
3258 UpdateExtension(kGoodId, path, UPDATED); | 3089 UpdateExtension(kGoodId, path, UPDATED); |
3259 | 3090 |
3260 // TODO(akalin): Figure out how to check that the extensions | 3091 // TODO(akalin): Figure out how to check that the extensions |
3261 // directory is cleaned up properly in OnExtensionInstalled(). | 3092 // directory is cleaned up properly in OnExtensionInstalled(). |
3262 | 3093 |
3263 EXPECT_FALSE(service_->pending_extension_manager()->IsIdPending(kGoodId)); | 3094 EXPECT_FALSE(service()->pending_extension_manager()->IsIdPending(kGoodId)); |
3264 } | 3095 } |
3265 | 3096 |
3266 // TODO(akalin): Figure out how to test that installs of pending | 3097 // TODO(akalin): Figure out how to test that installs of pending |
3267 // unsyncable extensions are blocked. | 3098 // unsyncable extensions are blocked. |
3268 | 3099 |
3269 // Test updating a pending extension for one that is not pending. | 3100 // Test updating a pending extension for one that is not pending. |
3270 TEST_F(ExtensionServiceTest, UpdatePendingExtensionNotPending) { | 3101 TEST_F(ExtensionServiceTest, UpdatePendingExtensionNotPending) { |
3271 InitializeEmptyExtensionService(); | 3102 InitializeEmptyExtensionService(); |
3272 | 3103 |
3273 base::FilePath path = data_dir_.AppendASCII("good.crx"); | 3104 base::FilePath path = data_dir().AppendASCII("good.crx"); |
3274 UpdateExtension(kGoodId, path, UPDATED); | 3105 UpdateExtension(kGoodId, path, UPDATED); |
3275 | 3106 |
3276 EXPECT_FALSE(service_->pending_extension_manager()->IsIdPending(kGoodId)); | 3107 EXPECT_FALSE(service()->pending_extension_manager()->IsIdPending(kGoodId)); |
3277 } | 3108 } |
3278 | 3109 |
3279 // Test updating a pending extension for one that is already | 3110 // Test updating a pending extension for one that is already |
3280 // installed. | 3111 // installed. |
3281 TEST_F(ExtensionServiceTest, UpdatePendingExtensionAlreadyInstalled) { | 3112 TEST_F(ExtensionServiceTest, UpdatePendingExtensionAlreadyInstalled) { |
3282 InitializeEmptyExtensionService(); | 3113 InitializeEmptyExtensionService(); |
3283 | 3114 |
3284 base::FilePath path = data_dir_.AppendASCII("good.crx"); | 3115 base::FilePath path = data_dir().AppendASCII("good.crx"); |
3285 const Extension* good = InstallCRX(path, INSTALL_NEW); | 3116 const Extension* good = InstallCRX(path, INSTALL_NEW); |
3286 ASSERT_EQ(1u, registry_->enabled_extensions().size()); | 3117 ASSERT_EQ(1u, registry()->enabled_extensions().size()); |
3287 | 3118 |
3288 EXPECT_FALSE(good->is_theme()); | 3119 EXPECT_FALSE(good->is_theme()); |
3289 | 3120 |
3290 // Use AddExtensionImpl() as AddFrom*() would balk. | 3121 // Use AddExtensionImpl() as AddFrom*() would balk. |
3291 service_->pending_extension_manager()->AddExtensionImpl( | 3122 service()->pending_extension_manager()->AddExtensionImpl( |
3292 good->id(), | 3123 good->id(), |
3293 std::string(), | 3124 std::string(), |
3294 extensions::ManifestURL::GetUpdateURL(good), | 3125 extensions::ManifestURL::GetUpdateURL(good), |
3295 Version(), | 3126 Version(), |
3296 &IsExtension, | 3127 &IsExtension, |
3297 kGoodIsFromSync, | 3128 kGoodIsFromSync, |
3298 kGoodInstallSilently, | 3129 kGoodInstallSilently, |
3299 Manifest::INTERNAL, | 3130 Manifest::INTERNAL, |
3300 Extension::NO_FLAGS, | 3131 Extension::NO_FLAGS, |
3301 false, | 3132 false, |
3302 kGoodRemoteInstall); | 3133 kGoodRemoteInstall); |
3303 UpdateExtension(good->id(), path, ENABLED); | 3134 UpdateExtension(good->id(), path, ENABLED); |
3304 | 3135 |
3305 EXPECT_FALSE(service_->pending_extension_manager()->IsIdPending(kGoodId)); | 3136 EXPECT_FALSE(service()->pending_extension_manager()->IsIdPending(kGoodId)); |
3306 } | 3137 } |
3307 | 3138 |
3308 #if defined(ENABLE_BLACKLIST_TESTS) | 3139 #if defined(ENABLE_BLACKLIST_TESTS) |
3309 // Tests blacklisting then unblacklisting extensions after the service has been | 3140 // Tests blacklisting then unblacklisting extensions after the service has been |
3310 // initialized. | 3141 // initialized. |
3311 TEST_F(ExtensionServiceTest, SetUnsetBlacklistInPrefs) { | 3142 TEST_F(ExtensionServiceTest, SetUnsetBlacklistInPrefs) { |
3312 extensions::TestBlacklist test_blacklist; | 3143 extensions::TestBlacklist test_blacklist; |
3313 // A profile with 3 extensions installed: good0, good1, and good2. | 3144 // A profile with 3 extensions installed: good0, good1, and good2. |
3314 InitializeGoodInstalledExtensionService(); | 3145 InitializeGoodInstalledExtensionService(); |
3315 test_blacklist.Attach(service_->blacklist_); | 3146 test_blacklist.Attach(service()->blacklist_); |
3316 service_->Init(); | 3147 service()->Init(); |
3317 | 3148 |
3318 const extensions::ExtensionSet& enabled_extensions = | 3149 const extensions::ExtensionSet& enabled_extensions = |
3319 registry_->enabled_extensions(); | 3150 registry()->enabled_extensions(); |
3320 const extensions::ExtensionSet& blacklisted_extensions = | 3151 const extensions::ExtensionSet& blacklisted_extensions = |
3321 registry_->blacklisted_extensions(); | 3152 registry()->blacklisted_extensions(); |
3322 | 3153 |
3323 EXPECT_TRUE(enabled_extensions.Contains(good0) && | 3154 EXPECT_TRUE(enabled_extensions.Contains(good0) && |
3324 !blacklisted_extensions.Contains(good0)); | 3155 !blacklisted_extensions.Contains(good0)); |
3325 EXPECT_TRUE(enabled_extensions.Contains(good1) && | 3156 EXPECT_TRUE(enabled_extensions.Contains(good1) && |
3326 !blacklisted_extensions.Contains(good1)); | 3157 !blacklisted_extensions.Contains(good1)); |
3327 EXPECT_TRUE(enabled_extensions.Contains(good2) && | 3158 EXPECT_TRUE(enabled_extensions.Contains(good2) && |
3328 !blacklisted_extensions.Contains(good2)); | 3159 !blacklisted_extensions.Contains(good2)); |
3329 | 3160 |
3330 EXPECT_FALSE(IsPrefExist(good0, "blacklist")); | 3161 EXPECT_FALSE(IsPrefExist(good0, "blacklist")); |
3331 EXPECT_FALSE(IsPrefExist(good1, "blacklist")); | 3162 EXPECT_FALSE(IsPrefExist(good1, "blacklist")); |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3378 #endif // defined(ENABLE_BLACKLIST_TESTS) | 3209 #endif // defined(ENABLE_BLACKLIST_TESTS) |
3379 | 3210 |
3380 #if defined(ENABLE_BLACKLIST_TESTS) | 3211 #if defined(ENABLE_BLACKLIST_TESTS) |
3381 // Tests trying to install a blacklisted extension. | 3212 // Tests trying to install a blacklisted extension. |
3382 TEST_F(ExtensionServiceTest, BlacklistedExtensionWillNotInstall) { | 3213 TEST_F(ExtensionServiceTest, BlacklistedExtensionWillNotInstall) { |
3383 scoped_refptr<FakeSafeBrowsingDatabaseManager> blacklist_db( | 3214 scoped_refptr<FakeSafeBrowsingDatabaseManager> blacklist_db( |
3384 new FakeSafeBrowsingDatabaseManager(true)); | 3215 new FakeSafeBrowsingDatabaseManager(true)); |
3385 Blacklist::ScopedDatabaseManagerForTest scoped_blacklist_db(blacklist_db); | 3216 Blacklist::ScopedDatabaseManagerForTest scoped_blacklist_db(blacklist_db); |
3386 | 3217 |
3387 InitializeEmptyExtensionService(); | 3218 InitializeEmptyExtensionService(); |
3388 service_->Init(); | 3219 service()->Init(); |
3389 | 3220 |
3390 // After blacklisting good_crx, we cannot install it. | 3221 // After blacklisting good_crx, we cannot install it. |
3391 blacklist_db->SetUnsafe(good_crx).NotifyUpdate(); | 3222 blacklist_db->SetUnsafe(good_crx).NotifyUpdate(); |
3392 base::RunLoop().RunUntilIdle(); | 3223 base::RunLoop().RunUntilIdle(); |
3393 | 3224 |
3394 base::FilePath path = data_dir_.AppendASCII("good.crx"); | 3225 base::FilePath path = data_dir().AppendASCII("good.crx"); |
3395 // HACK: specify WAS_INSTALLED_BY_DEFAULT so that test machinery doesn't | 3226 // HACK: specify WAS_INSTALLED_BY_DEFAULT so that test machinery doesn't |
3396 // decide to install this silently. Somebody should fix these tests, all | 3227 // decide to install this silently. Somebody should fix these tests, all |
3397 // 6,000 lines of them. Hah! | 3228 // 6,000 lines of them. Hah! |
3398 InstallCRX(path, INSTALL_FAILED, Extension::WAS_INSTALLED_BY_DEFAULT); | 3229 InstallCRX(path, INSTALL_FAILED, Extension::WAS_INSTALLED_BY_DEFAULT); |
3399 EXPECT_EQ(0u, registry_->enabled_extensions().size()); | 3230 EXPECT_EQ(0u, registry()->enabled_extensions().size()); |
3400 } | 3231 } |
3401 #endif // defined(ENABLE_BLACKLIST_TESTS) | 3232 #endif // defined(ENABLE_BLACKLIST_TESTS) |
3402 | 3233 |
3403 #if defined(ENABLE_BLACKLIST_TESTS) | 3234 #if defined(ENABLE_BLACKLIST_TESTS) |
3404 // Unload blacklisted extension on policy change. | 3235 // Unload blacklisted extension on policy change. |
3405 TEST_F(ExtensionServiceTest, UnloadBlacklistedExtensionPolicy) { | 3236 TEST_F(ExtensionServiceTest, UnloadBlacklistedExtensionPolicy) { |
3406 extensions::TestBlacklist test_blacklist; | 3237 extensions::TestBlacklist test_blacklist; |
3407 | 3238 |
3408 // A profile with no extensions installed. | 3239 // A profile with no extensions installed. |
3409 InitializeEmptyExtensionService(); | 3240 InitializeEmptyExtensionService(); |
3410 test_blacklist.Attach(service_->blacklist_); | 3241 test_blacklist.Attach(service()->blacklist_); |
3411 | 3242 |
3412 base::FilePath path = data_dir_.AppendASCII("good.crx"); | 3243 base::FilePath path = data_dir().AppendASCII("good.crx"); |
3413 | 3244 |
3414 const Extension* good = InstallCRX(path, INSTALL_NEW); | 3245 const Extension* good = InstallCRX(path, INSTALL_NEW); |
3415 EXPECT_EQ(good_crx, good->id()); | 3246 EXPECT_EQ(good_crx, good->id()); |
3416 UpdateExtension(good_crx, path, FAILED_SILENTLY); | 3247 UpdateExtension(good_crx, path, FAILED_SILENTLY); |
3417 EXPECT_EQ(1u, registry_->enabled_extensions().size()); | 3248 EXPECT_EQ(1u, registry()->enabled_extensions().size()); |
3418 | 3249 |
3419 base::ListValue whitelist; | 3250 base::ListValue whitelist; |
3420 PrefService* prefs = ExtensionPrefs::Get(profile_.get())->pref_service(); | 3251 PrefService* prefs = ExtensionPrefs::Get(profile())->pref_service(); |
3421 whitelist.Append(new base::StringValue(good_crx)); | 3252 whitelist.Append(new base::StringValue(good_crx)); |
3422 prefs->Set(extensions::pref_names::kInstallAllowList, whitelist); | 3253 prefs->Set(extensions::pref_names::kInstallAllowList, whitelist); |
3423 | 3254 |
3424 test_blacklist.SetBlacklistState( | 3255 test_blacklist.SetBlacklistState( |
3425 good_crx, extensions::BLACKLISTED_MALWARE, true); | 3256 good_crx, extensions::BLACKLISTED_MALWARE, true); |
3426 base::RunLoop().RunUntilIdle(); | 3257 base::RunLoop().RunUntilIdle(); |
3427 | 3258 |
3428 // The good_crx is blacklisted and the whitelist doesn't negate it. | 3259 // The good_crx is blacklisted and the whitelist doesn't negate it. |
3429 ASSERT_TRUE(ValidateBooleanPref(good_crx, "blacklist", true)); | 3260 ASSERT_TRUE(ValidateBooleanPref(good_crx, "blacklist", true)); |
3430 EXPECT_EQ(0u, registry_->enabled_extensions().size()); | 3261 EXPECT_EQ(0u, registry()->enabled_extensions().size()); |
3431 } | 3262 } |
3432 #endif // defined(ENABLE_BLACKLIST_TESTS) | 3263 #endif // defined(ENABLE_BLACKLIST_TESTS) |
3433 | 3264 |
3434 #if defined(ENABLE_BLACKLIST_TESTS) | 3265 #if defined(ENABLE_BLACKLIST_TESTS) |
3435 // Tests that a blacklisted extension is eventually unloaded on startup, if it | 3266 // Tests that a blacklisted extension is eventually unloaded on startup, if it |
3436 // wasn't already. | 3267 // wasn't already. |
3437 TEST_F(ExtensionServiceTest, WillNotLoadBlacklistedExtensionsFromDirectory) { | 3268 TEST_F(ExtensionServiceTest, WillNotLoadBlacklistedExtensionsFromDirectory) { |
3438 extensions::TestBlacklist test_blacklist; | 3269 extensions::TestBlacklist test_blacklist; |
3439 | 3270 |
3440 // A profile with 3 extensions installed: good0, good1, and good2. | 3271 // A profile with 3 extensions installed: good0, good1, and good2. |
3441 InitializeGoodInstalledExtensionService(); | 3272 InitializeGoodInstalledExtensionService(); |
3442 test_blacklist.Attach(service_->blacklist_); | 3273 test_blacklist.Attach(service()->blacklist_); |
3443 | 3274 |
3444 // Blacklist good1 before the service initializes. | 3275 // Blacklist good1 before the service initializes. |
3445 test_blacklist.SetBlacklistState( | 3276 test_blacklist.SetBlacklistState( |
3446 good1, extensions::BLACKLISTED_MALWARE, false); | 3277 good1, extensions::BLACKLISTED_MALWARE, false); |
3447 | 3278 |
3448 // Load extensions. | 3279 // Load extensions. |
3449 service_->Init(); | 3280 service()->Init(); |
3450 ASSERT_EQ(3u, loaded_.size()); // hasn't had time to blacklist yet | 3281 ASSERT_EQ(3u, loaded_.size()); // hasn't had time to blacklist yet |
3451 | 3282 |
3452 base::RunLoop().RunUntilIdle(); | 3283 base::RunLoop().RunUntilIdle(); |
3453 | 3284 |
3454 ASSERT_EQ(1u, registry_->blacklisted_extensions().size()); | 3285 ASSERT_EQ(1u, registry()->blacklisted_extensions().size()); |
3455 ASSERT_EQ(2u, registry_->enabled_extensions().size()); | 3286 ASSERT_EQ(2u, registry()->enabled_extensions().size()); |
3456 | 3287 |
3457 ASSERT_TRUE(registry_->enabled_extensions().Contains(good0)); | 3288 ASSERT_TRUE(registry()->enabled_extensions().Contains(good0)); |
3458 ASSERT_TRUE(registry_->blacklisted_extensions().Contains(good1)); | 3289 ASSERT_TRUE(registry()->blacklisted_extensions().Contains(good1)); |
3459 ASSERT_TRUE(registry_->enabled_extensions().Contains(good2)); | 3290 ASSERT_TRUE(registry()->enabled_extensions().Contains(good2)); |
3460 } | 3291 } |
3461 #endif // defined(ENABLE_BLACKLIST_TESTS) | 3292 #endif // defined(ENABLE_BLACKLIST_TESTS) |
3462 | 3293 |
3463 #if defined(ENABLE_BLACKLIST_TESTS) | 3294 #if defined(ENABLE_BLACKLIST_TESTS) |
3464 // Tests extensions blacklisted in prefs on startup; one still blacklisted by | 3295 // Tests extensions blacklisted in prefs on startup; one still blacklisted by |
3465 // safe browsing, the other not. The not-blacklisted one should recover. | 3296 // safe browsing, the other not. The not-blacklisted one should recover. |
3466 TEST_F(ExtensionServiceTest, BlacklistedInPrefsFromStartup) { | 3297 TEST_F(ExtensionServiceTest, BlacklistedInPrefsFromStartup) { |
3467 extensions::TestBlacklist test_blacklist; | 3298 extensions::TestBlacklist test_blacklist; |
3468 | 3299 |
3469 InitializeGoodInstalledExtensionService(); | 3300 InitializeGoodInstalledExtensionService(); |
3470 test_blacklist.Attach(service_->blacklist_); | 3301 test_blacklist.Attach(service()->blacklist_); |
3471 ExtensionPrefs::Get(profile_.get())->SetExtensionBlacklisted(good0, true); | 3302 ExtensionPrefs::Get(profile())->SetExtensionBlacklisted(good0, true); |
3472 ExtensionPrefs::Get(profile_.get())->SetExtensionBlacklisted(good1, true); | 3303 ExtensionPrefs::Get(profile())->SetExtensionBlacklisted(good1, true); |
3473 | 3304 |
3474 test_blacklist.SetBlacklistState( | 3305 test_blacklist.SetBlacklistState( |
3475 good1, extensions::BLACKLISTED_MALWARE, false); | 3306 good1, extensions::BLACKLISTED_MALWARE, false); |
3476 | 3307 |
3477 // Extension service hasn't loaded yet, but IsExtensionEnabled reads out of | 3308 // Extension service hasn't loaded yet, but IsExtensionEnabled reads out of |
3478 // prefs. Ensure it takes into account the blacklist state (crbug.com/373842). | 3309 // prefs. Ensure it takes into account the blacklist state (crbug.com/373842). |
3479 EXPECT_FALSE(service_->IsExtensionEnabled(good0)); | 3310 EXPECT_FALSE(service()->IsExtensionEnabled(good0)); |
3480 EXPECT_FALSE(service_->IsExtensionEnabled(good1)); | 3311 EXPECT_FALSE(service()->IsExtensionEnabled(good1)); |
3481 EXPECT_TRUE(service_->IsExtensionEnabled(good2)); | 3312 EXPECT_TRUE(service()->IsExtensionEnabled(good2)); |
3482 | 3313 |
3483 service_->Init(); | 3314 service()->Init(); |
3484 | 3315 |
3485 EXPECT_EQ(2u, registry_->blacklisted_extensions().size()); | 3316 EXPECT_EQ(2u, registry()->blacklisted_extensions().size()); |
3486 EXPECT_EQ(1u, registry_->enabled_extensions().size()); | 3317 EXPECT_EQ(1u, registry()->enabled_extensions().size()); |
3487 | 3318 |
3488 EXPECT_TRUE(registry_->blacklisted_extensions().Contains(good0)); | 3319 EXPECT_TRUE(registry()->blacklisted_extensions().Contains(good0)); |
3489 EXPECT_TRUE(registry_->blacklisted_extensions().Contains(good1)); | 3320 EXPECT_TRUE(registry()->blacklisted_extensions().Contains(good1)); |
3490 EXPECT_TRUE(registry_->enabled_extensions().Contains(good2)); | 3321 EXPECT_TRUE(registry()->enabled_extensions().Contains(good2)); |
3491 | 3322 |
3492 // Give time for the blacklist to update. | 3323 // Give time for the blacklist to update. |
3493 base::RunLoop().RunUntilIdle(); | 3324 base::RunLoop().RunUntilIdle(); |
3494 | 3325 |
3495 EXPECT_EQ(1u, registry_->blacklisted_extensions().size()); | 3326 EXPECT_EQ(1u, registry()->blacklisted_extensions().size()); |
3496 EXPECT_EQ(2u, registry_->enabled_extensions().size()); | 3327 EXPECT_EQ(2u, registry()->enabled_extensions().size()); |
3497 | 3328 |
3498 EXPECT_TRUE(registry_->enabled_extensions().Contains(good0)); | 3329 EXPECT_TRUE(registry()->enabled_extensions().Contains(good0)); |
3499 EXPECT_TRUE(registry_->blacklisted_extensions().Contains(good1)); | 3330 EXPECT_TRUE(registry()->blacklisted_extensions().Contains(good1)); |
3500 EXPECT_TRUE(registry_->enabled_extensions().Contains(good2)); | 3331 EXPECT_TRUE(registry()->enabled_extensions().Contains(good2)); |
3501 } | 3332 } |
3502 #endif // defined(ENABLE_BLACKLIST_TESTS) | 3333 #endif // defined(ENABLE_BLACKLIST_TESTS) |
3503 | 3334 |
3504 #if defined(ENABLE_BLACKLIST_TESTS) | 3335 #if defined(ENABLE_BLACKLIST_TESTS) |
3505 // Extension is added to blacklist with BLACKLISTED_POTENTIALLY_UNWANTED state | 3336 // Extension is added to blacklist with BLACKLISTED_POTENTIALLY_UNWANTED state |
3506 // after it is installed. It is then successfully re-enabled by the user. | 3337 // after it is installed. It is then successfully re-enabled by the user. |
3507 TEST_F(ExtensionServiceTest, GreylistedExtensionDisabled) { | 3338 TEST_F(ExtensionServiceTest, GreylistedExtensionDisabled) { |
3508 extensions::TestBlacklist test_blacklist; | 3339 extensions::TestBlacklist test_blacklist; |
3509 // A profile with 3 extensions installed: good0, good1, and good2. | 3340 // A profile with 3 extensions installed: good0, good1, and good2. |
3510 InitializeGoodInstalledExtensionService(); | 3341 InitializeGoodInstalledExtensionService(); |
3511 test_blacklist.Attach(service_->blacklist_); | 3342 test_blacklist.Attach(service()->blacklist_); |
3512 service_->Init(); | 3343 service()->Init(); |
3513 | 3344 |
3514 const extensions::ExtensionSet& enabled_extensions = | 3345 const extensions::ExtensionSet& enabled_extensions = |
3515 registry_->enabled_extensions(); | 3346 registry()->enabled_extensions(); |
3516 const extensions::ExtensionSet& disabled_extensions = | 3347 const extensions::ExtensionSet& disabled_extensions = |
3517 registry_->disabled_extensions(); | 3348 registry()->disabled_extensions(); |
3518 | 3349 |
3519 EXPECT_TRUE(enabled_extensions.Contains(good0)); | 3350 EXPECT_TRUE(enabled_extensions.Contains(good0)); |
3520 EXPECT_TRUE(enabled_extensions.Contains(good1)); | 3351 EXPECT_TRUE(enabled_extensions.Contains(good1)); |
3521 EXPECT_TRUE(enabled_extensions.Contains(good2)); | 3352 EXPECT_TRUE(enabled_extensions.Contains(good2)); |
3522 | 3353 |
3523 // Blacklist good0 and good1 (and an invalid extension ID). | 3354 // Blacklist good0 and good1 (and an invalid extension ID). |
3524 test_blacklist.SetBlacklistState( | 3355 test_blacklist.SetBlacklistState( |
3525 good0, extensions::BLACKLISTED_CWS_POLICY_VIOLATION, true); | 3356 good0, extensions::BLACKLISTED_CWS_POLICY_VIOLATION, true); |
3526 test_blacklist.SetBlacklistState( | 3357 test_blacklist.SetBlacklistState( |
3527 good1, extensions::BLACKLISTED_POTENTIALLY_UNWANTED, true); | 3358 good1, extensions::BLACKLISTED_POTENTIALLY_UNWANTED, true); |
3528 test_blacklist.SetBlacklistState( | 3359 test_blacklist.SetBlacklistState( |
3529 "invalid_id", extensions::BLACKLISTED_MALWARE, true); | 3360 "invalid_id", extensions::BLACKLISTED_MALWARE, true); |
3530 base::RunLoop().RunUntilIdle(); | 3361 base::RunLoop().RunUntilIdle(); |
3531 | 3362 |
3532 EXPECT_FALSE(enabled_extensions.Contains(good0)); | 3363 EXPECT_FALSE(enabled_extensions.Contains(good0)); |
3533 EXPECT_TRUE(disabled_extensions.Contains(good0)); | 3364 EXPECT_TRUE(disabled_extensions.Contains(good0)); |
3534 EXPECT_FALSE(enabled_extensions.Contains(good1)); | 3365 EXPECT_FALSE(enabled_extensions.Contains(good1)); |
3535 EXPECT_TRUE(disabled_extensions.Contains(good1)); | 3366 EXPECT_TRUE(disabled_extensions.Contains(good1)); |
3536 EXPECT_TRUE(enabled_extensions.Contains(good2)); | 3367 EXPECT_TRUE(enabled_extensions.Contains(good2)); |
3537 EXPECT_FALSE(disabled_extensions.Contains(good2)); | 3368 EXPECT_FALSE(disabled_extensions.Contains(good2)); |
3538 | 3369 |
3539 ValidateIntegerPref( | 3370 ValidateIntegerPref( |
3540 good0, "blacklist_state", extensions::BLACKLISTED_CWS_POLICY_VIOLATION); | 3371 good0, "blacklist_state", extensions::BLACKLISTED_CWS_POLICY_VIOLATION); |
3541 ValidateIntegerPref( | 3372 ValidateIntegerPref( |
3542 good1, "blacklist_state", extensions::BLACKLISTED_POTENTIALLY_UNWANTED); | 3373 good1, "blacklist_state", extensions::BLACKLISTED_POTENTIALLY_UNWANTED); |
3543 | 3374 |
3544 // Now user enables good0. | 3375 // Now user enables good0. |
3545 service_->EnableExtension(good0); | 3376 service()->EnableExtension(good0); |
3546 | 3377 |
3547 EXPECT_TRUE(enabled_extensions.Contains(good0)); | 3378 EXPECT_TRUE(enabled_extensions.Contains(good0)); |
3548 EXPECT_FALSE(disabled_extensions.Contains(good0)); | 3379 EXPECT_FALSE(disabled_extensions.Contains(good0)); |
3549 EXPECT_FALSE(enabled_extensions.Contains(good1)); | 3380 EXPECT_FALSE(enabled_extensions.Contains(good1)); |
3550 EXPECT_TRUE(disabled_extensions.Contains(good1)); | 3381 EXPECT_TRUE(disabled_extensions.Contains(good1)); |
3551 | 3382 |
3552 // Remove extensions from blacklist. | 3383 // Remove extensions from blacklist. |
3553 test_blacklist.SetBlacklistState( | 3384 test_blacklist.SetBlacklistState( |
3554 good0, extensions::NOT_BLACKLISTED, true); | 3385 good0, extensions::NOT_BLACKLISTED, true); |
3555 test_blacklist.SetBlacklistState( | 3386 test_blacklist.SetBlacklistState( |
(...skipping 10 matching lines...) Expand all Loading... |
3566 } | 3397 } |
3567 #endif // defined(ENABLE_BLACKLIST_TESTS) | 3398 #endif // defined(ENABLE_BLACKLIST_TESTS) |
3568 | 3399 |
3569 #if defined(ENABLE_BLACKLIST_TESTS) | 3400 #if defined(ENABLE_BLACKLIST_TESTS) |
3570 // When extension is removed from greylist, do not re-enable it if it is | 3401 // When extension is removed from greylist, do not re-enable it if it is |
3571 // disabled by user. | 3402 // disabled by user. |
3572 TEST_F(ExtensionServiceTest, GreylistDontEnableManuallyDisabled) { | 3403 TEST_F(ExtensionServiceTest, GreylistDontEnableManuallyDisabled) { |
3573 extensions::TestBlacklist test_blacklist; | 3404 extensions::TestBlacklist test_blacklist; |
3574 // A profile with 3 extensions installed: good0, good1, and good2. | 3405 // A profile with 3 extensions installed: good0, good1, and good2. |
3575 InitializeGoodInstalledExtensionService(); | 3406 InitializeGoodInstalledExtensionService(); |
3576 test_blacklist.Attach(service_->blacklist_); | 3407 test_blacklist.Attach(service()->blacklist_); |
3577 service_->Init(); | 3408 service()->Init(); |
3578 | 3409 |
3579 const extensions::ExtensionSet& enabled_extensions = | 3410 const extensions::ExtensionSet& enabled_extensions = |
3580 registry_->enabled_extensions(); | 3411 registry()->enabled_extensions(); |
3581 const extensions::ExtensionSet& disabled_extensions = | 3412 const extensions::ExtensionSet& disabled_extensions = |
3582 registry_->disabled_extensions(); | 3413 registry()->disabled_extensions(); |
3583 | 3414 |
3584 // Manually disable. | 3415 // Manually disable. |
3585 service_->DisableExtension(good0, extensions::Extension::DISABLE_USER_ACTION); | 3416 service()->DisableExtension(good0, |
| 3417 extensions::Extension::DISABLE_USER_ACTION); |
3586 | 3418 |
3587 test_blacklist.SetBlacklistState( | 3419 test_blacklist.SetBlacklistState( |
3588 good0, extensions::BLACKLISTED_CWS_POLICY_VIOLATION, true); | 3420 good0, extensions::BLACKLISTED_CWS_POLICY_VIOLATION, true); |
3589 test_blacklist.SetBlacklistState( | 3421 test_blacklist.SetBlacklistState( |
3590 good1, extensions::BLACKLISTED_POTENTIALLY_UNWANTED, true); | 3422 good1, extensions::BLACKLISTED_POTENTIALLY_UNWANTED, true); |
3591 test_blacklist.SetBlacklistState( | 3423 test_blacklist.SetBlacklistState( |
3592 good2, extensions::BLACKLISTED_SECURITY_VULNERABILITY, true); | 3424 good2, extensions::BLACKLISTED_SECURITY_VULNERABILITY, true); |
3593 base::RunLoop().RunUntilIdle(); | 3425 base::RunLoop().RunUntilIdle(); |
3594 | 3426 |
3595 // All extensions disabled. | 3427 // All extensions disabled. |
3596 EXPECT_FALSE(enabled_extensions.Contains(good0)); | 3428 EXPECT_FALSE(enabled_extensions.Contains(good0)); |
3597 EXPECT_TRUE(disabled_extensions.Contains(good0)); | 3429 EXPECT_TRUE(disabled_extensions.Contains(good0)); |
3598 EXPECT_FALSE(enabled_extensions.Contains(good1)); | 3430 EXPECT_FALSE(enabled_extensions.Contains(good1)); |
3599 EXPECT_TRUE(disabled_extensions.Contains(good1)); | 3431 EXPECT_TRUE(disabled_extensions.Contains(good1)); |
3600 EXPECT_FALSE(enabled_extensions.Contains(good2)); | 3432 EXPECT_FALSE(enabled_extensions.Contains(good2)); |
3601 EXPECT_TRUE(disabled_extensions.Contains(good2)); | 3433 EXPECT_TRUE(disabled_extensions.Contains(good2)); |
3602 | 3434 |
3603 // Greylisted extension can be enabled. | 3435 // Greylisted extension can be enabled. |
3604 service_->EnableExtension(good1); | 3436 service()->EnableExtension(good1); |
3605 EXPECT_TRUE(enabled_extensions.Contains(good1)); | 3437 EXPECT_TRUE(enabled_extensions.Contains(good1)); |
3606 EXPECT_FALSE(disabled_extensions.Contains(good1)); | 3438 EXPECT_FALSE(disabled_extensions.Contains(good1)); |
3607 | 3439 |
3608 // good1 is now manually disabled. | 3440 // good1 is now manually disabled. |
3609 service_->DisableExtension(good1, extensions::Extension::DISABLE_USER_ACTION); | 3441 service()->DisableExtension(good1, |
| 3442 extensions::Extension::DISABLE_USER_ACTION); |
3610 EXPECT_FALSE(enabled_extensions.Contains(good1)); | 3443 EXPECT_FALSE(enabled_extensions.Contains(good1)); |
3611 EXPECT_TRUE(disabled_extensions.Contains(good1)); | 3444 EXPECT_TRUE(disabled_extensions.Contains(good1)); |
3612 | 3445 |
3613 // Remove extensions from blacklist. | 3446 // Remove extensions from blacklist. |
3614 test_blacklist.SetBlacklistState( | 3447 test_blacklist.SetBlacklistState( |
3615 good0, extensions::NOT_BLACKLISTED, true); | 3448 good0, extensions::NOT_BLACKLISTED, true); |
3616 test_blacklist.SetBlacklistState( | 3449 test_blacklist.SetBlacklistState( |
3617 good1, extensions::NOT_BLACKLISTED, true); | 3450 good1, extensions::NOT_BLACKLISTED, true); |
3618 test_blacklist.SetBlacklistState( | 3451 test_blacklist.SetBlacklistState( |
3619 good2, extensions::NOT_BLACKLISTED, true); | 3452 good2, extensions::NOT_BLACKLISTED, true); |
3620 base::RunLoop().RunUntilIdle(); | 3453 base::RunLoop().RunUntilIdle(); |
3621 | 3454 |
3622 // good0 and good1 remain disabled. | 3455 // good0 and good1 remain disabled. |
3623 EXPECT_FALSE(enabled_extensions.Contains(good0)); | 3456 EXPECT_FALSE(enabled_extensions.Contains(good0)); |
3624 EXPECT_TRUE(disabled_extensions.Contains(good0)); | 3457 EXPECT_TRUE(disabled_extensions.Contains(good0)); |
3625 EXPECT_FALSE(enabled_extensions.Contains(good1)); | 3458 EXPECT_FALSE(enabled_extensions.Contains(good1)); |
3626 EXPECT_TRUE(disabled_extensions.Contains(good1)); | 3459 EXPECT_TRUE(disabled_extensions.Contains(good1)); |
3627 EXPECT_TRUE(enabled_extensions.Contains(good2)); | 3460 EXPECT_TRUE(enabled_extensions.Contains(good2)); |
3628 EXPECT_FALSE(disabled_extensions.Contains(good2)); | 3461 EXPECT_FALSE(disabled_extensions.Contains(good2)); |
3629 } | 3462 } |
3630 #endif // defined(ENABLE_BLACKLIST_TESTS) | 3463 #endif // defined(ENABLE_BLACKLIST_TESTS) |
3631 | 3464 |
3632 #if defined(ENABLE_BLACKLIST_TESTS) | 3465 #if defined(ENABLE_BLACKLIST_TESTS) |
3633 // Blacklisted extension with unknown state are not enabled/disabled. | 3466 // Blacklisted extension with unknown state are not enabled/disabled. |
3634 TEST_F(ExtensionServiceTest, GreylistUnknownDontChange) { | 3467 TEST_F(ExtensionServiceTest, GreylistUnknownDontChange) { |
3635 extensions::TestBlacklist test_blacklist; | 3468 extensions::TestBlacklist test_blacklist; |
3636 // A profile with 3 extensions installed: good0, good1, and good2. | 3469 // A profile with 3 extensions installed: good0, good1, and good2. |
3637 InitializeGoodInstalledExtensionService(); | 3470 InitializeGoodInstalledExtensionService(); |
3638 test_blacklist.Attach(service_->blacklist_); | 3471 test_blacklist.Attach(service()->blacklist_); |
3639 service_->Init(); | 3472 service()->Init(); |
3640 | 3473 |
3641 const extensions::ExtensionSet& enabled_extensions = | 3474 const extensions::ExtensionSet& enabled_extensions = |
3642 registry_->enabled_extensions(); | 3475 registry()->enabled_extensions(); |
3643 const extensions::ExtensionSet& disabled_extensions = | 3476 const extensions::ExtensionSet& disabled_extensions = |
3644 registry_->disabled_extensions(); | 3477 registry()->disabled_extensions(); |
3645 | 3478 |
3646 test_blacklist.SetBlacklistState( | 3479 test_blacklist.SetBlacklistState( |
3647 good0, extensions::BLACKLISTED_CWS_POLICY_VIOLATION, true); | 3480 good0, extensions::BLACKLISTED_CWS_POLICY_VIOLATION, true); |
3648 test_blacklist.SetBlacklistState( | 3481 test_blacklist.SetBlacklistState( |
3649 good1, extensions::BLACKLISTED_POTENTIALLY_UNWANTED, true); | 3482 good1, extensions::BLACKLISTED_POTENTIALLY_UNWANTED, true); |
3650 base::RunLoop().RunUntilIdle(); | 3483 base::RunLoop().RunUntilIdle(); |
3651 | 3484 |
3652 EXPECT_FALSE(enabled_extensions.Contains(good0)); | 3485 EXPECT_FALSE(enabled_extensions.Contains(good0)); |
3653 EXPECT_TRUE(disabled_extensions.Contains(good0)); | 3486 EXPECT_TRUE(disabled_extensions.Contains(good0)); |
3654 EXPECT_FALSE(enabled_extensions.Contains(good1)); | 3487 EXPECT_FALSE(enabled_extensions.Contains(good1)); |
(...skipping 17 matching lines...) Expand all Loading... |
3672 EXPECT_TRUE(enabled_extensions.Contains(good2)); | 3505 EXPECT_TRUE(enabled_extensions.Contains(good2)); |
3673 EXPECT_FALSE(disabled_extensions.Contains(good2)); | 3506 EXPECT_FALSE(disabled_extensions.Contains(good2)); |
3674 } | 3507 } |
3675 | 3508 |
3676 // Tests that blacklisted extensions cannot be reloaded, both those loaded | 3509 // Tests that blacklisted extensions cannot be reloaded, both those loaded |
3677 // before and after extension service startup. | 3510 // before and after extension service startup. |
3678 TEST_F(ExtensionServiceTest, ReloadBlacklistedExtension) { | 3511 TEST_F(ExtensionServiceTest, ReloadBlacklistedExtension) { |
3679 extensions::TestBlacklist test_blacklist; | 3512 extensions::TestBlacklist test_blacklist; |
3680 | 3513 |
3681 InitializeGoodInstalledExtensionService(); | 3514 InitializeGoodInstalledExtensionService(); |
3682 test_blacklist.Attach(service_->blacklist_); | 3515 test_blacklist.Attach(service()->blacklist_); |
3683 | 3516 |
3684 test_blacklist.SetBlacklistState( | 3517 test_blacklist.SetBlacklistState( |
3685 good1, extensions::BLACKLISTED_MALWARE, false); | 3518 good1, extensions::BLACKLISTED_MALWARE, false); |
3686 service_->Init(); | 3519 service()->Init(); |
3687 test_blacklist.SetBlacklistState( | 3520 test_blacklist.SetBlacklistState( |
3688 good2, extensions::BLACKLISTED_MALWARE, false); | 3521 good2, extensions::BLACKLISTED_MALWARE, false); |
3689 base::RunLoop().RunUntilIdle(); | 3522 base::RunLoop().RunUntilIdle(); |
3690 | 3523 |
3691 EXPECT_EQ(StringSet(good0), registry_->enabled_extensions().GetIDs()); | 3524 EXPECT_EQ(StringSet(good0), registry()->enabled_extensions().GetIDs()); |
3692 EXPECT_EQ(StringSet(good1, good2), | 3525 EXPECT_EQ(StringSet(good1, good2), |
3693 registry_->blacklisted_extensions().GetIDs()); | 3526 registry()->blacklisted_extensions().GetIDs()); |
3694 | 3527 |
3695 service_->ReloadExtension(good1); | 3528 service()->ReloadExtension(good1); |
3696 service_->ReloadExtension(good2); | 3529 service()->ReloadExtension(good2); |
3697 base::RunLoop().RunUntilIdle(); | 3530 base::RunLoop().RunUntilIdle(); |
3698 | 3531 |
3699 EXPECT_EQ(StringSet(good0), registry_->enabled_extensions().GetIDs()); | 3532 EXPECT_EQ(StringSet(good0), registry()->enabled_extensions().GetIDs()); |
3700 EXPECT_EQ(StringSet(good1, good2), | 3533 EXPECT_EQ(StringSet(good1, good2), |
3701 registry_->blacklisted_extensions().GetIDs()); | 3534 registry()->blacklisted_extensions().GetIDs()); |
3702 } | 3535 } |
3703 | 3536 |
3704 #endif // defined(ENABLE_BLACKLIST_TESTS) | 3537 #endif // defined(ENABLE_BLACKLIST_TESTS) |
3705 | 3538 |
3706 // Will not install extension blacklisted by policy. | 3539 // Will not install extension blacklisted by policy. |
3707 TEST_F(ExtensionServiceTest, BlacklistedByPolicyWillNotInstall) { | 3540 TEST_F(ExtensionServiceTest, BlacklistedByPolicyWillNotInstall) { |
3708 InitializeEmptyExtensionService(); | 3541 InitializeEmptyExtensionService(); |
3709 | 3542 |
3710 // Blacklist everything. | 3543 // Blacklist everything. |
3711 { | 3544 { |
3712 ListPrefUpdate update(profile_->GetPrefs(), | 3545 ListPrefUpdate update(profile()->GetPrefs(), |
3713 extensions::pref_names::kInstallDenyList); | 3546 extensions::pref_names::kInstallDenyList); |
3714 base::ListValue* blacklist = update.Get(); | 3547 base::ListValue* blacklist = update.Get(); |
3715 blacklist->Append(new base::StringValue("*")); | 3548 blacklist->Append(new base::StringValue("*")); |
3716 } | 3549 } |
3717 | 3550 |
3718 // Blacklist prevents us from installing good_crx. | 3551 // Blacklist prevents us from installing good_crx. |
3719 base::FilePath path = data_dir_.AppendASCII("good.crx"); | 3552 base::FilePath path = data_dir().AppendASCII("good.crx"); |
3720 InstallCRX(path, INSTALL_FAILED); | 3553 InstallCRX(path, INSTALL_FAILED); |
3721 EXPECT_EQ(0u, registry_->enabled_extensions().size()); | 3554 EXPECT_EQ(0u, registry()->enabled_extensions().size()); |
3722 | 3555 |
3723 // Now whitelist this particular extension. | 3556 // Now whitelist this particular extension. |
3724 { | 3557 { |
3725 ListPrefUpdate update(profile_->GetPrefs(), | 3558 ListPrefUpdate update(profile()->GetPrefs(), |
3726 extensions::pref_names::kInstallAllowList); | 3559 extensions::pref_names::kInstallAllowList); |
3727 base::ListValue* whitelist = update.Get(); | 3560 base::ListValue* whitelist = update.Get(); |
3728 whitelist->Append(new base::StringValue(good_crx)); | 3561 whitelist->Append(new base::StringValue(good_crx)); |
3729 } | 3562 } |
3730 | 3563 |
3731 // Ensure we can now install good_crx. | 3564 // Ensure we can now install good_crx. |
3732 InstallCRX(path, INSTALL_NEW); | 3565 InstallCRX(path, INSTALL_NEW); |
3733 EXPECT_EQ(1u, registry_->enabled_extensions().size()); | 3566 EXPECT_EQ(1u, registry()->enabled_extensions().size()); |
3734 } | 3567 } |
3735 | 3568 |
3736 // Extension blacklisted by policy get unloaded after installing. | 3569 // Extension blacklisted by policy get unloaded after installing. |
3737 TEST_F(ExtensionServiceTest, BlacklistedByPolicyRemovedIfRunning) { | 3570 TEST_F(ExtensionServiceTest, BlacklistedByPolicyRemovedIfRunning) { |
3738 InitializeEmptyExtensionService(); | 3571 InitializeEmptyExtensionService(); |
3739 | 3572 |
3740 // Install good_crx. | 3573 // Install good_crx. |
3741 base::FilePath path = data_dir_.AppendASCII("good.crx"); | 3574 base::FilePath path = data_dir().AppendASCII("good.crx"); |
3742 InstallCRX(path, INSTALL_NEW); | 3575 InstallCRX(path, INSTALL_NEW); |
3743 EXPECT_EQ(1u, registry_->enabled_extensions().size()); | 3576 EXPECT_EQ(1u, registry()->enabled_extensions().size()); |
3744 | 3577 |
3745 { // Scope for pref update notification. | 3578 { // Scope for pref update notification. |
3746 PrefService* prefs = profile_->GetPrefs(); | 3579 PrefService* prefs = profile()->GetPrefs(); |
3747 ListPrefUpdate update(prefs, extensions::pref_names::kInstallDenyList); | 3580 ListPrefUpdate update(prefs, extensions::pref_names::kInstallDenyList); |
3748 base::ListValue* blacklist = update.Get(); | 3581 base::ListValue* blacklist = update.Get(); |
3749 ASSERT_TRUE(blacklist != NULL); | 3582 ASSERT_TRUE(blacklist != NULL); |
3750 | 3583 |
3751 // Blacklist this extension. | 3584 // Blacklist this extension. |
3752 blacklist->Append(new base::StringValue(good_crx)); | 3585 blacklist->Append(new base::StringValue(good_crx)); |
3753 } | 3586 } |
3754 | 3587 |
3755 // Extension should not be running now. | 3588 // Extension should not be running now. |
3756 base::RunLoop().RunUntilIdle(); | 3589 base::RunLoop().RunUntilIdle(); |
3757 EXPECT_EQ(0u, registry_->enabled_extensions().size()); | 3590 EXPECT_EQ(0u, registry()->enabled_extensions().size()); |
3758 } | 3591 } |
3759 | 3592 |
3760 // Tests that component extensions are not blacklisted by policy. | 3593 // Tests that component extensions are not blacklisted by policy. |
3761 TEST_F(ExtensionServiceTest, ComponentExtensionWhitelisted) { | 3594 TEST_F(ExtensionServiceTest, ComponentExtensionWhitelisted) { |
3762 InitializeEmptyExtensionService(); | 3595 InitializeEmptyExtensionService(); |
3763 | 3596 |
3764 // Blacklist everything. | 3597 // Blacklist everything. |
3765 { | 3598 { |
3766 ListPrefUpdate update(profile_->GetPrefs(), | 3599 ListPrefUpdate update(profile()->GetPrefs(), |
3767 extensions::pref_names::kInstallDenyList); | 3600 extensions::pref_names::kInstallDenyList); |
3768 base::ListValue* blacklist = update.Get(); | 3601 base::ListValue* blacklist = update.Get(); |
3769 blacklist->Append(new base::StringValue("*")); | 3602 blacklist->Append(new base::StringValue("*")); |
3770 } | 3603 } |
3771 | 3604 |
3772 // Install a component extension. | 3605 // Install a component extension. |
3773 base::FilePath path = data_dir_ | 3606 base::FilePath path = data_dir() |
3774 .AppendASCII("good") | 3607 .AppendASCII("good") |
3775 .AppendASCII("Extensions") | 3608 .AppendASCII("Extensions") |
3776 .AppendASCII(good0) | 3609 .AppendASCII(good0) |
3777 .AppendASCII("1.0.0.0"); | 3610 .AppendASCII("1.0.0.0"); |
3778 std::string manifest; | 3611 std::string manifest; |
3779 ASSERT_TRUE(base::ReadFileToString( | 3612 ASSERT_TRUE(base::ReadFileToString( |
3780 path.Append(extensions::kManifestFilename), &manifest)); | 3613 path.Append(extensions::kManifestFilename), &manifest)); |
3781 service_->component_loader()->Add(manifest, path); | 3614 service()->component_loader()->Add(manifest, path); |
3782 service_->Init(); | 3615 service()->Init(); |
3783 | 3616 |
3784 // Extension should be installed despite blacklist. | 3617 // Extension should be installed despite blacklist. |
3785 ASSERT_EQ(1u, registry_->enabled_extensions().size()); | 3618 ASSERT_EQ(1u, registry()->enabled_extensions().size()); |
3786 EXPECT_TRUE(service_->GetExtensionById(good0, false)); | 3619 EXPECT_TRUE(service()->GetExtensionById(good0, false)); |
3787 | 3620 |
3788 // Poke external providers and make sure the extension is still present. | 3621 // Poke external providers and make sure the extension is still present. |
3789 service_->CheckForExternalUpdates(); | 3622 service()->CheckForExternalUpdates(); |
3790 ASSERT_EQ(1u, registry_->enabled_extensions().size()); | 3623 ASSERT_EQ(1u, registry()->enabled_extensions().size()); |
3791 EXPECT_TRUE(service_->GetExtensionById(good0, false)); | 3624 EXPECT_TRUE(service()->GetExtensionById(good0, false)); |
3792 | 3625 |
3793 // Extension should not be uninstalled on blacklist changes. | 3626 // Extension should not be uninstalled on blacklist changes. |
3794 { | 3627 { |
3795 ListPrefUpdate update(profile_->GetPrefs(), | 3628 ListPrefUpdate update(profile()->GetPrefs(), |
3796 extensions::pref_names::kInstallDenyList); | 3629 extensions::pref_names::kInstallDenyList); |
3797 base::ListValue* blacklist = update.Get(); | 3630 base::ListValue* blacklist = update.Get(); |
3798 blacklist->Append(new base::StringValue(good0)); | 3631 blacklist->Append(new base::StringValue(good0)); |
3799 } | 3632 } |
3800 base::RunLoop().RunUntilIdle(); | 3633 base::RunLoop().RunUntilIdle(); |
3801 ASSERT_EQ(1u, registry_->enabled_extensions().size()); | 3634 ASSERT_EQ(1u, registry()->enabled_extensions().size()); |
3802 EXPECT_TRUE(service_->GetExtensionById(good0, false)); | 3635 EXPECT_TRUE(service()->GetExtensionById(good0, false)); |
3803 } | 3636 } |
3804 | 3637 |
3805 // Tests that policy-installed extensions are not blacklisted by policy. | 3638 // Tests that policy-installed extensions are not blacklisted by policy. |
3806 TEST_F(ExtensionServiceTest, PolicyInstalledExtensionsWhitelisted) { | 3639 TEST_F(ExtensionServiceTest, PolicyInstalledExtensionsWhitelisted) { |
3807 InitializeEmptyExtensionService(); | 3640 InitializeEmptyExtensionService(); |
3808 | 3641 |
3809 { | 3642 { |
3810 // Blacklist everything. | 3643 // Blacklist everything. |
3811 ListPrefUpdate blacklist_update( | 3644 ListPrefUpdate blacklist_update(profile()->GetPrefs(), |
3812 profile_->GetPrefs(), extensions::pref_names::kInstallDenyList); | 3645 extensions::pref_names::kInstallDenyList); |
3813 base::ListValue* blacklist = blacklist_update.Get(); | 3646 base::ListValue* blacklist = blacklist_update.Get(); |
3814 blacklist->AppendString("*"); | 3647 blacklist->AppendString("*"); |
3815 | 3648 |
3816 // Mark good.crx for force-installation. | 3649 // Mark good.crx for force-installation. |
3817 DictionaryPrefUpdate forcelist_update( | 3650 DictionaryPrefUpdate forcelist_update( |
3818 profile_->GetPrefs(), | 3651 profile()->GetPrefs(), extensions::pref_names::kInstallForceList); |
3819 extensions::pref_names::kInstallForceList); | |
3820 extensions::ExternalPolicyLoader::AddExtension( | 3652 extensions::ExternalPolicyLoader::AddExtension( |
3821 forcelist_update.Get(), good_crx, "http://example.com/update_url"); | 3653 forcelist_update.Get(), good_crx, "http://example.com/update_url"); |
3822 } | 3654 } |
3823 | 3655 |
3824 // Have policy force-install an extension. | 3656 // Have policy force-install an extension. |
3825 MockExtensionProvider* provider = | 3657 MockExtensionProvider* provider = |
3826 new MockExtensionProvider(service_, | 3658 new MockExtensionProvider(service(), Manifest::EXTERNAL_POLICY_DOWNLOAD); |
3827 Manifest::EXTERNAL_POLICY_DOWNLOAD); | |
3828 AddMockExternalProvider(provider); | 3659 AddMockExternalProvider(provider); |
3829 provider->UpdateOrAddExtension(good_crx, "1.0.0.0", | 3660 provider->UpdateOrAddExtension( |
3830 data_dir_.AppendASCII("good.crx")); | 3661 good_crx, "1.0.0.0", data_dir().AppendASCII("good.crx")); |
3831 | 3662 |
3832 // Reloading extensions should find our externally registered extension | 3663 // Reloading extensions should find our externally registered extension |
3833 // and install it. | 3664 // and install it. |
3834 content::WindowedNotificationObserver observer( | 3665 content::WindowedNotificationObserver observer( |
3835 chrome::NOTIFICATION_CRX_INSTALLER_DONE, | 3666 chrome::NOTIFICATION_CRX_INSTALLER_DONE, |
3836 content::NotificationService::AllSources()); | 3667 content::NotificationService::AllSources()); |
3837 service_->CheckForExternalUpdates(); | 3668 service()->CheckForExternalUpdates(); |
3838 observer.Wait(); | 3669 observer.Wait(); |
3839 | 3670 |
3840 // Extension should be installed despite blacklist. | 3671 // Extension should be installed despite blacklist. |
3841 ASSERT_EQ(1u, registry_->enabled_extensions().size()); | 3672 ASSERT_EQ(1u, registry()->enabled_extensions().size()); |
3842 EXPECT_TRUE(service_->GetExtensionById(good_crx, false)); | 3673 EXPECT_TRUE(service()->GetExtensionById(good_crx, false)); |
3843 | 3674 |
3844 // Blacklist update should not uninstall the extension. | 3675 // Blacklist update should not uninstall the extension. |
3845 { | 3676 { |
3846 ListPrefUpdate update(profile_->GetPrefs(), | 3677 ListPrefUpdate update(profile()->GetPrefs(), |
3847 extensions::pref_names::kInstallDenyList); | 3678 extensions::pref_names::kInstallDenyList); |
3848 base::ListValue* blacklist = update.Get(); | 3679 base::ListValue* blacklist = update.Get(); |
3849 blacklist->Append(new base::StringValue(good0)); | 3680 blacklist->Append(new base::StringValue(good0)); |
3850 } | 3681 } |
3851 base::RunLoop().RunUntilIdle(); | 3682 base::RunLoop().RunUntilIdle(); |
3852 ASSERT_EQ(1u, registry_->enabled_extensions().size()); | 3683 ASSERT_EQ(1u, registry()->enabled_extensions().size()); |
3853 EXPECT_TRUE(service_->GetExtensionById(good_crx, false)); | 3684 EXPECT_TRUE(service()->GetExtensionById(good_crx, false)); |
3854 } | 3685 } |
3855 | 3686 |
3856 // Tests that extensions cannot be installed if the policy provider prohibits | 3687 // Tests that extensions cannot be installed if the policy provider prohibits |
3857 // it. This functionality is implemented in CrxInstaller::ConfirmInstall(). | 3688 // it. This functionality is implemented in CrxInstaller::ConfirmInstall(). |
3858 TEST_F(ExtensionServiceTest, ManagementPolicyProhibitsInstall) { | 3689 TEST_F(ExtensionServiceTest, ManagementPolicyProhibitsInstall) { |
3859 InitializeEmptyExtensionService(); | 3690 InitializeEmptyExtensionService(); |
3860 | 3691 |
3861 management_policy_->UnregisterAllProviders(); | 3692 GetManagementPolicy()->UnregisterAllProviders(); |
3862 extensions::TestManagementPolicyProvider provider_( | 3693 extensions::TestManagementPolicyProvider provider_( |
3863 extensions::TestManagementPolicyProvider::PROHIBIT_LOAD); | 3694 extensions::TestManagementPolicyProvider::PROHIBIT_LOAD); |
3864 management_policy_->RegisterProvider(&provider_); | 3695 GetManagementPolicy()->RegisterProvider(&provider_); |
3865 | 3696 |
3866 InstallCRX(data_dir_.AppendASCII("good.crx"), INSTALL_FAILED); | 3697 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_FAILED); |
3867 EXPECT_EQ(0u, registry_->enabled_extensions().size()); | 3698 EXPECT_EQ(0u, registry()->enabled_extensions().size()); |
3868 } | 3699 } |
3869 | 3700 |
3870 // Tests that extensions cannot be loaded from prefs if the policy provider | 3701 // Tests that extensions cannot be loaded from prefs if the policy provider |
3871 // prohibits it. This functionality is implemented in InstalledLoader::Load(). | 3702 // prohibits it. This functionality is implemented in InstalledLoader::Load(). |
3872 TEST_F(ExtensionServiceTest, ManagementPolicyProhibitsLoadFromPrefs) { | 3703 TEST_F(ExtensionServiceTest, ManagementPolicyProhibitsLoadFromPrefs) { |
3873 InitializeEmptyExtensionService(); | 3704 InitializeEmptyExtensionService(); |
3874 | 3705 |
3875 // Create a fake extension to be loaded as though it were read from prefs. | 3706 // Create a fake extension to be loaded as though it were read from prefs. |
3876 base::FilePath path = data_dir_.AppendASCII("management") | 3707 base::FilePath path = |
3877 .AppendASCII("simple_extension"); | 3708 data_dir().AppendASCII("management").AppendASCII("simple_extension"); |
3878 base::DictionaryValue manifest; | 3709 base::DictionaryValue manifest; |
3879 manifest.SetString(keys::kName, "simple_extension"); | 3710 manifest.SetString(keys::kName, "simple_extension"); |
3880 manifest.SetString(keys::kVersion, "1"); | 3711 manifest.SetString(keys::kVersion, "1"); |
3881 // UNPACKED is for extensions loaded from a directory. We use it here, even | 3712 // UNPACKED is for extensions loaded from a directory. We use it here, even |
3882 // though we're testing loading from prefs, so that we don't need to provide | 3713 // though we're testing loading from prefs, so that we don't need to provide |
3883 // an extension key. | 3714 // an extension key. |
3884 extensions::ExtensionInfo extension_info( | 3715 extensions::ExtensionInfo extension_info( |
3885 &manifest, std::string(), path, Manifest::UNPACKED); | 3716 &manifest, std::string(), path, Manifest::UNPACKED); |
3886 | 3717 |
3887 // Ensure we can load it with no management policy in place. | 3718 // Ensure we can load it with no management policy in place. |
3888 management_policy_->UnregisterAllProviders(); | 3719 GetManagementPolicy()->UnregisterAllProviders(); |
3889 EXPECT_EQ(0u, registry_->enabled_extensions().size()); | 3720 EXPECT_EQ(0u, registry()->enabled_extensions().size()); |
3890 extensions::InstalledLoader(service_).Load(extension_info, false); | 3721 extensions::InstalledLoader(service()).Load(extension_info, false); |
3891 EXPECT_EQ(1u, registry_->enabled_extensions().size()); | 3722 EXPECT_EQ(1u, registry()->enabled_extensions().size()); |
3892 | 3723 |
3893 const Extension* extension = (registry_->enabled_extensions().begin())->get(); | 3724 const Extension* extension = |
3894 EXPECT_TRUE(service_->UninstallExtension(extension->id(), false, NULL)); | 3725 (registry()->enabled_extensions().begin())->get(); |
3895 EXPECT_EQ(0u, registry_->enabled_extensions().size()); | 3726 EXPECT_TRUE(service()->UninstallExtension(extension->id(), false, NULL)); |
| 3727 EXPECT_EQ(0u, registry()->enabled_extensions().size()); |
3896 | 3728 |
3897 // Ensure we cannot load it if management policy prohibits installation. | 3729 // Ensure we cannot load it if management policy prohibits installation. |
3898 extensions::TestManagementPolicyProvider provider_( | 3730 extensions::TestManagementPolicyProvider provider_( |
3899 extensions::TestManagementPolicyProvider::PROHIBIT_LOAD); | 3731 extensions::TestManagementPolicyProvider::PROHIBIT_LOAD); |
3900 management_policy_->RegisterProvider(&provider_); | 3732 GetManagementPolicy()->RegisterProvider(&provider_); |
3901 | 3733 |
3902 extensions::InstalledLoader(service_).Load(extension_info, false); | 3734 extensions::InstalledLoader(service()).Load(extension_info, false); |
3903 EXPECT_EQ(0u, registry_->enabled_extensions().size()); | 3735 EXPECT_EQ(0u, registry()->enabled_extensions().size()); |
3904 } | 3736 } |
3905 | 3737 |
3906 // Tests disabling an extension when prohibited by the ManagementPolicy. | 3738 // Tests disabling an extension when prohibited by the ManagementPolicy. |
3907 TEST_F(ExtensionServiceTest, ManagementPolicyProhibitsDisable) { | 3739 TEST_F(ExtensionServiceTest, ManagementPolicyProhibitsDisable) { |
3908 InitializeEmptyExtensionService(); | 3740 InitializeEmptyExtensionService(); |
3909 | 3741 |
3910 InstallCRX(data_dir_.AppendASCII("good.crx"), INSTALL_NEW); | 3742 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); |
3911 EXPECT_EQ(1u, registry_->enabled_extensions().size()); | 3743 EXPECT_EQ(1u, registry()->enabled_extensions().size()); |
3912 EXPECT_EQ(0u, registry_->disabled_extensions().size()); | 3744 EXPECT_EQ(0u, registry()->disabled_extensions().size()); |
3913 | 3745 |
3914 management_policy_->UnregisterAllProviders(); | 3746 GetManagementPolicy()->UnregisterAllProviders(); |
3915 extensions::TestManagementPolicyProvider provider( | 3747 extensions::TestManagementPolicyProvider provider( |
3916 extensions::TestManagementPolicyProvider::PROHIBIT_MODIFY_STATUS); | 3748 extensions::TestManagementPolicyProvider::PROHIBIT_MODIFY_STATUS); |
3917 management_policy_->RegisterProvider(&provider); | 3749 GetManagementPolicy()->RegisterProvider(&provider); |
3918 | 3750 |
3919 // Attempt to disable it. | 3751 // Attempt to disable it. |
3920 service_->DisableExtension(good_crx, Extension::DISABLE_USER_ACTION); | 3752 service()->DisableExtension(good_crx, Extension::DISABLE_USER_ACTION); |
3921 | 3753 |
3922 EXPECT_EQ(1u, registry_->enabled_extensions().size()); | 3754 EXPECT_EQ(1u, registry()->enabled_extensions().size()); |
3923 EXPECT_TRUE(service_->GetExtensionById(good_crx, false)); | 3755 EXPECT_TRUE(service()->GetExtensionById(good_crx, false)); |
3924 EXPECT_EQ(0u, registry_->disabled_extensions().size()); | 3756 EXPECT_EQ(0u, registry()->disabled_extensions().size()); |
3925 } | 3757 } |
3926 | 3758 |
3927 // Tests uninstalling an extension when prohibited by the ManagementPolicy. | 3759 // Tests uninstalling an extension when prohibited by the ManagementPolicy. |
3928 TEST_F(ExtensionServiceTest, ManagementPolicyProhibitsUninstall) { | 3760 TEST_F(ExtensionServiceTest, ManagementPolicyProhibitsUninstall) { |
3929 InitializeEmptyExtensionService(); | 3761 InitializeEmptyExtensionService(); |
3930 | 3762 |
3931 InstallCRX(data_dir_.AppendASCII("good.crx"), INSTALL_NEW); | 3763 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); |
3932 EXPECT_EQ(1u, registry_->enabled_extensions().size()); | 3764 EXPECT_EQ(1u, registry()->enabled_extensions().size()); |
3933 EXPECT_EQ(0u, registry_->disabled_extensions().size()); | 3765 EXPECT_EQ(0u, registry()->disabled_extensions().size()); |
3934 | 3766 |
3935 management_policy_->UnregisterAllProviders(); | 3767 GetManagementPolicy()->UnregisterAllProviders(); |
3936 extensions::TestManagementPolicyProvider provider( | 3768 extensions::TestManagementPolicyProvider provider( |
3937 extensions::TestManagementPolicyProvider::PROHIBIT_MODIFY_STATUS); | 3769 extensions::TestManagementPolicyProvider::PROHIBIT_MODIFY_STATUS); |
3938 management_policy_->RegisterProvider(&provider); | 3770 GetManagementPolicy()->RegisterProvider(&provider); |
3939 | 3771 |
3940 // Attempt to uninstall it. | 3772 // Attempt to uninstall it. |
3941 EXPECT_FALSE(service_->UninstallExtension(good_crx, false, NULL)); | 3773 EXPECT_FALSE(service()->UninstallExtension(good_crx, false, NULL)); |
3942 | 3774 |
3943 EXPECT_EQ(1u, registry_->enabled_extensions().size()); | 3775 EXPECT_EQ(1u, registry()->enabled_extensions().size()); |
3944 EXPECT_TRUE(service_->GetExtensionById(good_crx, false)); | 3776 EXPECT_TRUE(service()->GetExtensionById(good_crx, false)); |
3945 } | 3777 } |
3946 | 3778 |
3947 // Tests that previously installed extensions that are now prohibited from | 3779 // Tests that previously installed extensions that are now prohibited from |
3948 // being installed are removed. | 3780 // being installed are removed. |
3949 TEST_F(ExtensionServiceTest, ManagementPolicyUnloadsAllProhibited) { | 3781 TEST_F(ExtensionServiceTest, ManagementPolicyUnloadsAllProhibited) { |
3950 InitializeEmptyExtensionService(); | 3782 InitializeEmptyExtensionService(); |
3951 | 3783 |
3952 InstallCRX(data_dir_.AppendASCII("good.crx"), INSTALL_NEW); | 3784 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); |
3953 InstallCRX(data_dir_.AppendASCII("page_action.crx"), INSTALL_NEW); | 3785 InstallCRX(data_dir().AppendASCII("page_action.crx"), INSTALL_NEW); |
3954 EXPECT_EQ(2u, registry_->enabled_extensions().size()); | 3786 EXPECT_EQ(2u, registry()->enabled_extensions().size()); |
3955 EXPECT_EQ(0u, registry_->disabled_extensions().size()); | 3787 EXPECT_EQ(0u, registry()->disabled_extensions().size()); |
3956 | 3788 |
3957 management_policy_->UnregisterAllProviders(); | 3789 GetManagementPolicy()->UnregisterAllProviders(); |
3958 extensions::TestManagementPolicyProvider provider( | 3790 extensions::TestManagementPolicyProvider provider( |
3959 extensions::TestManagementPolicyProvider::PROHIBIT_LOAD); | 3791 extensions::TestManagementPolicyProvider::PROHIBIT_LOAD); |
3960 management_policy_->RegisterProvider(&provider); | 3792 GetManagementPolicy()->RegisterProvider(&provider); |
3961 | 3793 |
3962 // Run the policy check. | 3794 // Run the policy check. |
3963 service_->CheckManagementPolicy(); | 3795 service()->CheckManagementPolicy(); |
3964 EXPECT_EQ(0u, registry_->enabled_extensions().size()); | 3796 EXPECT_EQ(0u, registry()->enabled_extensions().size()); |
3965 EXPECT_EQ(0u, registry_->disabled_extensions().size()); | 3797 EXPECT_EQ(0u, registry()->disabled_extensions().size()); |
3966 } | 3798 } |
3967 | 3799 |
3968 // Tests that previously disabled extensions that are now required to be | 3800 // Tests that previously disabled extensions that are now required to be |
3969 // enabled are re-enabled on reinstall. | 3801 // enabled are re-enabled on reinstall. |
3970 TEST_F(ExtensionServiceTest, ManagementPolicyRequiresEnable) { | 3802 TEST_F(ExtensionServiceTest, ManagementPolicyRequiresEnable) { |
3971 InitializeEmptyExtensionService(); | 3803 InitializeEmptyExtensionService(); |
3972 | 3804 |
3973 // Install, then disable, an extension. | 3805 // Install, then disable, an extension. |
3974 InstallCRX(data_dir_.AppendASCII("good.crx"), INSTALL_NEW); | 3806 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); |
3975 EXPECT_EQ(1u, registry_->enabled_extensions().size()); | 3807 EXPECT_EQ(1u, registry()->enabled_extensions().size()); |
3976 service_->DisableExtension(good_crx, Extension::DISABLE_USER_ACTION); | 3808 service()->DisableExtension(good_crx, Extension::DISABLE_USER_ACTION); |
3977 EXPECT_EQ(1u, registry_->disabled_extensions().size()); | 3809 EXPECT_EQ(1u, registry()->disabled_extensions().size()); |
3978 | 3810 |
3979 // Register an ExtensionMnagementPolicy that requires the extension to remain | 3811 // Register an ExtensionMnagementPolicy that requires the extension to remain |
3980 // enabled. | 3812 // enabled. |
3981 management_policy_->UnregisterAllProviders(); | 3813 GetManagementPolicy()->UnregisterAllProviders(); |
3982 extensions::TestManagementPolicyProvider provider( | 3814 extensions::TestManagementPolicyProvider provider( |
3983 extensions::TestManagementPolicyProvider::MUST_REMAIN_ENABLED); | 3815 extensions::TestManagementPolicyProvider::MUST_REMAIN_ENABLED); |
3984 management_policy_->RegisterProvider(&provider); | 3816 GetManagementPolicy()->RegisterProvider(&provider); |
3985 | 3817 |
3986 // Reinstall the extension. | 3818 // Reinstall the extension. |
3987 InstallCRX(data_dir_.AppendASCII("good.crx"), INSTALL_UPDATED); | 3819 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_UPDATED); |
3988 EXPECT_EQ(1u, registry_->enabled_extensions().size()); | 3820 EXPECT_EQ(1u, registry()->enabled_extensions().size()); |
3989 EXPECT_EQ(0u, registry_->disabled_extensions().size()); | 3821 EXPECT_EQ(0u, registry()->disabled_extensions().size()); |
3990 } | 3822 } |
3991 | 3823 |
3992 // Flaky on windows; http://crbug.com/309833 | 3824 // Flaky on windows; http://crbug.com/309833 |
3993 #if defined(OS_WIN) | 3825 #if defined(OS_WIN) |
3994 #define MAYBE_ExternalExtensionAutoAcknowledgement DISABLED_ExternalExtensionAut
oAcknowledgement | 3826 #define MAYBE_ExternalExtensionAutoAcknowledgement DISABLED_ExternalExtensionAut
oAcknowledgement |
3995 #else | 3827 #else |
3996 #define MAYBE_ExternalExtensionAutoAcknowledgement ExternalExtensionAutoAcknowle
dgement | 3828 #define MAYBE_ExternalExtensionAutoAcknowledgement ExternalExtensionAutoAcknowle
dgement |
3997 #endif | 3829 #endif |
3998 TEST_F(ExtensionServiceTest, MAYBE_ExternalExtensionAutoAcknowledgement) { | 3830 TEST_F(ExtensionServiceTest, MAYBE_ExternalExtensionAutoAcknowledgement) { |
3999 InitializeEmptyExtensionService(); | 3831 InitializeEmptyExtensionService(); |
4000 set_extensions_enabled(true); | 3832 service()->set_extensions_enabled(true); |
4001 | 3833 |
4002 { | 3834 { |
4003 // Register and install an external extension. | 3835 // Register and install an external extension. |
4004 MockExtensionProvider* provider = | 3836 MockExtensionProvider* provider = |
4005 new MockExtensionProvider(service_, Manifest::EXTERNAL_PREF); | 3837 new MockExtensionProvider(service(), Manifest::EXTERNAL_PREF); |
4006 AddMockExternalProvider(provider); | 3838 AddMockExternalProvider(provider); |
4007 provider->UpdateOrAddExtension(good_crx, "1.0.0.0", | 3839 provider->UpdateOrAddExtension( |
4008 data_dir_.AppendASCII("good.crx")); | 3840 good_crx, "1.0.0.0", data_dir().AppendASCII("good.crx")); |
4009 } | 3841 } |
4010 { | 3842 { |
4011 // Have policy force-install an extension. | 3843 // Have policy force-install an extension. |
4012 MockExtensionProvider* provider = | 3844 MockExtensionProvider* provider = new MockExtensionProvider( |
4013 new MockExtensionProvider(service_, | 3845 service(), Manifest::EXTERNAL_POLICY_DOWNLOAD); |
4014 Manifest::EXTERNAL_POLICY_DOWNLOAD); | |
4015 AddMockExternalProvider(provider); | 3846 AddMockExternalProvider(provider); |
4016 provider->UpdateOrAddExtension(page_action, "1.0.0.0", | 3847 provider->UpdateOrAddExtension( |
4017 data_dir_.AppendASCII("page_action.crx")); | 3848 page_action, "1.0.0.0", data_dir().AppendASCII("page_action.crx")); |
4018 } | 3849 } |
4019 | 3850 |
4020 // Providers are set up. Let them run. | 3851 // Providers are set up. Let them run. |
4021 int count = 2; | 3852 int count = 2; |
4022 content::WindowedNotificationObserver observer( | 3853 content::WindowedNotificationObserver observer( |
4023 chrome::NOTIFICATION_CRX_INSTALLER_DONE, | 3854 chrome::NOTIFICATION_CRX_INSTALLER_DONE, |
4024 base::Bind(&WaitForCountNotificationsCallback, &count)); | 3855 base::Bind(&WaitForCountNotificationsCallback, &count)); |
4025 service_->CheckForExternalUpdates(); | 3856 service()->CheckForExternalUpdates(); |
4026 | 3857 |
4027 observer.Wait(); | 3858 observer.Wait(); |
4028 | 3859 |
4029 ASSERT_EQ(2u, registry_->enabled_extensions().size()); | 3860 ASSERT_EQ(2u, registry()->enabled_extensions().size()); |
4030 EXPECT_TRUE(service_->GetExtensionById(good_crx, false)); | 3861 EXPECT_TRUE(service()->GetExtensionById(good_crx, false)); |
4031 EXPECT_TRUE(service_->GetExtensionById(page_action, false)); | 3862 EXPECT_TRUE(service()->GetExtensionById(page_action, false)); |
4032 ExtensionPrefs* prefs = ExtensionPrefs::Get(profile_.get()); | 3863 ExtensionPrefs* prefs = ExtensionPrefs::Get(profile()); |
4033 ASSERT_TRUE(!prefs->IsExternalExtensionAcknowledged(good_crx)); | 3864 ASSERT_TRUE(!prefs->IsExternalExtensionAcknowledged(good_crx)); |
4034 ASSERT_TRUE(prefs->IsExternalExtensionAcknowledged(page_action)); | 3865 ASSERT_TRUE(prefs->IsExternalExtensionAcknowledged(page_action)); |
4035 } | 3866 } |
4036 | 3867 |
4037 #if !defined(OS_CHROMEOS) | 3868 #if !defined(OS_CHROMEOS) |
4038 // This tests if default apps are installed correctly. | 3869 // This tests if default apps are installed correctly. |
4039 TEST_F(ExtensionServiceTest, DefaultAppsInstall) { | 3870 TEST_F(ExtensionServiceTest, DefaultAppsInstall) { |
4040 InitializeEmptyExtensionService(); | 3871 InitializeEmptyExtensionService(); |
4041 set_extensions_enabled(true); | 3872 service()->set_extensions_enabled(true); |
4042 | 3873 |
4043 { | 3874 { |
4044 std::string json_data = | 3875 std::string json_data = |
4045 "{" | 3876 "{" |
4046 " \"ldnnhddmnhbkjipkidpdiheffobcpfmf\" : {" | 3877 " \"ldnnhddmnhbkjipkidpdiheffobcpfmf\" : {" |
4047 " \"external_crx\": \"good.crx\"," | 3878 " \"external_crx\": \"good.crx\"," |
4048 " \"external_version\": \"1.0.0.0\"," | 3879 " \"external_version\": \"1.0.0.0\"," |
4049 " \"is_bookmark_app\": false" | 3880 " \"is_bookmark_app\": false" |
4050 " }" | 3881 " }" |
4051 "}"; | 3882 "}"; |
4052 default_apps::Provider* provider = | 3883 default_apps::Provider* provider = new default_apps::Provider( |
4053 new default_apps::Provider( | 3884 profile(), |
4054 profile_.get(), | 3885 service(), |
4055 service_, | 3886 new extensions::ExternalTestingLoader(json_data, data_dir()), |
4056 new extensions::ExternalTestingLoader(json_data, data_dir_), | 3887 Manifest::INTERNAL, |
4057 Manifest::INTERNAL, | 3888 Manifest::INVALID_LOCATION, |
4058 Manifest::INVALID_LOCATION, | 3889 Extension::FROM_WEBSTORE | Extension::WAS_INSTALLED_BY_DEFAULT); |
4059 Extension::FROM_WEBSTORE | Extension::WAS_INSTALLED_BY_DEFAULT); | |
4060 | 3890 |
4061 AddMockExternalProvider(provider); | 3891 AddMockExternalProvider(provider); |
4062 } | 3892 } |
4063 | 3893 |
4064 ASSERT_EQ(0u, registry_->enabled_extensions().size()); | 3894 ASSERT_EQ(0u, registry()->enabled_extensions().size()); |
4065 content::WindowedNotificationObserver observer( | 3895 content::WindowedNotificationObserver observer( |
4066 chrome::NOTIFICATION_CRX_INSTALLER_DONE, | 3896 chrome::NOTIFICATION_CRX_INSTALLER_DONE, |
4067 content::NotificationService::AllSources()); | 3897 content::NotificationService::AllSources()); |
4068 service_->CheckForExternalUpdates(); | 3898 service()->CheckForExternalUpdates(); |
4069 observer.Wait(); | 3899 observer.Wait(); |
4070 | 3900 |
4071 ASSERT_EQ(1u, registry_->enabled_extensions().size()); | 3901 ASSERT_EQ(1u, registry()->enabled_extensions().size()); |
4072 EXPECT_TRUE(service_->GetExtensionById(good_crx, false)); | 3902 EXPECT_TRUE(service()->GetExtensionById(good_crx, false)); |
4073 const Extension* extension = service_->GetExtensionById(good_crx, false); | 3903 const Extension* extension = service()->GetExtensionById(good_crx, false); |
4074 EXPECT_TRUE(extension->from_webstore()); | 3904 EXPECT_TRUE(extension->from_webstore()); |
4075 EXPECT_TRUE(extension->was_installed_by_default()); | 3905 EXPECT_TRUE(extension->was_installed_by_default()); |
4076 } | 3906 } |
4077 #endif | 3907 #endif |
4078 | 3908 |
4079 // Tests disabling extensions | 3909 // Tests disabling extensions |
4080 TEST_F(ExtensionServiceTest, DisableExtension) { | 3910 TEST_F(ExtensionServiceTest, DisableExtension) { |
4081 InitializeEmptyExtensionService(); | 3911 InitializeEmptyExtensionService(); |
4082 | 3912 |
4083 InstallCRX(data_dir_.AppendASCII("good.crx"), INSTALL_NEW); | 3913 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); |
4084 EXPECT_TRUE(service_->GetExtensionById(good_crx, true)); | 3914 EXPECT_TRUE(service()->GetExtensionById(good_crx, true)); |
4085 EXPECT_TRUE(service_->GetExtensionById(good_crx, false)); | 3915 EXPECT_TRUE(service()->GetExtensionById(good_crx, false)); |
4086 | 3916 |
4087 EXPECT_EQ(1u, registry_->enabled_extensions().size()); | 3917 EXPECT_EQ(1u, registry()->enabled_extensions().size()); |
4088 EXPECT_EQ(0u, registry_->disabled_extensions().size()); | 3918 EXPECT_EQ(0u, registry()->disabled_extensions().size()); |
4089 EXPECT_EQ(0u, registry_->terminated_extensions().size()); | 3919 EXPECT_EQ(0u, registry()->terminated_extensions().size()); |
4090 EXPECT_EQ(0u, registry_->blacklisted_extensions().size()); | 3920 EXPECT_EQ(0u, registry()->blacklisted_extensions().size()); |
4091 | 3921 |
4092 // Disable it. | 3922 // Disable it. |
4093 service_->DisableExtension(good_crx, Extension::DISABLE_USER_ACTION); | 3923 service()->DisableExtension(good_crx, Extension::DISABLE_USER_ACTION); |
4094 | 3924 |
4095 EXPECT_TRUE(service_->GetExtensionById(good_crx, true)); | 3925 EXPECT_TRUE(service()->GetExtensionById(good_crx, true)); |
4096 EXPECT_FALSE(service_->GetExtensionById(good_crx, false)); | 3926 EXPECT_FALSE(service()->GetExtensionById(good_crx, false)); |
4097 EXPECT_EQ(0u, registry_->enabled_extensions().size()); | 3927 EXPECT_EQ(0u, registry()->enabled_extensions().size()); |
4098 EXPECT_EQ(1u, registry_->disabled_extensions().size()); | 3928 EXPECT_EQ(1u, registry()->disabled_extensions().size()); |
4099 EXPECT_EQ(0u, registry_->terminated_extensions().size()); | 3929 EXPECT_EQ(0u, registry()->terminated_extensions().size()); |
4100 EXPECT_EQ(0u, registry_->blacklisted_extensions().size()); | 3930 EXPECT_EQ(0u, registry()->blacklisted_extensions().size()); |
4101 } | 3931 } |
4102 | 3932 |
4103 TEST_F(ExtensionServiceTest, TerminateExtension) { | 3933 TEST_F(ExtensionServiceTest, TerminateExtension) { |
4104 InitializeEmptyExtensionService(); | 3934 InitializeEmptyExtensionService(); |
4105 | 3935 |
4106 InstallCRX(data_dir_.AppendASCII("good.crx"), INSTALL_NEW); | 3936 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); |
4107 EXPECT_EQ(1u, registry_->enabled_extensions().size()); | 3937 EXPECT_EQ(1u, registry()->enabled_extensions().size()); |
4108 EXPECT_EQ(0u, registry_->disabled_extensions().size()); | 3938 EXPECT_EQ(0u, registry()->disabled_extensions().size()); |
4109 EXPECT_EQ(0u, registry_->terminated_extensions().size()); | 3939 EXPECT_EQ(0u, registry()->terminated_extensions().size()); |
4110 EXPECT_EQ(0u, registry_->blacklisted_extensions().size()); | 3940 EXPECT_EQ(0u, registry()->blacklisted_extensions().size()); |
4111 | 3941 |
4112 TerminateExtension(good_crx); | 3942 TerminateExtension(good_crx); |
4113 | 3943 |
4114 EXPECT_EQ(0u, registry_->enabled_extensions().size()); | 3944 EXPECT_EQ(0u, registry()->enabled_extensions().size()); |
4115 EXPECT_EQ(0u, registry_->disabled_extensions().size()); | 3945 EXPECT_EQ(0u, registry()->disabled_extensions().size()); |
4116 EXPECT_EQ(1u, registry_->terminated_extensions().size()); | 3946 EXPECT_EQ(1u, registry()->terminated_extensions().size()); |
4117 EXPECT_EQ(0u, registry_->blacklisted_extensions().size()); | 3947 EXPECT_EQ(0u, registry()->blacklisted_extensions().size()); |
4118 } | 3948 } |
4119 | 3949 |
4120 TEST_F(ExtensionServiceTest, DisableTerminatedExtension) { | 3950 TEST_F(ExtensionServiceTest, DisableTerminatedExtension) { |
4121 InitializeEmptyExtensionService(); | 3951 InitializeEmptyExtensionService(); |
4122 | 3952 |
4123 InstallCRX(data_dir_.AppendASCII("good.crx"), INSTALL_NEW); | 3953 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); |
4124 TerminateExtension(good_crx); | 3954 TerminateExtension(good_crx); |
4125 EXPECT_TRUE(registry_->GetExtensionById( | 3955 EXPECT_TRUE(registry()->GetExtensionById( |
4126 good_crx, extensions::ExtensionRegistry::TERMINATED)); | 3956 good_crx, extensions::ExtensionRegistry::TERMINATED)); |
4127 | 3957 |
4128 // Disable it. | 3958 // Disable it. |
4129 service_->DisableExtension(good_crx, Extension::DISABLE_USER_ACTION); | 3959 service()->DisableExtension(good_crx, Extension::DISABLE_USER_ACTION); |
4130 | 3960 |
4131 EXPECT_FALSE(registry_->GetExtensionById( | 3961 EXPECT_FALSE(registry()->GetExtensionById( |
4132 good_crx, extensions::ExtensionRegistry::TERMINATED)); | 3962 good_crx, extensions::ExtensionRegistry::TERMINATED)); |
4133 EXPECT_TRUE(service_->GetExtensionById(good_crx, true)); | 3963 EXPECT_TRUE(service()->GetExtensionById(good_crx, true)); |
4134 | 3964 |
4135 EXPECT_EQ(0u, registry_->enabled_extensions().size()); | 3965 EXPECT_EQ(0u, registry()->enabled_extensions().size()); |
4136 EXPECT_EQ(1u, registry_->disabled_extensions().size()); | 3966 EXPECT_EQ(1u, registry()->disabled_extensions().size()); |
4137 EXPECT_EQ(0u, registry_->terminated_extensions().size()); | 3967 EXPECT_EQ(0u, registry()->terminated_extensions().size()); |
4138 EXPECT_EQ(0u, registry_->blacklisted_extensions().size()); | 3968 EXPECT_EQ(0u, registry()->blacklisted_extensions().size()); |
4139 } | 3969 } |
4140 | 3970 |
4141 // Tests disabling all extensions (simulating --disable-extensions flag). | 3971 // Tests disabling all extensions (simulating --disable-extensions flag). |
4142 TEST_F(ExtensionServiceTest, DisableAllExtensions) { | 3972 TEST_F(ExtensionServiceTest, DisableAllExtensions) { |
4143 InitializeEmptyExtensionService(); | 3973 InitializeEmptyExtensionService(); |
4144 | 3974 |
4145 base::FilePath path = data_dir_.AppendASCII("good.crx"); | 3975 base::FilePath path = data_dir().AppendASCII("good.crx"); |
4146 InstallCRX(path, INSTALL_NEW); | 3976 InstallCRX(path, INSTALL_NEW); |
4147 | 3977 |
4148 EXPECT_EQ(1u, registry_->enabled_extensions().size()); | 3978 EXPECT_EQ(1u, registry()->enabled_extensions().size()); |
4149 EXPECT_EQ(0u, registry_->disabled_extensions().size()); | 3979 EXPECT_EQ(0u, registry()->disabled_extensions().size()); |
4150 | 3980 |
4151 // Disable extensions. | 3981 // Disable extensions. |
4152 service_->set_extensions_enabled(false); | 3982 service()->set_extensions_enabled(false); |
4153 service_->ReloadExtensionsForTest(); | 3983 service()->ReloadExtensionsForTest(); |
4154 | 3984 |
4155 // There shouldn't be extensions in either list. | 3985 // There shouldn't be extensions in either list. |
4156 EXPECT_EQ(0u, registry_->enabled_extensions().size()); | 3986 EXPECT_EQ(0u, registry()->enabled_extensions().size()); |
4157 EXPECT_EQ(0u, registry_->disabled_extensions().size()); | 3987 EXPECT_EQ(0u, registry()->disabled_extensions().size()); |
4158 | 3988 |
4159 // This shouldn't do anything when all extensions are disabled. | 3989 // This shouldn't do anything when all extensions are disabled. |
4160 service_->EnableExtension(good_crx); | 3990 service()->EnableExtension(good_crx); |
4161 service_->ReloadExtensionsForTest(); | 3991 service()->ReloadExtensionsForTest(); |
4162 | 3992 |
4163 // There still shouldn't be extensions in either list. | 3993 // There still shouldn't be extensions in either list. |
4164 EXPECT_EQ(0u, registry_->enabled_extensions().size()); | 3994 EXPECT_EQ(0u, registry()->enabled_extensions().size()); |
4165 EXPECT_EQ(0u, registry_->disabled_extensions().size()); | 3995 EXPECT_EQ(0u, registry()->disabled_extensions().size()); |
4166 | 3996 |
4167 // And then re-enable the extensions. | 3997 // And then re-enable the extensions. |
4168 service_->set_extensions_enabled(true); | 3998 service()->set_extensions_enabled(true); |
4169 service_->ReloadExtensionsForTest(); | 3999 service()->ReloadExtensionsForTest(); |
4170 | 4000 |
4171 EXPECT_EQ(1u, registry_->enabled_extensions().size()); | 4001 EXPECT_EQ(1u, registry()->enabled_extensions().size()); |
4172 EXPECT_EQ(0u, registry_->disabled_extensions().size()); | 4002 EXPECT_EQ(0u, registry()->disabled_extensions().size()); |
4173 } | 4003 } |
4174 | 4004 |
4175 // Tests reloading extensions. | 4005 // Tests reloading extensions. |
4176 TEST_F(ExtensionServiceTest, ReloadExtensions) { | 4006 TEST_F(ExtensionServiceTest, ReloadExtensions) { |
4177 InitializeEmptyExtensionService(); | 4007 InitializeEmptyExtensionService(); |
4178 | 4008 |
4179 // Simple extension that should install without error. | 4009 // Simple extension that should install without error. |
4180 base::FilePath path = data_dir_.AppendASCII("good.crx"); | 4010 base::FilePath path = data_dir().AppendASCII("good.crx"); |
4181 InstallCRX(path, INSTALL_NEW, | 4011 InstallCRX(path, INSTALL_NEW, |
4182 Extension::FROM_WEBSTORE | Extension::WAS_INSTALLED_BY_DEFAULT); | 4012 Extension::FROM_WEBSTORE | Extension::WAS_INSTALLED_BY_DEFAULT); |
4183 const char* extension_id = good_crx; | 4013 const char* extension_id = good_crx; |
4184 service_->DisableExtension(extension_id, Extension::DISABLE_USER_ACTION); | 4014 service()->DisableExtension(extension_id, Extension::DISABLE_USER_ACTION); |
4185 | 4015 |
4186 EXPECT_EQ(0u, registry_->enabled_extensions().size()); | 4016 EXPECT_EQ(0u, registry()->enabled_extensions().size()); |
4187 EXPECT_EQ(1u, registry_->disabled_extensions().size()); | 4017 EXPECT_EQ(1u, registry()->disabled_extensions().size()); |
4188 | 4018 |
4189 service_->ReloadExtensionsForTest(); | 4019 service()->ReloadExtensionsForTest(); |
4190 | 4020 |
4191 // The creation flags should not change when reloading the extension. | 4021 // The creation flags should not change when reloading the extension. |
4192 const Extension* extension = service_->GetExtensionById(good_crx, true); | 4022 const Extension* extension = service()->GetExtensionById(good_crx, true); |
4193 EXPECT_TRUE(extension->from_webstore()); | 4023 EXPECT_TRUE(extension->from_webstore()); |
4194 EXPECT_TRUE(extension->was_installed_by_default()); | 4024 EXPECT_TRUE(extension->was_installed_by_default()); |
4195 EXPECT_FALSE(extension->from_bookmark()); | 4025 EXPECT_FALSE(extension->from_bookmark()); |
4196 | 4026 |
4197 // Extension counts shouldn't change. | 4027 // Extension counts shouldn't change. |
4198 EXPECT_EQ(0u, registry_->enabled_extensions().size()); | 4028 EXPECT_EQ(0u, registry()->enabled_extensions().size()); |
4199 EXPECT_EQ(1u, registry_->disabled_extensions().size()); | 4029 EXPECT_EQ(1u, registry()->disabled_extensions().size()); |
4200 | 4030 |
4201 service_->EnableExtension(extension_id); | 4031 service()->EnableExtension(extension_id); |
4202 | 4032 |
4203 EXPECT_EQ(1u, registry_->enabled_extensions().size()); | 4033 EXPECT_EQ(1u, registry()->enabled_extensions().size()); |
4204 EXPECT_EQ(0u, registry_->disabled_extensions().size()); | 4034 EXPECT_EQ(0u, registry()->disabled_extensions().size()); |
4205 | 4035 |
4206 // Need to clear |loaded_| manually before reloading as the | 4036 // Need to clear |loaded_| manually before reloading as the |
4207 // EnableExtension() call above inserted into it and | 4037 // EnableExtension() call above inserted into it and |
4208 // UnloadAllExtensions() doesn't send out notifications. | 4038 // UnloadAllExtensions() doesn't send out notifications. |
4209 loaded_.clear(); | 4039 loaded_.clear(); |
4210 service_->ReloadExtensionsForTest(); | 4040 service()->ReloadExtensionsForTest(); |
4211 | 4041 |
4212 // Extension counts shouldn't change. | 4042 // Extension counts shouldn't change. |
4213 EXPECT_EQ(1u, registry_->enabled_extensions().size()); | 4043 EXPECT_EQ(1u, registry()->enabled_extensions().size()); |
4214 EXPECT_EQ(0u, registry_->disabled_extensions().size()); | 4044 EXPECT_EQ(0u, registry()->disabled_extensions().size()); |
4215 } | 4045 } |
4216 | 4046 |
4217 // Tests reloading an extension. | 4047 // Tests reloading an extension. |
4218 TEST_F(ExtensionServiceTest, ReloadExtension) { | 4048 TEST_F(ExtensionServiceTest, ReloadExtension) { |
4219 InitializeEmptyExtensionService(); | 4049 InitializeEmptyExtensionService(); |
4220 InitializeProcessManager(); | 4050 InitializeProcessManager(); |
4221 | 4051 |
4222 // Simple extension that should install without error. | 4052 // Simple extension that should install without error. |
4223 const char* extension_id = "behllobkkfkfnphdnhnkndlbkcpglgmj"; | 4053 const char* extension_id = "behllobkkfkfnphdnhnkndlbkcpglgmj"; |
4224 base::FilePath ext = data_dir_ | 4054 base::FilePath ext = data_dir() |
4225 .AppendASCII("good") | 4055 .AppendASCII("good") |
4226 .AppendASCII("Extensions") | 4056 .AppendASCII("Extensions") |
4227 .AppendASCII(extension_id) | 4057 .AppendASCII(extension_id) |
4228 .AppendASCII("1.0.0.0"); | 4058 .AppendASCII("1.0.0.0"); |
4229 extensions::UnpackedInstaller::Create(service_)->Load(ext); | 4059 extensions::UnpackedInstaller::Create(service())->Load(ext); |
4230 base::RunLoop().RunUntilIdle(); | 4060 base::RunLoop().RunUntilIdle(); |
4231 | 4061 |
4232 EXPECT_EQ(1u, registry_->enabled_extensions().size()); | 4062 EXPECT_EQ(1u, registry()->enabled_extensions().size()); |
4233 EXPECT_EQ(0u, registry_->disabled_extensions().size()); | 4063 EXPECT_EQ(0u, registry()->disabled_extensions().size()); |
4234 | 4064 |
4235 service_->ReloadExtension(extension_id); | 4065 service()->ReloadExtension(extension_id); |
4236 | 4066 |
4237 // Extension should be disabled now, waiting to be reloaded. | 4067 // Extension should be disabled now, waiting to be reloaded. |
4238 EXPECT_EQ(0u, registry_->enabled_extensions().size()); | 4068 EXPECT_EQ(0u, registry()->enabled_extensions().size()); |
4239 EXPECT_EQ(1u, registry_->disabled_extensions().size()); | 4069 EXPECT_EQ(1u, registry()->disabled_extensions().size()); |
4240 EXPECT_EQ( | 4070 EXPECT_EQ(Extension::DISABLE_RELOAD, |
4241 Extension::DISABLE_RELOAD, | 4071 ExtensionPrefs::Get(profile())->GetDisableReasons(extension_id)); |
4242 ExtensionPrefs::Get(profile_.get())->GetDisableReasons(extension_id)); | |
4243 | 4072 |
4244 // Reloading again should not crash. | 4073 // Reloading again should not crash. |
4245 service_->ReloadExtension(extension_id); | 4074 service()->ReloadExtension(extension_id); |
4246 | 4075 |
4247 // Finish reloading | 4076 // Finish reloading |
4248 base::RunLoop().RunUntilIdle(); | 4077 base::RunLoop().RunUntilIdle(); |
4249 | 4078 |
4250 // Extension should be enabled again. | 4079 // Extension should be enabled again. |
4251 EXPECT_EQ(1u, registry_->enabled_extensions().size()); | 4080 EXPECT_EQ(1u, registry()->enabled_extensions().size()); |
4252 EXPECT_EQ(0u, registry_->disabled_extensions().size()); | 4081 EXPECT_EQ(0u, registry()->disabled_extensions().size()); |
4253 } | 4082 } |
4254 | 4083 |
4255 TEST_F(ExtensionServiceTest, UninstallExtension) { | 4084 TEST_F(ExtensionServiceTest, UninstallExtension) { |
4256 InitializeEmptyExtensionService(); | 4085 InitializeEmptyExtensionService(); |
4257 InstallCRX(data_dir_.AppendASCII("good.crx"), INSTALL_NEW); | 4086 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); |
4258 EXPECT_EQ(1u, registry_->enabled_extensions().size()); | 4087 EXPECT_EQ(1u, registry()->enabled_extensions().size()); |
4259 UninstallExtension(good_crx, false); | 4088 UninstallExtension(good_crx, false); |
4260 EXPECT_EQ(0u, registry_->enabled_extensions().size()); | 4089 EXPECT_EQ(0u, registry()->enabled_extensions().size()); |
4261 EXPECT_EQ(UnloadedExtensionInfo::REASON_UNINSTALL, unloaded_reason_); | 4090 EXPECT_EQ(UnloadedExtensionInfo::REASON_UNINSTALL, unloaded_reason_); |
4262 } | 4091 } |
4263 | 4092 |
4264 TEST_F(ExtensionServiceTest, UninstallTerminatedExtension) { | 4093 TEST_F(ExtensionServiceTest, UninstallTerminatedExtension) { |
4265 InitializeEmptyExtensionService(); | 4094 InitializeEmptyExtensionService(); |
4266 InstallCRX(data_dir_.AppendASCII("good.crx"), INSTALL_NEW); | 4095 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); |
4267 TerminateExtension(good_crx); | 4096 TerminateExtension(good_crx); |
4268 UninstallExtension(good_crx, false); | 4097 UninstallExtension(good_crx, false); |
4269 EXPECT_EQ(UnloadedExtensionInfo::REASON_TERMINATE, unloaded_reason_); | 4098 EXPECT_EQ(UnloadedExtensionInfo::REASON_TERMINATE, unloaded_reason_); |
4270 } | 4099 } |
4271 | 4100 |
4272 // Tests the uninstaller helper. | 4101 // Tests the uninstaller helper. |
4273 TEST_F(ExtensionServiceTest, UninstallExtensionHelper) { | 4102 TEST_F(ExtensionServiceTest, UninstallExtensionHelper) { |
4274 InitializeEmptyExtensionService(); | 4103 InitializeEmptyExtensionService(); |
4275 InstallCRX(data_dir_.AppendASCII("good.crx"), INSTALL_NEW); | 4104 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); |
4276 UninstallExtension(good_crx, true); | 4105 UninstallExtension(good_crx, true); |
4277 EXPECT_EQ(UnloadedExtensionInfo::REASON_UNINSTALL, unloaded_reason_); | 4106 EXPECT_EQ(UnloadedExtensionInfo::REASON_UNINSTALL, unloaded_reason_); |
4278 } | 4107 } |
4279 | 4108 |
4280 TEST_F(ExtensionServiceTest, UninstallExtensionHelperTerminated) { | 4109 TEST_F(ExtensionServiceTest, UninstallExtensionHelperTerminated) { |
4281 InitializeEmptyExtensionService(); | 4110 InitializeEmptyExtensionService(); |
4282 InstallCRX(data_dir_.AppendASCII("good.crx"), INSTALL_NEW); | 4111 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); |
4283 TerminateExtension(good_crx); | 4112 TerminateExtension(good_crx); |
4284 UninstallExtension(good_crx, true); | 4113 UninstallExtension(good_crx, true); |
4285 EXPECT_EQ(UnloadedExtensionInfo::REASON_TERMINATE, unloaded_reason_); | 4114 EXPECT_EQ(UnloadedExtensionInfo::REASON_TERMINATE, unloaded_reason_); |
4286 } | 4115 } |
4287 | 4116 |
4288 // An extension disabled because of unsupported requirements should re-enabled | 4117 // An extension disabled because of unsupported requirements should re-enabled |
4289 // if updated to a version with supported requirements as long as there are no | 4118 // if updated to a version with supported requirements as long as there are no |
4290 // other disable reasons. | 4119 // other disable reasons. |
4291 TEST_F(ExtensionServiceTest, UpgradingRequirementsEnabled) { | 4120 TEST_F(ExtensionServiceTest, UpgradingRequirementsEnabled) { |
4292 InitializeEmptyExtensionService(); | 4121 InitializeEmptyExtensionService(); |
4293 BlackListWebGL(); | 4122 BlackListWebGL(); |
4294 | 4123 |
4295 base::FilePath path = data_dir_.AppendASCII("requirements"); | 4124 base::FilePath path = data_dir().AppendASCII("requirements"); |
4296 base::FilePath pem_path = data_dir_.AppendASCII("requirements") | 4125 base::FilePath pem_path = |
4297 .AppendASCII("v1_good.pem"); | 4126 data_dir().AppendASCII("requirements").AppendASCII("v1_good.pem"); |
4298 const Extension* extension_v1 = PackAndInstallCRX(path.AppendASCII("v1_good"), | 4127 const Extension* extension_v1 = PackAndInstallCRX(path.AppendASCII("v1_good"), |
4299 pem_path, | 4128 pem_path, |
4300 INSTALL_NEW); | 4129 INSTALL_NEW); |
4301 std::string id = extension_v1->id(); | 4130 std::string id = extension_v1->id(); |
4302 EXPECT_TRUE(service_->IsExtensionEnabled(id)); | 4131 EXPECT_TRUE(service()->IsExtensionEnabled(id)); |
4303 | 4132 |
4304 base::FilePath v2_bad_requirements_crx = GetTemporaryFile(); | 4133 base::FilePath v2_bad_requirements_crx = GetTemporaryFile(); |
4305 | 4134 |
4306 PackCRX(path.AppendASCII("v2_bad_requirements"), | 4135 PackCRX(path.AppendASCII("v2_bad_requirements"), |
4307 pem_path, | 4136 pem_path, |
4308 v2_bad_requirements_crx); | 4137 v2_bad_requirements_crx); |
4309 UpdateExtension(id, v2_bad_requirements_crx, INSTALLED); | 4138 UpdateExtension(id, v2_bad_requirements_crx, INSTALLED); |
4310 EXPECT_FALSE(service_->IsExtensionEnabled(id)); | 4139 EXPECT_FALSE(service()->IsExtensionEnabled(id)); |
4311 | 4140 |
4312 base::FilePath v3_good_crx = GetTemporaryFile(); | 4141 base::FilePath v3_good_crx = GetTemporaryFile(); |
4313 | 4142 |
4314 PackCRX(path.AppendASCII("v3_good"), pem_path, v3_good_crx); | 4143 PackCRX(path.AppendASCII("v3_good"), pem_path, v3_good_crx); |
4315 UpdateExtension(id, v3_good_crx, ENABLED); | 4144 UpdateExtension(id, v3_good_crx, ENABLED); |
4316 EXPECT_TRUE(service_->IsExtensionEnabled(id)); | 4145 EXPECT_TRUE(service()->IsExtensionEnabled(id)); |
4317 } | 4146 } |
4318 | 4147 |
4319 // Extensions disabled through user action should stay disabled. | 4148 // Extensions disabled through user action should stay disabled. |
4320 TEST_F(ExtensionServiceTest, UpgradingRequirementsDisabled) { | 4149 TEST_F(ExtensionServiceTest, UpgradingRequirementsDisabled) { |
4321 InitializeEmptyExtensionService(); | 4150 InitializeEmptyExtensionService(); |
4322 BlackListWebGL(); | 4151 BlackListWebGL(); |
4323 | 4152 |
4324 base::FilePath path = data_dir_.AppendASCII("requirements"); | 4153 base::FilePath path = data_dir().AppendASCII("requirements"); |
4325 base::FilePath pem_path = data_dir_.AppendASCII("requirements") | 4154 base::FilePath pem_path = |
4326 .AppendASCII("v1_good.pem"); | 4155 data_dir().AppendASCII("requirements").AppendASCII("v1_good.pem"); |
4327 const Extension* extension_v1 = PackAndInstallCRX(path.AppendASCII("v1_good"), | 4156 const Extension* extension_v1 = PackAndInstallCRX(path.AppendASCII("v1_good"), |
4328 pem_path, | 4157 pem_path, |
4329 INSTALL_NEW); | 4158 INSTALL_NEW); |
4330 std::string id = extension_v1->id(); | 4159 std::string id = extension_v1->id(); |
4331 service_->DisableExtension(id, Extension::DISABLE_USER_ACTION); | 4160 service()->DisableExtension(id, Extension::DISABLE_USER_ACTION); |
4332 EXPECT_FALSE(service_->IsExtensionEnabled(id)); | 4161 EXPECT_FALSE(service()->IsExtensionEnabled(id)); |
4333 | 4162 |
4334 base::FilePath v2_bad_requirements_crx = GetTemporaryFile(); | 4163 base::FilePath v2_bad_requirements_crx = GetTemporaryFile(); |
4335 | 4164 |
4336 PackCRX(path.AppendASCII("v2_bad_requirements"), | 4165 PackCRX(path.AppendASCII("v2_bad_requirements"), |
4337 pem_path, | 4166 pem_path, |
4338 v2_bad_requirements_crx); | 4167 v2_bad_requirements_crx); |
4339 UpdateExtension(id, v2_bad_requirements_crx, INSTALLED); | 4168 UpdateExtension(id, v2_bad_requirements_crx, INSTALLED); |
4340 EXPECT_FALSE(service_->IsExtensionEnabled(id)); | 4169 EXPECT_FALSE(service()->IsExtensionEnabled(id)); |
4341 | 4170 |
4342 base::FilePath v3_good_crx = GetTemporaryFile(); | 4171 base::FilePath v3_good_crx = GetTemporaryFile(); |
4343 | 4172 |
4344 PackCRX(path.AppendASCII("v3_good"), pem_path, v3_good_crx); | 4173 PackCRX(path.AppendASCII("v3_good"), pem_path, v3_good_crx); |
4345 UpdateExtension(id, v3_good_crx, INSTALLED); | 4174 UpdateExtension(id, v3_good_crx, INSTALLED); |
4346 EXPECT_FALSE(service_->IsExtensionEnabled(id)); | 4175 EXPECT_FALSE(service()->IsExtensionEnabled(id)); |
4347 } | 4176 } |
4348 | 4177 |
4349 // The extension should not re-enabled because it was disabled from a | 4178 // The extension should not re-enabled because it was disabled from a |
4350 // permission increase. | 4179 // permission increase. |
4351 TEST_F(ExtensionServiceTest, UpgradingRequirementsPermissions) { | 4180 TEST_F(ExtensionServiceTest, UpgradingRequirementsPermissions) { |
4352 InitializeEmptyExtensionService(); | 4181 InitializeEmptyExtensionService(); |
4353 BlackListWebGL(); | 4182 BlackListWebGL(); |
4354 | 4183 |
4355 base::FilePath path = data_dir_.AppendASCII("requirements"); | 4184 base::FilePath path = data_dir().AppendASCII("requirements"); |
4356 base::FilePath pem_path = data_dir_.AppendASCII("requirements") | 4185 base::FilePath pem_path = |
4357 .AppendASCII("v1_good.pem"); | 4186 data_dir().AppendASCII("requirements").AppendASCII("v1_good.pem"); |
4358 const Extension* extension_v1 = PackAndInstallCRX(path.AppendASCII("v1_good"), | 4187 const Extension* extension_v1 = PackAndInstallCRX(path.AppendASCII("v1_good"), |
4359 pem_path, | 4188 pem_path, |
4360 INSTALL_NEW); | 4189 INSTALL_NEW); |
4361 std::string id = extension_v1->id(); | 4190 std::string id = extension_v1->id(); |
4362 EXPECT_TRUE(service_->IsExtensionEnabled(id)); | 4191 EXPECT_TRUE(service()->IsExtensionEnabled(id)); |
4363 | 4192 |
4364 base::FilePath v2_bad_requirements_and_permissions_crx = GetTemporaryFile(); | 4193 base::FilePath v2_bad_requirements_and_permissions_crx = GetTemporaryFile(); |
4365 | 4194 |
4366 PackCRX(path.AppendASCII("v2_bad_requirements_and_permissions"), | 4195 PackCRX(path.AppendASCII("v2_bad_requirements_and_permissions"), |
4367 pem_path, | 4196 pem_path, |
4368 v2_bad_requirements_and_permissions_crx); | 4197 v2_bad_requirements_and_permissions_crx); |
4369 UpdateExtension(id, v2_bad_requirements_and_permissions_crx, INSTALLED); | 4198 UpdateExtension(id, v2_bad_requirements_and_permissions_crx, INSTALLED); |
4370 EXPECT_FALSE(service_->IsExtensionEnabled(id)); | 4199 EXPECT_FALSE(service()->IsExtensionEnabled(id)); |
4371 | 4200 |
4372 base::FilePath v3_bad_permissions_crx = GetTemporaryFile(); | 4201 base::FilePath v3_bad_permissions_crx = GetTemporaryFile(); |
4373 | 4202 |
4374 PackCRX(path.AppendASCII("v3_bad_permissions"), | 4203 PackCRX(path.AppendASCII("v3_bad_permissions"), |
4375 pem_path, | 4204 pem_path, |
4376 v3_bad_permissions_crx); | 4205 v3_bad_permissions_crx); |
4377 UpdateExtension(id, v3_bad_permissions_crx, INSTALLED); | 4206 UpdateExtension(id, v3_bad_permissions_crx, INSTALLED); |
4378 EXPECT_FALSE(service_->IsExtensionEnabled(id)); | 4207 EXPECT_FALSE(service()->IsExtensionEnabled(id)); |
4379 } | 4208 } |
4380 | 4209 |
4381 // Unpacked extensions are not allowed to be installed if they have unsupported | 4210 // Unpacked extensions are not allowed to be installed if they have unsupported |
4382 // requirements. | 4211 // requirements. |
4383 TEST_F(ExtensionServiceTest, UnpackedRequirements) { | 4212 TEST_F(ExtensionServiceTest, UnpackedRequirements) { |
4384 InitializeEmptyExtensionService(); | 4213 InitializeEmptyExtensionService(); |
4385 BlackListWebGL(); | 4214 BlackListWebGL(); |
4386 | 4215 |
4387 base::FilePath path = data_dir_.AppendASCII("requirements") | 4216 base::FilePath path = |
4388 .AppendASCII("v2_bad_requirements"); | 4217 data_dir().AppendASCII("requirements").AppendASCII("v2_bad_requirements"); |
4389 extensions::UnpackedInstaller::Create(service_)->Load(path); | 4218 extensions::UnpackedInstaller::Create(service())->Load(path); |
4390 base::RunLoop().RunUntilIdle(); | 4219 base::RunLoop().RunUntilIdle(); |
4391 EXPECT_EQ(1u, GetErrors().size()); | 4220 EXPECT_EQ(1u, GetErrors().size()); |
4392 EXPECT_EQ(0u, registry_->enabled_extensions().size()); | 4221 EXPECT_EQ(0u, registry()->enabled_extensions().size()); |
4393 } | 4222 } |
4394 | 4223 |
4395 class ExtensionCookieCallback { | 4224 class ExtensionCookieCallback { |
4396 public: | 4225 public: |
4397 ExtensionCookieCallback() | 4226 ExtensionCookieCallback() |
4398 : result_(false), | 4227 : result_(false), |
4399 weak_factory_(base::MessageLoop::current()) {} | 4228 weak_factory_(base::MessageLoop::current()) {} |
4400 | 4229 |
4401 void SetCookieCallback(bool result) { | 4230 void SetCookieCallback(bool result) { |
4402 base::MessageLoop::current()->PostTask(FROM_HERE, | 4231 base::MessageLoop::current()->PostTask(FROM_HERE, |
(...skipping 10 matching lines...) Expand all Loading... |
4413 bool result_; | 4242 bool result_; |
4414 base::WeakPtrFactory<base::MessageLoop> weak_factory_; | 4243 base::WeakPtrFactory<base::MessageLoop> weak_factory_; |
4415 }; | 4244 }; |
4416 | 4245 |
4417 // Verifies extension state is removed upon uninstall. | 4246 // Verifies extension state is removed upon uninstall. |
4418 TEST_F(ExtensionServiceTest, ClearExtensionData) { | 4247 TEST_F(ExtensionServiceTest, ClearExtensionData) { |
4419 InitializeEmptyExtensionService(); | 4248 InitializeEmptyExtensionService(); |
4420 ExtensionCookieCallback callback; | 4249 ExtensionCookieCallback callback; |
4421 | 4250 |
4422 // Load a test extension. | 4251 // Load a test extension. |
4423 base::FilePath path = data_dir_; | 4252 base::FilePath path = data_dir(); |
4424 path = path.AppendASCII("good.crx"); | 4253 path = path.AppendASCII("good.crx"); |
4425 const Extension* extension = InstallCRX(path, INSTALL_NEW); | 4254 const Extension* extension = InstallCRX(path, INSTALL_NEW); |
4426 ASSERT_TRUE(extension); | 4255 ASSERT_TRUE(extension); |
4427 GURL ext_url(extension->url()); | 4256 GURL ext_url(extension->url()); |
4428 std::string origin_id = webkit_database::GetIdentifierFromOrigin(ext_url); | 4257 std::string origin_id = webkit_database::GetIdentifierFromOrigin(ext_url); |
4429 | 4258 |
4430 // Set a cookie for the extension. | 4259 // Set a cookie for the extension. |
4431 net::CookieMonster* cookie_monster = | 4260 net::CookieMonster* cookie_monster = profile() |
4432 profile_->GetRequestContextForExtensions()->GetURLRequestContext()-> | 4261 ->GetRequestContextForExtensions() |
4433 cookie_store()->GetCookieMonster(); | 4262 ->GetURLRequestContext() |
| 4263 ->cookie_store() |
| 4264 ->GetCookieMonster(); |
4434 ASSERT_TRUE(cookie_monster); | 4265 ASSERT_TRUE(cookie_monster); |
4435 net::CookieOptions options; | 4266 net::CookieOptions options; |
4436 cookie_monster->SetCookieWithOptionsAsync( | 4267 cookie_monster->SetCookieWithOptionsAsync( |
4437 ext_url, "dummy=value", options, | 4268 ext_url, "dummy=value", options, |
4438 base::Bind(&ExtensionCookieCallback::SetCookieCallback, | 4269 base::Bind(&ExtensionCookieCallback::SetCookieCallback, |
4439 base::Unretained(&callback))); | 4270 base::Unretained(&callback))); |
4440 base::RunLoop().RunUntilIdle(); | 4271 base::RunLoop().RunUntilIdle(); |
4441 EXPECT_TRUE(callback.result_); | 4272 EXPECT_TRUE(callback.result_); |
4442 | 4273 |
4443 cookie_monster->GetAllCookiesForURLAsync( | 4274 cookie_monster->GetAllCookiesForURLAsync( |
4444 ext_url, | 4275 ext_url, |
4445 base::Bind(&ExtensionCookieCallback::GetAllCookiesCallback, | 4276 base::Bind(&ExtensionCookieCallback::GetAllCookiesCallback, |
4446 base::Unretained(&callback))); | 4277 base::Unretained(&callback))); |
4447 base::RunLoop().RunUntilIdle(); | 4278 base::RunLoop().RunUntilIdle(); |
4448 EXPECT_EQ(1U, callback.list_.size()); | 4279 EXPECT_EQ(1U, callback.list_.size()); |
4449 | 4280 |
4450 // Open a database. | 4281 // Open a database. |
4451 webkit_database::DatabaseTracker* db_tracker = | 4282 webkit_database::DatabaseTracker* db_tracker = |
4452 BrowserContext::GetDefaultStoragePartition(profile_.get())-> | 4283 BrowserContext::GetDefaultStoragePartition(profile()) |
4453 GetDatabaseTracker(); | 4284 ->GetDatabaseTracker(); |
4454 base::string16 db_name = base::UTF8ToUTF16("db"); | 4285 base::string16 db_name = base::UTF8ToUTF16("db"); |
4455 base::string16 description = base::UTF8ToUTF16("db_description"); | 4286 base::string16 description = base::UTF8ToUTF16("db_description"); |
4456 int64 size; | 4287 int64 size; |
4457 db_tracker->DatabaseOpened(origin_id, db_name, description, 1, &size); | 4288 db_tracker->DatabaseOpened(origin_id, db_name, description, 1, &size); |
4458 db_tracker->DatabaseClosed(origin_id, db_name); | 4289 db_tracker->DatabaseClosed(origin_id, db_name); |
4459 std::vector<webkit_database::OriginInfo> origins; | 4290 std::vector<webkit_database::OriginInfo> origins; |
4460 db_tracker->GetAllOriginsInfo(&origins); | 4291 db_tracker->GetAllOriginsInfo(&origins); |
4461 EXPECT_EQ(1U, origins.size()); | 4292 EXPECT_EQ(1U, origins.size()); |
4462 EXPECT_EQ(origin_id, origins[0].GetOriginIdentifier()); | 4293 EXPECT_EQ(origin_id, origins[0].GetOriginIdentifier()); |
4463 | 4294 |
4464 // Create local storage. We only simulate this by creating the backing files. | 4295 // Create local storage. We only simulate this by creating the backing files. |
4465 // Note: This test depends on details of how the dom_storage library | 4296 // Note: This test depends on details of how the dom_storage library |
4466 // stores data in the host file system. | 4297 // stores data in the host file system. |
4467 base::FilePath lso_dir_path = | 4298 base::FilePath lso_dir_path = |
4468 profile_->GetPath().AppendASCII("Local Storage"); | 4299 profile()->GetPath().AppendASCII("Local Storage"); |
4469 base::FilePath lso_file_path = lso_dir_path.AppendASCII(origin_id) | 4300 base::FilePath lso_file_path = lso_dir_path.AppendASCII(origin_id) |
4470 .AddExtension(FILE_PATH_LITERAL(".localstorage")); | 4301 .AddExtension(FILE_PATH_LITERAL(".localstorage")); |
4471 EXPECT_TRUE(base::CreateDirectory(lso_dir_path)); | 4302 EXPECT_TRUE(base::CreateDirectory(lso_dir_path)); |
4472 EXPECT_EQ(0, base::WriteFile(lso_file_path, NULL, 0)); | 4303 EXPECT_EQ(0, base::WriteFile(lso_file_path, NULL, 0)); |
4473 EXPECT_TRUE(base::PathExists(lso_file_path)); | 4304 EXPECT_TRUE(base::PathExists(lso_file_path)); |
4474 | 4305 |
4475 // Create indexed db. Similarly, it is enough to only simulate this by | 4306 // Create indexed db. Similarly, it is enough to only simulate this by |
4476 // creating the directory on the disk. | 4307 // creating the directory on the disk. |
4477 IndexedDBContext* idb_context = | 4308 IndexedDBContext* idb_context = BrowserContext::GetDefaultStoragePartition( |
4478 BrowserContext::GetDefaultStoragePartition(profile_.get())-> | 4309 profile())->GetIndexedDBContext(); |
4479 GetIndexedDBContext(); | |
4480 idb_context->SetTaskRunnerForTesting( | 4310 idb_context->SetTaskRunnerForTesting( |
4481 base::MessageLoop::current()->message_loop_proxy().get()); | 4311 base::MessageLoop::current()->message_loop_proxy().get()); |
4482 base::FilePath idb_path = idb_context->GetFilePathForTesting(origin_id); | 4312 base::FilePath idb_path = idb_context->GetFilePathForTesting(origin_id); |
4483 EXPECT_TRUE(base::CreateDirectory(idb_path)); | 4313 EXPECT_TRUE(base::CreateDirectory(idb_path)); |
4484 EXPECT_TRUE(base::DirectoryExists(idb_path)); | 4314 EXPECT_TRUE(base::DirectoryExists(idb_path)); |
4485 | 4315 |
4486 // Uninstall the extension. | 4316 // Uninstall the extension. |
4487 service_->UninstallExtension(good_crx, false, NULL); | 4317 service()->UninstallExtension(good_crx, false, NULL); |
4488 base::RunLoop().RunUntilIdle(); | 4318 base::RunLoop().RunUntilIdle(); |
4489 | 4319 |
4490 // Check that the cookie is gone. | 4320 // Check that the cookie is gone. |
4491 cookie_monster->GetAllCookiesForURLAsync( | 4321 cookie_monster->GetAllCookiesForURLAsync( |
4492 ext_url, | 4322 ext_url, |
4493 base::Bind(&ExtensionCookieCallback::GetAllCookiesCallback, | 4323 base::Bind(&ExtensionCookieCallback::GetAllCookiesCallback, |
4494 base::Unretained(&callback))); | 4324 base::Unretained(&callback))); |
4495 base::RunLoop().RunUntilIdle(); | 4325 base::RunLoop().RunUntilIdle(); |
4496 EXPECT_EQ(0U, callback.list_.size()); | 4326 EXPECT_EQ(0U, callback.list_.size()); |
4497 | 4327 |
(...skipping 11 matching lines...) Expand all Loading... |
4509 | 4339 |
4510 // Verifies app state is removed upon uninstall. | 4340 // Verifies app state is removed upon uninstall. |
4511 TEST_F(ExtensionServiceTest, ClearAppData) { | 4341 TEST_F(ExtensionServiceTest, ClearAppData) { |
4512 InitializeEmptyExtensionService(); | 4342 InitializeEmptyExtensionService(); |
4513 ExtensionCookieCallback callback; | 4343 ExtensionCookieCallback callback; |
4514 | 4344 |
4515 int pref_count = 0; | 4345 int pref_count = 0; |
4516 | 4346 |
4517 // Install app1 with unlimited storage. | 4347 // Install app1 with unlimited storage. |
4518 const Extension* extension = | 4348 const Extension* extension = |
4519 PackAndInstallCRX(data_dir_.AppendASCII("app1"), INSTALL_NEW); | 4349 PackAndInstallCRX(data_dir().AppendASCII("app1"), INSTALL_NEW); |
4520 ValidatePrefKeyCount(++pref_count); | 4350 ValidatePrefKeyCount(++pref_count); |
4521 ASSERT_EQ(1u, registry_->enabled_extensions().size()); | 4351 ASSERT_EQ(1u, registry()->enabled_extensions().size()); |
4522 const std::string id1 = extension->id(); | 4352 const std::string id1 = extension->id(); |
4523 EXPECT_TRUE(extension->permissions_data()->HasAPIPermission( | 4353 EXPECT_TRUE(extension->permissions_data()->HasAPIPermission( |
4524 APIPermission::kUnlimitedStorage)); | 4354 APIPermission::kUnlimitedStorage)); |
4525 const GURL origin1( | 4355 const GURL origin1( |
4526 extensions::AppLaunchInfo::GetFullLaunchURL(extension).GetOrigin()); | 4356 extensions::AppLaunchInfo::GetFullLaunchURL(extension).GetOrigin()); |
4527 EXPECT_TRUE(profile_->GetExtensionSpecialStoragePolicy()-> | 4357 EXPECT_TRUE(profile()->GetExtensionSpecialStoragePolicy()->IsStorageUnlimited( |
4528 IsStorageUnlimited(origin1)); | 4358 origin1)); |
4529 std::string origin_id = webkit_database::GetIdentifierFromOrigin(origin1); | 4359 std::string origin_id = webkit_database::GetIdentifierFromOrigin(origin1); |
4530 | 4360 |
4531 // Install app2 from the same origin with unlimited storage. | 4361 // Install app2 from the same origin with unlimited storage. |
4532 extension = PackAndInstallCRX(data_dir_.AppendASCII("app2"), INSTALL_NEW); | 4362 extension = PackAndInstallCRX(data_dir().AppendASCII("app2"), INSTALL_NEW); |
4533 ValidatePrefKeyCount(++pref_count); | 4363 ValidatePrefKeyCount(++pref_count); |
4534 ASSERT_EQ(2u, registry_->enabled_extensions().size()); | 4364 ASSERT_EQ(2u, registry()->enabled_extensions().size()); |
4535 const std::string id2 = extension->id(); | 4365 const std::string id2 = extension->id(); |
4536 EXPECT_TRUE(extension->permissions_data()->HasAPIPermission( | 4366 EXPECT_TRUE(extension->permissions_data()->HasAPIPermission( |
4537 APIPermission::kUnlimitedStorage)); | 4367 APIPermission::kUnlimitedStorage)); |
4538 EXPECT_TRUE(extension->web_extent().MatchesURL( | 4368 EXPECT_TRUE(extension->web_extent().MatchesURL( |
4539 extensions::AppLaunchInfo::GetFullLaunchURL(extension))); | 4369 extensions::AppLaunchInfo::GetFullLaunchURL(extension))); |
4540 const GURL origin2( | 4370 const GURL origin2( |
4541 extensions::AppLaunchInfo::GetFullLaunchURL(extension).GetOrigin()); | 4371 extensions::AppLaunchInfo::GetFullLaunchURL(extension).GetOrigin()); |
4542 EXPECT_EQ(origin1, origin2); | 4372 EXPECT_EQ(origin1, origin2); |
4543 EXPECT_TRUE(profile_->GetExtensionSpecialStoragePolicy()-> | 4373 EXPECT_TRUE(profile()->GetExtensionSpecialStoragePolicy()->IsStorageUnlimited( |
4544 IsStorageUnlimited(origin2)); | 4374 origin2)); |
4545 | 4375 |
4546 // Set a cookie for the extension. | 4376 // Set a cookie for the extension. |
4547 net::CookieMonster* cookie_monster = | 4377 net::CookieMonster* cookie_monster = profile() |
4548 profile_->GetRequestContext()->GetURLRequestContext()-> | 4378 ->GetRequestContext() |
4549 cookie_store()->GetCookieMonster(); | 4379 ->GetURLRequestContext() |
| 4380 ->cookie_store() |
| 4381 ->GetCookieMonster(); |
4550 ASSERT_TRUE(cookie_monster); | 4382 ASSERT_TRUE(cookie_monster); |
4551 net::CookieOptions options; | 4383 net::CookieOptions options; |
4552 cookie_monster->SetCookieWithOptionsAsync( | 4384 cookie_monster->SetCookieWithOptionsAsync( |
4553 origin1, "dummy=value", options, | 4385 origin1, "dummy=value", options, |
4554 base::Bind(&ExtensionCookieCallback::SetCookieCallback, | 4386 base::Bind(&ExtensionCookieCallback::SetCookieCallback, |
4555 base::Unretained(&callback))); | 4387 base::Unretained(&callback))); |
4556 base::RunLoop().RunUntilIdle(); | 4388 base::RunLoop().RunUntilIdle(); |
4557 EXPECT_TRUE(callback.result_); | 4389 EXPECT_TRUE(callback.result_); |
4558 | 4390 |
4559 cookie_monster->GetAllCookiesForURLAsync( | 4391 cookie_monster->GetAllCookiesForURLAsync( |
4560 origin1, | 4392 origin1, |
4561 base::Bind(&ExtensionCookieCallback::GetAllCookiesCallback, | 4393 base::Bind(&ExtensionCookieCallback::GetAllCookiesCallback, |
4562 base::Unretained(&callback))); | 4394 base::Unretained(&callback))); |
4563 base::RunLoop().RunUntilIdle(); | 4395 base::RunLoop().RunUntilIdle(); |
4564 EXPECT_EQ(1U, callback.list_.size()); | 4396 EXPECT_EQ(1U, callback.list_.size()); |
4565 | 4397 |
4566 // Open a database. | 4398 // Open a database. |
4567 webkit_database::DatabaseTracker* db_tracker = | 4399 webkit_database::DatabaseTracker* db_tracker = |
4568 BrowserContext::GetDefaultStoragePartition(profile_.get())-> | 4400 BrowserContext::GetDefaultStoragePartition(profile()) |
4569 GetDatabaseTracker(); | 4401 ->GetDatabaseTracker(); |
4570 base::string16 db_name = base::UTF8ToUTF16("db"); | 4402 base::string16 db_name = base::UTF8ToUTF16("db"); |
4571 base::string16 description = base::UTF8ToUTF16("db_description"); | 4403 base::string16 description = base::UTF8ToUTF16("db_description"); |
4572 int64 size; | 4404 int64 size; |
4573 db_tracker->DatabaseOpened(origin_id, db_name, description, 1, &size); | 4405 db_tracker->DatabaseOpened(origin_id, db_name, description, 1, &size); |
4574 db_tracker->DatabaseClosed(origin_id, db_name); | 4406 db_tracker->DatabaseClosed(origin_id, db_name); |
4575 std::vector<webkit_database::OriginInfo> origins; | 4407 std::vector<webkit_database::OriginInfo> origins; |
4576 db_tracker->GetAllOriginsInfo(&origins); | 4408 db_tracker->GetAllOriginsInfo(&origins); |
4577 EXPECT_EQ(1U, origins.size()); | 4409 EXPECT_EQ(1U, origins.size()); |
4578 EXPECT_EQ(origin_id, origins[0].GetOriginIdentifier()); | 4410 EXPECT_EQ(origin_id, origins[0].GetOriginIdentifier()); |
4579 | 4411 |
4580 // Create local storage. We only simulate this by creating the backing files. | 4412 // Create local storage. We only simulate this by creating the backing files. |
4581 // Note: This test depends on details of how the dom_storage library | 4413 // Note: This test depends on details of how the dom_storage library |
4582 // stores data in the host file system. | 4414 // stores data in the host file system. |
4583 base::FilePath lso_dir_path = | 4415 base::FilePath lso_dir_path = |
4584 profile_->GetPath().AppendASCII("Local Storage"); | 4416 profile()->GetPath().AppendASCII("Local Storage"); |
4585 base::FilePath lso_file_path = lso_dir_path.AppendASCII(origin_id) | 4417 base::FilePath lso_file_path = lso_dir_path.AppendASCII(origin_id) |
4586 .AddExtension(FILE_PATH_LITERAL(".localstorage")); | 4418 .AddExtension(FILE_PATH_LITERAL(".localstorage")); |
4587 EXPECT_TRUE(base::CreateDirectory(lso_dir_path)); | 4419 EXPECT_TRUE(base::CreateDirectory(lso_dir_path)); |
4588 EXPECT_EQ(0, base::WriteFile(lso_file_path, NULL, 0)); | 4420 EXPECT_EQ(0, base::WriteFile(lso_file_path, NULL, 0)); |
4589 EXPECT_TRUE(base::PathExists(lso_file_path)); | 4421 EXPECT_TRUE(base::PathExists(lso_file_path)); |
4590 | 4422 |
4591 // Create indexed db. Similarly, it is enough to only simulate this by | 4423 // Create indexed db. Similarly, it is enough to only simulate this by |
4592 // creating the directory on the disk. | 4424 // creating the directory on the disk. |
4593 IndexedDBContext* idb_context = | 4425 IndexedDBContext* idb_context = BrowserContext::GetDefaultStoragePartition( |
4594 BrowserContext::GetDefaultStoragePartition(profile_.get())-> | 4426 profile())->GetIndexedDBContext(); |
4595 GetIndexedDBContext(); | |
4596 idb_context->SetTaskRunnerForTesting( | 4427 idb_context->SetTaskRunnerForTesting( |
4597 base::MessageLoop::current()->message_loop_proxy().get()); | 4428 base::MessageLoop::current()->message_loop_proxy().get()); |
4598 base::FilePath idb_path = idb_context->GetFilePathForTesting(origin_id); | 4429 base::FilePath idb_path = idb_context->GetFilePathForTesting(origin_id); |
4599 EXPECT_TRUE(base::CreateDirectory(idb_path)); | 4430 EXPECT_TRUE(base::CreateDirectory(idb_path)); |
4600 EXPECT_TRUE(base::DirectoryExists(idb_path)); | 4431 EXPECT_TRUE(base::DirectoryExists(idb_path)); |
4601 | 4432 |
4602 // Uninstall one of them, unlimited storage should still be granted | 4433 // Uninstall one of them, unlimited storage should still be granted |
4603 // to the origin. | 4434 // to the origin. |
4604 UninstallExtension(id1, false); | 4435 UninstallExtension(id1, false); |
4605 EXPECT_EQ(1u, registry_->enabled_extensions().size()); | 4436 EXPECT_EQ(1u, registry()->enabled_extensions().size()); |
4606 EXPECT_TRUE(profile_->GetExtensionSpecialStoragePolicy()-> | 4437 EXPECT_TRUE(profile()->GetExtensionSpecialStoragePolicy()->IsStorageUnlimited( |
4607 IsStorageUnlimited(origin1)); | 4438 origin1)); |
4608 | 4439 |
4609 // Check that the cookie is still there. | 4440 // Check that the cookie is still there. |
4610 cookie_monster->GetAllCookiesForURLAsync( | 4441 cookie_monster->GetAllCookiesForURLAsync( |
4611 origin1, | 4442 origin1, |
4612 base::Bind(&ExtensionCookieCallback::GetAllCookiesCallback, | 4443 base::Bind(&ExtensionCookieCallback::GetAllCookiesCallback, |
4613 base::Unretained(&callback))); | 4444 base::Unretained(&callback))); |
4614 base::RunLoop().RunUntilIdle(); | 4445 base::RunLoop().RunUntilIdle(); |
4615 EXPECT_EQ(1U, callback.list_.size()); | 4446 EXPECT_EQ(1U, callback.list_.size()); |
4616 | 4447 |
4617 // Now uninstall the other. Storage should be cleared for the apps. | 4448 // Now uninstall the other. Storage should be cleared for the apps. |
4618 UninstallExtension(id2, false); | 4449 UninstallExtension(id2, false); |
4619 EXPECT_EQ(0u, registry_->enabled_extensions().size()); | 4450 EXPECT_EQ(0u, registry()->enabled_extensions().size()); |
4620 EXPECT_FALSE(profile_->GetExtensionSpecialStoragePolicy()-> | 4451 EXPECT_FALSE( |
4621 IsStorageUnlimited(origin1)); | 4452 profile()->GetExtensionSpecialStoragePolicy()->IsStorageUnlimited( |
| 4453 origin1)); |
4622 | 4454 |
4623 // Check that the cookie is gone. | 4455 // Check that the cookie is gone. |
4624 cookie_monster->GetAllCookiesForURLAsync( | 4456 cookie_monster->GetAllCookiesForURLAsync( |
4625 origin1, | 4457 origin1, |
4626 base::Bind(&ExtensionCookieCallback::GetAllCookiesCallback, | 4458 base::Bind(&ExtensionCookieCallback::GetAllCookiesCallback, |
4627 base::Unretained(&callback))); | 4459 base::Unretained(&callback))); |
4628 base::RunLoop().RunUntilIdle(); | 4460 base::RunLoop().RunUntilIdle(); |
4629 EXPECT_EQ(0U, callback.list_.size()); | 4461 EXPECT_EQ(0U, callback.list_.size()); |
4630 | 4462 |
4631 // The database should have vanished as well. | 4463 // The database should have vanished as well. |
4632 origins.clear(); | 4464 origins.clear(); |
4633 db_tracker->GetAllOriginsInfo(&origins); | 4465 db_tracker->GetAllOriginsInfo(&origins); |
4634 EXPECT_EQ(0U, origins.size()); | 4466 EXPECT_EQ(0U, origins.size()); |
4635 | 4467 |
4636 // Check that the LSO file has been removed. | 4468 // Check that the LSO file has been removed. |
4637 EXPECT_FALSE(base::PathExists(lso_file_path)); | 4469 EXPECT_FALSE(base::PathExists(lso_file_path)); |
4638 | 4470 |
4639 // Check if the indexed db has disappeared too. | 4471 // Check if the indexed db has disappeared too. |
4640 EXPECT_FALSE(base::DirectoryExists(idb_path)); | 4472 EXPECT_FALSE(base::DirectoryExists(idb_path)); |
4641 } | 4473 } |
4642 | 4474 |
4643 // Tests loading single extensions (like --load-extension) | 4475 // Tests loading single extensions (like --load-extension) |
4644 // Flaky crashes. http://crbug.com/231806 | 4476 // Flaky crashes. http://crbug.com/231806 |
4645 TEST_F(ExtensionServiceTest, DISABLED_LoadExtension) { | 4477 TEST_F(ExtensionServiceTest, DISABLED_LoadExtension) { |
4646 InitializeEmptyExtensionService(); | 4478 InitializeEmptyExtensionService(); |
4647 | 4479 |
4648 base::FilePath ext1 = data_dir_ | 4480 base::FilePath ext1 = data_dir() |
4649 .AppendASCII("good") | 4481 .AppendASCII("good") |
4650 .AppendASCII("Extensions") | 4482 .AppendASCII("Extensions") |
4651 .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj") | 4483 .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj") |
4652 .AppendASCII("1.0.0.0"); | 4484 .AppendASCII("1.0.0.0"); |
4653 extensions::UnpackedInstaller::Create(service_)->Load(ext1); | 4485 extensions::UnpackedInstaller::Create(service())->Load(ext1); |
4654 base::RunLoop().RunUntilIdle(); | 4486 base::RunLoop().RunUntilIdle(); |
4655 EXPECT_EQ(0u, GetErrors().size()); | 4487 EXPECT_EQ(0u, GetErrors().size()); |
4656 ASSERT_EQ(1u, loaded_.size()); | 4488 ASSERT_EQ(1u, loaded_.size()); |
4657 EXPECT_EQ(Manifest::UNPACKED, loaded_[0]->location()); | 4489 EXPECT_EQ(Manifest::UNPACKED, loaded_[0]->location()); |
4658 EXPECT_EQ(1u, registry_->enabled_extensions().size()); | 4490 EXPECT_EQ(1u, registry()->enabled_extensions().size()); |
4659 | 4491 |
4660 ValidatePrefKeyCount(1); | 4492 ValidatePrefKeyCount(1); |
4661 | 4493 |
4662 base::FilePath no_manifest = data_dir_ | 4494 base::FilePath no_manifest = |
4663 .AppendASCII("bad") | 4495 data_dir() |
4664 // .AppendASCII("Extensions") | 4496 .AppendASCII("bad") |
4665 .AppendASCII("cccccccccccccccccccccccccccccccc") | 4497 // .AppendASCII("Extensions") |
4666 .AppendASCII("1"); | 4498 .AppendASCII("cccccccccccccccccccccccccccccccc") |
4667 extensions::UnpackedInstaller::Create(service_)->Load(no_manifest); | 4499 .AppendASCII("1"); |
| 4500 extensions::UnpackedInstaller::Create(service())->Load(no_manifest); |
4668 base::RunLoop().RunUntilIdle(); | 4501 base::RunLoop().RunUntilIdle(); |
4669 EXPECT_EQ(1u, GetErrors().size()); | 4502 EXPECT_EQ(1u, GetErrors().size()); |
4670 ASSERT_EQ(1u, loaded_.size()); | 4503 ASSERT_EQ(1u, loaded_.size()); |
4671 EXPECT_EQ(1u, registry_->enabled_extensions().size()); | 4504 EXPECT_EQ(1u, registry()->enabled_extensions().size()); |
4672 | 4505 |
4673 // Test uninstall. | 4506 // Test uninstall. |
4674 std::string id = loaded_[0]->id(); | 4507 std::string id = loaded_[0]->id(); |
4675 EXPECT_FALSE(unloaded_id_.length()); | 4508 EXPECT_FALSE(unloaded_id_.length()); |
4676 service_->UninstallExtension(id, false, NULL); | 4509 service()->UninstallExtension(id, false, NULL); |
4677 base::RunLoop().RunUntilIdle(); | 4510 base::RunLoop().RunUntilIdle(); |
4678 EXPECT_EQ(id, unloaded_id_); | 4511 EXPECT_EQ(id, unloaded_id_); |
4679 ASSERT_EQ(0u, loaded_.size()); | 4512 ASSERT_EQ(0u, loaded_.size()); |
4680 EXPECT_EQ(0u, registry_->enabled_extensions().size()); | 4513 EXPECT_EQ(0u, registry()->enabled_extensions().size()); |
4681 } | 4514 } |
4682 | 4515 |
4683 // Tests that we generate IDs when they are not specified in the manifest for | 4516 // Tests that we generate IDs when they are not specified in the manifest for |
4684 // --load-extension. | 4517 // --load-extension. |
4685 TEST_F(ExtensionServiceTest, GenerateID) { | 4518 TEST_F(ExtensionServiceTest, GenerateID) { |
4686 InitializeEmptyExtensionService(); | 4519 InitializeEmptyExtensionService(); |
4687 | 4520 |
4688 base::FilePath no_id_ext = data_dir_.AppendASCII("no_id"); | 4521 base::FilePath no_id_ext = data_dir().AppendASCII("no_id"); |
4689 extensions::UnpackedInstaller::Create(service_)->Load(no_id_ext); | 4522 extensions::UnpackedInstaller::Create(service())->Load(no_id_ext); |
4690 base::RunLoop().RunUntilIdle(); | 4523 base::RunLoop().RunUntilIdle(); |
4691 EXPECT_EQ(0u, GetErrors().size()); | 4524 EXPECT_EQ(0u, GetErrors().size()); |
4692 ASSERT_EQ(1u, loaded_.size()); | 4525 ASSERT_EQ(1u, loaded_.size()); |
4693 ASSERT_TRUE(Extension::IdIsValid(loaded_[0]->id())); | 4526 ASSERT_TRUE(Extension::IdIsValid(loaded_[0]->id())); |
4694 EXPECT_EQ(loaded_[0]->location(), Manifest::UNPACKED); | 4527 EXPECT_EQ(loaded_[0]->location(), Manifest::UNPACKED); |
4695 | 4528 |
4696 ValidatePrefKeyCount(1); | 4529 ValidatePrefKeyCount(1); |
4697 | 4530 |
4698 std::string previous_id = loaded_[0]->id(); | 4531 std::string previous_id = loaded_[0]->id(); |
4699 | 4532 |
4700 // If we reload the same path, we should get the same extension ID. | 4533 // If we reload the same path, we should get the same extension ID. |
4701 extensions::UnpackedInstaller::Create(service_)->Load(no_id_ext); | 4534 extensions::UnpackedInstaller::Create(service())->Load(no_id_ext); |
4702 base::RunLoop().RunUntilIdle(); | 4535 base::RunLoop().RunUntilIdle(); |
4703 ASSERT_EQ(1u, loaded_.size()); | 4536 ASSERT_EQ(1u, loaded_.size()); |
4704 ASSERT_EQ(previous_id, loaded_[0]->id()); | 4537 ASSERT_EQ(previous_id, loaded_[0]->id()); |
4705 } | 4538 } |
4706 | 4539 |
4707 TEST_F(ExtensionServiceTest, UnpackedValidatesLocales) { | 4540 TEST_F(ExtensionServiceTest, UnpackedValidatesLocales) { |
4708 InitializeEmptyExtensionService(); | 4541 InitializeEmptyExtensionService(); |
4709 | 4542 |
4710 base::FilePath bad_locale = data_dir_.AppendASCII("unpacked"). | 4543 base::FilePath bad_locale = |
4711 AppendASCII("bad_messages_file"); | 4544 data_dir().AppendASCII("unpacked").AppendASCII("bad_messages_file"); |
4712 extensions::UnpackedInstaller::Create(service_)->Load(bad_locale); | 4545 extensions::UnpackedInstaller::Create(service())->Load(bad_locale); |
4713 base::RunLoop().RunUntilIdle(); | 4546 base::RunLoop().RunUntilIdle(); |
4714 EXPECT_EQ(1u, GetErrors().size()); | 4547 EXPECT_EQ(1u, GetErrors().size()); |
4715 base::FilePath ms_messages_file = bad_locale.AppendASCII("_locales") | 4548 base::FilePath ms_messages_file = bad_locale.AppendASCII("_locales") |
4716 .AppendASCII("ms") | 4549 .AppendASCII("ms") |
4717 .AppendASCII("messages.json"); | 4550 .AppendASCII("messages.json"); |
4718 EXPECT_THAT(base::UTF16ToUTF8(GetErrors()[0]), testing::AllOf( | 4551 EXPECT_THAT(base::UTF16ToUTF8(GetErrors()[0]), testing::AllOf( |
4719 testing::HasSubstr( | 4552 testing::HasSubstr( |
4720 base::UTF16ToUTF8(ms_messages_file.LossyDisplayName())), | 4553 base::UTF16ToUTF8(ms_messages_file.LossyDisplayName())), |
4721 testing::HasSubstr("Dictionary keys must be quoted."))); | 4554 testing::HasSubstr("Dictionary keys must be quoted."))); |
4722 ASSERT_EQ(0u, loaded_.size()); | 4555 ASSERT_EQ(0u, loaded_.size()); |
4723 } | 4556 } |
4724 | 4557 |
4725 void ExtensionServiceTest::TestExternalProvider( | 4558 void ExtensionServiceTest::TestExternalProvider( |
4726 MockExtensionProvider* provider, Manifest::Location location) { | 4559 MockExtensionProvider* provider, Manifest::Location location) { |
4727 // Verify that starting with no providers loads no extensions. | 4560 // Verify that starting with no providers loads no extensions. |
4728 service_->Init(); | 4561 service()->Init(); |
4729 ASSERT_EQ(0u, loaded_.size()); | 4562 ASSERT_EQ(0u, loaded_.size()); |
4730 | 4563 |
4731 provider->set_visit_count(0); | 4564 provider->set_visit_count(0); |
4732 | 4565 |
4733 // Register a test extension externally using the mock registry provider. | 4566 // Register a test extension externally using the mock registry provider. |
4734 base::FilePath source_path = data_dir_.AppendASCII("good.crx"); | 4567 base::FilePath source_path = data_dir().AppendASCII("good.crx"); |
4735 | 4568 |
4736 // Add the extension. | 4569 // Add the extension. |
4737 provider->UpdateOrAddExtension(good_crx, "1.0.0.0", source_path); | 4570 provider->UpdateOrAddExtension(good_crx, "1.0.0.0", source_path); |
4738 | 4571 |
4739 // Reloading extensions should find our externally registered extension | 4572 // Reloading extensions should find our externally registered extension |
4740 // and install it. | 4573 // and install it. |
4741 content::WindowedNotificationObserver observer( | 4574 content::WindowedNotificationObserver observer( |
4742 chrome::NOTIFICATION_CRX_INSTALLER_DONE, | 4575 chrome::NOTIFICATION_CRX_INSTALLER_DONE, |
4743 content::NotificationService::AllSources()); | 4576 content::NotificationService::AllSources()); |
4744 service_->CheckForExternalUpdates(); | 4577 service()->CheckForExternalUpdates(); |
4745 observer.Wait(); | 4578 observer.Wait(); |
4746 | 4579 |
4747 ASSERT_EQ(0u, GetErrors().size()); | 4580 ASSERT_EQ(0u, GetErrors().size()); |
4748 ASSERT_EQ(1u, loaded_.size()); | 4581 ASSERT_EQ(1u, loaded_.size()); |
4749 ASSERT_EQ(location, loaded_[0]->location()); | 4582 ASSERT_EQ(location, loaded_[0]->location()); |
4750 ASSERT_EQ("1.0.0.0", loaded_[0]->version()->GetString()); | 4583 ASSERT_EQ("1.0.0.0", loaded_[0]->version()->GetString()); |
4751 ValidatePrefKeyCount(1); | 4584 ValidatePrefKeyCount(1); |
4752 ValidateIntegerPref(good_crx, "state", Extension::ENABLED); | 4585 ValidateIntegerPref(good_crx, "state", Extension::ENABLED); |
4753 ValidateIntegerPref(good_crx, "location", location); | 4586 ValidateIntegerPref(good_crx, "location", location); |
4754 | 4587 |
4755 // Reload extensions without changing anything. The extension should be | 4588 // Reload extensions without changing anything. The extension should be |
4756 // loaded again. | 4589 // loaded again. |
4757 loaded_.clear(); | 4590 loaded_.clear(); |
4758 service_->ReloadExtensionsForTest(); | 4591 service()->ReloadExtensionsForTest(); |
4759 base::RunLoop().RunUntilIdle(); | 4592 base::RunLoop().RunUntilIdle(); |
4760 ASSERT_EQ(0u, GetErrors().size()); | 4593 ASSERT_EQ(0u, GetErrors().size()); |
4761 ASSERT_EQ(1u, loaded_.size()); | 4594 ASSERT_EQ(1u, loaded_.size()); |
4762 ValidatePrefKeyCount(1); | 4595 ValidatePrefKeyCount(1); |
4763 ValidateIntegerPref(good_crx, "state", Extension::ENABLED); | 4596 ValidateIntegerPref(good_crx, "state", Extension::ENABLED); |
4764 ValidateIntegerPref(good_crx, "location", location); | 4597 ValidateIntegerPref(good_crx, "location", location); |
4765 | 4598 |
4766 // Now update the extension with a new version. We should get upgraded. | 4599 // Now update the extension with a new version. We should get upgraded. |
4767 source_path = source_path.DirName().AppendASCII("good2.crx"); | 4600 source_path = source_path.DirName().AppendASCII("good2.crx"); |
4768 provider->UpdateOrAddExtension(good_crx, "1.0.0.1", source_path); | 4601 provider->UpdateOrAddExtension(good_crx, "1.0.0.1", source_path); |
4769 | 4602 |
4770 loaded_.clear(); | 4603 loaded_.clear(); |
4771 content::WindowedNotificationObserver observer_2( | 4604 content::WindowedNotificationObserver observer_2( |
4772 chrome::NOTIFICATION_CRX_INSTALLER_DONE, | 4605 chrome::NOTIFICATION_CRX_INSTALLER_DONE, |
4773 content::NotificationService::AllSources()); | 4606 content::NotificationService::AllSources()); |
4774 service_->CheckForExternalUpdates(); | 4607 service()->CheckForExternalUpdates(); |
4775 observer_2.Wait(); | 4608 observer_2.Wait(); |
4776 ASSERT_EQ(0u, GetErrors().size()); | 4609 ASSERT_EQ(0u, GetErrors().size()); |
4777 ASSERT_EQ(1u, loaded_.size()); | 4610 ASSERT_EQ(1u, loaded_.size()); |
4778 ASSERT_EQ("1.0.0.1", loaded_[0]->version()->GetString()); | 4611 ASSERT_EQ("1.0.0.1", loaded_[0]->version()->GetString()); |
4779 ValidatePrefKeyCount(1); | 4612 ValidatePrefKeyCount(1); |
4780 ValidateIntegerPref(good_crx, "state", Extension::ENABLED); | 4613 ValidateIntegerPref(good_crx, "state", Extension::ENABLED); |
4781 ValidateIntegerPref(good_crx, "location", location); | 4614 ValidateIntegerPref(good_crx, "location", location); |
4782 | 4615 |
4783 // Uninstall the extension and reload. Nothing should happen because the | 4616 // Uninstall the extension and reload. Nothing should happen because the |
4784 // preference should prevent us from reinstalling. | 4617 // preference should prevent us from reinstalling. |
4785 std::string id = loaded_[0]->id(); | 4618 std::string id = loaded_[0]->id(); |
4786 bool no_uninstall = | 4619 bool no_uninstall = |
4787 management_policy_->MustRemainEnabled(loaded_[0].get(), NULL); | 4620 GetManagementPolicy()->MustRemainEnabled(loaded_[0].get(), NULL); |
4788 service_->UninstallExtension(id, false, NULL); | 4621 service()->UninstallExtension(id, false, NULL); |
4789 base::RunLoop().RunUntilIdle(); | 4622 base::RunLoop().RunUntilIdle(); |
4790 | 4623 |
4791 base::FilePath install_path = extensions_install_dir_.AppendASCII(id); | 4624 base::FilePath install_path = extensions_install_dir().AppendASCII(id); |
4792 if (no_uninstall) { | 4625 if (no_uninstall) { |
4793 // Policy controlled extensions should not have been touched by uninstall. | 4626 // Policy controlled extensions should not have been touched by uninstall. |
4794 ASSERT_TRUE(base::PathExists(install_path)); | 4627 ASSERT_TRUE(base::PathExists(install_path)); |
4795 } else { | 4628 } else { |
4796 // The extension should also be gone from the install directory. | 4629 // The extension should also be gone from the install directory. |
4797 ASSERT_FALSE(base::PathExists(install_path)); | 4630 ASSERT_FALSE(base::PathExists(install_path)); |
4798 loaded_.clear(); | 4631 loaded_.clear(); |
4799 service_->CheckForExternalUpdates(); | 4632 service()->CheckForExternalUpdates(); |
4800 base::RunLoop().RunUntilIdle(); | 4633 base::RunLoop().RunUntilIdle(); |
4801 ASSERT_EQ(0u, loaded_.size()); | 4634 ASSERT_EQ(0u, loaded_.size()); |
4802 ValidatePrefKeyCount(1); | 4635 ValidatePrefKeyCount(1); |
4803 ValidateIntegerPref(good_crx, "state", | 4636 ValidateIntegerPref(good_crx, "state", |
4804 Extension::EXTERNAL_EXTENSION_UNINSTALLED); | 4637 Extension::EXTERNAL_EXTENSION_UNINSTALLED); |
4805 ValidateIntegerPref(good_crx, "location", location); | 4638 ValidateIntegerPref(good_crx, "location", location); |
4806 | 4639 |
4807 // Now clear the preference and reinstall. | 4640 // Now clear the preference and reinstall. |
4808 SetPrefInteg(good_crx, "state", Extension::ENABLED); | 4641 SetPrefInteg(good_crx, "state", Extension::ENABLED); |
4809 | 4642 |
4810 loaded_.clear(); | 4643 loaded_.clear(); |
4811 content::WindowedNotificationObserver observer( | 4644 content::WindowedNotificationObserver observer( |
4812 chrome::NOTIFICATION_CRX_INSTALLER_DONE, | 4645 chrome::NOTIFICATION_CRX_INSTALLER_DONE, |
4813 content::NotificationService::AllSources()); | 4646 content::NotificationService::AllSources()); |
4814 service_->CheckForExternalUpdates(); | 4647 service()->CheckForExternalUpdates(); |
4815 observer.Wait(); | 4648 observer.Wait(); |
4816 ASSERT_EQ(1u, loaded_.size()); | 4649 ASSERT_EQ(1u, loaded_.size()); |
4817 } | 4650 } |
4818 ValidatePrefKeyCount(1); | 4651 ValidatePrefKeyCount(1); |
4819 ValidateIntegerPref(good_crx, "state", Extension::ENABLED); | 4652 ValidateIntegerPref(good_crx, "state", Extension::ENABLED); |
4820 ValidateIntegerPref(good_crx, "location", location); | 4653 ValidateIntegerPref(good_crx, "location", location); |
4821 | 4654 |
4822 if (management_policy_->MustRemainEnabled(loaded_[0].get(), NULL)) { | 4655 if (GetManagementPolicy()->MustRemainEnabled(loaded_[0].get(), NULL)) { |
4823 EXPECT_EQ(2, provider->visit_count()); | 4656 EXPECT_EQ(2, provider->visit_count()); |
4824 } else { | 4657 } else { |
4825 // Now test an externally triggered uninstall (deleting the registry key or | 4658 // Now test an externally triggered uninstall (deleting the registry key or |
4826 // the pref entry). | 4659 // the pref entry). |
4827 provider->RemoveExtension(good_crx); | 4660 provider->RemoveExtension(good_crx); |
4828 | 4661 |
4829 loaded_.clear(); | 4662 loaded_.clear(); |
4830 service_->OnExternalProviderReady(provider); | 4663 service()->OnExternalProviderReady(provider); |
4831 base::RunLoop().RunUntilIdle(); | 4664 base::RunLoop().RunUntilIdle(); |
4832 ASSERT_EQ(0u, loaded_.size()); | 4665 ASSERT_EQ(0u, loaded_.size()); |
4833 ValidatePrefKeyCount(0); | 4666 ValidatePrefKeyCount(0); |
4834 | 4667 |
4835 // The extension should also be gone from the install directory. | 4668 // The extension should also be gone from the install directory. |
4836 ASSERT_FALSE(base::PathExists(install_path)); | 4669 ASSERT_FALSE(base::PathExists(install_path)); |
4837 | 4670 |
4838 // Now test the case where user uninstalls and then the extension is removed | 4671 // Now test the case where user uninstalls and then the extension is removed |
4839 // from the external provider. | 4672 // from the external provider. |
4840 content::WindowedNotificationObserver observer( | 4673 content::WindowedNotificationObserver observer( |
4841 chrome::NOTIFICATION_CRX_INSTALLER_DONE, | 4674 chrome::NOTIFICATION_CRX_INSTALLER_DONE, |
4842 content::NotificationService::AllSources()); | 4675 content::NotificationService::AllSources()); |
4843 provider->UpdateOrAddExtension(good_crx, "1.0.0.1", source_path); | 4676 provider->UpdateOrAddExtension(good_crx, "1.0.0.1", source_path); |
4844 service_->CheckForExternalUpdates(); | 4677 service()->CheckForExternalUpdates(); |
4845 observer.Wait(); | 4678 observer.Wait(); |
4846 | 4679 |
4847 ASSERT_EQ(1u, loaded_.size()); | 4680 ASSERT_EQ(1u, loaded_.size()); |
4848 ASSERT_EQ(0u, GetErrors().size()); | 4681 ASSERT_EQ(0u, GetErrors().size()); |
4849 | 4682 |
4850 // User uninstalls. | 4683 // User uninstalls. |
4851 loaded_.clear(); | 4684 loaded_.clear(); |
4852 service_->UninstallExtension(id, false, NULL); | 4685 service()->UninstallExtension(id, false, NULL); |
4853 base::RunLoop().RunUntilIdle(); | 4686 base::RunLoop().RunUntilIdle(); |
4854 ASSERT_EQ(0u, loaded_.size()); | 4687 ASSERT_EQ(0u, loaded_.size()); |
4855 | 4688 |
4856 // Then remove the extension from the extension provider. | 4689 // Then remove the extension from the extension provider. |
4857 provider->RemoveExtension(good_crx); | 4690 provider->RemoveExtension(good_crx); |
4858 | 4691 |
4859 // Should still be at 0. | 4692 // Should still be at 0. |
4860 loaded_.clear(); | 4693 loaded_.clear(); |
4861 extensions::InstalledLoader(service_).LoadAllExtensions(); | 4694 extensions::InstalledLoader(service()).LoadAllExtensions(); |
4862 base::RunLoop().RunUntilIdle(); | 4695 base::RunLoop().RunUntilIdle(); |
4863 ASSERT_EQ(0u, loaded_.size()); | 4696 ASSERT_EQ(0u, loaded_.size()); |
4864 ValidatePrefKeyCount(1); | 4697 ValidatePrefKeyCount(1); |
4865 | 4698 |
4866 EXPECT_EQ(5, provider->visit_count()); | 4699 EXPECT_EQ(5, provider->visit_count()); |
4867 } | 4700 } |
4868 } | 4701 } |
4869 | 4702 |
4870 // Tests the external installation feature | 4703 // Tests the external installation feature |
4871 #if defined(OS_WIN) | 4704 #if defined(OS_WIN) |
4872 TEST_F(ExtensionServiceTest, ExternalInstallRegistry) { | 4705 TEST_F(ExtensionServiceTest, ExternalInstallRegistry) { |
4873 // This should all work, even when normal extension installation is disabled. | 4706 // This should all work, even when normal extension installation is disabled. |
4874 InitializeEmptyExtensionService(); | 4707 InitializeEmptyExtensionService(); |
4875 set_extensions_enabled(false); | 4708 service()->set_extensions_enabled(false); |
4876 | 4709 |
4877 // Now add providers. Extension system takes ownership of the objects. | 4710 // Now add providers. Extension system takes ownership of the objects. |
4878 MockExtensionProvider* reg_provider = | 4711 MockExtensionProvider* reg_provider = |
4879 new MockExtensionProvider(service_, Manifest::EXTERNAL_REGISTRY); | 4712 new MockExtensionProvider(service(), Manifest::EXTERNAL_REGISTRY); |
4880 AddMockExternalProvider(reg_provider); | 4713 AddMockExternalProvider(reg_provider); |
4881 TestExternalProvider(reg_provider, Manifest::EXTERNAL_REGISTRY); | 4714 TestExternalProvider(reg_provider, Manifest::EXTERNAL_REGISTRY); |
4882 } | 4715 } |
4883 #endif | 4716 #endif |
4884 | 4717 |
4885 TEST_F(ExtensionServiceTest, ExternalInstallPref) { | 4718 TEST_F(ExtensionServiceTest, ExternalInstallPref) { |
4886 InitializeEmptyExtensionService(); | 4719 InitializeEmptyExtensionService(); |
4887 | 4720 |
4888 // Now add providers. Extension system takes ownership of the objects. | 4721 // Now add providers. Extension system takes ownership of the objects. |
4889 MockExtensionProvider* pref_provider = | 4722 MockExtensionProvider* pref_provider = |
4890 new MockExtensionProvider(service_, Manifest::EXTERNAL_PREF); | 4723 new MockExtensionProvider(service(), Manifest::EXTERNAL_PREF); |
4891 | 4724 |
4892 AddMockExternalProvider(pref_provider); | 4725 AddMockExternalProvider(pref_provider); |
4893 TestExternalProvider(pref_provider, Manifest::EXTERNAL_PREF); | 4726 TestExternalProvider(pref_provider, Manifest::EXTERNAL_PREF); |
4894 } | 4727 } |
4895 | 4728 |
4896 TEST_F(ExtensionServiceTest, ExternalInstallPrefUpdateUrl) { | 4729 TEST_F(ExtensionServiceTest, ExternalInstallPrefUpdateUrl) { |
4897 // This should all work, even when normal extension installation is disabled. | 4730 // This should all work, even when normal extension installation is disabled. |
4898 InitializeEmptyExtensionService(); | 4731 InitializeEmptyExtensionService(); |
4899 set_extensions_enabled(false); | 4732 service()->set_extensions_enabled(false); |
4900 | 4733 |
4901 // TODO(skerner): The mock provider is not a good model of a provider | 4734 // TODO(skerner): The mock provider is not a good model of a provider |
4902 // that works with update URLs, because it adds file and version info. | 4735 // that works with update URLs, because it adds file and version info. |
4903 // Extend the mock to work with update URLs. This test checks the | 4736 // Extend the mock to work with update URLs. This test checks the |
4904 // behavior that is common to all external extension visitors. The | 4737 // behavior that is common to all external extension visitors. The |
4905 // browser test ExtensionManagementTest.ExternalUrlUpdate tests that | 4738 // browser test ExtensionManagementTest.ExternalUrlUpdate tests that |
4906 // what the visitor does results in an extension being downloaded and | 4739 // what the visitor does results in an extension being downloaded and |
4907 // installed. | 4740 // installed. |
4908 MockExtensionProvider* pref_provider = | 4741 MockExtensionProvider* pref_provider = |
4909 new MockExtensionProvider(service_, | 4742 new MockExtensionProvider(service(), Manifest::EXTERNAL_PREF_DOWNLOAD); |
4910 Manifest::EXTERNAL_PREF_DOWNLOAD); | |
4911 AddMockExternalProvider(pref_provider); | 4743 AddMockExternalProvider(pref_provider); |
4912 TestExternalProvider(pref_provider, Manifest::EXTERNAL_PREF_DOWNLOAD); | 4744 TestExternalProvider(pref_provider, Manifest::EXTERNAL_PREF_DOWNLOAD); |
4913 } | 4745 } |
4914 | 4746 |
4915 TEST_F(ExtensionServiceTest, ExternalInstallPolicyUpdateUrl) { | 4747 TEST_F(ExtensionServiceTest, ExternalInstallPolicyUpdateUrl) { |
4916 // This should all work, even when normal extension installation is disabled. | 4748 // This should all work, even when normal extension installation is disabled. |
4917 InitializeEmptyExtensionService(); | 4749 InitializeEmptyExtensionService(); |
4918 set_extensions_enabled(false); | 4750 service()->set_extensions_enabled(false); |
4919 | 4751 |
4920 // TODO(skerner): The mock provider is not a good model of a provider | 4752 // TODO(skerner): The mock provider is not a good model of a provider |
4921 // that works with update URLs, because it adds file and version info. | 4753 // that works with update URLs, because it adds file and version info. |
4922 // Extend the mock to work with update URLs. This test checks the | 4754 // Extend the mock to work with update URLs. This test checks the |
4923 // behavior that is common to all external extension visitors. The | 4755 // behavior that is common to all external extension visitors. The |
4924 // browser test ExtensionManagementTest.ExternalUrlUpdate tests that | 4756 // browser test ExtensionManagementTest.ExternalUrlUpdate tests that |
4925 // what the visitor does results in an extension being downloaded and | 4757 // what the visitor does results in an extension being downloaded and |
4926 // installed. | 4758 // installed. |
4927 MockExtensionProvider* pref_provider = | 4759 MockExtensionProvider* pref_provider = |
4928 new MockExtensionProvider(service_, | 4760 new MockExtensionProvider(service(), Manifest::EXTERNAL_POLICY_DOWNLOAD); |
4929 Manifest::EXTERNAL_POLICY_DOWNLOAD); | |
4930 AddMockExternalProvider(pref_provider); | 4761 AddMockExternalProvider(pref_provider); |
4931 TestExternalProvider(pref_provider, Manifest::EXTERNAL_POLICY_DOWNLOAD); | 4762 TestExternalProvider(pref_provider, Manifest::EXTERNAL_POLICY_DOWNLOAD); |
4932 } | 4763 } |
4933 | 4764 |
4934 // Tests that external extensions get uninstalled when the external extension | 4765 // Tests that external extensions get uninstalled when the external extension |
4935 // providers can't account for them. | 4766 // providers can't account for them. |
4936 TEST_F(ExtensionServiceTest, ExternalUninstall) { | 4767 TEST_F(ExtensionServiceTest, ExternalUninstall) { |
4937 // Start the extensions service with one external extension already installed. | 4768 // Start the extensions service with one external extension already installed. |
4938 base::FilePath source_install_dir = data_dir_ | 4769 base::FilePath source_install_dir = |
4939 .AppendASCII("good") | 4770 data_dir().AppendASCII("good").AppendASCII("Extensions"); |
4940 .AppendASCII("Extensions"); | |
4941 base::FilePath pref_path = source_install_dir | 4771 base::FilePath pref_path = source_install_dir |
4942 .DirName() | 4772 .DirName() |
4943 .AppendASCII("PreferencesExternal"); | 4773 .AppendASCII("PreferencesExternal"); |
4944 | 4774 |
4945 // This initializes the extensions service with no ExternalProviders. | 4775 // This initializes the extensions service with no ExternalProviders. |
4946 InitializeInstalledExtensionService(pref_path, source_install_dir); | 4776 InitializeInstalledExtensionService(pref_path, source_install_dir); |
4947 set_extensions_enabled(false); | 4777 service()->set_extensions_enabled(false); |
4948 | 4778 |
4949 service_->Init(); | 4779 service()->Init(); |
4950 | 4780 |
4951 ASSERT_EQ(0u, GetErrors().size()); | 4781 ASSERT_EQ(0u, GetErrors().size()); |
4952 ASSERT_EQ(0u, loaded_.size()); | 4782 ASSERT_EQ(0u, loaded_.size()); |
4953 | 4783 |
4954 // Verify that it's not the disabled extensions flag causing it not to load. | 4784 // Verify that it's not the disabled extensions flag causing it not to load. |
4955 set_extensions_enabled(true); | 4785 service()->set_extensions_enabled(true); |
4956 service_->ReloadExtensionsForTest(); | 4786 service()->ReloadExtensionsForTest(); |
4957 base::RunLoop().RunUntilIdle(); | 4787 base::RunLoop().RunUntilIdle(); |
4958 | 4788 |
4959 ASSERT_EQ(0u, GetErrors().size()); | 4789 ASSERT_EQ(0u, GetErrors().size()); |
4960 ASSERT_EQ(0u, loaded_.size()); | 4790 ASSERT_EQ(0u, loaded_.size()); |
4961 } | 4791 } |
4962 | 4792 |
4963 // Test that running multiple update checks simultaneously does not | 4793 // Test that running multiple update checks simultaneously does not |
4964 // keep the update from succeeding. | 4794 // keep the update from succeeding. |
4965 TEST_F(ExtensionServiceTest, MultipleExternalUpdateCheck) { | 4795 TEST_F(ExtensionServiceTest, MultipleExternalUpdateCheck) { |
4966 InitializeEmptyExtensionService(); | 4796 InitializeEmptyExtensionService(); |
4967 | 4797 |
4968 MockExtensionProvider* provider = | 4798 MockExtensionProvider* provider = |
4969 new MockExtensionProvider(service_, Manifest::EXTERNAL_PREF); | 4799 new MockExtensionProvider(service(), Manifest::EXTERNAL_PREF); |
4970 AddMockExternalProvider(provider); | 4800 AddMockExternalProvider(provider); |
4971 | 4801 |
4972 // Verify that starting with no providers loads no extensions. | 4802 // Verify that starting with no providers loads no extensions. |
4973 service_->Init(); | 4803 service()->Init(); |
4974 ASSERT_EQ(0u, loaded_.size()); | 4804 ASSERT_EQ(0u, loaded_.size()); |
4975 | 4805 |
4976 // Start two checks for updates. | 4806 // Start two checks for updates. |
4977 provider->set_visit_count(0); | 4807 provider->set_visit_count(0); |
4978 service_->CheckForExternalUpdates(); | 4808 service()->CheckForExternalUpdates(); |
4979 service_->CheckForExternalUpdates(); | 4809 service()->CheckForExternalUpdates(); |
4980 base::RunLoop().RunUntilIdle(); | 4810 base::RunLoop().RunUntilIdle(); |
4981 | 4811 |
4982 // Two calls should cause two checks for external extensions. | 4812 // Two calls should cause two checks for external extensions. |
4983 EXPECT_EQ(2, provider->visit_count()); | 4813 EXPECT_EQ(2, provider->visit_count()); |
4984 EXPECT_EQ(0u, GetErrors().size()); | 4814 EXPECT_EQ(0u, GetErrors().size()); |
4985 EXPECT_EQ(0u, loaded_.size()); | 4815 EXPECT_EQ(0u, loaded_.size()); |
4986 | 4816 |
4987 // Register a test extension externally using the mock registry provider. | 4817 // Register a test extension externally using the mock registry provider. |
4988 base::FilePath source_path = data_dir_.AppendASCII("good.crx"); | 4818 base::FilePath source_path = data_dir().AppendASCII("good.crx"); |
4989 provider->UpdateOrAddExtension(good_crx, "1.0.0.0", source_path); | 4819 provider->UpdateOrAddExtension(good_crx, "1.0.0.0", source_path); |
4990 | 4820 |
4991 // Two checks for external updates should find the extension, and install it | 4821 // Two checks for external updates should find the extension, and install it |
4992 // once. | 4822 // once. |
4993 content::WindowedNotificationObserver observer( | 4823 content::WindowedNotificationObserver observer( |
4994 chrome::NOTIFICATION_CRX_INSTALLER_DONE, | 4824 chrome::NOTIFICATION_CRX_INSTALLER_DONE, |
4995 content::NotificationService::AllSources()); | 4825 content::NotificationService::AllSources()); |
4996 provider->set_visit_count(0); | 4826 provider->set_visit_count(0); |
4997 service_->CheckForExternalUpdates(); | 4827 service()->CheckForExternalUpdates(); |
4998 service_->CheckForExternalUpdates(); | 4828 service()->CheckForExternalUpdates(); |
4999 observer.Wait(); | 4829 observer.Wait(); |
5000 EXPECT_EQ(2, provider->visit_count()); | 4830 EXPECT_EQ(2, provider->visit_count()); |
5001 ASSERT_EQ(0u, GetErrors().size()); | 4831 ASSERT_EQ(0u, GetErrors().size()); |
5002 ASSERT_EQ(1u, loaded_.size()); | 4832 ASSERT_EQ(1u, loaded_.size()); |
5003 ASSERT_EQ(Manifest::EXTERNAL_PREF, loaded_[0]->location()); | 4833 ASSERT_EQ(Manifest::EXTERNAL_PREF, loaded_[0]->location()); |
5004 ASSERT_EQ("1.0.0.0", loaded_[0]->version()->GetString()); | 4834 ASSERT_EQ("1.0.0.0", loaded_[0]->version()->GetString()); |
5005 ValidatePrefKeyCount(1); | 4835 ValidatePrefKeyCount(1); |
5006 ValidateIntegerPref(good_crx, "state", Extension::ENABLED); | 4836 ValidateIntegerPref(good_crx, "state", Extension::ENABLED); |
5007 ValidateIntegerPref(good_crx, "location", Manifest::EXTERNAL_PREF); | 4837 ValidateIntegerPref(good_crx, "location", Manifest::EXTERNAL_PREF); |
5008 | 4838 |
5009 provider->RemoveExtension(good_crx); | 4839 provider->RemoveExtension(good_crx); |
5010 provider->set_visit_count(0); | 4840 provider->set_visit_count(0); |
5011 service_->CheckForExternalUpdates(); | 4841 service()->CheckForExternalUpdates(); |
5012 service_->CheckForExternalUpdates(); | 4842 service()->CheckForExternalUpdates(); |
5013 base::RunLoop().RunUntilIdle(); | 4843 base::RunLoop().RunUntilIdle(); |
5014 | 4844 |
5015 // Two calls should cause two checks for external extensions. | 4845 // Two calls should cause two checks for external extensions. |
5016 // Because the external source no longer includes good_crx, | 4846 // Because the external source no longer includes good_crx, |
5017 // good_crx will be uninstalled. So, expect that no extensions | 4847 // good_crx will be uninstalled. So, expect that no extensions |
5018 // are loaded. | 4848 // are loaded. |
5019 EXPECT_EQ(2, provider->visit_count()); | 4849 EXPECT_EQ(2, provider->visit_count()); |
5020 EXPECT_EQ(0u, GetErrors().size()); | 4850 EXPECT_EQ(0u, GetErrors().size()); |
5021 EXPECT_EQ(0u, loaded_.size()); | 4851 EXPECT_EQ(0u, loaded_.size()); |
5022 } | 4852 } |
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5205 "}"; | 5035 "}"; |
5206 EXPECT_EQ(1, was_installed_by_eom_visitor.Visit(json_data)); | 5036 EXPECT_EQ(1, was_installed_by_eom_visitor.Visit(json_data)); |
5207 } | 5037 } |
5208 | 5038 |
5209 // Test loading good extensions from the profile directory. | 5039 // Test loading good extensions from the profile directory. |
5210 TEST_F(ExtensionServiceTest, LoadAndRelocalizeExtensions) { | 5040 TEST_F(ExtensionServiceTest, LoadAndRelocalizeExtensions) { |
5211 // Ensure we're testing in "en" and leave global state untouched. | 5041 // Ensure we're testing in "en" and leave global state untouched. |
5212 extension_l10n_util::ScopedLocaleForTest testLocale("en"); | 5042 extension_l10n_util::ScopedLocaleForTest testLocale("en"); |
5213 | 5043 |
5214 // Initialize the test dir with a good Preferences/extensions. | 5044 // Initialize the test dir with a good Preferences/extensions. |
5215 base::FilePath source_install_dir = data_dir_ | 5045 base::FilePath source_install_dir = data_dir().AppendASCII("l10n"); |
5216 .AppendASCII("l10n"); | |
5217 base::FilePath pref_path = | 5046 base::FilePath pref_path = |
5218 source_install_dir.Append(chrome::kPreferencesFilename); | 5047 source_install_dir.Append(chrome::kPreferencesFilename); |
5219 InitializeInstalledExtensionService(pref_path, source_install_dir); | 5048 InitializeInstalledExtensionService(pref_path, source_install_dir); |
5220 | 5049 |
5221 service_->Init(); | 5050 service()->Init(); |
5222 | 5051 |
5223 ASSERT_EQ(3u, loaded_.size()); | 5052 ASSERT_EQ(3u, loaded_.size()); |
5224 | 5053 |
5225 // This was equal to "sr" on load. | 5054 // This was equal to "sr" on load. |
5226 ValidateStringPref(loaded_[0]->id(), keys::kCurrentLocale, "en"); | 5055 ValidateStringPref(loaded_[0]->id(), keys::kCurrentLocale, "en"); |
5227 | 5056 |
5228 // These are untouched by re-localization. | 5057 // These are untouched by re-localization. |
5229 ValidateStringPref(loaded_[1]->id(), keys::kCurrentLocale, "en"); | 5058 ValidateStringPref(loaded_[1]->id(), keys::kCurrentLocale, "en"); |
5230 EXPECT_FALSE(IsPrefExist(loaded_[1]->id(), keys::kCurrentLocale)); | 5059 EXPECT_FALSE(IsPrefExist(loaded_[1]->id(), keys::kCurrentLocale)); |
5231 | 5060 |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5356 profile.reset(); | 5185 profile.reset(); |
5357 service = NULL; | 5186 service = NULL; |
5358 // Execute any pending deletion tasks. | 5187 // Execute any pending deletion tasks. |
5359 base::RunLoop().RunUntilIdle(); | 5188 base::RunLoop().RunUntilIdle(); |
5360 } | 5189 } |
5361 | 5190 |
5362 // Test loading extensions that require limited and unlimited storage quotas. | 5191 // Test loading extensions that require limited and unlimited storage quotas. |
5363 TEST_F(ExtensionServiceTest, StorageQuota) { | 5192 TEST_F(ExtensionServiceTest, StorageQuota) { |
5364 InitializeEmptyExtensionService(); | 5193 InitializeEmptyExtensionService(); |
5365 | 5194 |
5366 base::FilePath extensions_path = data_dir_ | 5195 base::FilePath extensions_path = data_dir().AppendASCII("storage_quota"); |
5367 .AppendASCII("storage_quota"); | |
5368 | 5196 |
5369 base::FilePath limited_quota_ext = | 5197 base::FilePath limited_quota_ext = |
5370 extensions_path.AppendASCII("limited_quota") | 5198 extensions_path.AppendASCII("limited_quota") |
5371 .AppendASCII("1.0"); | 5199 .AppendASCII("1.0"); |
5372 | 5200 |
5373 // The old permission name for unlimited quota was "unlimited_storage", but | 5201 // The old permission name for unlimited quota was "unlimited_storage", but |
5374 // we changed it to "unlimitedStorage". This tests both versions. | 5202 // we changed it to "unlimitedStorage". This tests both versions. |
5375 base::FilePath unlimited_quota_ext = | 5203 base::FilePath unlimited_quota_ext = |
5376 extensions_path.AppendASCII("unlimited_quota") | 5204 extensions_path.AppendASCII("unlimited_quota") |
5377 .AppendASCII("1.0"); | 5205 .AppendASCII("1.0"); |
5378 base::FilePath unlimited_quota_ext2 = | 5206 base::FilePath unlimited_quota_ext2 = |
5379 extensions_path.AppendASCII("unlimited_quota") | 5207 extensions_path.AppendASCII("unlimited_quota") |
5380 .AppendASCII("2.0"); | 5208 .AppendASCII("2.0"); |
5381 extensions::UnpackedInstaller::Create(service_)->Load(limited_quota_ext); | 5209 extensions::UnpackedInstaller::Create(service())->Load(limited_quota_ext); |
5382 extensions::UnpackedInstaller::Create(service_)->Load(unlimited_quota_ext); | 5210 extensions::UnpackedInstaller::Create(service())->Load(unlimited_quota_ext); |
5383 extensions::UnpackedInstaller::Create(service_)->Load(unlimited_quota_ext2); | 5211 extensions::UnpackedInstaller::Create(service())->Load(unlimited_quota_ext2); |
5384 base::RunLoop().RunUntilIdle(); | 5212 base::RunLoop().RunUntilIdle(); |
5385 | 5213 |
5386 ASSERT_EQ(3u, loaded_.size()); | 5214 ASSERT_EQ(3u, loaded_.size()); |
5387 EXPECT_TRUE(profile_.get()); | 5215 EXPECT_TRUE(profile()); |
5388 EXPECT_FALSE(profile_->IsOffTheRecord()); | 5216 EXPECT_FALSE(profile()->IsOffTheRecord()); |
5389 EXPECT_FALSE(profile_->GetExtensionSpecialStoragePolicy()->IsStorageUnlimited( | 5217 EXPECT_FALSE( |
5390 loaded_[0]->url())); | 5218 profile()->GetExtensionSpecialStoragePolicy()->IsStorageUnlimited( |
5391 EXPECT_TRUE(profile_->GetExtensionSpecialStoragePolicy()->IsStorageUnlimited( | 5219 loaded_[0]->url())); |
| 5220 EXPECT_TRUE(profile()->GetExtensionSpecialStoragePolicy()->IsStorageUnlimited( |
5392 loaded_[1]->url())); | 5221 loaded_[1]->url())); |
5393 EXPECT_TRUE(profile_->GetExtensionSpecialStoragePolicy()->IsStorageUnlimited( | 5222 EXPECT_TRUE(profile()->GetExtensionSpecialStoragePolicy()->IsStorageUnlimited( |
5394 loaded_[2]->url())); | 5223 loaded_[2]->url())); |
5395 } | 5224 } |
5396 | 5225 |
5397 // Tests ComponentLoader::Add(). | 5226 // Tests ComponentLoader::Add(). |
5398 TEST_F(ExtensionServiceTest, ComponentExtensions) { | 5227 TEST_F(ExtensionServiceTest, ComponentExtensions) { |
5399 InitializeEmptyExtensionService(); | 5228 InitializeEmptyExtensionService(); |
5400 | 5229 |
5401 // Component extensions should work even when extensions are disabled. | 5230 // Component extensions should work even when extensions are disabled. |
5402 set_extensions_enabled(false); | 5231 service()->set_extensions_enabled(false); |
5403 | 5232 |
5404 base::FilePath path = data_dir_ | 5233 base::FilePath path = data_dir() |
5405 .AppendASCII("good") | 5234 .AppendASCII("good") |
5406 .AppendASCII("Extensions") | 5235 .AppendASCII("Extensions") |
5407 .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj") | 5236 .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj") |
5408 .AppendASCII("1.0.0.0"); | 5237 .AppendASCII("1.0.0.0"); |
5409 | 5238 |
5410 std::string manifest; | 5239 std::string manifest; |
5411 ASSERT_TRUE(base::ReadFileToString( | 5240 ASSERT_TRUE(base::ReadFileToString( |
5412 path.Append(extensions::kManifestFilename), &manifest)); | 5241 path.Append(extensions::kManifestFilename), &manifest)); |
5413 | 5242 |
5414 service_->component_loader()->Add(manifest, path); | 5243 service()->component_loader()->Add(manifest, path); |
5415 service_->Init(); | 5244 service()->Init(); |
5416 | 5245 |
5417 // Note that we do not pump messages -- the extension should be loaded | 5246 // Note that we do not pump messages -- the extension should be loaded |
5418 // immediately. | 5247 // immediately. |
5419 | 5248 |
5420 EXPECT_EQ(0u, GetErrors().size()); | 5249 EXPECT_EQ(0u, GetErrors().size()); |
5421 ASSERT_EQ(1u, loaded_.size()); | 5250 ASSERT_EQ(1u, loaded_.size()); |
5422 EXPECT_EQ(Manifest::COMPONENT, loaded_[0]->location()); | 5251 EXPECT_EQ(Manifest::COMPONENT, loaded_[0]->location()); |
5423 EXPECT_EQ(1u, registry_->enabled_extensions().size()); | 5252 EXPECT_EQ(1u, registry()->enabled_extensions().size()); |
5424 | 5253 |
5425 // Component extensions get a prefs entry on first install. | 5254 // Component extensions get a prefs entry on first install. |
5426 ValidatePrefKeyCount(1); | 5255 ValidatePrefKeyCount(1); |
5427 | 5256 |
5428 // Reload all extensions, and make sure it comes back. | 5257 // Reload all extensions, and make sure it comes back. |
5429 std::string extension_id = (*registry_->enabled_extensions().begin())->id(); | 5258 std::string extension_id = (*registry()->enabled_extensions().begin())->id(); |
5430 loaded_.clear(); | 5259 loaded_.clear(); |
5431 service_->ReloadExtensionsForTest(); | 5260 service()->ReloadExtensionsForTest(); |
5432 ASSERT_EQ(1u, registry_->enabled_extensions().size()); | 5261 ASSERT_EQ(1u, registry()->enabled_extensions().size()); |
5433 EXPECT_EQ(extension_id, (*registry_->enabled_extensions().begin())->id()); | 5262 EXPECT_EQ(extension_id, (*registry()->enabled_extensions().begin())->id()); |
5434 } | 5263 } |
5435 | 5264 |
5436 TEST_F(ExtensionServiceTest, DeferredSyncStartupPreInstalledComponent) { | 5265 TEST_F(ExtensionServiceTest, DeferredSyncStartupPreInstalledComponent) { |
5437 InitializeEmptyExtensionService(); | 5266 InitializeEmptyExtensionService(); |
5438 InitializeExtensionSyncService(); | 5267 InitializeExtensionSyncService(); |
5439 | 5268 |
5440 bool flare_was_called = false; | 5269 bool flare_was_called = false; |
5441 syncer::ModelType triggered_type(syncer::UNSPECIFIED); | 5270 syncer::ModelType triggered_type(syncer::UNSPECIFIED); |
5442 base::WeakPtrFactory<ExtensionServiceTest> factory(this); | 5271 base::WeakPtrFactory<ExtensionServiceTest> factory(this); |
5443 extension_sync_service_->SetSyncStartFlare( | 5272 extension_sync_service()->SetSyncStartFlare( |
5444 base::Bind(&ExtensionServiceTest::MockSyncStartFlare, | 5273 base::Bind(&ExtensionServiceTest::MockSyncStartFlare, |
5445 factory.GetWeakPtr(), | 5274 factory.GetWeakPtr(), |
5446 &flare_was_called, // Safe due to WeakPtrFactory scope. | 5275 &flare_was_called, // Safe due to WeakPtrFactory scope. |
5447 &triggered_type)); // Safe due to WeakPtrFactory scope. | 5276 &triggered_type)); // Safe due to WeakPtrFactory scope. |
5448 | 5277 |
5449 // Install a component extension. | 5278 // Install a component extension. |
5450 std::string manifest; | 5279 std::string manifest; |
5451 ASSERT_TRUE(base::ReadFileToString( | 5280 ASSERT_TRUE(base::ReadFileToString( |
5452 good0_path().Append(extensions::kManifestFilename), &manifest)); | 5281 good0_path().Append(extensions::kManifestFilename), &manifest)); |
5453 service_->component_loader()->Add(manifest, good0_path()); | 5282 service()->component_loader()->Add(manifest, good0_path()); |
5454 ASSERT_FALSE(service_->is_ready()); | 5283 ASSERT_FALSE(service()->is_ready()); |
5455 service_->Init(); | 5284 service()->Init(); |
5456 ASSERT_TRUE(service_->is_ready()); | 5285 ASSERT_TRUE(service()->is_ready()); |
5457 | 5286 |
5458 // Extensions added before service is_ready() don't trigger sync startup. | 5287 // Extensions added before service is_ready() don't trigger sync startup. |
5459 EXPECT_FALSE(flare_was_called); | 5288 EXPECT_FALSE(flare_was_called); |
5460 ASSERT_EQ(syncer::UNSPECIFIED, triggered_type); | 5289 ASSERT_EQ(syncer::UNSPECIFIED, triggered_type); |
5461 } | 5290 } |
5462 | 5291 |
5463 TEST_F(ExtensionServiceTest, DeferredSyncStartupPreInstalledNormal) { | 5292 TEST_F(ExtensionServiceTest, DeferredSyncStartupPreInstalledNormal) { |
5464 InitializeGoodInstalledExtensionService(); | 5293 InitializeGoodInstalledExtensionService(); |
5465 InitializeExtensionSyncService(); | 5294 InitializeExtensionSyncService(); |
5466 | 5295 |
5467 bool flare_was_called = false; | 5296 bool flare_was_called = false; |
5468 syncer::ModelType triggered_type(syncer::UNSPECIFIED); | 5297 syncer::ModelType triggered_type(syncer::UNSPECIFIED); |
5469 base::WeakPtrFactory<ExtensionServiceTest> factory(this); | 5298 base::WeakPtrFactory<ExtensionServiceTest> factory(this); |
5470 extension_sync_service_->SetSyncStartFlare( | 5299 extension_sync_service()->SetSyncStartFlare( |
5471 base::Bind(&ExtensionServiceTest::MockSyncStartFlare, | 5300 base::Bind(&ExtensionServiceTest::MockSyncStartFlare, |
5472 factory.GetWeakPtr(), | 5301 factory.GetWeakPtr(), |
5473 &flare_was_called, // Safe due to WeakPtrFactory scope. | 5302 &flare_was_called, // Safe due to WeakPtrFactory scope. |
5474 &triggered_type)); // Safe due to WeakPtrFactory scope. | 5303 &triggered_type)); // Safe due to WeakPtrFactory scope. |
5475 | 5304 |
5476 ASSERT_FALSE(service_->is_ready()); | 5305 ASSERT_FALSE(service()->is_ready()); |
5477 service_->Init(); | 5306 service()->Init(); |
5478 ASSERT_EQ(3u, loaded_.size()); | 5307 ASSERT_EQ(3u, loaded_.size()); |
5479 ASSERT_TRUE(service_->is_ready()); | 5308 ASSERT_TRUE(service()->is_ready()); |
5480 | 5309 |
5481 // Extensions added before service is_ready() don't trigger sync startup. | 5310 // Extensions added before service is_ready() don't trigger sync startup. |
5482 EXPECT_FALSE(flare_was_called); | 5311 EXPECT_FALSE(flare_was_called); |
5483 ASSERT_EQ(syncer::UNSPECIFIED, triggered_type); | 5312 ASSERT_EQ(syncer::UNSPECIFIED, triggered_type); |
5484 } | 5313 } |
5485 | 5314 |
5486 TEST_F(ExtensionServiceTest, DeferredSyncStartupOnInstall) { | 5315 TEST_F(ExtensionServiceTest, DeferredSyncStartupOnInstall) { |
5487 InitializeEmptyExtensionService(); | 5316 InitializeEmptyExtensionService(); |
5488 InitializeExtensionSyncService(); | 5317 InitializeExtensionSyncService(); |
5489 service_->Init(); | 5318 service()->Init(); |
5490 ASSERT_TRUE(service_->is_ready()); | 5319 ASSERT_TRUE(service()->is_ready()); |
5491 | 5320 |
5492 bool flare_was_called = false; | 5321 bool flare_was_called = false; |
5493 syncer::ModelType triggered_type(syncer::UNSPECIFIED); | 5322 syncer::ModelType triggered_type(syncer::UNSPECIFIED); |
5494 base::WeakPtrFactory<ExtensionServiceTest> factory(this); | 5323 base::WeakPtrFactory<ExtensionServiceTest> factory(this); |
5495 extension_sync_service_->SetSyncStartFlare( | 5324 extension_sync_service()->SetSyncStartFlare( |
5496 base::Bind(&ExtensionServiceTest::MockSyncStartFlare, | 5325 base::Bind(&ExtensionServiceTest::MockSyncStartFlare, |
5497 factory.GetWeakPtr(), | 5326 factory.GetWeakPtr(), |
5498 &flare_was_called, // Safe due to WeakPtrFactory scope. | 5327 &flare_was_called, // Safe due to WeakPtrFactory scope. |
5499 &triggered_type)); // Safe due to WeakPtrFactory scope. | 5328 &triggered_type)); // Safe due to WeakPtrFactory scope. |
5500 | 5329 |
5501 base::FilePath path = data_dir_.AppendASCII("good.crx"); | 5330 base::FilePath path = data_dir().AppendASCII("good.crx"); |
5502 InstallCRX(path, INSTALL_NEW); | 5331 InstallCRX(path, INSTALL_NEW); |
5503 | 5332 |
5504 EXPECT_TRUE(flare_was_called); | 5333 EXPECT_TRUE(flare_was_called); |
5505 EXPECT_EQ(syncer::EXTENSIONS, triggered_type); | 5334 EXPECT_EQ(syncer::EXTENSIONS, triggered_type); |
5506 | 5335 |
5507 // Reset. | 5336 // Reset. |
5508 flare_was_called = false; | 5337 flare_was_called = false; |
5509 triggered_type = syncer::UNSPECIFIED; | 5338 triggered_type = syncer::UNSPECIFIED; |
5510 | 5339 |
5511 // Once sync starts, flare should no longer be invoked. | 5340 // Once sync starts, flare should no longer be invoked. |
5512 extension_sync_service_->MergeDataAndStartSyncing( | 5341 extension_sync_service()->MergeDataAndStartSyncing( |
5513 syncer::EXTENSIONS, | 5342 syncer::EXTENSIONS, |
5514 syncer::SyncDataList(), | 5343 syncer::SyncDataList(), |
5515 scoped_ptr<syncer::SyncChangeProcessor>( | 5344 scoped_ptr<syncer::SyncChangeProcessor>( |
5516 new syncer::FakeSyncChangeProcessor), | 5345 new syncer::FakeSyncChangeProcessor), |
5517 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); | 5346 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); |
5518 path = data_dir_.AppendASCII("page_action.crx"); | 5347 path = data_dir().AppendASCII("page_action.crx"); |
5519 InstallCRX(path, INSTALL_NEW); | 5348 InstallCRX(path, INSTALL_NEW); |
5520 EXPECT_FALSE(flare_was_called); | 5349 EXPECT_FALSE(flare_was_called); |
5521 ASSERT_EQ(syncer::UNSPECIFIED, triggered_type); | 5350 ASSERT_EQ(syncer::UNSPECIFIED, triggered_type); |
5522 } | 5351 } |
5523 | 5352 |
5524 TEST_F(ExtensionServiceTest, DisableExtensionFromSync) { | 5353 TEST_F(ExtensionServiceTest, DisableExtensionFromSync) { |
5525 // Start the extensions service with one external extension already installed. | 5354 // Start the extensions service with one external extension already installed. |
5526 base::FilePath source_install_dir = data_dir_ | 5355 base::FilePath source_install_dir = |
5527 .AppendASCII("good") | 5356 data_dir().AppendASCII("good").AppendASCII("Extensions"); |
5528 .AppendASCII("Extensions"); | |
5529 base::FilePath pref_path = | 5357 base::FilePath pref_path = |
5530 source_install_dir.DirName().Append(chrome::kPreferencesFilename); | 5358 source_install_dir.DirName().Append(chrome::kPreferencesFilename); |
5531 | 5359 |
5532 InitializeInstalledExtensionService(pref_path, source_install_dir); | 5360 InitializeInstalledExtensionService(pref_path, source_install_dir); |
5533 InitializeExtensionSyncService(); | 5361 InitializeExtensionSyncService(); |
5534 | 5362 |
5535 // The user has enabled sync. | 5363 // The user has enabled sync. |
5536 ProfileSyncService* sync_service = | 5364 ProfileSyncService* sync_service = |
5537 ProfileSyncServiceFactory::GetForProfile(profile_.get()); | 5365 ProfileSyncServiceFactory::GetForProfile(profile()); |
5538 sync_service->SetSyncSetupCompleted(); | 5366 sync_service->SetSyncSetupCompleted(); |
5539 | 5367 |
5540 service_->Init(); | 5368 service()->Init(); |
5541 ASSERT_TRUE(service_->is_ready()); | 5369 ASSERT_TRUE(service()->is_ready()); |
5542 | 5370 |
5543 ASSERT_EQ(3u, loaded_.size()); | 5371 ASSERT_EQ(3u, loaded_.size()); |
5544 | 5372 |
5545 // We start enabled. | 5373 // We start enabled. |
5546 const Extension* extension = service_->GetExtensionById(good0, true); | 5374 const Extension* extension = service()->GetExtensionById(good0, true); |
5547 ASSERT_TRUE(extension); | 5375 ASSERT_TRUE(extension); |
5548 ASSERT_TRUE(service_->IsExtensionEnabled(good0)); | 5376 ASSERT_TRUE(service()->IsExtensionEnabled(good0)); |
5549 extensions::ExtensionSyncData disable_good_crx( | 5377 extensions::ExtensionSyncData disable_good_crx( |
5550 *extension, false, false, false); | 5378 *extension, false, false, false); |
5551 | 5379 |
5552 // Then sync data arrives telling us to disable |good0|. | 5380 // Then sync data arrives telling us to disable |good0|. |
5553 syncer::SyncDataList sync_data; | 5381 syncer::SyncDataList sync_data; |
5554 sync_data.push_back(disable_good_crx.GetSyncData()); | 5382 sync_data.push_back(disable_good_crx.GetSyncData()); |
5555 extension_sync_service_->MergeDataAndStartSyncing( | 5383 extension_sync_service()->MergeDataAndStartSyncing( |
5556 syncer::EXTENSIONS, | 5384 syncer::EXTENSIONS, |
5557 sync_data, | 5385 sync_data, |
5558 scoped_ptr<syncer::SyncChangeProcessor>( | 5386 scoped_ptr<syncer::SyncChangeProcessor>( |
5559 new syncer::FakeSyncChangeProcessor), | 5387 new syncer::FakeSyncChangeProcessor), |
5560 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); | 5388 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); |
5561 ASSERT_FALSE(service_->IsExtensionEnabled(good0)); | 5389 ASSERT_FALSE(service()->IsExtensionEnabled(good0)); |
5562 } | 5390 } |
5563 | 5391 |
5564 TEST_F(ExtensionServiceTest, DontDisableExtensionWithPendingEnableFromSync) { | 5392 TEST_F(ExtensionServiceTest, DontDisableExtensionWithPendingEnableFromSync) { |
5565 // Start the extensions service with one external extension already installed. | 5393 // Start the extensions service with one external extension already installed. |
5566 base::FilePath source_install_dir = data_dir_ | 5394 base::FilePath source_install_dir = |
5567 .AppendASCII("good") | 5395 data_dir().AppendASCII("good").AppendASCII("Extensions"); |
5568 .AppendASCII("Extensions"); | |
5569 base::FilePath pref_path = | 5396 base::FilePath pref_path = |
5570 source_install_dir.DirName().Append(chrome::kPreferencesFilename); | 5397 source_install_dir.DirName().Append(chrome::kPreferencesFilename); |
5571 | 5398 |
5572 InitializeInstalledExtensionService(pref_path, source_install_dir); | 5399 InitializeInstalledExtensionService(pref_path, source_install_dir); |
5573 InitializeExtensionSyncService(); | 5400 InitializeExtensionSyncService(); |
5574 | 5401 |
5575 // The user has enabled sync. | 5402 // The user has enabled sync. |
5576 ProfileSyncService* sync_service = | 5403 ProfileSyncService* sync_service = |
5577 ProfileSyncServiceFactory::GetForProfile(profile_.get()); | 5404 ProfileSyncServiceFactory::GetForProfile(profile()); |
5578 sync_service->SetSyncSetupCompleted(); | 5405 sync_service->SetSyncSetupCompleted(); |
5579 | 5406 |
5580 service_->Init(); | 5407 service()->Init(); |
5581 ASSERT_TRUE(service_->is_ready()); | 5408 ASSERT_TRUE(service()->is_ready()); |
5582 ASSERT_EQ(3u, loaded_.size()); | 5409 ASSERT_EQ(3u, loaded_.size()); |
5583 | 5410 |
5584 const Extension* extension = service_->GetExtensionById(good0, true); | 5411 const Extension* extension = service()->GetExtensionById(good0, true); |
5585 ASSERT_TRUE(service_->IsExtensionEnabled(good0)); | 5412 ASSERT_TRUE(service()->IsExtensionEnabled(good0)); |
5586 | 5413 |
5587 // Disable extension before first sync data arrives. | 5414 // Disable extension before first sync data arrives. |
5588 service_->DisableExtension(good0, Extension::DISABLE_USER_ACTION); | 5415 service()->DisableExtension(good0, Extension::DISABLE_USER_ACTION); |
5589 ASSERT_FALSE(service_->IsExtensionEnabled(good0)); | 5416 ASSERT_FALSE(service()->IsExtensionEnabled(good0)); |
5590 | 5417 |
5591 // Enable extension - this is now the most recent state. | 5418 // Enable extension - this is now the most recent state. |
5592 service_->EnableExtension(good0); | 5419 service()->EnableExtension(good0); |
5593 ASSERT_TRUE(service_->IsExtensionEnabled(good0)); | 5420 ASSERT_TRUE(service()->IsExtensionEnabled(good0)); |
5594 | 5421 |
5595 // Now sync data comes in that says to disable good0. This should be | 5422 // Now sync data comes in that says to disable good0. This should be |
5596 // ignored. | 5423 // ignored. |
5597 extensions::ExtensionSyncData disable_good_crx( | 5424 extensions::ExtensionSyncData disable_good_crx( |
5598 *extension, false, false, false); | 5425 *extension, false, false, false); |
5599 syncer::SyncDataList sync_data; | 5426 syncer::SyncDataList sync_data; |
5600 sync_data.push_back(disable_good_crx.GetSyncData()); | 5427 sync_data.push_back(disable_good_crx.GetSyncData()); |
5601 extension_sync_service_->MergeDataAndStartSyncing( | 5428 extension_sync_service()->MergeDataAndStartSyncing( |
5602 syncer::EXTENSIONS, | 5429 syncer::EXTENSIONS, |
5603 sync_data, | 5430 sync_data, |
5604 scoped_ptr<syncer::SyncChangeProcessor>( | 5431 scoped_ptr<syncer::SyncChangeProcessor>( |
5605 new syncer::FakeSyncChangeProcessor), | 5432 new syncer::FakeSyncChangeProcessor), |
5606 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); | 5433 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); |
5607 | 5434 |
5608 // The extension was enabled locally before the sync data arrived, so it | 5435 // The extension was enabled locally before the sync data arrived, so it |
5609 // should still be enabled now. | 5436 // should still be enabled now. |
5610 ASSERT_TRUE(service_->IsExtensionEnabled(good0)); | 5437 ASSERT_TRUE(service()->IsExtensionEnabled(good0)); |
5611 } | 5438 } |
5612 | 5439 |
5613 TEST_F(ExtensionServiceTest, GetSyncData) { | 5440 TEST_F(ExtensionServiceTest, GetSyncData) { |
5614 InitializeEmptyExtensionService(); | 5441 InitializeEmptyExtensionService(); |
5615 InitializeExtensionSyncService(); | 5442 InitializeExtensionSyncService(); |
5616 InstallCRX(data_dir_.AppendASCII("good.crx"), INSTALL_NEW); | 5443 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); |
5617 const Extension* extension = service_->GetInstalledExtension(good_crx); | 5444 const Extension* extension = service()->GetInstalledExtension(good_crx); |
5618 ASSERT_TRUE(extension); | 5445 ASSERT_TRUE(extension); |
5619 | 5446 |
5620 extension_sync_service_->MergeDataAndStartSyncing( | 5447 extension_sync_service()->MergeDataAndStartSyncing( |
5621 syncer::EXTENSIONS, | 5448 syncer::EXTENSIONS, |
5622 syncer::SyncDataList(), | 5449 syncer::SyncDataList(), |
5623 scoped_ptr<syncer::SyncChangeProcessor>( | 5450 scoped_ptr<syncer::SyncChangeProcessor>( |
5624 new syncer::FakeSyncChangeProcessor), | 5451 new syncer::FakeSyncChangeProcessor), |
5625 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); | 5452 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); |
5626 | 5453 |
5627 syncer::SyncDataList list = extension_sync_service_->GetAllSyncData( | 5454 syncer::SyncDataList list = |
5628 syncer::EXTENSIONS); | 5455 extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS); |
5629 ASSERT_EQ(list.size(), 1U); | 5456 ASSERT_EQ(list.size(), 1U); |
5630 extensions::ExtensionSyncData data(list[0]); | 5457 extensions::ExtensionSyncData data(list[0]); |
5631 EXPECT_EQ(extension->id(), data.id()); | 5458 EXPECT_EQ(extension->id(), data.id()); |
5632 EXPECT_FALSE(data.uninstalled()); | 5459 EXPECT_FALSE(data.uninstalled()); |
5633 EXPECT_EQ(service_->IsExtensionEnabled(good_crx), data.enabled()); | 5460 EXPECT_EQ(service()->IsExtensionEnabled(good_crx), data.enabled()); |
5634 EXPECT_EQ(extensions::util::IsIncognitoEnabled(good_crx, profile_.get()), | 5461 EXPECT_EQ(extensions::util::IsIncognitoEnabled(good_crx, profile()), |
5635 data.incognito_enabled()); | 5462 data.incognito_enabled()); |
5636 EXPECT_TRUE(data.version().Equals(*extension->version())); | 5463 EXPECT_TRUE(data.version().Equals(*extension->version())); |
5637 EXPECT_EQ(extensions::ManifestURL::GetUpdateURL(extension), | 5464 EXPECT_EQ(extensions::ManifestURL::GetUpdateURL(extension), |
5638 data.update_url()); | 5465 data.update_url()); |
5639 EXPECT_EQ(extension->name(), data.name()); | 5466 EXPECT_EQ(extension->name(), data.name()); |
5640 } | 5467 } |
5641 | 5468 |
5642 TEST_F(ExtensionServiceTest, GetSyncDataTerminated) { | 5469 TEST_F(ExtensionServiceTest, GetSyncDataTerminated) { |
5643 InitializeEmptyExtensionService(); | 5470 InitializeEmptyExtensionService(); |
5644 InitializeExtensionSyncService(); | 5471 InitializeExtensionSyncService(); |
5645 InstallCRX(data_dir_.AppendASCII("good.crx"), INSTALL_NEW); | 5472 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); |
5646 TerminateExtension(good_crx); | 5473 TerminateExtension(good_crx); |
5647 const Extension* extension = service_->GetInstalledExtension(good_crx); | 5474 const Extension* extension = service()->GetInstalledExtension(good_crx); |
5648 ASSERT_TRUE(extension); | 5475 ASSERT_TRUE(extension); |
5649 | 5476 |
5650 syncer::FakeSyncChangeProcessor processor; | 5477 syncer::FakeSyncChangeProcessor processor; |
5651 extension_sync_service_->MergeDataAndStartSyncing( | 5478 extension_sync_service()->MergeDataAndStartSyncing( |
5652 syncer::EXTENSIONS, | 5479 syncer::EXTENSIONS, |
5653 syncer::SyncDataList(), | 5480 syncer::SyncDataList(), |
5654 scoped_ptr<syncer::SyncChangeProcessor>( | 5481 scoped_ptr<syncer::SyncChangeProcessor>( |
5655 new syncer::FakeSyncChangeProcessor), | 5482 new syncer::FakeSyncChangeProcessor), |
5656 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); | 5483 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); |
5657 | 5484 |
5658 syncer::SyncDataList list = extension_sync_service_->GetAllSyncData( | 5485 syncer::SyncDataList list = |
5659 syncer::EXTENSIONS); | 5486 extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS); |
5660 ASSERT_EQ(list.size(), 1U); | 5487 ASSERT_EQ(list.size(), 1U); |
5661 extensions::ExtensionSyncData data(list[0]); | 5488 extensions::ExtensionSyncData data(list[0]); |
5662 EXPECT_EQ(extension->id(), data.id()); | 5489 EXPECT_EQ(extension->id(), data.id()); |
5663 EXPECT_FALSE(data.uninstalled()); | 5490 EXPECT_FALSE(data.uninstalled()); |
5664 EXPECT_EQ(service_->IsExtensionEnabled(good_crx), data.enabled()); | 5491 EXPECT_EQ(service()->IsExtensionEnabled(good_crx), data.enabled()); |
5665 EXPECT_EQ(extensions::util::IsIncognitoEnabled(good_crx, profile_.get()), | 5492 EXPECT_EQ(extensions::util::IsIncognitoEnabled(good_crx, profile()), |
5666 data.incognito_enabled()); | 5493 data.incognito_enabled()); |
5667 EXPECT_TRUE(data.version().Equals(*extension->version())); | 5494 EXPECT_TRUE(data.version().Equals(*extension->version())); |
5668 EXPECT_EQ(extensions::ManifestURL::GetUpdateURL(extension), | 5495 EXPECT_EQ(extensions::ManifestURL::GetUpdateURL(extension), |
5669 data.update_url()); | 5496 data.update_url()); |
5670 EXPECT_EQ(extension->name(), data.name()); | 5497 EXPECT_EQ(extension->name(), data.name()); |
5671 } | 5498 } |
5672 | 5499 |
5673 TEST_F(ExtensionServiceTest, GetSyncDataFilter) { | 5500 TEST_F(ExtensionServiceTest, GetSyncDataFilter) { |
5674 InitializeEmptyExtensionService(); | 5501 InitializeEmptyExtensionService(); |
5675 InitializeExtensionSyncService(); | 5502 InitializeExtensionSyncService(); |
5676 InstallCRX(data_dir_.AppendASCII("good.crx"), INSTALL_NEW); | 5503 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); |
5677 const Extension* extension = service_->GetInstalledExtension(good_crx); | 5504 const Extension* extension = service()->GetInstalledExtension(good_crx); |
5678 ASSERT_TRUE(extension); | 5505 ASSERT_TRUE(extension); |
5679 | 5506 |
5680 syncer::FakeSyncChangeProcessor processor; | 5507 syncer::FakeSyncChangeProcessor processor; |
5681 extension_sync_service_->MergeDataAndStartSyncing( | 5508 extension_sync_service()->MergeDataAndStartSyncing( |
5682 syncer::APPS, | 5509 syncer::APPS, |
5683 syncer::SyncDataList(), | 5510 syncer::SyncDataList(), |
5684 scoped_ptr<syncer::SyncChangeProcessor>( | 5511 scoped_ptr<syncer::SyncChangeProcessor>( |
5685 new syncer::FakeSyncChangeProcessor), | 5512 new syncer::FakeSyncChangeProcessor), |
5686 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); | 5513 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); |
5687 | 5514 |
5688 syncer::SyncDataList list = extension_sync_service_->GetAllSyncData( | 5515 syncer::SyncDataList list = |
5689 syncer::EXTENSIONS); | 5516 extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS); |
5690 ASSERT_EQ(list.size(), 0U); | 5517 ASSERT_EQ(list.size(), 0U); |
5691 } | 5518 } |
5692 | 5519 |
5693 TEST_F(ExtensionServiceTest, GetSyncExtensionDataUserSettings) { | 5520 TEST_F(ExtensionServiceTest, GetSyncExtensionDataUserSettings) { |
5694 InitializeEmptyExtensionService(); | 5521 InitializeEmptyExtensionService(); |
5695 InitializeProcessManager(); | 5522 InitializeProcessManager(); |
5696 InitializeExtensionSyncService(); | 5523 InitializeExtensionSyncService(); |
5697 InstallCRX(data_dir_.AppendASCII("good.crx"), INSTALL_NEW); | 5524 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); |
5698 const Extension* extension = service_->GetInstalledExtension(good_crx); | 5525 const Extension* extension = service()->GetInstalledExtension(good_crx); |
5699 ASSERT_TRUE(extension); | 5526 ASSERT_TRUE(extension); |
5700 | 5527 |
5701 syncer::FakeSyncChangeProcessor processor; | 5528 syncer::FakeSyncChangeProcessor processor; |
5702 extension_sync_service_->MergeDataAndStartSyncing( | 5529 extension_sync_service()->MergeDataAndStartSyncing( |
5703 syncer::EXTENSIONS, | 5530 syncer::EXTENSIONS, |
5704 syncer::SyncDataList(), | 5531 syncer::SyncDataList(), |
5705 scoped_ptr<syncer::SyncChangeProcessor>( | 5532 scoped_ptr<syncer::SyncChangeProcessor>( |
5706 new syncer::FakeSyncChangeProcessor), | 5533 new syncer::FakeSyncChangeProcessor), |
5707 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); | 5534 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); |
5708 | 5535 |
5709 { | 5536 { |
5710 syncer::SyncDataList list = extension_sync_service_->GetAllSyncData( | 5537 syncer::SyncDataList list = |
5711 syncer::EXTENSIONS); | 5538 extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS); |
5712 ASSERT_EQ(list.size(), 1U); | 5539 ASSERT_EQ(list.size(), 1U); |
5713 extensions::ExtensionSyncData data(list[0]); | 5540 extensions::ExtensionSyncData data(list[0]); |
5714 EXPECT_TRUE(data.enabled()); | 5541 EXPECT_TRUE(data.enabled()); |
5715 EXPECT_FALSE(data.incognito_enabled()); | 5542 EXPECT_FALSE(data.incognito_enabled()); |
5716 } | 5543 } |
5717 | 5544 |
5718 service_->DisableExtension(good_crx, Extension::DISABLE_USER_ACTION); | 5545 service()->DisableExtension(good_crx, Extension::DISABLE_USER_ACTION); |
5719 { | 5546 { |
5720 syncer::SyncDataList list = extension_sync_service_->GetAllSyncData( | 5547 syncer::SyncDataList list = |
5721 syncer::EXTENSIONS); | 5548 extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS); |
5722 ASSERT_EQ(list.size(), 1U); | 5549 ASSERT_EQ(list.size(), 1U); |
5723 extensions::ExtensionSyncData data(list[0]); | 5550 extensions::ExtensionSyncData data(list[0]); |
5724 EXPECT_FALSE(data.enabled()); | 5551 EXPECT_FALSE(data.enabled()); |
5725 EXPECT_FALSE(data.incognito_enabled()); | 5552 EXPECT_FALSE(data.incognito_enabled()); |
5726 } | 5553 } |
5727 | 5554 |
5728 extensions::util::SetIsIncognitoEnabled(good_crx, profile_.get(), true); | 5555 extensions::util::SetIsIncognitoEnabled(good_crx, profile(), true); |
5729 { | 5556 { |
5730 syncer::SyncDataList list = extension_sync_service_->GetAllSyncData( | 5557 syncer::SyncDataList list = |
5731 syncer::EXTENSIONS); | 5558 extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS); |
5732 ASSERT_EQ(list.size(), 1U); | 5559 ASSERT_EQ(list.size(), 1U); |
5733 extensions::ExtensionSyncData data(list[0]); | 5560 extensions::ExtensionSyncData data(list[0]); |
5734 EXPECT_FALSE(data.enabled()); | 5561 EXPECT_FALSE(data.enabled()); |
5735 EXPECT_TRUE(data.incognito_enabled()); | 5562 EXPECT_TRUE(data.incognito_enabled()); |
5736 } | 5563 } |
5737 | 5564 |
5738 service_->EnableExtension(good_crx); | 5565 service()->EnableExtension(good_crx); |
5739 { | 5566 { |
5740 syncer::SyncDataList list = extension_sync_service_->GetAllSyncData( | 5567 syncer::SyncDataList list = |
5741 syncer::EXTENSIONS); | 5568 extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS); |
5742 ASSERT_EQ(list.size(), 1U); | 5569 ASSERT_EQ(list.size(), 1U); |
5743 extensions::ExtensionSyncData data(list[0]); | 5570 extensions::ExtensionSyncData data(list[0]); |
5744 EXPECT_TRUE(data.enabled()); | 5571 EXPECT_TRUE(data.enabled()); |
5745 EXPECT_TRUE(data.incognito_enabled()); | 5572 EXPECT_TRUE(data.incognito_enabled()); |
5746 } | 5573 } |
5747 } | 5574 } |
5748 | 5575 |
5749 TEST_F(ExtensionServiceTest, SyncForUninstalledExternalExtension) { | 5576 TEST_F(ExtensionServiceTest, SyncForUninstalledExternalExtension) { |
5750 InitializeEmptyExtensionService(); | 5577 InitializeEmptyExtensionService(); |
5751 InitializeExtensionSyncService(); | 5578 InitializeExtensionSyncService(); |
5752 InstallCRXWithLocation(data_dir_.AppendASCII("good.crx"), | 5579 InstallCRXWithLocation( |
5753 Manifest::EXTERNAL_PREF, INSTALL_NEW); | 5580 data_dir().AppendASCII("good.crx"), Manifest::EXTERNAL_PREF, INSTALL_NEW); |
5754 const Extension* extension = service_->GetInstalledExtension(good_crx); | 5581 const Extension* extension = service()->GetInstalledExtension(good_crx); |
5755 ASSERT_TRUE(extension); | 5582 ASSERT_TRUE(extension); |
5756 | 5583 |
5757 syncer::FakeSyncChangeProcessor processor; | 5584 syncer::FakeSyncChangeProcessor processor; |
5758 extension_sync_service_->MergeDataAndStartSyncing( | 5585 extension_sync_service()->MergeDataAndStartSyncing( |
5759 syncer::EXTENSIONS, | 5586 syncer::EXTENSIONS, |
5760 syncer::SyncDataList(), | 5587 syncer::SyncDataList(), |
5761 scoped_ptr<syncer::SyncChangeProcessor>( | 5588 scoped_ptr<syncer::SyncChangeProcessor>( |
5762 new syncer::FakeSyncChangeProcessor), | 5589 new syncer::FakeSyncChangeProcessor), |
5763 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); | 5590 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); |
5764 | 5591 |
5765 UninstallExtension(good_crx, false); | 5592 UninstallExtension(good_crx, false); |
5766 EXPECT_TRUE(ExtensionPrefs::Get(profile_.get()) | 5593 EXPECT_TRUE( |
5767 ->IsExternalExtensionUninstalled(good_crx)); | 5594 ExtensionPrefs::Get(profile())->IsExternalExtensionUninstalled(good_crx)); |
5768 | 5595 |
5769 sync_pb::EntitySpecifics specifics; | 5596 sync_pb::EntitySpecifics specifics; |
5770 sync_pb::AppSpecifics* app_specifics = specifics.mutable_app(); | 5597 sync_pb::AppSpecifics* app_specifics = specifics.mutable_app(); |
5771 sync_pb::ExtensionSpecifics* extension_specifics = | 5598 sync_pb::ExtensionSpecifics* extension_specifics = |
5772 app_specifics->mutable_extension(); | 5599 app_specifics->mutable_extension(); |
5773 extension_specifics->set_id(good_crx); | 5600 extension_specifics->set_id(good_crx); |
5774 extension_specifics->set_version("1.0"); | 5601 extension_specifics->set_version("1.0"); |
5775 extension_specifics->set_enabled(true); | 5602 extension_specifics->set_enabled(true); |
5776 | 5603 |
5777 syncer::SyncData sync_data = | 5604 syncer::SyncData sync_data = |
5778 syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); | 5605 syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); |
5779 syncer::SyncChange sync_change(FROM_HERE, | 5606 syncer::SyncChange sync_change(FROM_HERE, |
5780 syncer::SyncChange::ACTION_UPDATE, | 5607 syncer::SyncChange::ACTION_UPDATE, |
5781 sync_data); | 5608 sync_data); |
5782 syncer::SyncChangeList list(1); | 5609 syncer::SyncChangeList list(1); |
5783 list[0] = sync_change; | 5610 list[0] = sync_change; |
5784 | 5611 |
5785 extension_sync_service_->ProcessSyncChanges(FROM_HERE, list); | 5612 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); |
5786 EXPECT_TRUE(ExtensionPrefs::Get(profile_.get()) | 5613 EXPECT_TRUE( |
5787 ->IsExternalExtensionUninstalled(good_crx)); | 5614 ExtensionPrefs::Get(profile())->IsExternalExtensionUninstalled(good_crx)); |
5788 } | 5615 } |
5789 | 5616 |
5790 TEST_F(ExtensionServiceTest, GetSyncAppDataUserSettings) { | 5617 TEST_F(ExtensionServiceTest, GetSyncAppDataUserSettings) { |
5791 InitializeEmptyExtensionService(); | 5618 InitializeEmptyExtensionService(); |
5792 InitializeExtensionSyncService(); | 5619 InitializeExtensionSyncService(); |
5793 const Extension* app = | 5620 const Extension* app = |
5794 PackAndInstallCRX(data_dir_.AppendASCII("app"), INSTALL_NEW); | 5621 PackAndInstallCRX(data_dir().AppendASCII("app"), INSTALL_NEW); |
5795 ASSERT_TRUE(app); | 5622 ASSERT_TRUE(app); |
5796 ASSERT_TRUE(app->is_app()); | 5623 ASSERT_TRUE(app->is_app()); |
5797 | 5624 |
5798 syncer::FakeSyncChangeProcessor processor; | 5625 syncer::FakeSyncChangeProcessor processor; |
5799 extension_sync_service_->MergeDataAndStartSyncing( | 5626 extension_sync_service()->MergeDataAndStartSyncing( |
5800 syncer::APPS, | 5627 syncer::APPS, |
5801 syncer::SyncDataList(), | 5628 syncer::SyncDataList(), |
5802 scoped_ptr<syncer::SyncChangeProcessor>( | 5629 scoped_ptr<syncer::SyncChangeProcessor>( |
5803 new syncer::FakeSyncChangeProcessor), | 5630 new syncer::FakeSyncChangeProcessor), |
5804 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); | 5631 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); |
5805 | 5632 |
5806 syncer::StringOrdinal initial_ordinal = | 5633 syncer::StringOrdinal initial_ordinal = |
5807 syncer::StringOrdinal::CreateInitialOrdinal(); | 5634 syncer::StringOrdinal::CreateInitialOrdinal(); |
5808 { | 5635 { |
5809 syncer::SyncDataList list = extension_sync_service_->GetAllSyncData( | 5636 syncer::SyncDataList list = |
5810 syncer::APPS); | 5637 extension_sync_service()->GetAllSyncData(syncer::APPS); |
5811 ASSERT_EQ(list.size(), 1U); | 5638 ASSERT_EQ(list.size(), 1U); |
5812 | 5639 |
5813 extensions::AppSyncData app_sync_data(list[0]); | 5640 extensions::AppSyncData app_sync_data(list[0]); |
5814 EXPECT_TRUE(initial_ordinal.Equals(app_sync_data.app_launch_ordinal())); | 5641 EXPECT_TRUE(initial_ordinal.Equals(app_sync_data.app_launch_ordinal())); |
5815 EXPECT_TRUE(initial_ordinal.Equals(app_sync_data.page_ordinal())); | 5642 EXPECT_TRUE(initial_ordinal.Equals(app_sync_data.page_ordinal())); |
5816 } | 5643 } |
5817 | 5644 |
5818 AppSorting* sorting = ExtensionPrefs::Get(profile_.get())->app_sorting(); | 5645 AppSorting* sorting = ExtensionPrefs::Get(profile())->app_sorting(); |
5819 sorting->SetAppLaunchOrdinal(app->id(), initial_ordinal.CreateAfter()); | 5646 sorting->SetAppLaunchOrdinal(app->id(), initial_ordinal.CreateAfter()); |
5820 { | 5647 { |
5821 syncer::SyncDataList list = extension_sync_service_->GetAllSyncData( | 5648 syncer::SyncDataList list = |
5822 syncer::APPS); | 5649 extension_sync_service()->GetAllSyncData(syncer::APPS); |
5823 ASSERT_EQ(list.size(), 1U); | 5650 ASSERT_EQ(list.size(), 1U); |
5824 | 5651 |
5825 extensions::AppSyncData app_sync_data(list[0]); | 5652 extensions::AppSyncData app_sync_data(list[0]); |
5826 EXPECT_TRUE(initial_ordinal.LessThan(app_sync_data.app_launch_ordinal())); | 5653 EXPECT_TRUE(initial_ordinal.LessThan(app_sync_data.app_launch_ordinal())); |
5827 EXPECT_TRUE(initial_ordinal.Equals(app_sync_data.page_ordinal())); | 5654 EXPECT_TRUE(initial_ordinal.Equals(app_sync_data.page_ordinal())); |
5828 } | 5655 } |
5829 | 5656 |
5830 sorting->SetPageOrdinal(app->id(), initial_ordinal.CreateAfter()); | 5657 sorting->SetPageOrdinal(app->id(), initial_ordinal.CreateAfter()); |
5831 { | 5658 { |
5832 syncer::SyncDataList list = extension_sync_service_->GetAllSyncData( | 5659 syncer::SyncDataList list = |
5833 syncer::APPS); | 5660 extension_sync_service()->GetAllSyncData(syncer::APPS); |
5834 ASSERT_EQ(list.size(), 1U); | 5661 ASSERT_EQ(list.size(), 1U); |
5835 | 5662 |
5836 extensions::AppSyncData app_sync_data(list[0]); | 5663 extensions::AppSyncData app_sync_data(list[0]); |
5837 EXPECT_TRUE(initial_ordinal.LessThan(app_sync_data.app_launch_ordinal())); | 5664 EXPECT_TRUE(initial_ordinal.LessThan(app_sync_data.app_launch_ordinal())); |
5838 EXPECT_TRUE(initial_ordinal.LessThan(app_sync_data.page_ordinal())); | 5665 EXPECT_TRUE(initial_ordinal.LessThan(app_sync_data.page_ordinal())); |
5839 } | 5666 } |
5840 } | 5667 } |
5841 | 5668 |
5842 // TODO (rdevlin.cronin): The OnExtensionMoved() method has been removed from | 5669 // TODO (rdevlin.cronin): The OnExtensionMoved() method has been removed from |
5843 // ExtensionService, so this test probably needs a new home. Unfortunately, it | 5670 // ExtensionService, so this test probably needs a new home. Unfortunately, it |
5844 // relies pretty heavily on things like InitializeExtension[Sync]Service() and | 5671 // relies pretty heavily on things like InitializeExtension[Sync]Service() and |
5845 // PackAndInstallCRX(). When we clean up a bit more, this should move out. | 5672 // PackAndInstallCRX(). When we clean up a bit more, this should move out. |
5846 TEST_F(ExtensionServiceTest, GetSyncAppDataUserSettingsOnExtensionMoved) { | 5673 TEST_F(ExtensionServiceTest, GetSyncAppDataUserSettingsOnExtensionMoved) { |
5847 InitializeEmptyExtensionService(); | 5674 InitializeEmptyExtensionService(); |
5848 InitializeExtensionSyncService(); | 5675 InitializeExtensionSyncService(); |
5849 const size_t kAppCount = 3; | 5676 const size_t kAppCount = 3; |
5850 const Extension* apps[kAppCount]; | 5677 const Extension* apps[kAppCount]; |
5851 apps[0] = PackAndInstallCRX(data_dir_.AppendASCII("app1"), INSTALL_NEW); | 5678 apps[0] = PackAndInstallCRX(data_dir().AppendASCII("app1"), INSTALL_NEW); |
5852 apps[1] = PackAndInstallCRX(data_dir_.AppendASCII("app2"), INSTALL_NEW); | 5679 apps[1] = PackAndInstallCRX(data_dir().AppendASCII("app2"), INSTALL_NEW); |
5853 apps[2] = PackAndInstallCRX(data_dir_.AppendASCII("app4"), INSTALL_NEW); | 5680 apps[2] = PackAndInstallCRX(data_dir().AppendASCII("app4"), INSTALL_NEW); |
5854 for (size_t i = 0; i < kAppCount; ++i) { | 5681 for (size_t i = 0; i < kAppCount; ++i) { |
5855 ASSERT_TRUE(apps[i]); | 5682 ASSERT_TRUE(apps[i]); |
5856 ASSERT_TRUE(apps[i]->is_app()); | 5683 ASSERT_TRUE(apps[i]->is_app()); |
5857 } | 5684 } |
5858 | 5685 |
5859 syncer::FakeSyncChangeProcessor processor; | 5686 syncer::FakeSyncChangeProcessor processor; |
5860 extension_sync_service_->MergeDataAndStartSyncing( | 5687 extension_sync_service()->MergeDataAndStartSyncing( |
5861 syncer::APPS, | 5688 syncer::APPS, |
5862 syncer::SyncDataList(), | 5689 syncer::SyncDataList(), |
5863 scoped_ptr<syncer::SyncChangeProcessor>( | 5690 scoped_ptr<syncer::SyncChangeProcessor>( |
5864 new syncer::FakeSyncChangeProcessor), | 5691 new syncer::FakeSyncChangeProcessor), |
5865 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); | 5692 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); |
5866 | 5693 |
5867 ExtensionPrefs::Get(service_->GetBrowserContext()) | 5694 ExtensionPrefs::Get(service()->GetBrowserContext()) |
5868 ->app_sorting() | 5695 ->app_sorting() |
5869 ->OnExtensionMoved(apps[0]->id(), apps[1]->id(), apps[2]->id()); | 5696 ->OnExtensionMoved(apps[0]->id(), apps[1]->id(), apps[2]->id()); |
5870 { | 5697 { |
5871 syncer::SyncDataList list = extension_sync_service_->GetAllSyncData( | 5698 syncer::SyncDataList list = |
5872 syncer::APPS); | 5699 extension_sync_service()->GetAllSyncData(syncer::APPS); |
5873 ASSERT_EQ(list.size(), 3U); | 5700 ASSERT_EQ(list.size(), 3U); |
5874 | 5701 |
5875 extensions::AppSyncData data[kAppCount]; | 5702 extensions::AppSyncData data[kAppCount]; |
5876 for (size_t i = 0; i < kAppCount; ++i) { | 5703 for (size_t i = 0; i < kAppCount; ++i) { |
5877 data[i] = extensions::AppSyncData(list[i]); | 5704 data[i] = extensions::AppSyncData(list[i]); |
5878 } | 5705 } |
5879 | 5706 |
5880 // The sync data is not always in the same order our apps were installed in, | 5707 // The sync data is not always in the same order our apps were installed in, |
5881 // so we do that sorting here so we can make sure the values are changed as | 5708 // so we do that sorting here so we can make sure the values are changed as |
5882 // expected. | 5709 // expected. |
5883 syncer::StringOrdinal app_launch_ordinals[kAppCount]; | 5710 syncer::StringOrdinal app_launch_ordinals[kAppCount]; |
5884 for (size_t i = 0; i < kAppCount; ++i) { | 5711 for (size_t i = 0; i < kAppCount; ++i) { |
5885 for (size_t j = 0; j < kAppCount; ++j) { | 5712 for (size_t j = 0; j < kAppCount; ++j) { |
5886 if (apps[i]->id() == data[j].id()) | 5713 if (apps[i]->id() == data[j].id()) |
5887 app_launch_ordinals[i] = data[j].app_launch_ordinal(); | 5714 app_launch_ordinals[i] = data[j].app_launch_ordinal(); |
5888 } | 5715 } |
5889 } | 5716 } |
5890 | 5717 |
5891 EXPECT_TRUE(app_launch_ordinals[1].LessThan(app_launch_ordinals[0])); | 5718 EXPECT_TRUE(app_launch_ordinals[1].LessThan(app_launch_ordinals[0])); |
5892 EXPECT_TRUE(app_launch_ordinals[0].LessThan(app_launch_ordinals[2])); | 5719 EXPECT_TRUE(app_launch_ordinals[0].LessThan(app_launch_ordinals[2])); |
5893 } | 5720 } |
5894 } | 5721 } |
5895 | 5722 |
5896 TEST_F(ExtensionServiceTest, GetSyncDataList) { | 5723 TEST_F(ExtensionServiceTest, GetSyncDataList) { |
5897 InitializeEmptyExtensionService(); | 5724 InitializeEmptyExtensionService(); |
5898 InitializeExtensionSyncService(); | 5725 InitializeExtensionSyncService(); |
5899 InstallCRX(data_dir_.AppendASCII("good.crx"), INSTALL_NEW); | 5726 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); |
5900 InstallCRX(data_dir_.AppendASCII("page_action.crx"), INSTALL_NEW); | 5727 InstallCRX(data_dir().AppendASCII("page_action.crx"), INSTALL_NEW); |
5901 InstallCRX(data_dir_.AppendASCII("theme.crx"), INSTALL_NEW); | 5728 InstallCRX(data_dir().AppendASCII("theme.crx"), INSTALL_NEW); |
5902 InstallCRX(data_dir_.AppendASCII("theme2.crx"), INSTALL_NEW); | 5729 InstallCRX(data_dir().AppendASCII("theme2.crx"), INSTALL_NEW); |
5903 | 5730 |
5904 syncer::FakeSyncChangeProcessor processor; | 5731 syncer::FakeSyncChangeProcessor processor; |
5905 extension_sync_service_->MergeDataAndStartSyncing( | 5732 extension_sync_service()->MergeDataAndStartSyncing( |
5906 syncer::APPS, | 5733 syncer::APPS, |
5907 syncer::SyncDataList(), | 5734 syncer::SyncDataList(), |
5908 scoped_ptr<syncer::SyncChangeProcessor>( | 5735 scoped_ptr<syncer::SyncChangeProcessor>( |
5909 new syncer::FakeSyncChangeProcessor), | 5736 new syncer::FakeSyncChangeProcessor), |
5910 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); | 5737 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); |
5911 extension_sync_service_->MergeDataAndStartSyncing( | 5738 extension_sync_service()->MergeDataAndStartSyncing( |
5912 syncer::EXTENSIONS, | 5739 syncer::EXTENSIONS, |
5913 syncer::SyncDataList(), | 5740 syncer::SyncDataList(), |
5914 scoped_ptr<syncer::SyncChangeProcessor>( | 5741 scoped_ptr<syncer::SyncChangeProcessor>( |
5915 new syncer::FakeSyncChangeProcessor), | 5742 new syncer::FakeSyncChangeProcessor), |
5916 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); | 5743 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); |
5917 | 5744 |
5918 service_->DisableExtension(page_action, Extension::DISABLE_USER_ACTION); | 5745 service()->DisableExtension(page_action, Extension::DISABLE_USER_ACTION); |
5919 TerminateExtension(theme2_crx); | 5746 TerminateExtension(theme2_crx); |
5920 | 5747 |
5921 EXPECT_EQ(0u, extension_sync_service_->GetAllSyncData(syncer::APPS).size()); | 5748 EXPECT_EQ(0u, extension_sync_service()->GetAllSyncData(syncer::APPS).size()); |
5922 EXPECT_EQ(2u, extension_sync_service_-> | 5749 EXPECT_EQ( |
5923 GetAllSyncData(syncer::EXTENSIONS).size()); | 5750 2u, extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS).size()); |
5924 } | 5751 } |
5925 | 5752 |
5926 TEST_F(ExtensionServiceTest, ProcessSyncDataUninstall) { | 5753 TEST_F(ExtensionServiceTest, ProcessSyncDataUninstall) { |
5927 InitializeEmptyExtensionService(); | 5754 InitializeEmptyExtensionService(); |
5928 InitializeExtensionSyncService(); | 5755 InitializeExtensionSyncService(); |
5929 syncer::FakeSyncChangeProcessor processor; | 5756 syncer::FakeSyncChangeProcessor processor; |
5930 extension_sync_service_->MergeDataAndStartSyncing( | 5757 extension_sync_service()->MergeDataAndStartSyncing( |
5931 syncer::EXTENSIONS, | 5758 syncer::EXTENSIONS, |
5932 syncer::SyncDataList(), | 5759 syncer::SyncDataList(), |
5933 scoped_ptr<syncer::SyncChangeProcessor>( | 5760 scoped_ptr<syncer::SyncChangeProcessor>( |
5934 new syncer::FakeSyncChangeProcessor), | 5761 new syncer::FakeSyncChangeProcessor), |
5935 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); | 5762 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); |
5936 | 5763 |
5937 sync_pb::EntitySpecifics specifics; | 5764 sync_pb::EntitySpecifics specifics; |
5938 sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension(); | 5765 sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension(); |
5939 ext_specifics->set_id(good_crx); | 5766 ext_specifics->set_id(good_crx); |
5940 ext_specifics->set_version("1.0"); | 5767 ext_specifics->set_version("1.0"); |
5941 syncer::SyncData sync_data = | 5768 syncer::SyncData sync_data = |
5942 syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); | 5769 syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); |
5943 syncer::SyncChange sync_change(FROM_HERE, | 5770 syncer::SyncChange sync_change(FROM_HERE, |
5944 syncer::SyncChange::ACTION_DELETE, | 5771 syncer::SyncChange::ACTION_DELETE, |
5945 sync_data); | 5772 sync_data); |
5946 syncer::SyncChangeList list(1); | 5773 syncer::SyncChangeList list(1); |
5947 list[0] = sync_change; | 5774 list[0] = sync_change; |
5948 | 5775 |
5949 // Should do nothing. | 5776 // Should do nothing. |
5950 extension_sync_service_->ProcessSyncChanges(FROM_HERE, list); | 5777 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); |
5951 EXPECT_FALSE(service_->GetExtensionById(good_crx, true)); | 5778 EXPECT_FALSE(service()->GetExtensionById(good_crx, true)); |
5952 | 5779 |
5953 // Install the extension. | 5780 // Install the extension. |
5954 base::FilePath extension_path = data_dir_.AppendASCII("good.crx"); | 5781 base::FilePath extension_path = data_dir().AppendASCII("good.crx"); |
5955 InstallCRX(extension_path, INSTALL_NEW); | 5782 InstallCRX(extension_path, INSTALL_NEW); |
5956 EXPECT_TRUE(service_->GetExtensionById(good_crx, true)); | 5783 EXPECT_TRUE(service()->GetExtensionById(good_crx, true)); |
5957 | 5784 |
5958 // Should uninstall the extension. | 5785 // Should uninstall the extension. |
5959 extension_sync_service_->ProcessSyncChanges(FROM_HERE, list); | 5786 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); |
5960 EXPECT_FALSE(service_->GetExtensionById(good_crx, true)); | 5787 EXPECT_FALSE(service()->GetExtensionById(good_crx, true)); |
5961 | 5788 |
5962 // Should again do nothing. | 5789 // Should again do nothing. |
5963 extension_sync_service_->ProcessSyncChanges(FROM_HERE, list); | 5790 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); |
5964 EXPECT_FALSE(service_->GetExtensionById(good_crx, true)); | 5791 EXPECT_FALSE(service()->GetExtensionById(good_crx, true)); |
5965 } | 5792 } |
5966 | 5793 |
5967 TEST_F(ExtensionServiceTest, ProcessSyncDataWrongType) { | 5794 TEST_F(ExtensionServiceTest, ProcessSyncDataWrongType) { |
5968 InitializeEmptyExtensionService(); | 5795 InitializeEmptyExtensionService(); |
5969 InitializeExtensionSyncService(); | 5796 InitializeExtensionSyncService(); |
5970 | 5797 |
5971 // Install the extension. | 5798 // Install the extension. |
5972 base::FilePath extension_path = data_dir_.AppendASCII("good.crx"); | 5799 base::FilePath extension_path = data_dir().AppendASCII("good.crx"); |
5973 InstallCRX(extension_path, INSTALL_NEW); | 5800 InstallCRX(extension_path, INSTALL_NEW); |
5974 EXPECT_TRUE(service_->GetExtensionById(good_crx, true)); | 5801 EXPECT_TRUE(service()->GetExtensionById(good_crx, true)); |
5975 | 5802 |
5976 sync_pb::EntitySpecifics specifics; | 5803 sync_pb::EntitySpecifics specifics; |
5977 sync_pb::AppSpecifics* app_specifics = specifics.mutable_app(); | 5804 sync_pb::AppSpecifics* app_specifics = specifics.mutable_app(); |
5978 sync_pb::ExtensionSpecifics* extension_specifics = | 5805 sync_pb::ExtensionSpecifics* extension_specifics = |
5979 app_specifics->mutable_extension(); | 5806 app_specifics->mutable_extension(); |
5980 extension_specifics->set_id(good_crx); | 5807 extension_specifics->set_id(good_crx); |
5981 extension_specifics->set_version( | 5808 extension_specifics->set_version( |
5982 service_->GetInstalledExtension(good_crx)->version()->GetString()); | 5809 service()->GetInstalledExtension(good_crx)->version()->GetString()); |
5983 | 5810 |
5984 { | 5811 { |
5985 extension_specifics->set_enabled(true); | 5812 extension_specifics->set_enabled(true); |
5986 syncer::SyncData sync_data = | 5813 syncer::SyncData sync_data = |
5987 syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); | 5814 syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); |
5988 syncer::SyncChange sync_change(FROM_HERE, | 5815 syncer::SyncChange sync_change(FROM_HERE, |
5989 syncer::SyncChange::ACTION_DELETE, | 5816 syncer::SyncChange::ACTION_DELETE, |
5990 sync_data); | 5817 sync_data); |
5991 syncer::SyncChangeList list(1); | 5818 syncer::SyncChangeList list(1); |
5992 list[0] = sync_change; | 5819 list[0] = sync_change; |
5993 | 5820 |
5994 // Should do nothing | 5821 // Should do nothing |
5995 extension_sync_service_->ProcessSyncChanges(FROM_HERE, list); | 5822 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); |
5996 EXPECT_TRUE(service_->GetExtensionById(good_crx, true)); | 5823 EXPECT_TRUE(service()->GetExtensionById(good_crx, true)); |
5997 } | 5824 } |
5998 | 5825 |
5999 { | 5826 { |
6000 extension_specifics->set_enabled(false); | 5827 extension_specifics->set_enabled(false); |
6001 syncer::SyncData sync_data = | 5828 syncer::SyncData sync_data = |
6002 syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); | 5829 syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); |
6003 syncer::SyncChange sync_change(FROM_HERE, | 5830 syncer::SyncChange sync_change(FROM_HERE, |
6004 syncer::SyncChange::ACTION_UPDATE, | 5831 syncer::SyncChange::ACTION_UPDATE, |
6005 sync_data); | 5832 sync_data); |
6006 syncer::SyncChangeList list(1); | 5833 syncer::SyncChangeList list(1); |
6007 list[0] = sync_change; | 5834 list[0] = sync_change; |
6008 | 5835 |
6009 // Should again do nothing. | 5836 // Should again do nothing. |
6010 extension_sync_service_->ProcessSyncChanges(FROM_HERE, list); | 5837 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); |
6011 EXPECT_TRUE(service_->GetExtensionById(good_crx, false)); | 5838 EXPECT_TRUE(service()->GetExtensionById(good_crx, false)); |
6012 } | 5839 } |
6013 } | 5840 } |
6014 | 5841 |
6015 TEST_F(ExtensionServiceTest, ProcessSyncDataSettings) { | 5842 TEST_F(ExtensionServiceTest, ProcessSyncDataSettings) { |
6016 InitializeEmptyExtensionService(); | 5843 InitializeEmptyExtensionService(); |
6017 InitializeProcessManager(); | 5844 InitializeProcessManager(); |
6018 InitializeExtensionSyncService(); | 5845 InitializeExtensionSyncService(); |
6019 syncer::FakeSyncChangeProcessor processor; | 5846 syncer::FakeSyncChangeProcessor processor; |
6020 extension_sync_service_->MergeDataAndStartSyncing( | 5847 extension_sync_service()->MergeDataAndStartSyncing( |
6021 syncer::EXTENSIONS, | 5848 syncer::EXTENSIONS, |
6022 syncer::SyncDataList(), | 5849 syncer::SyncDataList(), |
6023 scoped_ptr<syncer::SyncChangeProcessor>( | 5850 scoped_ptr<syncer::SyncChangeProcessor>( |
6024 new syncer::FakeSyncChangeProcessor), | 5851 new syncer::FakeSyncChangeProcessor), |
6025 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); | 5852 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); |
6026 | 5853 |
6027 InstallCRX(data_dir_.AppendASCII("good.crx"), INSTALL_NEW); | 5854 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); |
6028 EXPECT_TRUE(service_->IsExtensionEnabled(good_crx)); | 5855 EXPECT_TRUE(service()->IsExtensionEnabled(good_crx)); |
6029 EXPECT_FALSE(extensions::util::IsIncognitoEnabled(good_crx, profile_.get())); | 5856 EXPECT_FALSE(extensions::util::IsIncognitoEnabled(good_crx, profile())); |
6030 | 5857 |
6031 sync_pb::EntitySpecifics specifics; | 5858 sync_pb::EntitySpecifics specifics; |
6032 sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension(); | 5859 sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension(); |
6033 ext_specifics->set_id(good_crx); | 5860 ext_specifics->set_id(good_crx); |
6034 ext_specifics->set_version( | 5861 ext_specifics->set_version( |
6035 service_->GetInstalledExtension(good_crx)->version()->GetString()); | 5862 service()->GetInstalledExtension(good_crx)->version()->GetString()); |
6036 ext_specifics->set_enabled(false); | 5863 ext_specifics->set_enabled(false); |
6037 | 5864 |
6038 { | 5865 { |
6039 syncer::SyncData sync_data = | 5866 syncer::SyncData sync_data = |
6040 syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); | 5867 syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); |
6041 syncer::SyncChange sync_change(FROM_HERE, | 5868 syncer::SyncChange sync_change(FROM_HERE, |
6042 syncer::SyncChange::ACTION_UPDATE, | 5869 syncer::SyncChange::ACTION_UPDATE, |
6043 sync_data); | 5870 sync_data); |
6044 syncer::SyncChangeList list(1); | 5871 syncer::SyncChangeList list(1); |
6045 list[0] = sync_change; | 5872 list[0] = sync_change; |
6046 extension_sync_service_->ProcessSyncChanges(FROM_HERE, list); | 5873 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); |
6047 EXPECT_FALSE(service_->IsExtensionEnabled(good_crx)); | 5874 EXPECT_FALSE(service()->IsExtensionEnabled(good_crx)); |
6048 EXPECT_FALSE( | 5875 EXPECT_FALSE(extensions::util::IsIncognitoEnabled(good_crx, profile())); |
6049 extensions::util::IsIncognitoEnabled(good_crx, profile_.get())); | |
6050 } | 5876 } |
6051 | 5877 |
6052 { | 5878 { |
6053 ext_specifics->set_enabled(true); | 5879 ext_specifics->set_enabled(true); |
6054 ext_specifics->set_incognito_enabled(true); | 5880 ext_specifics->set_incognito_enabled(true); |
6055 syncer::SyncData sync_data = | 5881 syncer::SyncData sync_data = |
6056 syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); | 5882 syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); |
6057 syncer::SyncChange sync_change(FROM_HERE, | 5883 syncer::SyncChange sync_change(FROM_HERE, |
6058 syncer::SyncChange::ACTION_UPDATE, | 5884 syncer::SyncChange::ACTION_UPDATE, |
6059 sync_data); | 5885 sync_data); |
6060 syncer::SyncChangeList list(1); | 5886 syncer::SyncChangeList list(1); |
6061 list[0] = sync_change; | 5887 list[0] = sync_change; |
6062 extension_sync_service_->ProcessSyncChanges(FROM_HERE, list); | 5888 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); |
6063 EXPECT_TRUE(service_->IsExtensionEnabled(good_crx)); | 5889 EXPECT_TRUE(service()->IsExtensionEnabled(good_crx)); |
6064 EXPECT_TRUE(extensions::util::IsIncognitoEnabled(good_crx, profile_.get())); | 5890 EXPECT_TRUE(extensions::util::IsIncognitoEnabled(good_crx, profile())); |
6065 } | 5891 } |
6066 | 5892 |
6067 { | 5893 { |
6068 ext_specifics->set_enabled(false); | 5894 ext_specifics->set_enabled(false); |
6069 ext_specifics->set_incognito_enabled(true); | 5895 ext_specifics->set_incognito_enabled(true); |
6070 syncer::SyncData sync_data = | 5896 syncer::SyncData sync_data = |
6071 syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); | 5897 syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); |
6072 syncer::SyncChange sync_change(FROM_HERE, | 5898 syncer::SyncChange sync_change(FROM_HERE, |
6073 syncer::SyncChange::ACTION_UPDATE, | 5899 syncer::SyncChange::ACTION_UPDATE, |
6074 sync_data); | 5900 sync_data); |
6075 syncer::SyncChangeList list(1); | 5901 syncer::SyncChangeList list(1); |
6076 list[0] = sync_change; | 5902 list[0] = sync_change; |
6077 extension_sync_service_->ProcessSyncChanges(FROM_HERE, list); | 5903 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); |
6078 EXPECT_FALSE(service_->IsExtensionEnabled(good_crx)); | 5904 EXPECT_FALSE(service()->IsExtensionEnabled(good_crx)); |
6079 EXPECT_TRUE(extensions::util::IsIncognitoEnabled(good_crx, profile_.get())); | 5905 EXPECT_TRUE(extensions::util::IsIncognitoEnabled(good_crx, profile())); |
6080 } | 5906 } |
6081 | 5907 |
6082 EXPECT_FALSE(service_->pending_extension_manager()->IsIdPending(good_crx)); | 5908 EXPECT_FALSE(service()->pending_extension_manager()->IsIdPending(good_crx)); |
6083 } | 5909 } |
6084 | 5910 |
6085 TEST_F(ExtensionServiceTest, ProcessSyncDataTerminatedExtension) { | 5911 TEST_F(ExtensionServiceTest, ProcessSyncDataTerminatedExtension) { |
6086 InitializeExtensionServiceWithUpdater(); | 5912 InitializeExtensionServiceWithUpdater(); |
6087 InitializeExtensionSyncService(); | 5913 InitializeExtensionSyncService(); |
6088 syncer::FakeSyncChangeProcessor processor; | 5914 syncer::FakeSyncChangeProcessor processor; |
6089 extension_sync_service_->MergeDataAndStartSyncing( | 5915 extension_sync_service()->MergeDataAndStartSyncing( |
6090 syncer::EXTENSIONS, | 5916 syncer::EXTENSIONS, |
6091 syncer::SyncDataList(), | 5917 syncer::SyncDataList(), |
6092 scoped_ptr<syncer::SyncChangeProcessor>( | 5918 scoped_ptr<syncer::SyncChangeProcessor>( |
6093 new syncer::FakeSyncChangeProcessor), | 5919 new syncer::FakeSyncChangeProcessor), |
6094 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); | 5920 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); |
6095 | 5921 |
6096 InstallCRX(data_dir_.AppendASCII("good.crx"), INSTALL_NEW); | 5922 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); |
6097 TerminateExtension(good_crx); | 5923 TerminateExtension(good_crx); |
6098 EXPECT_TRUE(service_->IsExtensionEnabled(good_crx)); | 5924 EXPECT_TRUE(service()->IsExtensionEnabled(good_crx)); |
6099 EXPECT_FALSE(extensions::util::IsIncognitoEnabled(good_crx, profile_.get())); | 5925 EXPECT_FALSE(extensions::util::IsIncognitoEnabled(good_crx, profile())); |
6100 | 5926 |
6101 sync_pb::EntitySpecifics specifics; | 5927 sync_pb::EntitySpecifics specifics; |
6102 sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension(); | 5928 sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension(); |
6103 ext_specifics->set_id(good_crx); | 5929 ext_specifics->set_id(good_crx); |
6104 ext_specifics->set_version( | 5930 ext_specifics->set_version( |
6105 service_->GetInstalledExtension(good_crx)->version()->GetString()); | 5931 service()->GetInstalledExtension(good_crx)->version()->GetString()); |
6106 ext_specifics->set_enabled(false); | 5932 ext_specifics->set_enabled(false); |
6107 ext_specifics->set_incognito_enabled(true); | 5933 ext_specifics->set_incognito_enabled(true); |
6108 syncer::SyncData sync_data = | 5934 syncer::SyncData sync_data = |
6109 syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); | 5935 syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); |
6110 syncer::SyncChange sync_change(FROM_HERE, | 5936 syncer::SyncChange sync_change(FROM_HERE, |
6111 syncer::SyncChange::ACTION_UPDATE, | 5937 syncer::SyncChange::ACTION_UPDATE, |
6112 sync_data); | 5938 sync_data); |
6113 syncer::SyncChangeList list(1); | 5939 syncer::SyncChangeList list(1); |
6114 list[0] = sync_change; | 5940 list[0] = sync_change; |
6115 | 5941 |
6116 extension_sync_service_->ProcessSyncChanges(FROM_HERE, list); | 5942 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); |
6117 EXPECT_FALSE(service_->IsExtensionEnabled(good_crx)); | 5943 EXPECT_FALSE(service()->IsExtensionEnabled(good_crx)); |
6118 EXPECT_TRUE(extensions::util::IsIncognitoEnabled(good_crx, profile_.get())); | 5944 EXPECT_TRUE(extensions::util::IsIncognitoEnabled(good_crx, profile())); |
6119 | 5945 |
6120 EXPECT_FALSE(service_->pending_extension_manager()->IsIdPending(good_crx)); | 5946 EXPECT_FALSE(service()->pending_extension_manager()->IsIdPending(good_crx)); |
6121 } | 5947 } |
6122 | 5948 |
6123 TEST_F(ExtensionServiceTest, ProcessSyncDataVersionCheck) { | 5949 TEST_F(ExtensionServiceTest, ProcessSyncDataVersionCheck) { |
6124 InitializeExtensionServiceWithUpdater(); | 5950 InitializeExtensionServiceWithUpdater(); |
6125 InitializeExtensionSyncService(); | 5951 InitializeExtensionSyncService(); |
6126 syncer::FakeSyncChangeProcessor processor; | 5952 syncer::FakeSyncChangeProcessor processor; |
6127 extension_sync_service_->MergeDataAndStartSyncing( | 5953 extension_sync_service()->MergeDataAndStartSyncing( |
6128 syncer::EXTENSIONS, | 5954 syncer::EXTENSIONS, |
6129 syncer::SyncDataList(), | 5955 syncer::SyncDataList(), |
6130 scoped_ptr<syncer::SyncChangeProcessor>( | 5956 scoped_ptr<syncer::SyncChangeProcessor>( |
6131 new syncer::FakeSyncChangeProcessor), | 5957 new syncer::FakeSyncChangeProcessor), |
6132 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); | 5958 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); |
6133 | 5959 |
6134 InstallCRX(data_dir_.AppendASCII("good.crx"), INSTALL_NEW); | 5960 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); |
6135 EXPECT_TRUE(service_->IsExtensionEnabled(good_crx)); | 5961 EXPECT_TRUE(service()->IsExtensionEnabled(good_crx)); |
6136 EXPECT_FALSE(extensions::util::IsIncognitoEnabled(good_crx, profile_.get())); | 5962 EXPECT_FALSE(extensions::util::IsIncognitoEnabled(good_crx, profile())); |
6137 | 5963 |
6138 sync_pb::EntitySpecifics specifics; | 5964 sync_pb::EntitySpecifics specifics; |
6139 sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension(); | 5965 sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension(); |
6140 ext_specifics->set_id(good_crx); | 5966 ext_specifics->set_id(good_crx); |
6141 ext_specifics->set_enabled(true); | 5967 ext_specifics->set_enabled(true); |
6142 | 5968 |
6143 { | 5969 { |
6144 ext_specifics->set_version( | 5970 ext_specifics->set_version( |
6145 service_->GetInstalledExtension(good_crx)->version()->GetString()); | 5971 service()->GetInstalledExtension(good_crx)->version()->GetString()); |
6146 syncer::SyncData sync_data = | 5972 syncer::SyncData sync_data = |
6147 syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); | 5973 syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); |
6148 syncer::SyncChange sync_change(FROM_HERE, | 5974 syncer::SyncChange sync_change(FROM_HERE, |
6149 syncer::SyncChange::ACTION_UPDATE, | 5975 syncer::SyncChange::ACTION_UPDATE, |
6150 sync_data); | 5976 sync_data); |
6151 syncer::SyncChangeList list(1); | 5977 syncer::SyncChangeList list(1); |
6152 list[0] = sync_change; | 5978 list[0] = sync_change; |
6153 | 5979 |
6154 // Should do nothing if extension version == sync version. | 5980 // Should do nothing if extension version == sync version. |
6155 extension_sync_service_->ProcessSyncChanges(FROM_HERE, list); | 5981 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); |
6156 EXPECT_FALSE(service_->updater()->WillCheckSoon()); | 5982 EXPECT_FALSE(service()->updater()->WillCheckSoon()); |
6157 } | 5983 } |
6158 | 5984 |
6159 // Should do nothing if extension version > sync version (but see | 5985 // Should do nothing if extension version > sync version (but see |
6160 // the TODO in ProcessExtensionSyncData). | 5986 // the TODO in ProcessExtensionSyncData). |
6161 { | 5987 { |
6162 ext_specifics->set_version("0.0.0.0"); | 5988 ext_specifics->set_version("0.0.0.0"); |
6163 syncer::SyncData sync_data = | 5989 syncer::SyncData sync_data = |
6164 syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); | 5990 syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); |
6165 syncer::SyncChange sync_change(FROM_HERE, | 5991 syncer::SyncChange sync_change(FROM_HERE, |
6166 syncer::SyncChange::ACTION_UPDATE, | 5992 syncer::SyncChange::ACTION_UPDATE, |
6167 sync_data); | 5993 sync_data); |
6168 syncer::SyncChangeList list(1); | 5994 syncer::SyncChangeList list(1); |
6169 list[0] = sync_change; | 5995 list[0] = sync_change; |
6170 | 5996 |
6171 extension_sync_service_->ProcessSyncChanges(FROM_HERE, list); | 5997 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); |
6172 EXPECT_FALSE(service_->updater()->WillCheckSoon()); | 5998 EXPECT_FALSE(service()->updater()->WillCheckSoon()); |
6173 } | 5999 } |
6174 | 6000 |
6175 // Should kick off an update if extension version < sync version. | 6001 // Should kick off an update if extension version < sync version. |
6176 { | 6002 { |
6177 ext_specifics->set_version("9.9.9.9"); | 6003 ext_specifics->set_version("9.9.9.9"); |
6178 syncer::SyncData sync_data = | 6004 syncer::SyncData sync_data = |
6179 syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); | 6005 syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); |
6180 syncer::SyncChange sync_change(FROM_HERE, | 6006 syncer::SyncChange sync_change(FROM_HERE, |
6181 syncer::SyncChange::ACTION_UPDATE, | 6007 syncer::SyncChange::ACTION_UPDATE, |
6182 sync_data); | 6008 sync_data); |
6183 syncer::SyncChangeList list(1); | 6009 syncer::SyncChangeList list(1); |
6184 list[0] = sync_change; | 6010 list[0] = sync_change; |
6185 | 6011 |
6186 extension_sync_service_->ProcessSyncChanges(FROM_HERE, list); | 6012 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); |
6187 EXPECT_TRUE(service_->updater()->WillCheckSoon()); | 6013 EXPECT_TRUE(service()->updater()->WillCheckSoon()); |
6188 } | 6014 } |
6189 | 6015 |
6190 EXPECT_FALSE(service_->pending_extension_manager()->IsIdPending(good_crx)); | 6016 EXPECT_FALSE(service()->pending_extension_manager()->IsIdPending(good_crx)); |
6191 } | 6017 } |
6192 | 6018 |
6193 TEST_F(ExtensionServiceTest, ProcessSyncDataNotInstalled) { | 6019 TEST_F(ExtensionServiceTest, ProcessSyncDataNotInstalled) { |
6194 InitializeExtensionServiceWithUpdater(); | 6020 InitializeExtensionServiceWithUpdater(); |
6195 InitializeExtensionSyncService(); | 6021 InitializeExtensionSyncService(); |
6196 syncer::FakeSyncChangeProcessor processor; | 6022 syncer::FakeSyncChangeProcessor processor; |
6197 extension_sync_service_->MergeDataAndStartSyncing( | 6023 extension_sync_service()->MergeDataAndStartSyncing( |
6198 syncer::EXTENSIONS, | 6024 syncer::EXTENSIONS, |
6199 syncer::SyncDataList(), | 6025 syncer::SyncDataList(), |
6200 scoped_ptr<syncer::SyncChangeProcessor>( | 6026 scoped_ptr<syncer::SyncChangeProcessor>( |
6201 new syncer::FakeSyncChangeProcessor), | 6027 new syncer::FakeSyncChangeProcessor), |
6202 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); | 6028 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); |
6203 | 6029 |
6204 sync_pb::EntitySpecifics specifics; | 6030 sync_pb::EntitySpecifics specifics; |
6205 sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension(); | 6031 sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension(); |
6206 ext_specifics->set_id(good_crx); | 6032 ext_specifics->set_id(good_crx); |
6207 ext_specifics->set_enabled(false); | 6033 ext_specifics->set_enabled(false); |
6208 ext_specifics->set_incognito_enabled(true); | 6034 ext_specifics->set_incognito_enabled(true); |
6209 ext_specifics->set_update_url("http://www.google.com/"); | 6035 ext_specifics->set_update_url("http://www.google.com/"); |
6210 ext_specifics->set_version("1.2.3.4"); | 6036 ext_specifics->set_version("1.2.3.4"); |
6211 syncer::SyncData sync_data = | 6037 syncer::SyncData sync_data = |
6212 syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); | 6038 syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); |
6213 syncer::SyncChange sync_change(FROM_HERE, | 6039 syncer::SyncChange sync_change(FROM_HERE, |
6214 syncer::SyncChange::ACTION_UPDATE, | 6040 syncer::SyncChange::ACTION_UPDATE, |
6215 sync_data); | 6041 sync_data); |
6216 syncer::SyncChangeList list(1); | 6042 syncer::SyncChangeList list(1); |
6217 list[0] = sync_change; | 6043 list[0] = sync_change; |
6218 | 6044 |
6219 | 6045 EXPECT_TRUE(service()->IsExtensionEnabled(good_crx)); |
6220 EXPECT_TRUE(service_->IsExtensionEnabled(good_crx)); | 6046 EXPECT_FALSE(extensions::util::IsIncognitoEnabled(good_crx, profile())); |
6221 EXPECT_FALSE(extensions::util::IsIncognitoEnabled(good_crx, profile_.get())); | 6047 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); |
6222 extension_sync_service_->ProcessSyncChanges(FROM_HERE, list); | 6048 EXPECT_TRUE(service()->updater()->WillCheckSoon()); |
6223 EXPECT_TRUE(service_->updater()->WillCheckSoon()); | 6049 EXPECT_FALSE(service()->IsExtensionEnabled(good_crx)); |
6224 EXPECT_FALSE(service_->IsExtensionEnabled(good_crx)); | 6050 EXPECT_TRUE(extensions::util::IsIncognitoEnabled(good_crx, profile())); |
6225 EXPECT_TRUE(extensions::util::IsIncognitoEnabled(good_crx, profile_.get())); | |
6226 | 6051 |
6227 const extensions::PendingExtensionInfo* info; | 6052 const extensions::PendingExtensionInfo* info; |
6228 EXPECT_TRUE((info = service_->pending_extension_manager()-> | 6053 EXPECT_TRUE( |
6229 GetById(good_crx))); | 6054 (info = service()->pending_extension_manager()->GetById(good_crx))); |
6230 EXPECT_EQ(ext_specifics->update_url(), info->update_url().spec()); | 6055 EXPECT_EQ(ext_specifics->update_url(), info->update_url().spec()); |
6231 EXPECT_TRUE(info->is_from_sync()); | 6056 EXPECT_TRUE(info->is_from_sync()); |
6232 EXPECT_TRUE(info->install_silently()); | 6057 EXPECT_TRUE(info->install_silently()); |
6233 EXPECT_EQ(Manifest::INTERNAL, info->install_source()); | 6058 EXPECT_EQ(Manifest::INTERNAL, info->install_source()); |
6234 // TODO(akalin): Figure out a way to test |info.ShouldAllowInstall()|. | 6059 // TODO(akalin): Figure out a way to test |info.ShouldAllowInstall()|. |
6235 } | 6060 } |
6236 | 6061 |
6237 TEST_F(ExtensionServiceTest, InstallPriorityExternalUpdateUrl) { | 6062 TEST_F(ExtensionServiceTest, InstallPriorityExternalUpdateUrl) { |
6238 InitializeEmptyExtensionService(); | 6063 InitializeEmptyExtensionService(); |
6239 | 6064 |
6240 base::FilePath path = data_dir_.AppendASCII("good.crx"); | 6065 base::FilePath path = data_dir().AppendASCII("good.crx"); |
6241 InstallCRX(path, INSTALL_NEW); | 6066 InstallCRX(path, INSTALL_NEW); |
6242 ValidatePrefKeyCount(1u); | 6067 ValidatePrefKeyCount(1u); |
6243 ValidateIntegerPref(good_crx, "state", Extension::ENABLED); | 6068 ValidateIntegerPref(good_crx, "state", Extension::ENABLED); |
6244 ValidateIntegerPref(good_crx, "location", Manifest::INTERNAL); | 6069 ValidateIntegerPref(good_crx, "location", Manifest::INTERNAL); |
6245 | 6070 |
6246 extensions::PendingExtensionManager* pending = | 6071 extensions::PendingExtensionManager* pending = |
6247 service_->pending_extension_manager(); | 6072 service()->pending_extension_manager(); |
6248 EXPECT_FALSE(pending->IsIdPending(kGoodId)); | 6073 EXPECT_FALSE(pending->IsIdPending(kGoodId)); |
6249 | 6074 |
6250 // Skip install when the location is the same. | 6075 // Skip install when the location is the same. |
6251 EXPECT_FALSE(service_->OnExternalExtensionUpdateUrlFound(kGoodId, | 6076 EXPECT_FALSE( |
6252 std::string(), | 6077 service()->OnExternalExtensionUpdateUrlFound(kGoodId, |
6253 GURL(kGoodUpdateURL), | 6078 std::string(), |
6254 Manifest::INTERNAL, | 6079 GURL(kGoodUpdateURL), |
6255 Extension::NO_FLAGS, | 6080 Manifest::INTERNAL, |
6256 false)); | 6081 Extension::NO_FLAGS, |
| 6082 false)); |
6257 EXPECT_FALSE(pending->IsIdPending(kGoodId)); | 6083 EXPECT_FALSE(pending->IsIdPending(kGoodId)); |
6258 | 6084 |
6259 // Install when the location has higher priority. | 6085 // Install when the location has higher priority. |
6260 EXPECT_TRUE(service_->OnExternalExtensionUpdateUrlFound( | 6086 EXPECT_TRUE(service()->OnExternalExtensionUpdateUrlFound( |
6261 kGoodId, | 6087 kGoodId, |
6262 std::string(), | 6088 std::string(), |
6263 GURL(kGoodUpdateURL), | 6089 GURL(kGoodUpdateURL), |
6264 Manifest::EXTERNAL_POLICY_DOWNLOAD, | 6090 Manifest::EXTERNAL_POLICY_DOWNLOAD, |
6265 Extension::NO_FLAGS, | 6091 Extension::NO_FLAGS, |
6266 false)); | 6092 false)); |
6267 EXPECT_TRUE(pending->IsIdPending(kGoodId)); | 6093 EXPECT_TRUE(pending->IsIdPending(kGoodId)); |
6268 | 6094 |
6269 // Try the low priority again. Should be rejected. | 6095 // Try the low priority again. Should be rejected. |
6270 EXPECT_FALSE(service_->OnExternalExtensionUpdateUrlFound( | 6096 EXPECT_FALSE(service()->OnExternalExtensionUpdateUrlFound( |
6271 kGoodId, | 6097 kGoodId, |
6272 std::string(), | 6098 std::string(), |
6273 GURL(kGoodUpdateURL), | 6099 GURL(kGoodUpdateURL), |
6274 Manifest::EXTERNAL_PREF_DOWNLOAD, | 6100 Manifest::EXTERNAL_PREF_DOWNLOAD, |
6275 Extension::NO_FLAGS, | 6101 Extension::NO_FLAGS, |
6276 false)); | 6102 false)); |
6277 // The existing record should still be present in the pending extension | 6103 // The existing record should still be present in the pending extension |
6278 // manager. | 6104 // manager. |
6279 EXPECT_TRUE(pending->IsIdPending(kGoodId)); | 6105 EXPECT_TRUE(pending->IsIdPending(kGoodId)); |
6280 | 6106 |
6281 pending->Remove(kGoodId); | 6107 pending->Remove(kGoodId); |
6282 | 6108 |
6283 // Skip install when the location has the same priority as the installed | 6109 // Skip install when the location has the same priority as the installed |
6284 // location. | 6110 // location. |
6285 EXPECT_FALSE(service_->OnExternalExtensionUpdateUrlFound(kGoodId, | 6111 EXPECT_FALSE( |
6286 std::string(), | 6112 service()->OnExternalExtensionUpdateUrlFound(kGoodId, |
6287 GURL(kGoodUpdateURL), | 6113 std::string(), |
6288 Manifest::INTERNAL, | 6114 GURL(kGoodUpdateURL), |
6289 Extension::NO_FLAGS, | 6115 Manifest::INTERNAL, |
6290 false)); | 6116 Extension::NO_FLAGS, |
| 6117 false)); |
6291 | 6118 |
6292 EXPECT_FALSE(pending->IsIdPending(kGoodId)); | 6119 EXPECT_FALSE(pending->IsIdPending(kGoodId)); |
6293 } | 6120 } |
6294 | 6121 |
6295 TEST_F(ExtensionServiceTest, InstallPriorityExternalLocalFile) { | 6122 TEST_F(ExtensionServiceTest, InstallPriorityExternalLocalFile) { |
6296 Version older_version("0.1.0.0"); | 6123 Version older_version("0.1.0.0"); |
6297 Version newer_version("2.0.0.0"); | 6124 Version newer_version("2.0.0.0"); |
6298 | 6125 |
6299 // We don't want the extension to be installed. A path that doesn't | 6126 // We don't want the extension to be installed. A path that doesn't |
6300 // point to a valid CRX ensures this. | 6127 // point to a valid CRX ensures this. |
(...skipping 13 matching lines...) Expand all Loading... |
6314 Manifest::GetHigherPriorityLocation(Manifest::EXTERNAL_REGISTRY, | 6141 Manifest::GetHigherPriorityLocation(Manifest::EXTERNAL_REGISTRY, |
6315 Manifest::EXTERNAL_PREF)); | 6142 Manifest::EXTERNAL_PREF)); |
6316 ASSERT_EQ(Manifest::EXTERNAL_REGISTRY, | 6143 ASSERT_EQ(Manifest::EXTERNAL_REGISTRY, |
6317 Manifest::GetHigherPriorityLocation(Manifest::EXTERNAL_REGISTRY, | 6144 Manifest::GetHigherPriorityLocation(Manifest::EXTERNAL_REGISTRY, |
6318 Manifest::INTERNAL)); | 6145 Manifest::INTERNAL)); |
6319 ASSERT_EQ(Manifest::EXTERNAL_PREF, | 6146 ASSERT_EQ(Manifest::EXTERNAL_PREF, |
6320 Manifest::GetHigherPriorityLocation(Manifest::EXTERNAL_PREF, | 6147 Manifest::GetHigherPriorityLocation(Manifest::EXTERNAL_PREF, |
6321 Manifest::INTERNAL)); | 6148 Manifest::INTERNAL)); |
6322 | 6149 |
6323 extensions::PendingExtensionManager* pending = | 6150 extensions::PendingExtensionManager* pending = |
6324 service_->pending_extension_manager(); | 6151 service()->pending_extension_manager(); |
6325 EXPECT_FALSE(pending->IsIdPending(kGoodId)); | 6152 EXPECT_FALSE(pending->IsIdPending(kGoodId)); |
6326 | 6153 |
6327 { | 6154 { |
6328 // Simulate an external source adding the extension as INTERNAL. | 6155 // Simulate an external source adding the extension as INTERNAL. |
6329 content::WindowedNotificationObserver observer( | 6156 content::WindowedNotificationObserver observer( |
6330 chrome::NOTIFICATION_CRX_INSTALLER_DONE, | 6157 chrome::NOTIFICATION_CRX_INSTALLER_DONE, |
6331 content::NotificationService::AllSources()); | 6158 content::NotificationService::AllSources()); |
6332 EXPECT_TRUE( | 6159 EXPECT_TRUE(service()->OnExternalExtensionFileFound(kGoodId, |
6333 service_->OnExternalExtensionFileFound( | 6160 &older_version, |
6334 kGoodId, &older_version, kInvalidPathToCrx, | 6161 kInvalidPathToCrx, |
6335 Manifest::INTERNAL, kCreationFlags, kDontMarkAcknowledged)); | 6162 Manifest::INTERNAL, |
| 6163 kCreationFlags, |
| 6164 kDontMarkAcknowledged)); |
6336 EXPECT_TRUE(pending->IsIdPending(kGoodId)); | 6165 EXPECT_TRUE(pending->IsIdPending(kGoodId)); |
6337 observer.Wait(); | 6166 observer.Wait(); |
6338 VerifyCrxInstall(kInvalidPathToCrx, INSTALL_FAILED); | 6167 VerifyCrxInstall(kInvalidPathToCrx, INSTALL_FAILED); |
6339 } | 6168 } |
6340 | 6169 |
6341 { | 6170 { |
6342 // Simulate an external source adding the extension as EXTERNAL_PREF. | 6171 // Simulate an external source adding the extension as EXTERNAL_PREF. |
6343 content::WindowedNotificationObserver observer( | 6172 content::WindowedNotificationObserver observer( |
6344 chrome::NOTIFICATION_CRX_INSTALLER_DONE, | 6173 chrome::NOTIFICATION_CRX_INSTALLER_DONE, |
6345 content::NotificationService::AllSources()); | 6174 content::NotificationService::AllSources()); |
6346 EXPECT_TRUE( | 6175 EXPECT_TRUE(service()->OnExternalExtensionFileFound(kGoodId, |
6347 service_->OnExternalExtensionFileFound( | 6176 &older_version, |
6348 kGoodId, &older_version, kInvalidPathToCrx, | 6177 kInvalidPathToCrx, |
6349 Manifest::EXTERNAL_PREF, kCreationFlags, kDontMarkAcknowledged)); | 6178 Manifest::EXTERNAL_PREF, |
| 6179 kCreationFlags, |
| 6180 kDontMarkAcknowledged)); |
6350 EXPECT_TRUE(pending->IsIdPending(kGoodId)); | 6181 EXPECT_TRUE(pending->IsIdPending(kGoodId)); |
6351 observer.Wait(); | 6182 observer.Wait(); |
6352 VerifyCrxInstall(kInvalidPathToCrx, INSTALL_FAILED); | 6183 VerifyCrxInstall(kInvalidPathToCrx, INSTALL_FAILED); |
6353 } | 6184 } |
6354 | 6185 |
6355 // Simulate an external source adding as EXTERNAL_PREF again. | 6186 // Simulate an external source adding as EXTERNAL_PREF again. |
6356 // This is rejected because the version and the location are the same as | 6187 // This is rejected because the version and the location are the same as |
6357 // the previous installation, which is still pending. | 6188 // the previous installation, which is still pending. |
6358 EXPECT_FALSE( | 6189 EXPECT_FALSE(service()->OnExternalExtensionFileFound(kGoodId, |
6359 service_->OnExternalExtensionFileFound( | 6190 &older_version, |
6360 kGoodId, &older_version, kInvalidPathToCrx, | 6191 kInvalidPathToCrx, |
6361 Manifest::EXTERNAL_PREF, kCreationFlags, kDontMarkAcknowledged)); | 6192 Manifest::EXTERNAL_PREF, |
| 6193 kCreationFlags, |
| 6194 kDontMarkAcknowledged)); |
6362 EXPECT_TRUE(pending->IsIdPending(kGoodId)); | 6195 EXPECT_TRUE(pending->IsIdPending(kGoodId)); |
6363 | 6196 |
6364 // Try INTERNAL again. Should fail. | 6197 // Try INTERNAL again. Should fail. |
6365 EXPECT_FALSE( | 6198 EXPECT_FALSE(service()->OnExternalExtensionFileFound(kGoodId, |
6366 service_->OnExternalExtensionFileFound( | 6199 &older_version, |
6367 kGoodId, &older_version, kInvalidPathToCrx, | 6200 kInvalidPathToCrx, |
6368 Manifest::INTERNAL, kCreationFlags, kDontMarkAcknowledged)); | 6201 Manifest::INTERNAL, |
| 6202 kCreationFlags, |
| 6203 kDontMarkAcknowledged)); |
6369 EXPECT_TRUE(pending->IsIdPending(kGoodId)); | 6204 EXPECT_TRUE(pending->IsIdPending(kGoodId)); |
6370 | 6205 |
6371 { | 6206 { |
6372 // Now the registry adds the extension. | 6207 // Now the registry adds the extension. |
6373 content::WindowedNotificationObserver observer( | 6208 content::WindowedNotificationObserver observer( |
6374 chrome::NOTIFICATION_CRX_INSTALLER_DONE, | 6209 chrome::NOTIFICATION_CRX_INSTALLER_DONE, |
6375 content::NotificationService::AllSources()); | 6210 content::NotificationService::AllSources()); |
6376 EXPECT_TRUE( | 6211 EXPECT_TRUE( |
6377 service_->OnExternalExtensionFileFound(kGoodId, | 6212 service()->OnExternalExtensionFileFound(kGoodId, |
6378 &older_version, | 6213 &older_version, |
6379 kInvalidPathToCrx, | 6214 kInvalidPathToCrx, |
6380 Manifest::EXTERNAL_REGISTRY, | 6215 Manifest::EXTERNAL_REGISTRY, |
6381 kCreationFlags, | 6216 kCreationFlags, |
6382 kDontMarkAcknowledged)); | 6217 kDontMarkAcknowledged)); |
6383 EXPECT_TRUE(pending->IsIdPending(kGoodId)); | 6218 EXPECT_TRUE(pending->IsIdPending(kGoodId)); |
6384 observer.Wait(); | 6219 observer.Wait(); |
6385 VerifyCrxInstall(kInvalidPathToCrx, INSTALL_FAILED); | 6220 VerifyCrxInstall(kInvalidPathToCrx, INSTALL_FAILED); |
6386 } | 6221 } |
6387 | 6222 |
6388 // Registry outranks both external pref and internal, so both fail. | 6223 // Registry outranks both external pref and internal, so both fail. |
6389 EXPECT_FALSE( | 6224 EXPECT_FALSE(service()->OnExternalExtensionFileFound(kGoodId, |
6390 service_->OnExternalExtensionFileFound( | 6225 &older_version, |
6391 kGoodId, &older_version, kInvalidPathToCrx, | 6226 kInvalidPathToCrx, |
6392 Manifest::EXTERNAL_PREF, kCreationFlags, kDontMarkAcknowledged)); | 6227 Manifest::EXTERNAL_PREF, |
| 6228 kCreationFlags, |
| 6229 kDontMarkAcknowledged)); |
6393 EXPECT_TRUE(pending->IsIdPending(kGoodId)); | 6230 EXPECT_TRUE(pending->IsIdPending(kGoodId)); |
6394 | 6231 |
6395 EXPECT_FALSE( | 6232 EXPECT_FALSE(service()->OnExternalExtensionFileFound(kGoodId, |
6396 service_->OnExternalExtensionFileFound( | 6233 &older_version, |
6397 kGoodId, &older_version, kInvalidPathToCrx, | 6234 kInvalidPathToCrx, |
6398 Manifest::INTERNAL, kCreationFlags, kDontMarkAcknowledged)); | 6235 Manifest::INTERNAL, |
| 6236 kCreationFlags, |
| 6237 kDontMarkAcknowledged)); |
6399 EXPECT_TRUE(pending->IsIdPending(kGoodId)); | 6238 EXPECT_TRUE(pending->IsIdPending(kGoodId)); |
6400 | 6239 |
6401 pending->Remove(kGoodId); | 6240 pending->Remove(kGoodId); |
6402 | 6241 |
6403 // Install the extension. | 6242 // Install the extension. |
6404 base::FilePath path = data_dir_.AppendASCII("good.crx"); | 6243 base::FilePath path = data_dir().AppendASCII("good.crx"); |
6405 const Extension* ext = InstallCRX(path, INSTALL_NEW); | 6244 const Extension* ext = InstallCRX(path, INSTALL_NEW); |
6406 ValidatePrefKeyCount(1u); | 6245 ValidatePrefKeyCount(1u); |
6407 ValidateIntegerPref(good_crx, "state", Extension::ENABLED); | 6246 ValidateIntegerPref(good_crx, "state", Extension::ENABLED); |
6408 ValidateIntegerPref(good_crx, "location", Manifest::INTERNAL); | 6247 ValidateIntegerPref(good_crx, "location", Manifest::INTERNAL); |
6409 | 6248 |
6410 // Now test the logic of OnExternalExtensionFileFound() when the extension | 6249 // Now test the logic of OnExternalExtensionFileFound() when the extension |
6411 // being added is already installed. | 6250 // being added is already installed. |
6412 | 6251 |
6413 // Tests assume |older_version| is less than the installed version, and | 6252 // Tests assume |older_version| is less than the installed version, and |
6414 // |newer_version| is greater. Verify this: | 6253 // |newer_version| is greater. Verify this: |
6415 ASSERT_TRUE(older_version.IsOlderThan(ext->VersionString())); | 6254 ASSERT_TRUE(older_version.IsOlderThan(ext->VersionString())); |
6416 ASSERT_TRUE(ext->version()->IsOlderThan(newer_version.GetString())); | 6255 ASSERT_TRUE(ext->version()->IsOlderThan(newer_version.GetString())); |
6417 | 6256 |
6418 // An external install for the same location should fail if the version is | 6257 // An external install for the same location should fail if the version is |
6419 // older, or the same, and succeed if the version is newer. | 6258 // older, or the same, and succeed if the version is newer. |
6420 | 6259 |
6421 // Older than the installed version... | 6260 // Older than the installed version... |
6422 EXPECT_FALSE( | 6261 EXPECT_FALSE(service()->OnExternalExtensionFileFound(kGoodId, |
6423 service_->OnExternalExtensionFileFound( | 6262 &older_version, |
6424 kGoodId, &older_version, kInvalidPathToCrx, | 6263 kInvalidPathToCrx, |
6425 Manifest::INTERNAL, kCreationFlags, kDontMarkAcknowledged)); | 6264 Manifest::INTERNAL, |
| 6265 kCreationFlags, |
| 6266 kDontMarkAcknowledged)); |
6426 EXPECT_FALSE(pending->IsIdPending(kGoodId)); | 6267 EXPECT_FALSE(pending->IsIdPending(kGoodId)); |
6427 | 6268 |
6428 // Same version as the installed version... | 6269 // Same version as the installed version... |
6429 EXPECT_FALSE( | 6270 EXPECT_FALSE(service()->OnExternalExtensionFileFound(kGoodId, |
6430 service_->OnExternalExtensionFileFound( | 6271 ext->version(), |
6431 kGoodId, ext->version(), kInvalidPathToCrx, | 6272 kInvalidPathToCrx, |
6432 Manifest::INTERNAL, kCreationFlags, kDontMarkAcknowledged)); | 6273 Manifest::INTERNAL, |
| 6274 kCreationFlags, |
| 6275 kDontMarkAcknowledged)); |
6433 EXPECT_FALSE(pending->IsIdPending(kGoodId)); | 6276 EXPECT_FALSE(pending->IsIdPending(kGoodId)); |
6434 | 6277 |
6435 // Newer than the installed version... | 6278 // Newer than the installed version... |
6436 EXPECT_TRUE( | 6279 EXPECT_TRUE(service()->OnExternalExtensionFileFound(kGoodId, |
6437 service_->OnExternalExtensionFileFound( | 6280 &newer_version, |
6438 kGoodId, &newer_version, kInvalidPathToCrx, | 6281 kInvalidPathToCrx, |
6439 Manifest::INTERNAL, kCreationFlags, kDontMarkAcknowledged)); | 6282 Manifest::INTERNAL, |
| 6283 kCreationFlags, |
| 6284 kDontMarkAcknowledged)); |
6440 EXPECT_TRUE(pending->IsIdPending(kGoodId)); | 6285 EXPECT_TRUE(pending->IsIdPending(kGoodId)); |
6441 | 6286 |
6442 // An external install for a higher priority install source should succeed | 6287 // An external install for a higher priority install source should succeed |
6443 // if the version is greater. |older_version| is not... | 6288 // if the version is greater. |older_version| is not... |
6444 EXPECT_FALSE( | 6289 EXPECT_FALSE(service()->OnExternalExtensionFileFound(kGoodId, |
6445 service_->OnExternalExtensionFileFound( | 6290 &older_version, |
6446 kGoodId, &older_version, kInvalidPathToCrx, | 6291 kInvalidPathToCrx, |
6447 Manifest::EXTERNAL_PREF, kCreationFlags, kDontMarkAcknowledged)); | 6292 Manifest::EXTERNAL_PREF, |
| 6293 kCreationFlags, |
| 6294 kDontMarkAcknowledged)); |
6448 EXPECT_TRUE(pending->IsIdPending(kGoodId)); | 6295 EXPECT_TRUE(pending->IsIdPending(kGoodId)); |
6449 | 6296 |
6450 // |newer_version| is newer. | 6297 // |newer_version| is newer. |
6451 EXPECT_TRUE( | 6298 EXPECT_TRUE(service()->OnExternalExtensionFileFound(kGoodId, |
6452 service_->OnExternalExtensionFileFound( | 6299 &newer_version, |
6453 kGoodId, &newer_version, kInvalidPathToCrx, | 6300 kInvalidPathToCrx, |
6454 Manifest::EXTERNAL_PREF, kCreationFlags, kDontMarkAcknowledged)); | 6301 Manifest::EXTERNAL_PREF, |
| 6302 kCreationFlags, |
| 6303 kDontMarkAcknowledged)); |
6455 EXPECT_TRUE(pending->IsIdPending(kGoodId)); | 6304 EXPECT_TRUE(pending->IsIdPending(kGoodId)); |
6456 | 6305 |
6457 // An external install for an even higher priority install source should | 6306 // An external install for an even higher priority install source should |
6458 // succeed if the version is greater. | 6307 // succeed if the version is greater. |
6459 EXPECT_TRUE( | 6308 EXPECT_TRUE( |
6460 service_->OnExternalExtensionFileFound( | 6309 service()->OnExternalExtensionFileFound(kGoodId, |
6461 kGoodId, &newer_version, kInvalidPathToCrx, | 6310 &newer_version, |
6462 Manifest::EXTERNAL_REGISTRY, kCreationFlags, kDontMarkAcknowledged)); | 6311 kInvalidPathToCrx, |
| 6312 Manifest::EXTERNAL_REGISTRY, |
| 6313 kCreationFlags, |
| 6314 kDontMarkAcknowledged)); |
6463 EXPECT_TRUE(pending->IsIdPending(kGoodId)); | 6315 EXPECT_TRUE(pending->IsIdPending(kGoodId)); |
6464 | 6316 |
6465 // Because EXTERNAL_PREF is a lower priority source than EXTERNAL_REGISTRY, | 6317 // Because EXTERNAL_PREF is a lower priority source than EXTERNAL_REGISTRY, |
6466 // adding from external pref will now fail. | 6318 // adding from external pref will now fail. |
6467 EXPECT_FALSE( | 6319 EXPECT_FALSE(service()->OnExternalExtensionFileFound(kGoodId, |
6468 service_->OnExternalExtensionFileFound( | 6320 &newer_version, |
6469 kGoodId, &newer_version, kInvalidPathToCrx, | 6321 kInvalidPathToCrx, |
6470 Manifest::EXTERNAL_PREF, kCreationFlags, kDontMarkAcknowledged)); | 6322 Manifest::EXTERNAL_PREF, |
| 6323 kCreationFlags, |
| 6324 kDontMarkAcknowledged)); |
6471 EXPECT_TRUE(pending->IsIdPending(kGoodId)); | 6325 EXPECT_TRUE(pending->IsIdPending(kGoodId)); |
6472 } | 6326 } |
6473 | 6327 |
6474 TEST_F(ExtensionServiceTest, ConcurrentExternalLocalFile) { | 6328 TEST_F(ExtensionServiceTest, ConcurrentExternalLocalFile) { |
6475 Version kVersion123("1.2.3"); | 6329 Version kVersion123("1.2.3"); |
6476 Version kVersion124("1.2.4"); | 6330 Version kVersion124("1.2.4"); |
6477 Version kVersion125("1.2.5"); | 6331 Version kVersion125("1.2.5"); |
6478 const base::FilePath kInvalidPathToCrx = base::FilePath(); | 6332 const base::FilePath kInvalidPathToCrx = base::FilePath(); |
6479 const int kCreationFlags = 0; | 6333 const int kCreationFlags = 0; |
6480 const bool kDontMarkAcknowledged = false; | 6334 const bool kDontMarkAcknowledged = false; |
6481 | 6335 |
6482 InitializeEmptyExtensionService(); | 6336 InitializeEmptyExtensionService(); |
6483 | 6337 |
6484 extensions::PendingExtensionManager* pending = | 6338 extensions::PendingExtensionManager* pending = |
6485 service_->pending_extension_manager(); | 6339 service()->pending_extension_manager(); |
6486 EXPECT_FALSE(pending->IsIdPending(kGoodId)); | 6340 EXPECT_FALSE(pending->IsIdPending(kGoodId)); |
6487 | 6341 |
6488 // An external provider starts installing from a local crx. | 6342 // An external provider starts installing from a local crx. |
6489 EXPECT_TRUE( | 6343 EXPECT_TRUE(service()->OnExternalExtensionFileFound(kGoodId, |
6490 service_->OnExternalExtensionFileFound( | 6344 &kVersion123, |
6491 kGoodId, &kVersion123, kInvalidPathToCrx, | 6345 kInvalidPathToCrx, |
6492 Manifest::EXTERNAL_PREF, kCreationFlags, kDontMarkAcknowledged)); | 6346 Manifest::EXTERNAL_PREF, |
| 6347 kCreationFlags, |
| 6348 kDontMarkAcknowledged)); |
6493 const extensions::PendingExtensionInfo* info; | 6349 const extensions::PendingExtensionInfo* info; |
6494 EXPECT_TRUE((info = pending->GetById(kGoodId))); | 6350 EXPECT_TRUE((info = pending->GetById(kGoodId))); |
6495 EXPECT_TRUE(info->version().IsValid()); | 6351 EXPECT_TRUE(info->version().IsValid()); |
6496 EXPECT_TRUE(info->version().Equals(kVersion123)); | 6352 EXPECT_TRUE(info->version().Equals(kVersion123)); |
6497 | 6353 |
6498 // Adding a newer version overrides the currently pending version. | 6354 // Adding a newer version overrides the currently pending version. |
6499 EXPECT_TRUE( | 6355 EXPECT_TRUE(service()->OnExternalExtensionFileFound(kGoodId, |
6500 service_->OnExternalExtensionFileFound( | 6356 &kVersion124, |
6501 kGoodId, &kVersion124, kInvalidPathToCrx, | 6357 kInvalidPathToCrx, |
6502 Manifest::EXTERNAL_PREF, kCreationFlags, kDontMarkAcknowledged)); | 6358 Manifest::EXTERNAL_PREF, |
| 6359 kCreationFlags, |
| 6360 kDontMarkAcknowledged)); |
6503 EXPECT_TRUE((info = pending->GetById(kGoodId))); | 6361 EXPECT_TRUE((info = pending->GetById(kGoodId))); |
6504 EXPECT_TRUE(info->version().IsValid()); | 6362 EXPECT_TRUE(info->version().IsValid()); |
6505 EXPECT_TRUE(info->version().Equals(kVersion124)); | 6363 EXPECT_TRUE(info->version().Equals(kVersion124)); |
6506 | 6364 |
6507 // Adding an older version fails. | 6365 // Adding an older version fails. |
6508 EXPECT_FALSE( | 6366 EXPECT_FALSE(service()->OnExternalExtensionFileFound(kGoodId, |
6509 service_->OnExternalExtensionFileFound( | 6367 &kVersion123, |
6510 kGoodId, &kVersion123, kInvalidPathToCrx, | 6368 kInvalidPathToCrx, |
6511 Manifest::EXTERNAL_PREF, kCreationFlags, kDontMarkAcknowledged)); | 6369 Manifest::EXTERNAL_PREF, |
| 6370 kCreationFlags, |
| 6371 kDontMarkAcknowledged)); |
6512 EXPECT_TRUE((info = pending->GetById(kGoodId))); | 6372 EXPECT_TRUE((info = pending->GetById(kGoodId))); |
6513 EXPECT_TRUE(info->version().IsValid()); | 6373 EXPECT_TRUE(info->version().IsValid()); |
6514 EXPECT_TRUE(info->version().Equals(kVersion124)); | 6374 EXPECT_TRUE(info->version().Equals(kVersion124)); |
6515 | 6375 |
6516 // Adding an older version fails even when coming from a higher-priority | 6376 // Adding an older version fails even when coming from a higher-priority |
6517 // location. | 6377 // location. |
6518 EXPECT_FALSE( | 6378 EXPECT_FALSE( |
6519 service_->OnExternalExtensionFileFound( | 6379 service()->OnExternalExtensionFileFound(kGoodId, |
6520 kGoodId, &kVersion123, kInvalidPathToCrx, | 6380 &kVersion123, |
6521 Manifest::EXTERNAL_REGISTRY, kCreationFlags, kDontMarkAcknowledged)); | 6381 kInvalidPathToCrx, |
| 6382 Manifest::EXTERNAL_REGISTRY, |
| 6383 kCreationFlags, |
| 6384 kDontMarkAcknowledged)); |
6522 EXPECT_TRUE((info = pending->GetById(kGoodId))); | 6385 EXPECT_TRUE((info = pending->GetById(kGoodId))); |
6523 EXPECT_TRUE(info->version().IsValid()); | 6386 EXPECT_TRUE(info->version().IsValid()); |
6524 EXPECT_TRUE(info->version().Equals(kVersion124)); | 6387 EXPECT_TRUE(info->version().Equals(kVersion124)); |
6525 | 6388 |
6526 // Adding the latest version from the webstore overrides a specific version. | 6389 // Adding the latest version from the webstore overrides a specific version. |
6527 GURL kUpdateUrl("http://example.com/update"); | 6390 GURL kUpdateUrl("http://example.com/update"); |
6528 EXPECT_TRUE(service_->OnExternalExtensionUpdateUrlFound( | 6391 EXPECT_TRUE(service()->OnExternalExtensionUpdateUrlFound( |
6529 kGoodId, | 6392 kGoodId, |
6530 std::string(), | 6393 std::string(), |
6531 kUpdateUrl, | 6394 kUpdateUrl, |
6532 Manifest::EXTERNAL_POLICY_DOWNLOAD, | 6395 Manifest::EXTERNAL_POLICY_DOWNLOAD, |
6533 Extension::NO_FLAGS, | 6396 Extension::NO_FLAGS, |
6534 false)); | 6397 false)); |
6535 EXPECT_TRUE((info = pending->GetById(kGoodId))); | 6398 EXPECT_TRUE((info = pending->GetById(kGoodId))); |
6536 EXPECT_FALSE(info->version().IsValid()); | 6399 EXPECT_FALSE(info->version().IsValid()); |
6537 } | 6400 } |
6538 | 6401 |
6539 // This makes sure we can package and install CRX files that use whitelisted | 6402 // This makes sure we can package and install CRX files that use whitelisted |
6540 // permissions. | 6403 // permissions. |
6541 TEST_F(ExtensionServiceTest, InstallWhitelistedExtension) { | 6404 TEST_F(ExtensionServiceTest, InstallWhitelistedExtension) { |
6542 std::string test_id = "hdkklepkcpckhnpgjnmbdfhehckloojk"; | 6405 std::string test_id = "hdkklepkcpckhnpgjnmbdfhehckloojk"; |
6543 CommandLine::ForCurrentProcess()->AppendSwitchASCII( | 6406 CommandLine::ForCurrentProcess()->AppendSwitchASCII( |
6544 extensions::switches::kWhitelistedExtensionID, test_id); | 6407 extensions::switches::kWhitelistedExtensionID, test_id); |
6545 | 6408 |
6546 InitializeEmptyExtensionService(); | 6409 InitializeEmptyExtensionService(); |
6547 base::FilePath path = data_dir_ | 6410 base::FilePath path = data_dir().AppendASCII("permissions"); |
6548 .AppendASCII("permissions"); | |
6549 base::FilePath pem_path = path | 6411 base::FilePath pem_path = path |
6550 .AppendASCII("whitelist.pem"); | 6412 .AppendASCII("whitelist.pem"); |
6551 path = path | 6413 path = path |
6552 .AppendASCII("whitelist"); | 6414 .AppendASCII("whitelist"); |
6553 | 6415 |
6554 const Extension* extension = PackAndInstallCRX(path, pem_path, INSTALL_NEW); | 6416 const Extension* extension = PackAndInstallCRX(path, pem_path, INSTALL_NEW); |
6555 EXPECT_EQ(0u, GetErrors().size()); | 6417 EXPECT_EQ(0u, GetErrors().size()); |
6556 ASSERT_EQ(1u, registry_->enabled_extensions().size()); | 6418 ASSERT_EQ(1u, registry()->enabled_extensions().size()); |
6557 EXPECT_EQ(test_id, extension->id()); | 6419 EXPECT_EQ(test_id, extension->id()); |
6558 } | 6420 } |
6559 | 6421 |
6560 // Test that when multiple sources try to install an extension, | 6422 // Test that when multiple sources try to install an extension, |
6561 // we consistently choose the right one. To make tests easy to read, | 6423 // we consistently choose the right one. To make tests easy to read, |
6562 // methods that fake requests to install crx files in several ways | 6424 // methods that fake requests to install crx files in several ways |
6563 // are provided. | 6425 // are provided. |
6564 class ExtensionSourcePriorityTest : public ExtensionServiceTest { | 6426 class ExtensionSourcePriorityTest : public ExtensionServiceTest { |
6565 public: | 6427 public: |
6566 virtual void SetUp() { | 6428 virtual void SetUp() { |
6567 ExtensionServiceTest::SetUp(); | 6429 ExtensionServiceTest::SetUp(); |
6568 | 6430 |
6569 // All tests use a single extension. Put the id and path in member vars | 6431 // All tests use a single extension. Put the id and path in member vars |
6570 // that all methods can read. | 6432 // that all methods can read. |
6571 crx_id_ = kGoodId; | 6433 crx_id_ = kGoodId; |
6572 crx_path_ = data_dir_.AppendASCII("good.crx"); | 6434 crx_path_ = data_dir().AppendASCII("good.crx"); |
6573 } | 6435 } |
6574 | 6436 |
6575 // Fake an external source adding a URL to fetch an extension from. | 6437 // Fake an external source adding a URL to fetch an extension from. |
6576 bool AddPendingExternalPrefUrl() { | 6438 bool AddPendingExternalPrefUrl() { |
6577 return service_->pending_extension_manager()->AddFromExternalUpdateUrl( | 6439 return service()->pending_extension_manager()->AddFromExternalUpdateUrl( |
6578 crx_id_, | 6440 crx_id_, |
6579 std::string(), | 6441 std::string(), |
6580 GURL(), | 6442 GURL(), |
6581 Manifest::EXTERNAL_PREF_DOWNLOAD, | 6443 Manifest::EXTERNAL_PREF_DOWNLOAD, |
6582 Extension::NO_FLAGS, | 6444 Extension::NO_FLAGS, |
6583 false); | 6445 false); |
6584 } | 6446 } |
6585 | 6447 |
6586 // Fake an external file from external_extensions.json. | 6448 // Fake an external file from external_extensions.json. |
6587 bool AddPendingExternalPrefFileInstall() { | 6449 bool AddPendingExternalPrefFileInstall() { |
6588 Version version("1.0.0.0"); | 6450 Version version("1.0.0.0"); |
6589 | 6451 |
6590 return service_->OnExternalExtensionFileFound( | 6452 return service()->OnExternalExtensionFileFound(crx_id_, |
6591 crx_id_, &version, crx_path_, Manifest::EXTERNAL_PREF, | 6453 &version, |
6592 Extension::NO_FLAGS, false); | 6454 crx_path_, |
| 6455 Manifest::EXTERNAL_PREF, |
| 6456 Extension::NO_FLAGS, |
| 6457 false); |
6593 } | 6458 } |
6594 | 6459 |
6595 // Fake a request from sync to install an extension. | 6460 // Fake a request from sync to install an extension. |
6596 bool AddPendingSyncInstall() { | 6461 bool AddPendingSyncInstall() { |
6597 return service_->pending_extension_manager()->AddFromSync( | 6462 return service()->pending_extension_manager()->AddFromSync( |
6598 crx_id_, | 6463 crx_id_, |
6599 GURL(kGoodUpdateURL), | 6464 GURL(kGoodUpdateURL), |
6600 &IsExtension, | 6465 &IsExtension, |
6601 kGoodInstallSilently, | 6466 kGoodInstallSilently, |
6602 kGoodRemoteInstall); | 6467 kGoodRemoteInstall); |
6603 } | 6468 } |
6604 | 6469 |
6605 // Fake a policy install. | 6470 // Fake a policy install. |
6606 bool AddPendingPolicyInstall() { | 6471 bool AddPendingPolicyInstall() { |
6607 // Get path to the CRX with id |kGoodId|. | 6472 // Get path to the CRX with id |kGoodId|. |
6608 return service_->OnExternalExtensionUpdateUrlFound( | 6473 return service()->OnExternalExtensionUpdateUrlFound( |
6609 crx_id_, | 6474 crx_id_, |
6610 std::string(), | 6475 std::string(), |
6611 GURL(), | 6476 GURL(), |
6612 Manifest::EXTERNAL_POLICY_DOWNLOAD, | 6477 Manifest::EXTERNAL_POLICY_DOWNLOAD, |
6613 Extension::NO_FLAGS, | 6478 Extension::NO_FLAGS, |
6614 false); | 6479 false); |
6615 } | 6480 } |
6616 | 6481 |
6617 // Get the install source of a pending extension. | 6482 // Get the install source of a pending extension. |
6618 Manifest::Location GetPendingLocation() { | 6483 Manifest::Location GetPendingLocation() { |
6619 const extensions::PendingExtensionInfo* info; | 6484 const extensions::PendingExtensionInfo* info; |
6620 EXPECT_TRUE((info = service_->pending_extension_manager()-> | 6485 EXPECT_TRUE( |
6621 GetById(crx_id_))); | 6486 (info = service()->pending_extension_manager()->GetById(crx_id_))); |
6622 return info->install_source(); | 6487 return info->install_source(); |
6623 } | 6488 } |
6624 | 6489 |
6625 // Is an extension pending from a sync request? | 6490 // Is an extension pending from a sync request? |
6626 bool GetPendingIsFromSync() { | 6491 bool GetPendingIsFromSync() { |
6627 const extensions::PendingExtensionInfo* info; | 6492 const extensions::PendingExtensionInfo* info; |
6628 EXPECT_TRUE((info = service_->pending_extension_manager()-> | 6493 EXPECT_TRUE( |
6629 GetById(crx_id_))); | 6494 (info = service()->pending_extension_manager()->GetById(crx_id_))); |
6630 return info->is_from_sync(); | 6495 return info->is_from_sync(); |
6631 } | 6496 } |
6632 | 6497 |
6633 // Is the CRX id these tests use pending? | 6498 // Is the CRX id these tests use pending? |
6634 bool IsCrxPending() { | 6499 bool IsCrxPending() { |
6635 return service_->pending_extension_manager()->IsIdPending(crx_id_); | 6500 return service()->pending_extension_manager()->IsIdPending(crx_id_); |
6636 } | 6501 } |
6637 | 6502 |
6638 // Is an extension installed? | 6503 // Is an extension installed? |
6639 bool IsCrxInstalled() { | 6504 bool IsCrxInstalled() { |
6640 return (service_->GetExtensionById(crx_id_, true) != NULL); | 6505 return (service()->GetExtensionById(crx_id_, true) != NULL); |
6641 } | 6506 } |
6642 | 6507 |
6643 protected: | 6508 protected: |
6644 // All tests use a single extension. Making the id and path member | 6509 // All tests use a single extension. Making the id and path member |
6645 // vars avoids pasing the same argument to every method. | 6510 // vars avoids pasing the same argument to every method. |
6646 std::string crx_id_; | 6511 std::string crx_id_; |
6647 base::FilePath crx_path_; | 6512 base::FilePath crx_path_; |
6648 }; | 6513 }; |
6649 | 6514 |
6650 // Test that a pending request for installation of an external CRX from | 6515 // Test that a pending request for installation of an external CRX from |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6730 ASSERT_FALSE(AddPendingSyncInstall()); | 6595 ASSERT_FALSE(AddPendingSyncInstall()); |
6731 } | 6596 } |
6732 | 6597 |
6733 // Test that installing an external extension displays a GlobalError. | 6598 // Test that installing an external extension displays a GlobalError. |
6734 TEST_F(ExtensionServiceTest, ExternalInstallGlobalError) { | 6599 TEST_F(ExtensionServiceTest, ExternalInstallGlobalError) { |
6735 FeatureSwitch::ScopedOverride prompt( | 6600 FeatureSwitch::ScopedOverride prompt( |
6736 FeatureSwitch::prompt_for_external_extensions(), true); | 6601 FeatureSwitch::prompt_for_external_extensions(), true); |
6737 | 6602 |
6738 InitializeEmptyExtensionService(); | 6603 InitializeEmptyExtensionService(); |
6739 MockExtensionProvider* provider = | 6604 MockExtensionProvider* provider = |
6740 new MockExtensionProvider(service_, Manifest::EXTERNAL_PREF); | 6605 new MockExtensionProvider(service(), Manifest::EXTERNAL_PREF); |
6741 AddMockExternalProvider(provider); | 6606 AddMockExternalProvider(provider); |
6742 | 6607 |
6743 service_->UpdateExternalExtensionAlert(); | 6608 service()->UpdateExternalExtensionAlert(); |
6744 // Should return false, meaning there aren't any extensions that the user | 6609 // Should return false, meaning there aren't any extensions that the user |
6745 // needs to know about. | 6610 // needs to know about. |
6746 EXPECT_FALSE(extensions::HasExternalInstallError(service_)); | 6611 EXPECT_FALSE(extensions::HasExternalInstallError(service())); |
6747 | 6612 |
6748 // This is a normal extension, installed normally. | 6613 // This is a normal extension, installed normally. |
6749 // This should NOT trigger an alert. | 6614 // This should NOT trigger an alert. |
6750 set_extensions_enabled(true); | 6615 service()->set_extensions_enabled(true); |
6751 base::FilePath path = data_dir_.AppendASCII("good.crx"); | 6616 base::FilePath path = data_dir().AppendASCII("good.crx"); |
6752 InstallCRX(path, INSTALL_NEW); | 6617 InstallCRX(path, INSTALL_NEW); |
6753 | 6618 |
6754 service_->CheckForExternalUpdates(); | 6619 service()->CheckForExternalUpdates(); |
6755 base::RunLoop().RunUntilIdle(); | 6620 base::RunLoop().RunUntilIdle(); |
6756 EXPECT_FALSE(extensions::HasExternalInstallError(service_)); | 6621 EXPECT_FALSE(extensions::HasExternalInstallError(service())); |
6757 | 6622 |
6758 // A hosted app, installed externally. | 6623 // A hosted app, installed externally. |
6759 // This should NOT trigger an alert. | 6624 // This should NOT trigger an alert. |
6760 provider->UpdateOrAddExtension(hosted_app, "1.0.0.0", | 6625 provider->UpdateOrAddExtension( |
6761 data_dir_.AppendASCII("hosted_app.crx")); | 6626 hosted_app, "1.0.0.0", data_dir().AppendASCII("hosted_app.crx")); |
6762 | 6627 |
6763 content::WindowedNotificationObserver observer( | 6628 content::WindowedNotificationObserver observer( |
6764 chrome::NOTIFICATION_CRX_INSTALLER_DONE, | 6629 chrome::NOTIFICATION_CRX_INSTALLER_DONE, |
6765 content::NotificationService::AllSources()); | 6630 content::NotificationService::AllSources()); |
6766 service_->CheckForExternalUpdates(); | 6631 service()->CheckForExternalUpdates(); |
6767 observer.Wait(); | 6632 observer.Wait(); |
6768 EXPECT_FALSE(extensions::HasExternalInstallError(service_)); | 6633 EXPECT_FALSE(extensions::HasExternalInstallError(service())); |
6769 | 6634 |
6770 // Another normal extension, but installed externally. | 6635 // Another normal extension, but installed externally. |
6771 // This SHOULD trigger an alert. | 6636 // This SHOULD trigger an alert. |
6772 provider->UpdateOrAddExtension(page_action, "1.0.0.0", | 6637 provider->UpdateOrAddExtension( |
6773 data_dir_.AppendASCII("page_action.crx")); | 6638 page_action, "1.0.0.0", data_dir().AppendASCII("page_action.crx")); |
6774 | 6639 |
6775 content::WindowedNotificationObserver observer2( | 6640 content::WindowedNotificationObserver observer2( |
6776 chrome::NOTIFICATION_CRX_INSTALLER_DONE, | 6641 chrome::NOTIFICATION_CRX_INSTALLER_DONE, |
6777 content::NotificationService::AllSources()); | 6642 content::NotificationService::AllSources()); |
6778 service_->CheckForExternalUpdates(); | 6643 service()->CheckForExternalUpdates(); |
6779 observer2.Wait(); | 6644 observer2.Wait(); |
6780 EXPECT_TRUE(extensions::HasExternalInstallError(service_)); | 6645 EXPECT_TRUE(extensions::HasExternalInstallError(service())); |
6781 } | 6646 } |
6782 | 6647 |
6783 // Test that external extensions are initially disabled, and that enabling | 6648 // Test that external extensions are initially disabled, and that enabling |
6784 // them clears the prompt. | 6649 // them clears the prompt. |
6785 TEST_F(ExtensionServiceTest, ExternalInstallInitiallyDisabled) { | 6650 TEST_F(ExtensionServiceTest, ExternalInstallInitiallyDisabled) { |
6786 FeatureSwitch::ScopedOverride prompt( | 6651 FeatureSwitch::ScopedOverride prompt( |
6787 FeatureSwitch::prompt_for_external_extensions(), true); | 6652 FeatureSwitch::prompt_for_external_extensions(), true); |
6788 | 6653 |
6789 InitializeEmptyExtensionService(); | 6654 InitializeEmptyExtensionService(); |
6790 MockExtensionProvider* provider = | 6655 MockExtensionProvider* provider = |
6791 new MockExtensionProvider(service_, Manifest::EXTERNAL_PREF); | 6656 new MockExtensionProvider(service(), Manifest::EXTERNAL_PREF); |
6792 AddMockExternalProvider(provider); | 6657 AddMockExternalProvider(provider); |
6793 | 6658 |
6794 provider->UpdateOrAddExtension(page_action, "1.0.0.0", | 6659 provider->UpdateOrAddExtension( |
6795 data_dir_.AppendASCII("page_action.crx")); | 6660 page_action, "1.0.0.0", data_dir().AppendASCII("page_action.crx")); |
6796 | 6661 |
6797 content::WindowedNotificationObserver observer( | 6662 content::WindowedNotificationObserver observer( |
6798 chrome::NOTIFICATION_CRX_INSTALLER_DONE, | 6663 chrome::NOTIFICATION_CRX_INSTALLER_DONE, |
6799 content::NotificationService::AllSources()); | 6664 content::NotificationService::AllSources()); |
6800 service_->CheckForExternalUpdates(); | 6665 service()->CheckForExternalUpdates(); |
6801 observer.Wait(); | 6666 observer.Wait(); |
6802 EXPECT_TRUE(extensions::HasExternalInstallError(service_)); | 6667 EXPECT_TRUE(extensions::HasExternalInstallError(service())); |
6803 EXPECT_FALSE(service_->IsExtensionEnabled(page_action)); | 6668 EXPECT_FALSE(service()->IsExtensionEnabled(page_action)); |
6804 | 6669 |
6805 const Extension* extension = | 6670 const Extension* extension = |
6806 registry_->disabled_extensions().GetByID(page_action); | 6671 registry()->disabled_extensions().GetByID(page_action); |
6807 EXPECT_TRUE(extension); | 6672 EXPECT_TRUE(extension); |
6808 EXPECT_EQ(page_action, extension->id()); | 6673 EXPECT_EQ(page_action, extension->id()); |
6809 | 6674 |
6810 service_->EnableExtension(page_action); | 6675 service()->EnableExtension(page_action); |
6811 EXPECT_FALSE(extensions::HasExternalInstallError(service_)); | 6676 EXPECT_FALSE(extensions::HasExternalInstallError(service())); |
6812 EXPECT_TRUE(service_->IsExtensionEnabled(page_action)); | 6677 EXPECT_TRUE(service()->IsExtensionEnabled(page_action)); |
6813 } | 6678 } |
6814 | 6679 |
6815 // Test that installing multiple external extensions works. | 6680 // Test that installing multiple external extensions works. |
6816 // Flaky on windows; http://crbug.com/295757 . | 6681 // Flaky on windows; http://crbug.com/295757 . |
6817 #if defined(OS_WIN) | 6682 #if defined(OS_WIN) |
6818 #define MAYBE_ExternalInstallMultiple DISABLED_ExternalInstallMultiple | 6683 #define MAYBE_ExternalInstallMultiple DISABLED_ExternalInstallMultiple |
6819 #else | 6684 #else |
6820 #define MAYBE_ExternalInstallMultiple ExternalInstallMultiple | 6685 #define MAYBE_ExternalInstallMultiple ExternalInstallMultiple |
6821 #endif | 6686 #endif |
6822 TEST_F(ExtensionServiceTest, MAYBE_ExternalInstallMultiple) { | 6687 TEST_F(ExtensionServiceTest, MAYBE_ExternalInstallMultiple) { |
6823 FeatureSwitch::ScopedOverride prompt( | 6688 FeatureSwitch::ScopedOverride prompt( |
6824 FeatureSwitch::prompt_for_external_extensions(), true); | 6689 FeatureSwitch::prompt_for_external_extensions(), true); |
6825 | 6690 |
6826 InitializeEmptyExtensionService(); | 6691 InitializeEmptyExtensionService(); |
6827 MockExtensionProvider* provider = | 6692 MockExtensionProvider* provider = |
6828 new MockExtensionProvider(service_, Manifest::EXTERNAL_PREF); | 6693 new MockExtensionProvider(service(), Manifest::EXTERNAL_PREF); |
6829 AddMockExternalProvider(provider); | 6694 AddMockExternalProvider(provider); |
6830 | 6695 |
6831 provider->UpdateOrAddExtension(page_action, "1.0.0.0", | 6696 provider->UpdateOrAddExtension( |
6832 data_dir_.AppendASCII("page_action.crx")); | 6697 page_action, "1.0.0.0", data_dir().AppendASCII("page_action.crx")); |
6833 provider->UpdateOrAddExtension(good_crx, "1.0.0.0", | 6698 provider->UpdateOrAddExtension( |
6834 data_dir_.AppendASCII("good.crx")); | 6699 good_crx, "1.0.0.0", data_dir().AppendASCII("good.crx")); |
6835 provider->UpdateOrAddExtension(theme_crx, "2.0", | 6700 provider->UpdateOrAddExtension( |
6836 data_dir_.AppendASCII("theme.crx")); | 6701 theme_crx, "2.0", data_dir().AppendASCII("theme.crx")); |
6837 | 6702 |
6838 int count = 3; | 6703 int count = 3; |
6839 content::WindowedNotificationObserver observer( | 6704 content::WindowedNotificationObserver observer( |
6840 chrome::NOTIFICATION_CRX_INSTALLER_DONE, | 6705 chrome::NOTIFICATION_CRX_INSTALLER_DONE, |
6841 base::Bind(&WaitForCountNotificationsCallback, &count)); | 6706 base::Bind(&WaitForCountNotificationsCallback, &count)); |
6842 service_->CheckForExternalUpdates(); | 6707 service()->CheckForExternalUpdates(); |
6843 observer.Wait(); | 6708 observer.Wait(); |
6844 EXPECT_TRUE(extensions::HasExternalInstallError(service_)); | 6709 EXPECT_TRUE(extensions::HasExternalInstallError(service())); |
6845 EXPECT_FALSE(service_->IsExtensionEnabled(page_action)); | 6710 EXPECT_FALSE(service()->IsExtensionEnabled(page_action)); |
6846 EXPECT_FALSE(service_->IsExtensionEnabled(good_crx)); | 6711 EXPECT_FALSE(service()->IsExtensionEnabled(good_crx)); |
6847 EXPECT_FALSE(service_->IsExtensionEnabled(theme_crx)); | 6712 EXPECT_FALSE(service()->IsExtensionEnabled(theme_crx)); |
6848 | 6713 |
6849 service_->EnableExtension(page_action); | 6714 service()->EnableExtension(page_action); |
6850 EXPECT_TRUE(extensions::HasExternalInstallError(service_)); | 6715 EXPECT_TRUE(extensions::HasExternalInstallError(service())); |
6851 EXPECT_FALSE(extensions::HasExternalInstallBubble(service_)); | 6716 EXPECT_FALSE(extensions::HasExternalInstallBubble(service())); |
6852 service_->EnableExtension(theme_crx); | 6717 service()->EnableExtension(theme_crx); |
6853 EXPECT_TRUE(extensions::HasExternalInstallError(service_)); | 6718 EXPECT_TRUE(extensions::HasExternalInstallError(service())); |
6854 EXPECT_FALSE(extensions::HasExternalInstallBubble(service_)); | 6719 EXPECT_FALSE(extensions::HasExternalInstallBubble(service())); |
6855 service_->EnableExtension(good_crx); | 6720 service()->EnableExtension(good_crx); |
6856 EXPECT_FALSE(extensions::HasExternalInstallError(service_)); | 6721 EXPECT_FALSE(extensions::HasExternalInstallError(service())); |
6857 EXPECT_FALSE(extensions::HasExternalInstallBubble(service_)); | 6722 EXPECT_FALSE(extensions::HasExternalInstallBubble(service())); |
6858 } | 6723 } |
6859 | 6724 |
6860 // Test that there is a bubble for external extensions that update | 6725 // Test that there is a bubble for external extensions that update |
6861 // from the webstore if the profile is not new. | 6726 // from the webstore if the profile is not new. |
6862 TEST_F(ExtensionServiceTest, ExternalInstallUpdatesFromWebstoreOldProfile) { | 6727 TEST_F(ExtensionServiceTest, ExternalInstallUpdatesFromWebstoreOldProfile) { |
6863 FeatureSwitch::ScopedOverride prompt( | 6728 FeatureSwitch::ScopedOverride prompt( |
6864 FeatureSwitch::prompt_for_external_extensions(), true); | 6729 FeatureSwitch::prompt_for_external_extensions(), true); |
6865 | 6730 |
6866 // This sets up the ExtensionPrefs used by our ExtensionService to be | 6731 // This sets up the ExtensionPrefs used by our ExtensionService to be |
6867 // post-first run. | 6732 // post-first run. |
6868 ExtensionServiceInitParams params = CreateDefaultInitParams(); | 6733 ExtensionServiceInitParams params = CreateDefaultInitParams(); |
6869 params.is_first_run = false; | 6734 params.is_first_run = false; |
6870 InitializeExtensionService(params); | 6735 InitializeExtensionService(params); |
6871 | 6736 |
6872 base::FilePath crx_path = temp_dir_.path().AppendASCII("webstore.crx"); | 6737 base::FilePath crx_path = temp_dir().path().AppendASCII("webstore.crx"); |
6873 PackCRX(data_dir_.AppendASCII("update_from_webstore"), | 6738 PackCRX(data_dir().AppendASCII("update_from_webstore"), |
6874 data_dir_.AppendASCII("update_from_webstore.pem"), | 6739 data_dir().AppendASCII("update_from_webstore.pem"), |
6875 crx_path); | 6740 crx_path); |
6876 | 6741 |
6877 MockExtensionProvider* provider = | 6742 MockExtensionProvider* provider = |
6878 new MockExtensionProvider(service_, Manifest::EXTERNAL_PREF); | 6743 new MockExtensionProvider(service(), Manifest::EXTERNAL_PREF); |
6879 AddMockExternalProvider(provider); | 6744 AddMockExternalProvider(provider); |
6880 provider->UpdateOrAddExtension(updates_from_webstore, "1", crx_path); | 6745 provider->UpdateOrAddExtension(updates_from_webstore, "1", crx_path); |
6881 | 6746 |
6882 content::WindowedNotificationObserver observer( | 6747 content::WindowedNotificationObserver observer( |
6883 chrome::NOTIFICATION_CRX_INSTALLER_DONE, | 6748 chrome::NOTIFICATION_CRX_INSTALLER_DONE, |
6884 content::NotificationService::AllSources()); | 6749 content::NotificationService::AllSources()); |
6885 service_->CheckForExternalUpdates(); | 6750 service()->CheckForExternalUpdates(); |
6886 observer.Wait(); | 6751 observer.Wait(); |
6887 EXPECT_TRUE(extensions::HasExternalInstallError(service_)); | 6752 EXPECT_TRUE(extensions::HasExternalInstallError(service())); |
6888 EXPECT_TRUE(extensions::HasExternalInstallBubble(service_)); | 6753 EXPECT_TRUE(extensions::HasExternalInstallBubble(service())); |
6889 EXPECT_FALSE(service_->IsExtensionEnabled(updates_from_webstore)); | 6754 EXPECT_FALSE(service()->IsExtensionEnabled(updates_from_webstore)); |
6890 } | 6755 } |
6891 | 6756 |
6892 // Test that there is no bubble for external extensions if the profile is new. | 6757 // Test that there is no bubble for external extensions if the profile is new. |
6893 TEST_F(ExtensionServiceTest, ExternalInstallUpdatesFromWebstoreNewProfile) { | 6758 TEST_F(ExtensionServiceTest, ExternalInstallUpdatesFromWebstoreNewProfile) { |
6894 FeatureSwitch::ScopedOverride prompt( | 6759 FeatureSwitch::ScopedOverride prompt( |
6895 FeatureSwitch::prompt_for_external_extensions(), true); | 6760 FeatureSwitch::prompt_for_external_extensions(), true); |
6896 | 6761 |
6897 InitializeEmptyExtensionService(); | 6762 InitializeEmptyExtensionService(); |
6898 | 6763 |
6899 base::FilePath crx_path = temp_dir_.path().AppendASCII("webstore.crx"); | 6764 base::FilePath crx_path = temp_dir().path().AppendASCII("webstore.crx"); |
6900 PackCRX(data_dir_.AppendASCII("update_from_webstore"), | 6765 PackCRX(data_dir().AppendASCII("update_from_webstore"), |
6901 data_dir_.AppendASCII("update_from_webstore.pem"), | 6766 data_dir().AppendASCII("update_from_webstore.pem"), |
6902 crx_path); | 6767 crx_path); |
6903 | 6768 |
6904 MockExtensionProvider* provider = | 6769 MockExtensionProvider* provider = |
6905 new MockExtensionProvider(service_, Manifest::EXTERNAL_PREF); | 6770 new MockExtensionProvider(service(), Manifest::EXTERNAL_PREF); |
6906 AddMockExternalProvider(provider); | 6771 AddMockExternalProvider(provider); |
6907 provider->UpdateOrAddExtension(updates_from_webstore, "1", crx_path); | 6772 provider->UpdateOrAddExtension(updates_from_webstore, "1", crx_path); |
6908 | 6773 |
6909 content::WindowedNotificationObserver observer( | 6774 content::WindowedNotificationObserver observer( |
6910 chrome::NOTIFICATION_CRX_INSTALLER_DONE, | 6775 chrome::NOTIFICATION_CRX_INSTALLER_DONE, |
6911 content::NotificationService::AllSources()); | 6776 content::NotificationService::AllSources()); |
6912 service_->CheckForExternalUpdates(); | 6777 service()->CheckForExternalUpdates(); |
6913 observer.Wait(); | 6778 observer.Wait(); |
6914 EXPECT_TRUE(extensions::HasExternalInstallError(service_)); | 6779 EXPECT_TRUE(extensions::HasExternalInstallError(service())); |
6915 EXPECT_FALSE(extensions::HasExternalInstallBubble(service_)); | 6780 EXPECT_FALSE(extensions::HasExternalInstallBubble(service())); |
6916 EXPECT_FALSE(service_->IsExtensionEnabled(updates_from_webstore)); | 6781 EXPECT_FALSE(service()->IsExtensionEnabled(updates_from_webstore)); |
6917 } | 6782 } |
6918 | 6783 |
6919 TEST_F(ExtensionServiceTest, InstallBlacklistedExtension) { | 6784 TEST_F(ExtensionServiceTest, InstallBlacklistedExtension) { |
6920 InitializeEmptyExtensionService(); | 6785 InitializeEmptyExtensionService(); |
6921 | 6786 |
6922 scoped_refptr<Extension> extension = extensions::ExtensionBuilder() | 6787 scoped_refptr<Extension> extension = extensions::ExtensionBuilder() |
6923 .SetManifest(extensions::DictionaryBuilder() | 6788 .SetManifest(extensions::DictionaryBuilder() |
6924 .Set("name", "extension") | 6789 .Set("name", "extension") |
6925 .Set("version", "1.0") | 6790 .Set("version", "1.0") |
6926 .Set("manifest_version", 2).Build()) | 6791 .Set("manifest_version", 2).Build()) |
6927 .Build(); | 6792 .Build(); |
6928 ASSERT_TRUE(extension.get()); | 6793 ASSERT_TRUE(extension.get()); |
6929 const std::string& id = extension->id(); | 6794 const std::string& id = extension->id(); |
6930 | 6795 |
6931 std::set<std::string> id_set; | 6796 std::set<std::string> id_set; |
6932 id_set.insert(id); | 6797 id_set.insert(id); |
6933 extensions::ExtensionNotificationObserver notifications( | 6798 extensions::ExtensionNotificationObserver notifications( |
6934 content::NotificationService::AllSources(), id_set); | 6799 content::NotificationService::AllSources(), id_set); |
6935 | 6800 |
6936 // Installation should be allowed but the extension should never have been | 6801 // Installation should be allowed but the extension should never have been |
6937 // loaded and it should be blacklisted in prefs. | 6802 // loaded and it should be blacklisted in prefs. |
6938 service_->OnExtensionInstalled( | 6803 service()->OnExtensionInstalled(extension.get(), |
6939 extension.get(), | 6804 syncer::StringOrdinal(), |
6940 syncer::StringOrdinal(), | 6805 false /* has requirement errors */, |
6941 false /* has requirement errors */, | 6806 extensions::BLACKLISTED_MALWARE, |
6942 extensions::BLACKLISTED_MALWARE, | 6807 false /* is ephemeral */, |
6943 false /* is ephemeral */, | 6808 false /* wait for idle */); |
6944 false /* wait for idle */); | |
6945 base::RunLoop().RunUntilIdle(); | 6809 base::RunLoop().RunUntilIdle(); |
6946 | 6810 |
6947 // Extension was installed but not loaded. | 6811 // Extension was installed but not loaded. |
6948 EXPECT_TRUE(notifications.CheckNotifications( | 6812 EXPECT_TRUE(notifications.CheckNotifications( |
6949 chrome::NOTIFICATION_EXTENSION_INSTALLED_DEPRECATED)); | 6813 chrome::NOTIFICATION_EXTENSION_INSTALLED_DEPRECATED)); |
6950 EXPECT_TRUE(service_->GetInstalledExtension(id)); | 6814 EXPECT_TRUE(service()->GetInstalledExtension(id)); |
6951 | 6815 |
6952 EXPECT_FALSE(registry_->enabled_extensions().Contains(id)); | 6816 EXPECT_FALSE(registry()->enabled_extensions().Contains(id)); |
6953 EXPECT_TRUE(registry_->blacklisted_extensions().Contains(id)); | 6817 EXPECT_TRUE(registry()->blacklisted_extensions().Contains(id)); |
6954 | 6818 |
6955 EXPECT_TRUE(ExtensionPrefs::Get(profile_.get())->IsExtensionBlacklisted(id)); | 6819 EXPECT_TRUE(ExtensionPrefs::Get(profile())->IsExtensionBlacklisted(id)); |
6956 EXPECT_TRUE(ExtensionPrefs::Get(profile_.get()) | 6820 EXPECT_TRUE( |
6957 ->IsBlacklistedExtensionAcknowledged(id)); | 6821 ExtensionPrefs::Get(profile())->IsBlacklistedExtensionAcknowledged(id)); |
6958 } | 6822 } |
6959 | 6823 |
6960 TEST_F(ExtensionServiceTest, ReconcileKnownDisabledNoneDisabled) { | 6824 TEST_F(ExtensionServiceTest, ReconcileKnownDisabledNoneDisabled) { |
6961 // A profile with 3 extensions installed: good0, good1, and good2. | 6825 // A profile with 3 extensions installed: good0, good1, and good2. |
6962 InitializeGoodInstalledExtensionService(); | 6826 InitializeGoodInstalledExtensionService(); |
6963 | 6827 |
6964 // Initializing shouldn't disable any extensions if none are known to be | 6828 // Initializing shouldn't disable any extensions if none are known to be |
6965 // disabled. | 6829 // disabled. |
6966 service_->Init(); | 6830 service()->Init(); |
6967 | 6831 |
6968 extensions::ExtensionIdSet expected_extensions; | 6832 extensions::ExtensionIdSet expected_extensions; |
6969 expected_extensions.insert(good0); | 6833 expected_extensions.insert(good0); |
6970 expected_extensions.insert(good1); | 6834 expected_extensions.insert(good1); |
6971 expected_extensions.insert(good2); | 6835 expected_extensions.insert(good2); |
6972 | 6836 |
6973 extensions::ExtensionIdSet expected_disabled_extensions; | 6837 extensions::ExtensionIdSet expected_disabled_extensions; |
6974 | 6838 |
6975 EXPECT_EQ(expected_extensions, registry_->enabled_extensions().GetIDs()); | 6839 EXPECT_EQ(expected_extensions, registry()->enabled_extensions().GetIDs()); |
6976 EXPECT_EQ(expected_disabled_extensions, | 6840 EXPECT_EQ(expected_disabled_extensions, |
6977 registry_->disabled_extensions().GetIDs()); | 6841 registry()->disabled_extensions().GetIDs()); |
6978 } | 6842 } |
6979 | 6843 |
6980 TEST_F(ExtensionServiceTest, ReconcileKnownDisabledWithSideEnable) { | 6844 TEST_F(ExtensionServiceTest, ReconcileKnownDisabledWithSideEnable) { |
6981 // A profile with 3 extensions installed: good0, good1, and good2. | 6845 // A profile with 3 extensions installed: good0, good1, and good2. |
6982 InitializeGoodInstalledExtensionService(); | 6846 InitializeGoodInstalledExtensionService(); |
6983 | 6847 |
6984 ExtensionPrefs* extension_prefs = ExtensionPrefs::Get(profile_.get()); | 6848 ExtensionPrefs* extension_prefs = ExtensionPrefs::Get(profile()); |
6985 | 6849 |
6986 // Disable good1. | 6850 // Disable good1. |
6987 extension_prefs->SetExtensionState(good1, Extension::DISABLED); | 6851 extension_prefs->SetExtensionState(good1, Extension::DISABLED); |
6988 | 6852 |
6989 // Mark both good1 and good2 as "known_disabled" (effectively making good2 | 6853 // Mark both good1 and good2 as "known_disabled" (effectively making good2 |
6990 // look as if it had been side-enabled). | 6854 // look as if it had been side-enabled). |
6991 extensions::ExtensionIdSet known_disabled; | 6855 extensions::ExtensionIdSet known_disabled; |
6992 known_disabled.insert(good1); | 6856 known_disabled.insert(good1); |
6993 known_disabled.insert(good2); | 6857 known_disabled.insert(good2); |
6994 extension_prefs->SetKnownDisabled(known_disabled); | 6858 extension_prefs->SetKnownDisabled(known_disabled); |
6995 | 6859 |
6996 // Initialize the service (which should disable good2 since it's known to be | 6860 // Initialize the service (which should disable good2 since it's known to be |
6997 // disabled). | 6861 // disabled). |
6998 service_->Init(); | 6862 service()->Init(); |
6999 | 6863 |
7000 extensions::ExtensionIdSet expected_extensions; | 6864 extensions::ExtensionIdSet expected_extensions; |
7001 expected_extensions.insert(good0); | 6865 expected_extensions.insert(good0); |
7002 | 6866 |
7003 extensions::ExtensionIdSet expected_disabled_extensions; | 6867 extensions::ExtensionIdSet expected_disabled_extensions; |
7004 expected_disabled_extensions.insert(good1); | 6868 expected_disabled_extensions.insert(good1); |
7005 expected_disabled_extensions.insert(good2); | 6869 expected_disabled_extensions.insert(good2); |
7006 | 6870 |
7007 EXPECT_EQ(expected_extensions, registry_->enabled_extensions().GetIDs()); | 6871 EXPECT_EQ(expected_extensions, registry()->enabled_extensions().GetIDs()); |
7008 EXPECT_EQ(expected_disabled_extensions, | 6872 EXPECT_EQ(expected_disabled_extensions, |
7009 registry_->disabled_extensions().GetIDs()); | 6873 registry()->disabled_extensions().GetIDs()); |
7010 | 6874 |
7011 // Make sure that re-enabling an extension sticks across calls to | 6875 // Make sure that re-enabling an extension sticks across calls to |
7012 // ReconcileKnownDisabled(). | 6876 // ReconcileKnownDisabled(). |
7013 service_->EnableExtension(good2); | 6877 service()->EnableExtension(good2); |
7014 service_->ReconcileKnownDisabled(); | 6878 service()->ReconcileKnownDisabled(); |
7015 expected_extensions.insert(good2); | 6879 expected_extensions.insert(good2); |
7016 expected_disabled_extensions.erase(good2); | 6880 expected_disabled_extensions.erase(good2); |
7017 | 6881 |
7018 EXPECT_EQ(expected_extensions, registry_->enabled_extensions().GetIDs()); | 6882 EXPECT_EQ(expected_extensions, registry()->enabled_extensions().GetIDs()); |
7019 EXPECT_EQ(expected_disabled_extensions, | 6883 EXPECT_EQ(expected_disabled_extensions, |
7020 registry_->disabled_extensions().GetIDs()); | 6884 registry()->disabled_extensions().GetIDs()); |
7021 } | 6885 } |
7022 | 6886 |
7023 // Tests a profile being destroyed correctly disables extensions. | 6887 // Tests a profile being destroyed correctly disables extensions. |
7024 TEST_F(ExtensionServiceTest, DestroyingProfileClearsExtensions) { | 6888 TEST_F(ExtensionServiceTest, DestroyingProfileClearsExtensions) { |
7025 InitializeEmptyExtensionService(); | 6889 InitializeEmptyExtensionService(); |
7026 | 6890 |
7027 InstallCRX(data_dir_.AppendASCII("good.crx"), INSTALL_NEW); | 6891 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); |
7028 EXPECT_NE(UnloadedExtensionInfo::REASON_PROFILE_SHUTDOWN, unloaded_reason_); | 6892 EXPECT_NE(UnloadedExtensionInfo::REASON_PROFILE_SHUTDOWN, unloaded_reason_); |
7029 EXPECT_EQ(1u, registry_->enabled_extensions().size()); | 6893 EXPECT_EQ(1u, registry()->enabled_extensions().size()); |
7030 EXPECT_EQ(0u, registry_->disabled_extensions().size()); | 6894 EXPECT_EQ(0u, registry()->disabled_extensions().size()); |
7031 EXPECT_EQ(0u, registry_->terminated_extensions().size()); | 6895 EXPECT_EQ(0u, registry()->terminated_extensions().size()); |
7032 EXPECT_EQ(0u, registry_->blacklisted_extensions().size()); | 6896 EXPECT_EQ(0u, registry()->blacklisted_extensions().size()); |
7033 | 6897 |
7034 service_->Observe(chrome::NOTIFICATION_PROFILE_DESTRUCTION_STARTED, | 6898 service()->Observe(chrome::NOTIFICATION_PROFILE_DESTRUCTION_STARTED, |
7035 content::Source<Profile>(profile_.get()), | 6899 content::Source<Profile>(profile()), |
7036 content::NotificationService::NoDetails()); | 6900 content::NotificationService::NoDetails()); |
7037 EXPECT_EQ(UnloadedExtensionInfo::REASON_PROFILE_SHUTDOWN, unloaded_reason_); | 6901 EXPECT_EQ(UnloadedExtensionInfo::REASON_PROFILE_SHUTDOWN, unloaded_reason_); |
7038 EXPECT_EQ(0u, registry_->enabled_extensions().size()); | 6902 EXPECT_EQ(0u, registry()->enabled_extensions().size()); |
7039 EXPECT_EQ(0u, registry_->disabled_extensions().size()); | 6903 EXPECT_EQ(0u, registry()->disabled_extensions().size()); |
7040 EXPECT_EQ(0u, registry_->terminated_extensions().size()); | 6904 EXPECT_EQ(0u, registry()->terminated_extensions().size()); |
7041 EXPECT_EQ(0u, registry_->blacklisted_extensions().size()); | 6905 EXPECT_EQ(0u, registry()->blacklisted_extensions().size()); |
7042 } | 6906 } |
OLD | NEW |