| 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 <algorithm> | 5 #include <algorithm> |
| 6 #include <set> | 6 #include <set> |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "base/at_exit.h" | 9 #include "base/at_exit.h" |
| 10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 128 #include "sync/protocol/app_specifics.pb.h" | 128 #include "sync/protocol/app_specifics.pb.h" |
| 129 #include "sync/protocol/extension_specifics.pb.h" | 129 #include "sync/protocol/extension_specifics.pb.h" |
| 130 #include "sync/protocol/sync.pb.h" | 130 #include "sync/protocol/sync.pb.h" |
| 131 #include "testing/gtest/include/gtest/gtest.h" | 131 #include "testing/gtest/include/gtest/gtest.h" |
| 132 #include "testing/platform_test.h" | 132 #include "testing/platform_test.h" |
| 133 #include "ui/base/l10n/l10n_util.h" | 133 #include "ui/base/l10n/l10n_util.h" |
| 134 #include "url/gurl.h" | 134 #include "url/gurl.h" |
| 135 | 135 |
| 136 #if defined(ENABLE_SUPERVISED_USERS) | 136 #if defined(ENABLE_SUPERVISED_USERS) |
| 137 #include "chrome/browser/supervised_user/permission_request_creator.h" | 137 #include "chrome/browser/supervised_user/permission_request_creator.h" |
| 138 #include "chrome/browser/supervised_user/supervised_user_constants.h" |
| 138 #include "chrome/browser/supervised_user/supervised_user_service.h" | 139 #include "chrome/browser/supervised_user/supervised_user_service.h" |
| 139 #include "chrome/browser/supervised_user/supervised_user_service_factory.h" | 140 #include "chrome/browser/supervised_user/supervised_user_service_factory.h" |
| 140 #endif | 141 #endif |
| 141 | 142 |
| 142 #if defined(OS_CHROMEOS) | 143 #if defined(OS_CHROMEOS) |
| 143 #include "chrome/browser/chromeos/login/users/scoped_test_user_manager.h" | 144 #include "chrome/browser/chromeos/login/users/scoped_test_user_manager.h" |
| 144 #include "chrome/browser/chromeos/settings/cros_settings.h" | 145 #include "chrome/browser/chromeos/settings/cros_settings.h" |
| 145 #include "chrome/browser/chromeos/settings/device_settings_service.h" | 146 #include "chrome/browser/chromeos/settings/device_settings_service.h" |
| 146 #endif | 147 #endif |
| 147 | 148 |
| (...skipping 6474 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6622 const extensions::PendingExtensionInfo* info; | 6623 const extensions::PendingExtensionInfo* info; |
| 6623 EXPECT_TRUE( | 6624 EXPECT_TRUE( |
| 6624 (info = service()->pending_extension_manager()->GetById(good_crx))); | 6625 (info = service()->pending_extension_manager()->GetById(good_crx))); |
| 6625 EXPECT_EQ(ext_specifics->update_url(), info->update_url().spec()); | 6626 EXPECT_EQ(ext_specifics->update_url(), info->update_url().spec()); |
| 6626 EXPECT_TRUE(info->is_from_sync()); | 6627 EXPECT_TRUE(info->is_from_sync()); |
| 6627 EXPECT_EQ(Manifest::INTERNAL, info->install_source()); | 6628 EXPECT_EQ(Manifest::INTERNAL, info->install_source()); |
| 6628 // TODO(akalin): Figure out a way to test |info.ShouldAllowInstall()|. | 6629 // TODO(akalin): Figure out a way to test |info.ShouldAllowInstall()|. |
| 6629 } | 6630 } |
| 6630 | 6631 |
| 6631 #if defined(ENABLE_SUPERVISED_USERS) | 6632 #if defined(ENABLE_SUPERVISED_USERS) |
| 6633 class StubSupervisedUserServiceDelegate |
| 6634 : public SupervisedUserService::Delegate { |
| 6635 public: |
| 6636 explicit StubSupervisedUserServiceDelegate(SupervisedUserService* service) |
| 6637 : service_(service) { |
| 6638 service_->SetDelegate(this); |
| 6639 } |
| 6640 ~StubSupervisedUserServiceDelegate() override { |
| 6641 service_->SetDelegate(nullptr); |
| 6642 } |
| 6643 |
| 6644 // This prevents the legacy supervised user init code from running. |
| 6645 bool SetActive(bool active) override { return true; } |
| 6646 |
| 6647 private: |
| 6648 SupervisedUserService* service_; |
| 6649 }; |
| 6650 |
| 6632 class MockPermissionRequestCreator : public PermissionRequestCreator { | 6651 class MockPermissionRequestCreator : public PermissionRequestCreator { |
| 6633 public: | 6652 public: |
| 6634 MockPermissionRequestCreator() {} | 6653 MockPermissionRequestCreator() {} |
| 6635 ~MockPermissionRequestCreator() override {} | 6654 ~MockPermissionRequestCreator() override {} |
| 6636 | 6655 |
| 6637 bool IsEnabled() const override { return true; } | 6656 bool IsEnabled() const override { return true; } |
| 6638 | 6657 |
| 6639 void CreateURLAccessRequest(const GURL& url_requested, | 6658 void CreateURLAccessRequest(const GURL& url_requested, |
| 6640 const SuccessCallback& callback) override { | 6659 const SuccessCallback& callback) override { |
| 6641 FAIL(); | 6660 FAIL(); |
| 6642 } | 6661 } |
| 6643 | 6662 |
| 6644 MOCK_METHOD2(CreateExtensionUpdateRequest, | 6663 MOCK_METHOD2(CreateExtensionUpdateRequest, |
| 6645 void(const std::string& id, | 6664 void(const std::string& id, |
| 6646 const SupervisedUserService::SuccessCallback& callback)); | 6665 const SupervisedUserService::SuccessCallback& callback)); |
| 6647 | 6666 |
| 6648 private: | 6667 private: |
| 6649 DISALLOW_COPY_AND_ASSIGN(MockPermissionRequestCreator); | 6668 DISALLOW_COPY_AND_ASSIGN(MockPermissionRequestCreator); |
| 6650 }; | 6669 }; |
| 6651 | 6670 |
| 6652 TEST_F(ExtensionServiceTest, SupervisedUser_InstallOnlyAllowedByCustodian) { | 6671 TEST_F(ExtensionServiceTest, SupervisedUser_InstallOnlyAllowedByCustodian) { |
| 6653 ExtensionServiceInitParams params = CreateDefaultInitParams(); | 6672 ExtensionServiceInitParams params = CreateDefaultInitParams(); |
| 6654 params.profile_is_supervised = true; | 6673 params.profile_is_supervised = true; |
| 6655 InitializeExtensionService(params); | 6674 InitializeExtensionService(params); |
| 6656 | 6675 |
| 6657 SupervisedUserService* supervised_user_service = | 6676 SupervisedUserService* supervised_user_service = |
| 6658 SupervisedUserServiceFactory::GetForProfile(profile()); | 6677 SupervisedUserServiceFactory::GetForProfile(profile()); |
| 6659 GetManagementPolicy()->RegisterProvider(supervised_user_service); | 6678 StubSupervisedUserServiceDelegate delegate(supervised_user_service); |
| 6679 supervised_user_service->Init(); |
| 6660 | 6680 |
| 6661 base::FilePath path1 = data_dir().AppendASCII("good.crx"); | 6681 base::FilePath path1 = data_dir().AppendASCII("good.crx"); |
| 6662 base::FilePath path2 = data_dir().AppendASCII("good2048.crx"); | 6682 base::FilePath path2 = data_dir().AppendASCII("good2048.crx"); |
| 6663 const Extension* extensions[] = { | 6683 const Extension* extensions[] = { |
| 6664 InstallCRX(path1, INSTALL_FAILED), | 6684 InstallCRX(path1, INSTALL_FAILED), |
| 6665 InstallCRX(path2, INSTALL_NEW, Extension::WAS_INSTALLED_BY_CUSTODIAN) | 6685 InstallCRX(path2, INSTALL_NEW, Extension::WAS_INSTALLED_BY_CUSTODIAN) |
| 6666 }; | 6686 }; |
| 6667 | 6687 |
| 6668 // Only the extension with the "installed by custodian" flag should have been | 6688 // Only the extension with the "installed by custodian" flag should have been |
| 6669 // installed and enabled. | 6689 // installed and enabled. |
| 6670 EXPECT_FALSE(extensions[0]); | 6690 EXPECT_FALSE(extensions[0]); |
| 6671 ASSERT_TRUE(extensions[1]); | 6691 ASSERT_TRUE(extensions[1]); |
| 6672 EXPECT_TRUE(registry()->enabled_extensions().Contains(extensions[1]->id())); | 6692 EXPECT_TRUE(registry()->enabled_extensions().Contains(extensions[1]->id())); |
| 6673 } | 6693 } |
| 6674 | 6694 |
| 6695 TEST_F(ExtensionServiceTest, SupervisedUser_PreinstalledExtension) { |
| 6696 ExtensionServiceInitParams params = CreateDefaultInitParams(); |
| 6697 // Do *not* set the profile to supervised here! |
| 6698 InitializeExtensionService(params); |
| 6699 |
| 6700 SupervisedUserService* supervised_user_service = |
| 6701 SupervisedUserServiceFactory::GetForProfile(profile()); |
| 6702 StubSupervisedUserServiceDelegate delegate(supervised_user_service); |
| 6703 supervised_user_service->Init(); |
| 6704 |
| 6705 // Install an extension. |
| 6706 base::FilePath path = data_dir().AppendASCII("good.crx"); |
| 6707 const Extension* extension = InstallCRX(path, INSTALL_NEW); |
| 6708 std::string id = extension->id(); |
| 6709 |
| 6710 // Now make the profile supervised. |
| 6711 profile()->AsTestingProfile()->SetSupervisedUserId( |
| 6712 supervised_users::kChildAccountSUID); |
| 6713 // Also set the corresponding pref, because that's what the |
| 6714 // SupervisedUserService watches. |
| 6715 profile()->GetPrefs()->SetString(prefs::kSupervisedUserId, |
| 6716 supervised_users::kChildAccountSUID); |
| 6717 |
| 6718 // The extension should not be enabled anymore. |
| 6719 EXPECT_FALSE(registry()->enabled_extensions().Contains(id)); |
| 6720 } |
| 6721 |
| 6675 TEST_F(ExtensionServiceTest, SupervisedUser_UpdateWithoutPermissionIncrease) { | 6722 TEST_F(ExtensionServiceTest, SupervisedUser_UpdateWithoutPermissionIncrease) { |
| 6676 ExtensionServiceInitParams params = CreateDefaultInitParams(); | 6723 ExtensionServiceInitParams params = CreateDefaultInitParams(); |
| 6677 params.profile_is_supervised = true; | 6724 params.profile_is_supervised = true; |
| 6678 InitializeExtensionService(params); | 6725 InitializeExtensionService(params); |
| 6679 | 6726 |
| 6680 SupervisedUserService* supervised_user_service = | 6727 SupervisedUserService* supervised_user_service = |
| 6681 SupervisedUserServiceFactory::GetForProfile(profile()); | 6728 SupervisedUserServiceFactory::GetForProfile(profile()); |
| 6682 GetManagementPolicy()->RegisterProvider(supervised_user_service); | 6729 StubSupervisedUserServiceDelegate delegate(supervised_user_service); |
| 6730 supervised_user_service->Init(); |
| 6683 | 6731 |
| 6684 base::FilePath base_path = data_dir().AppendASCII("autoupdate"); | 6732 base::FilePath base_path = data_dir().AppendASCII("autoupdate"); |
| 6685 base::FilePath pem_path = base_path.AppendASCII("key.pem"); | 6733 base::FilePath pem_path = base_path.AppendASCII("key.pem"); |
| 6686 | 6734 |
| 6687 base::FilePath path = base_path.AppendASCII("v1"); | 6735 base::FilePath path = base_path.AppendASCII("v1"); |
| 6688 const Extension* extension = | 6736 const Extension* extension = |
| 6689 PackAndInstallCRX(path, pem_path, INSTALL_NEW, | 6737 PackAndInstallCRX(path, pem_path, INSTALL_NEW, |
| 6690 Extension::WAS_INSTALLED_BY_CUSTODIAN); | 6738 Extension::WAS_INSTALLED_BY_CUSTODIAN); |
| 6691 // The extension must now be installed and enabled. | 6739 // The extension must now be installed and enabled. |
| 6692 ASSERT_TRUE(extension); | 6740 ASSERT_TRUE(extension); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 6708 EXPECT_NE(extension->VersionString(), old_version); | 6756 EXPECT_NE(extension->VersionString(), old_version); |
| 6709 } | 6757 } |
| 6710 | 6758 |
| 6711 TEST_F(ExtensionServiceTest, SupervisedUser_UpdateWithPermissionIncrease) { | 6759 TEST_F(ExtensionServiceTest, SupervisedUser_UpdateWithPermissionIncrease) { |
| 6712 ExtensionServiceInitParams params = CreateDefaultInitParams(); | 6760 ExtensionServiceInitParams params = CreateDefaultInitParams(); |
| 6713 params.profile_is_supervised = true; | 6761 params.profile_is_supervised = true; |
| 6714 InitializeExtensionService(params); | 6762 InitializeExtensionService(params); |
| 6715 | 6763 |
| 6716 SupervisedUserService* supervised_user_service = | 6764 SupervisedUserService* supervised_user_service = |
| 6717 SupervisedUserServiceFactory::GetForProfile(profile()); | 6765 SupervisedUserServiceFactory::GetForProfile(profile()); |
| 6718 GetManagementPolicy()->RegisterProvider(supervised_user_service); | 6766 StubSupervisedUserServiceDelegate delegate(supervised_user_service); |
| 6767 supervised_user_service->Init(); |
| 6719 MockPermissionRequestCreator* creator = new MockPermissionRequestCreator; | 6768 MockPermissionRequestCreator* creator = new MockPermissionRequestCreator; |
| 6720 supervised_user_service->AddPermissionRequestCreator( | 6769 supervised_user_service->AddPermissionRequestCreator( |
| 6721 make_scoped_ptr(creator)); | 6770 make_scoped_ptr(creator)); |
| 6722 | 6771 |
| 6723 base::FilePath base_path = data_dir().AppendASCII("permissions_increase"); | 6772 base::FilePath base_path = data_dir().AppendASCII("permissions_increase"); |
| 6724 base::FilePath pem_path = base_path.AppendASCII("permissions.pem"); | 6773 base::FilePath pem_path = base_path.AppendASCII("permissions.pem"); |
| 6725 | 6774 |
| 6726 base::FilePath path = base_path.AppendASCII("v1"); | 6775 base::FilePath path = base_path.AppendASCII("v1"); |
| 6727 const Extension* extension = | 6776 const Extension* extension = |
| 6728 PackAndInstallCRX(path, pem_path, INSTALL_NEW, | 6777 PackAndInstallCRX(path, pem_path, INSTALL_NEW, |
| (...skipping 994 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7723 | 7772 |
| 7724 service()->Observe(chrome::NOTIFICATION_PROFILE_DESTRUCTION_STARTED, | 7773 service()->Observe(chrome::NOTIFICATION_PROFILE_DESTRUCTION_STARTED, |
| 7725 content::Source<Profile>(profile()), | 7774 content::Source<Profile>(profile()), |
| 7726 content::NotificationService::NoDetails()); | 7775 content::NotificationService::NoDetails()); |
| 7727 EXPECT_EQ(UnloadedExtensionInfo::REASON_PROFILE_SHUTDOWN, unloaded_reason_); | 7776 EXPECT_EQ(UnloadedExtensionInfo::REASON_PROFILE_SHUTDOWN, unloaded_reason_); |
| 7728 EXPECT_EQ(0u, registry()->enabled_extensions().size()); | 7777 EXPECT_EQ(0u, registry()->enabled_extensions().size()); |
| 7729 EXPECT_EQ(0u, registry()->disabled_extensions().size()); | 7778 EXPECT_EQ(0u, registry()->disabled_extensions().size()); |
| 7730 EXPECT_EQ(0u, registry()->terminated_extensions().size()); | 7779 EXPECT_EQ(0u, registry()->terminated_extensions().size()); |
| 7731 EXPECT_EQ(0u, registry()->blacklisted_extensions().size()); | 7780 EXPECT_EQ(0u, registry()->blacklisted_extensions().size()); |
| 7732 } | 7781 } |
| OLD | NEW |