| 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.h" | 5 #include "chrome/browser/extensions/extension_service.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include <algorithm> | 10 #include <algorithm> |
| (...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 121 #include "extensions/common/extension_resource.h" | 121 #include "extensions/common/extension_resource.h" |
| 122 #include "extensions/common/manifest_constants.h" | 122 #include "extensions/common/manifest_constants.h" |
| 123 #include "extensions/common/manifest_handlers/background_info.h" | 123 #include "extensions/common/manifest_handlers/background_info.h" |
| 124 #include "extensions/common/manifest_handlers/permissions_parser.h" | 124 #include "extensions/common/manifest_handlers/permissions_parser.h" |
| 125 #include "extensions/common/manifest_url_handlers.h" | 125 #include "extensions/common/manifest_url_handlers.h" |
| 126 #include "extensions/common/permissions/permission_set.h" | 126 #include "extensions/common/permissions/permission_set.h" |
| 127 #include "extensions/common/permissions/permissions_data.h" | 127 #include "extensions/common/permissions/permissions_data.h" |
| 128 #include "extensions/common/switches.h" | 128 #include "extensions/common/switches.h" |
| 129 #include "extensions/common/url_pattern.h" | 129 #include "extensions/common/url_pattern.h" |
| 130 #include "extensions/common/value_builder.h" | 130 #include "extensions/common/value_builder.h" |
| 131 #include "gpu/config/gpu_info.h" | |
| 132 #include "net/cookies/cookie_options.h" | 131 #include "net/cookies/cookie_options.h" |
| 133 #include "net/cookies/cookie_store.h" | 132 #include "net/cookies/cookie_store.h" |
| 134 #include "net/url_request/url_request_context.h" | 133 #include "net/url_request/url_request_context.h" |
| 135 #include "net/url_request/url_request_context_getter.h" | 134 #include "net/url_request/url_request_context_getter.h" |
| 136 #include "ppapi/features/features.h" | 135 #include "ppapi/features/features.h" |
| 137 #include "storage/browser/database/database_tracker.h" | 136 #include "storage/browser/database/database_tracker.h" |
| 138 #include "storage/browser/quota/quota_manager.h" | 137 #include "storage/browser/quota/quota_manager.h" |
| 139 #include "storage/common/database/database_identifier.h" | 138 #include "storage/common/database/database_identifier.h" |
| 140 #include "testing/gmock/include/gmock/gmock.h" | 139 #include "testing/gmock/include/gmock/gmock.h" |
| 141 #include "testing/gtest/include/gtest/gtest.h" | 140 #include "testing/gtest/include/gtest/gtest.h" |
| (...skipping 489 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 631 return data_dir() | 630 return data_dir() |
| 632 .AppendASCII("good") | 631 .AppendASCII("good") |
| 633 .AppendASCII("Extensions") | 632 .AppendASCII("Extensions") |
| 634 .AppendASCII(good2) | 633 .AppendASCII(good2) |
| 635 .AppendASCII("1.0"); | 634 .AppendASCII("1.0"); |
| 636 } | 635 } |
| 637 | 636 |
| 638 void TestExternalProvider(MockExtensionProvider* provider, | 637 void TestExternalProvider(MockExtensionProvider* provider, |
| 639 Manifest::Location location); | 638 Manifest::Location location); |
| 640 | 639 |
| 641 void BlackListWebGL() { | |
| 642 static const std::string json_blacklist = | |
| 643 "{\n" | |
| 644 " \"name\": \"gpu blacklist\",\n" | |
| 645 " \"version\": \"1.0\",\n" | |
| 646 " \"entries\": [\n" | |
| 647 " {\n" | |
| 648 " \"id\": 1,\n" | |
| 649 " \"features\": [\"accelerated_webgl\"]\n" | |
| 650 " }\n" | |
| 651 " ]\n" | |
| 652 "}"; | |
| 653 gpu::GPUInfo gpu_info; | |
| 654 content::GpuDataManager::GetInstance()->InitializeForTesting( | |
| 655 json_blacklist, gpu_info); | |
| 656 } | |
| 657 | |
| 658 // Grants all optional permissions stated in manifest to active permission | 640 // Grants all optional permissions stated in manifest to active permission |
| 659 // set for extension |id|. | 641 // set for extension |id|. |
| 660 void GrantAllOptionalPermissions(const std::string& id) { | 642 void GrantAllOptionalPermissions(const std::string& id) { |
| 661 const Extension* extension = service()->GetInstalledExtension(id); | 643 const Extension* extension = service()->GetInstalledExtension(id); |
| 662 const PermissionSet& all_optional_permissions = | 644 const PermissionSet& all_optional_permissions = |
| 663 extensions::PermissionsParser::GetOptionalPermissions(extension); | 645 extensions::PermissionsParser::GetOptionalPermissions(extension); |
| 664 extensions::PermissionsUpdater perms_updater(profile()); | 646 extensions::PermissionsUpdater perms_updater(profile()); |
| 665 perms_updater.AddPermissions(extension, all_optional_permissions); | 647 perms_updater.AddPermissions(extension, all_optional_permissions); |
| 666 } | 648 } |
| 667 | 649 |
| (...skipping 3892 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4560 TerminateExtension(good_crx); | 4542 TerminateExtension(good_crx); |
| 4561 UninstallExtension(good_crx, true); | 4543 UninstallExtension(good_crx, true); |
| 4562 EXPECT_EQ(UnloadedExtensionInfo::REASON_TERMINATE, unloaded_reason_); | 4544 EXPECT_EQ(UnloadedExtensionInfo::REASON_TERMINATE, unloaded_reason_); |
| 4563 } | 4545 } |
| 4564 | 4546 |
| 4565 // An extension disabled because of unsupported requirements should re-enabled | 4547 // An extension disabled because of unsupported requirements should re-enabled |
| 4566 // if updated to a version with supported requirements as long as there are no | 4548 // if updated to a version with supported requirements as long as there are no |
| 4567 // other disable reasons. | 4549 // other disable reasons. |
| 4568 TEST_F(ExtensionServiceTest, UpgradingRequirementsEnabled) { | 4550 TEST_F(ExtensionServiceTest, UpgradingRequirementsEnabled) { |
| 4569 InitializeEmptyExtensionService(); | 4551 InitializeEmptyExtensionService(); |
| 4570 BlackListWebGL(); | 4552 content::GpuDataManager::GetInstance()->BlacklistWebGLForTesting(); |
| 4571 | 4553 |
| 4572 base::FilePath path = data_dir().AppendASCII("requirements"); | 4554 base::FilePath path = data_dir().AppendASCII("requirements"); |
| 4573 base::FilePath pem_path = | 4555 base::FilePath pem_path = |
| 4574 data_dir().AppendASCII("requirements").AppendASCII("v1_good.pem"); | 4556 data_dir().AppendASCII("requirements").AppendASCII("v1_good.pem"); |
| 4575 const Extension* extension_v1 = PackAndInstallCRX(path.AppendASCII("v1_good"), | 4557 const Extension* extension_v1 = PackAndInstallCRX(path.AppendASCII("v1_good"), |
| 4576 pem_path, | 4558 pem_path, |
| 4577 INSTALL_NEW); | 4559 INSTALL_NEW); |
| 4578 std::string id = extension_v1->id(); | 4560 std::string id = extension_v1->id(); |
| 4579 EXPECT_TRUE(service()->IsExtensionEnabled(id)); | 4561 EXPECT_TRUE(service()->IsExtensionEnabled(id)); |
| 4580 | 4562 |
| 4581 base::FilePath v2_bad_requirements_crx = GetTemporaryFile(); | 4563 base::FilePath v2_bad_requirements_crx = GetTemporaryFile(); |
| 4582 | 4564 |
| 4583 PackCRX(path.AppendASCII("v2_bad_requirements"), | 4565 PackCRX(path.AppendASCII("v2_bad_requirements"), |
| 4584 pem_path, | 4566 pem_path, |
| 4585 v2_bad_requirements_crx); | 4567 v2_bad_requirements_crx); |
| 4586 UpdateExtension(id, v2_bad_requirements_crx, INSTALLED); | 4568 UpdateExtension(id, v2_bad_requirements_crx, INSTALLED); |
| 4587 EXPECT_FALSE(service()->IsExtensionEnabled(id)); | 4569 EXPECT_FALSE(service()->IsExtensionEnabled(id)); |
| 4588 | 4570 |
| 4589 base::FilePath v3_good_crx = GetTemporaryFile(); | 4571 base::FilePath v3_good_crx = GetTemporaryFile(); |
| 4590 | 4572 |
| 4591 PackCRX(path.AppendASCII("v3_good"), pem_path, v3_good_crx); | 4573 PackCRX(path.AppendASCII("v3_good"), pem_path, v3_good_crx); |
| 4592 UpdateExtension(id, v3_good_crx, ENABLED); | 4574 UpdateExtension(id, v3_good_crx, ENABLED); |
| 4593 EXPECT_TRUE(service()->IsExtensionEnabled(id)); | 4575 EXPECT_TRUE(service()->IsExtensionEnabled(id)); |
| 4594 } | 4576 } |
| 4595 | 4577 |
| 4596 // Extensions disabled through user action should stay disabled. | 4578 // Extensions disabled through user action should stay disabled. |
| 4597 TEST_F(ExtensionServiceTest, UpgradingRequirementsDisabled) { | 4579 TEST_F(ExtensionServiceTest, UpgradingRequirementsDisabled) { |
| 4598 InitializeEmptyExtensionService(); | 4580 InitializeEmptyExtensionService(); |
| 4599 BlackListWebGL(); | 4581 content::GpuDataManager::GetInstance()->BlacklistWebGLForTesting(); |
| 4600 | 4582 |
| 4601 base::FilePath path = data_dir().AppendASCII("requirements"); | 4583 base::FilePath path = data_dir().AppendASCII("requirements"); |
| 4602 base::FilePath pem_path = | 4584 base::FilePath pem_path = |
| 4603 data_dir().AppendASCII("requirements").AppendASCII("v1_good.pem"); | 4585 data_dir().AppendASCII("requirements").AppendASCII("v1_good.pem"); |
| 4604 const Extension* extension_v1 = PackAndInstallCRX(path.AppendASCII("v1_good"), | 4586 const Extension* extension_v1 = PackAndInstallCRX(path.AppendASCII("v1_good"), |
| 4605 pem_path, | 4587 pem_path, |
| 4606 INSTALL_NEW); | 4588 INSTALL_NEW); |
| 4607 std::string id = extension_v1->id(); | 4589 std::string id = extension_v1->id(); |
| 4608 service()->DisableExtension(id, Extension::DISABLE_USER_ACTION); | 4590 service()->DisableExtension(id, Extension::DISABLE_USER_ACTION); |
| 4609 EXPECT_FALSE(service()->IsExtensionEnabled(id)); | 4591 EXPECT_FALSE(service()->IsExtensionEnabled(id)); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 4620 | 4602 |
| 4621 PackCRX(path.AppendASCII("v3_good"), pem_path, v3_good_crx); | 4603 PackCRX(path.AppendASCII("v3_good"), pem_path, v3_good_crx); |
| 4622 UpdateExtension(id, v3_good_crx, INSTALLED); | 4604 UpdateExtension(id, v3_good_crx, INSTALLED); |
| 4623 EXPECT_FALSE(service()->IsExtensionEnabled(id)); | 4605 EXPECT_FALSE(service()->IsExtensionEnabled(id)); |
| 4624 } | 4606 } |
| 4625 | 4607 |
| 4626 // The extension should not re-enabled because it was disabled from a | 4608 // The extension should not re-enabled because it was disabled from a |
| 4627 // permission increase. | 4609 // permission increase. |
| 4628 TEST_F(ExtensionServiceTest, UpgradingRequirementsPermissions) { | 4610 TEST_F(ExtensionServiceTest, UpgradingRequirementsPermissions) { |
| 4629 InitializeEmptyExtensionService(); | 4611 InitializeEmptyExtensionService(); |
| 4630 BlackListWebGL(); | 4612 content::GpuDataManager::GetInstance()->BlacklistWebGLForTesting(); |
| 4631 | 4613 |
| 4632 base::FilePath path = data_dir().AppendASCII("requirements"); | 4614 base::FilePath path = data_dir().AppendASCII("requirements"); |
| 4633 base::FilePath pem_path = | 4615 base::FilePath pem_path = |
| 4634 data_dir().AppendASCII("requirements").AppendASCII("v1_good.pem"); | 4616 data_dir().AppendASCII("requirements").AppendASCII("v1_good.pem"); |
| 4635 const Extension* extension_v1 = PackAndInstallCRX(path.AppendASCII("v1_good"), | 4617 const Extension* extension_v1 = PackAndInstallCRX(path.AppendASCII("v1_good"), |
| 4636 pem_path, | 4618 pem_path, |
| 4637 INSTALL_NEW); | 4619 INSTALL_NEW); |
| 4638 std::string id = extension_v1->id(); | 4620 std::string id = extension_v1->id(); |
| 4639 EXPECT_TRUE(service()->IsExtensionEnabled(id)); | 4621 EXPECT_TRUE(service()->IsExtensionEnabled(id)); |
| 4640 | 4622 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 4652 pem_path, | 4634 pem_path, |
| 4653 v3_bad_permissions_crx); | 4635 v3_bad_permissions_crx); |
| 4654 UpdateExtension(id, v3_bad_permissions_crx, INSTALLED); | 4636 UpdateExtension(id, v3_bad_permissions_crx, INSTALLED); |
| 4655 EXPECT_FALSE(service()->IsExtensionEnabled(id)); | 4637 EXPECT_FALSE(service()->IsExtensionEnabled(id)); |
| 4656 } | 4638 } |
| 4657 | 4639 |
| 4658 // Unpacked extensions are not allowed to be installed if they have unsupported | 4640 // Unpacked extensions are not allowed to be installed if they have unsupported |
| 4659 // requirements. | 4641 // requirements. |
| 4660 TEST_F(ExtensionServiceTest, UnpackedRequirements) { | 4642 TEST_F(ExtensionServiceTest, UnpackedRequirements) { |
| 4661 InitializeEmptyExtensionService(); | 4643 InitializeEmptyExtensionService(); |
| 4662 BlackListWebGL(); | 4644 content::GpuDataManager::GetInstance()->BlacklistWebGLForTesting(); |
| 4663 | 4645 |
| 4664 base::FilePath path = | 4646 base::FilePath path = |
| 4665 data_dir().AppendASCII("requirements").AppendASCII("v2_bad_requirements"); | 4647 data_dir().AppendASCII("requirements").AppendASCII("v2_bad_requirements"); |
| 4666 extensions::UnpackedInstaller::Create(service())->Load(path); | 4648 extensions::UnpackedInstaller::Create(service())->Load(path); |
| 4667 base::RunLoop().RunUntilIdle(); | 4649 base::RunLoop().RunUntilIdle(); |
| 4668 EXPECT_EQ(1u, GetErrors().size()); | 4650 EXPECT_EQ(1u, GetErrors().size()); |
| 4669 EXPECT_EQ(0u, registry()->enabled_extensions().size()); | 4651 EXPECT_EQ(0u, registry()->enabled_extensions().size()); |
| 4670 } | 4652 } |
| 4671 | 4653 |
| 4672 class ExtensionCookieCallback { | 4654 class ExtensionCookieCallback { |
| (...skipping 2483 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7156 shared_module->manifest()->type()); | 7138 shared_module->manifest()->type()); |
| 7157 EXPECT_TRUE(registry()->enabled_extensions().Contains(kExtensionId)); | 7139 EXPECT_TRUE(registry()->enabled_extensions().Contains(kExtensionId)); |
| 7158 | 7140 |
| 7159 // Reload the extension and wait for it to complete. This previously crashed | 7141 // Reload the extension and wait for it to complete. This previously crashed |
| 7160 // (see crbug.com/676815). | 7142 // (see crbug.com/676815). |
| 7161 service()->ReloadExtension(kExtensionId); | 7143 service()->ReloadExtension(kExtensionId); |
| 7162 base::RunLoop().RunUntilIdle(); | 7144 base::RunLoop().RunUntilIdle(); |
| 7163 // The shared module should be enabled. | 7145 // The shared module should be enabled. |
| 7164 EXPECT_TRUE(registry()->enabled_extensions().Contains(kExtensionId)); | 7146 EXPECT_TRUE(registry()->enabled_extensions().Contains(kExtensionId)); |
| 7165 } | 7147 } |
| OLD | NEW |