Index: chrome/browser/extensions/shared_module_service_unittest.cc |
diff --git a/chrome/browser/extensions/shared_module_service_unittest.cc b/chrome/browser/extensions/shared_module_service_unittest.cc |
index 2905a939d9a3429122703c8026dd31e61f3a2849..4670dfd0e1dd563aad3983f611c4e06530b86875 100644 |
--- a/chrome/browser/extensions/shared_module_service_unittest.cc |
+++ b/chrome/browser/extensions/shared_module_service_unittest.cc |
@@ -20,9 +20,10 @@ namespace extensions { |
namespace { |
-// Return an extension which imports a module with the given |id|. |
+// Return an extension with |id| which imports a module with the given |
+// |import_id|. |
scoped_refptr<Extension> CreateExtensionImportingModule( |
- const std::string& import_id) { |
+ const std::string& import_id, const std::string& id) { |
scoped_ptr<base::DictionaryValue> manifest = |
DictionaryBuilder() |
.Set("name", "Has Dependent Modules") |
@@ -34,6 +35,7 @@ scoped_refptr<Extension> CreateExtensionImportingModule( |
return ExtensionBuilder().SetManifest(manifest.Pass()) |
.AddFlags(Extension::FROM_WEBSTORE) |
+ .SetID(id) |
.Build(); |
} |
@@ -81,8 +83,9 @@ testing::AssertionResult SharedModuleServiceUnitTest::InstallExtension( |
TEST_F(SharedModuleServiceUnitTest, AddDependentSharedModules) { |
// Create an extension that has a dependency. |
std::string import_id = id_util::GenerateId("id"); |
+ std::string extension_id = id_util::GenerateId("extension_id"); |
scoped_refptr<Extension> extension = |
- CreateExtensionImportingModule(import_id); |
+ CreateExtensionImportingModule(import_id, extension_id); |
PendingExtensionManager* pending_extension_manager = |
service_->pending_extension_manager(); |
@@ -114,9 +117,10 @@ TEST_F(SharedModuleServiceUnitTest, PruneSharedModulesOnUninstall) { |
EXPECT_TRUE(InstallExtension(shared_module)); |
+ std::string extension_id = id_util::GenerateId("extension_id"); |
// Create and install an extension that imports our new module. |
scoped_refptr<Extension> importing_extension = |
- CreateExtensionImportingModule(shared_module->id()); |
+ CreateExtensionImportingModule(shared_module->id(), extension_id); |
EXPECT_TRUE(InstallExtension(importing_extension)); |
// Uninstall the extension that imports our module. |
@@ -133,4 +137,38 @@ TEST_F(SharedModuleServiceUnitTest, PruneSharedModulesOnUninstall) { |
ExtensionRegistry::EVERYTHING)); |
} |
+TEST_F(SharedModuleServiceUnitTest, WhitelistedImports) { |
+ std::string whitelisted_id = id_util::GenerateId("whitelisted"); |
+ std::string nonwhitelisted_id = id_util::GenerateId("nonwhitelisted"); |
+ // Create a module which exports to a restricted whitelist. |
+ scoped_ptr<base::DictionaryValue> manifest = |
+ DictionaryBuilder() |
+ .Set("name", "Shared Module") |
+ .Set("version", "1.0") |
+ .Set("manifest_version", 2) |
+ .Set("export", |
+ DictionaryBuilder().Set("whitelist", |
+ ListBuilder() |
+ .Append(whitelisted_id)) |
+ .Set("resources", |
+ ListBuilder().Append("*"))).Build(); |
+ scoped_refptr<Extension> shared_module = |
+ ExtensionBuilder().SetManifest(manifest.Pass()) |
+ .AddFlags(Extension::FROM_WEBSTORE) |
+ .SetID(id_util::GenerateId("shared_module")) |
+ .Build(); |
+ |
+ EXPECT_TRUE(InstallExtension(shared_module)); |
+ |
+ // Create and install an extension with the whitelisted ID. |
+ scoped_refptr<Extension> whitelisted_extension = |
+ CreateExtensionImportingModule(shared_module->id(), whitelisted_id); |
+ EXPECT_TRUE(InstallExtension(whitelisted_extension)); |
+ |
+ // Try to install an extension with an ID that is not whitelisted. |
+ scoped_refptr<Extension> nonwhitelisted_extension = |
+ CreateExtensionImportingModule(shared_module->id(), nonwhitelisted_id); |
+ EXPECT_FALSE(InstallExtension(nonwhitelisted_extension)); |
+} |
+ |
} // namespace extensions |