// Copyright 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "extensions/browser/extension_registry.h" #include <string> #include "base/memory/ref_counted.h" #include "extensions/common/extension.h" #include "extensions/common/test_util.h" #include "testing/gtest/include/gtest/gtest.h" namespace extensions { namespace { typedef testing::Test ExtensionRegistryTest; TEST_F(ExtensionRegistryTest, FillAndClearRegistry) { ExtensionRegistry registry; scoped_refptr<Extension> extension1 = test_util::CreateExtensionWithID("id1"); scoped_refptr<Extension> extension2 = test_util::CreateExtensionWithID("id2"); scoped_refptr<Extension> extension3 = test_util::CreateExtensionWithID("id3"); scoped_refptr<Extension> extension4 = test_util::CreateExtensionWithID("id4"); // All the sets start empty. EXPECT_EQ(0u, registry.enabled_extensions().size()); EXPECT_EQ(0u, registry.disabled_extensions().size()); EXPECT_EQ(0u, registry.terminated_extensions().size()); EXPECT_EQ(0u, registry.blacklisted_extensions().size()); // Extensions can be added to each set. registry.AddEnabled(extension1); registry.AddDisabled(extension2); registry.AddTerminated(extension3); registry.AddBlacklisted(extension4); EXPECT_EQ(1u, registry.enabled_extensions().size()); EXPECT_EQ(1u, registry.disabled_extensions().size()); EXPECT_EQ(1u, registry.terminated_extensions().size()); EXPECT_EQ(1u, registry.blacklisted_extensions().size()); // Clearing the registry clears all sets. registry.ClearAll(); EXPECT_EQ(0u, registry.enabled_extensions().size()); EXPECT_EQ(0u, registry.disabled_extensions().size()); EXPECT_EQ(0u, registry.terminated_extensions().size()); EXPECT_EQ(0u, registry.blacklisted_extensions().size()); } // A simple test of adding and removing things from sets. TEST_F(ExtensionRegistryTest, AddAndRemoveExtensionFromRegistry) { ExtensionRegistry registry; // Adding an extension works. scoped_refptr<Extension> extension = test_util::CreateExtensionWithID("id"); EXPECT_TRUE(registry.AddEnabled(extension)); EXPECT_EQ(1u, registry.enabled_extensions().size()); // The extension was only added to one set. EXPECT_EQ(0u, registry.disabled_extensions().size()); EXPECT_EQ(0u, registry.terminated_extensions().size()); EXPECT_EQ(0u, registry.blacklisted_extensions().size()); // Removing an extension works. EXPECT_TRUE(registry.RemoveEnabled(extension->id())); EXPECT_EQ(0u, registry.enabled_extensions().size()); // Trying to remove an extension that isn't in the set fails cleanly. EXPECT_FALSE(registry.RemoveEnabled(extension->id())); } TEST_F(ExtensionRegistryTest, AddExtensionToRegistryTwice) { ExtensionRegistry registry; scoped_refptr<Extension> extension = test_util::CreateExtensionWithID("id"); // An extension can exist in two sets at once. It would be nice to eliminate // this functionality, but some users of ExtensionRegistry need it. EXPECT_TRUE(registry.AddEnabled(extension)); EXPECT_TRUE(registry.AddDisabled(extension)); EXPECT_EQ(1u, registry.enabled_extensions().size()); EXPECT_EQ(1u, registry.disabled_extensions().size()); EXPECT_EQ(0u, registry.terminated_extensions().size()); EXPECT_EQ(0u, registry.blacklisted_extensions().size()); } TEST_F(ExtensionRegistryTest, GetExtensionById) { ExtensionRegistry registry; // Trying to get an extension fails cleanly when the sets are empty. EXPECT_FALSE( registry.GetExtensionById("id", ExtensionRegistry::EVERYTHING)); scoped_refptr<Extension> enabled = test_util::CreateExtensionWithID("enabled"); scoped_refptr<Extension> disabled = test_util::CreateExtensionWithID("disabled"); scoped_refptr<Extension> terminated = test_util::CreateExtensionWithID("terminated"); scoped_refptr<Extension> blacklisted = test_util::CreateExtensionWithID("blacklisted"); // Add an extension to each set. registry.AddEnabled(enabled); registry.AddDisabled(disabled); registry.AddTerminated(terminated); registry.AddBlacklisted(blacklisted); // Enabled is part of everything and the enabled list. EXPECT_TRUE( registry.GetExtensionById("enabled", ExtensionRegistry::EVERYTHING)); EXPECT_TRUE( registry.GetExtensionById("enabled", ExtensionRegistry::ENABLED)); EXPECT_FALSE( registry.GetExtensionById("enabled", ExtensionRegistry::DISABLED)); EXPECT_FALSE( registry.GetExtensionById("enabled", ExtensionRegistry::TERMINATED)); EXPECT_FALSE( registry.GetExtensionById("enabled", ExtensionRegistry::BLACKLISTED)); // Disabled is part of everything and the disabled list. EXPECT_TRUE( registry.GetExtensionById("disabled", ExtensionRegistry::EVERYTHING)); EXPECT_FALSE( registry.GetExtensionById("disabled", ExtensionRegistry::ENABLED)); EXPECT_TRUE( registry.GetExtensionById("disabled", ExtensionRegistry::DISABLED)); EXPECT_FALSE( registry.GetExtensionById("disabled", ExtensionRegistry::TERMINATED)); EXPECT_FALSE( registry.GetExtensionById("disabled", ExtensionRegistry::BLACKLISTED)); // Terminated is part of everything and the terminated list. EXPECT_TRUE( registry.GetExtensionById("terminated", ExtensionRegistry::EVERYTHING)); EXPECT_FALSE( registry.GetExtensionById("terminated", ExtensionRegistry::ENABLED)); EXPECT_FALSE( registry.GetExtensionById("terminated", ExtensionRegistry::DISABLED)); EXPECT_TRUE( registry.GetExtensionById("terminated", ExtensionRegistry::TERMINATED)); EXPECT_FALSE( registry.GetExtensionById("terminated", ExtensionRegistry::BLACKLISTED)); // Blacklisted is part of everything and the blacklisted list. EXPECT_TRUE( registry.GetExtensionById("blacklisted", ExtensionRegistry::EVERYTHING)); EXPECT_FALSE( registry.GetExtensionById("blacklisted", ExtensionRegistry::ENABLED)); EXPECT_FALSE( registry.GetExtensionById("blacklisted", ExtensionRegistry::DISABLED)); EXPECT_FALSE( registry.GetExtensionById("blacklisted", ExtensionRegistry::TERMINATED)); EXPECT_TRUE( registry.GetExtensionById("blacklisted", ExtensionRegistry::BLACKLISTED)); // Enabled can be found with multiple flags set. EXPECT_TRUE(registry.GetExtensionById( "enabled", ExtensionRegistry::ENABLED | ExtensionRegistry::TERMINATED)); // Enabled isn't found if the wrong flags are set. EXPECT_FALSE(registry.GetExtensionById( "enabled", ExtensionRegistry::DISABLED | ExtensionRegistry::BLACKLISTED)); } } // namespace } // namespace extensions