15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 25d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// found in the LICENSE file. 45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/browser/extension_registry.h" 65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include <string> 85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/memory/ref_counted.h" 10cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/strings/string_util.h" 11effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "extensions/browser/extension_registry_observer.h" 125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "extensions/browser/uninstall_reason.h" 135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/common/test_util.h" 145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace extensions { 175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace { 185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)typedef testing::Test ExtensionRegistryTest; 205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 21effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochtesting::AssertionResult HasSingleExtension( 22effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const ExtensionList& list, 23effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const scoped_refptr<const Extension>& extension) { 24effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (list.empty()) 25effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return testing::AssertionFailure() << "No extensions in list"; 26effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (list.size() > 1) 27effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return testing::AssertionFailure() << list.size() 28effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch << " extensions, expected 1"; 29effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const Extension* did_load = list[0].get(); 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (did_load != extension.get()) 31effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return testing::AssertionFailure() << "Expected " << extension->id() 32effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch << " found " << did_load->id(); 33effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return testing::AssertionSuccess(); 34effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 35effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 36effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochclass TestObserver : public ExtensionRegistryObserver { 37effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch public: 38effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch void Reset() { 39effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch loaded_.clear(); 40effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch unloaded_.clear(); 41cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) installed_.clear(); 42cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) uninstalled_.clear(); 43effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 44effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 45effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const ExtensionList& loaded() { return loaded_; } 46effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const ExtensionList& unloaded() { return unloaded_; } 47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const ExtensionList& installed() { return installed_; } 48cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const ExtensionList& uninstalled() { return uninstalled_; } 49effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 50effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch private: 51c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual void OnExtensionLoaded(content::BrowserContext* browser_context, 52c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const Extension* extension) OVERRIDE { 53effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch loaded_.push_back(extension); 54effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 55effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 56c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual void OnExtensionUnloaded(content::BrowserContext* browser_context, 570529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch const Extension* extension, 580529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch UnloadedExtensionInfo::Reason reason) 590529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch OVERRIDE { 60effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch unloaded_.push_back(extension); 61effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 62effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 63cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void OnExtensionWillBeInstalled( 64cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) content::BrowserContext* browser_context, 65cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const Extension* extension, 66cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool is_update, 67cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool from_ephemeral, 68cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const std::string& old_name) OVERRIDE { 69cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) installed_.push_back(extension); 70cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 71cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual void OnExtensionUninstalled( 735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) content::BrowserContext* browser_context, 745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const Extension* extension, 755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) extensions::UninstallReason reason) OVERRIDE { 76cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) uninstalled_.push_back(extension); 77cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 78cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 7946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void OnShutdown(extensions::ExtensionRegistry* registry) OVERRIDE { 8046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) Reset(); 8146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 8246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 83effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ExtensionList loaded_; 84effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ExtensionList unloaded_; 85cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ExtensionList installed_; 86cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ExtensionList uninstalled_; 87effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}; 88effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST_F(ExtensionRegistryTest, FillAndClearRegistry) { 90c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ExtensionRegistry registry(NULL); 911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_refptr<Extension> extension1 = test_util::CreateEmptyExtension("id1"); 921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_refptr<Extension> extension2 = test_util::CreateEmptyExtension("id2"); 931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_refptr<Extension> extension3 = test_util::CreateEmptyExtension("id3"); 941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_refptr<Extension> extension4 = test_util::CreateEmptyExtension("id4"); 955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // All the sets start empty. 975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0u, registry.enabled_extensions().size()); 985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0u, registry.disabled_extensions().size()); 995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0u, registry.terminated_extensions().size()); 1005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0u, registry.blacklisted_extensions().size()); 1015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Extensions can be added to each set. 1035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) registry.AddEnabled(extension1); 1045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) registry.AddDisabled(extension2); 1055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) registry.AddTerminated(extension3); 1065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) registry.AddBlacklisted(extension4); 1075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(1u, registry.enabled_extensions().size()); 1095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(1u, registry.disabled_extensions().size()); 1105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(1u, registry.terminated_extensions().size()); 1115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(1u, registry.blacklisted_extensions().size()); 1125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Clearing the registry clears all sets. 1145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) registry.ClearAll(); 1155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0u, registry.enabled_extensions().size()); 1175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0u, registry.disabled_extensions().size()); 1185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0u, registry.terminated_extensions().size()); 1195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0u, registry.blacklisted_extensions().size()); 1205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 1215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// A simple test of adding and removing things from sets. 1235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST_F(ExtensionRegistryTest, AddAndRemoveExtensionFromRegistry) { 124c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ExtensionRegistry registry(NULL); 1255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Adding an extension works. 1271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_refptr<Extension> extension = test_util::CreateEmptyExtension("id"); 1285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(registry.AddEnabled(extension)); 1295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(1u, registry.enabled_extensions().size()); 1305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // The extension was only added to one set. 1325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0u, registry.disabled_extensions().size()); 1335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0u, registry.terminated_extensions().size()); 1345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0u, registry.blacklisted_extensions().size()); 1355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Removing an extension works. 1375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(registry.RemoveEnabled(extension->id())); 1385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0u, registry.enabled_extensions().size()); 1395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Trying to remove an extension that isn't in the set fails cleanly. 1415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE(registry.RemoveEnabled(extension->id())); 1425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 1435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST_F(ExtensionRegistryTest, AddExtensionToRegistryTwice) { 145c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ExtensionRegistry registry(NULL); 1461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_refptr<Extension> extension = test_util::CreateEmptyExtension("id"); 1475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // An extension can exist in two sets at once. It would be nice to eliminate 1495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // this functionality, but some users of ExtensionRegistry need it. 1505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(registry.AddEnabled(extension)); 1515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(registry.AddDisabled(extension)); 1525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(1u, registry.enabled_extensions().size()); 1545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(1u, registry.disabled_extensions().size()); 1555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0u, registry.terminated_extensions().size()); 1565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0u, registry.blacklisted_extensions().size()); 1575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 1585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST_F(ExtensionRegistryTest, GetExtensionById) { 160c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ExtensionRegistry registry(NULL); 1615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Trying to get an extension fails cleanly when the sets are empty. 1635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE( 1645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) registry.GetExtensionById("id", ExtensionRegistry::EVERYTHING)); 1655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_refptr<Extension> enabled = test_util::CreateEmptyExtension("enabled"); 1675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_refptr<Extension> disabled = 1681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci test_util::CreateEmptyExtension("disabled"); 1695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_refptr<Extension> terminated = 1701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci test_util::CreateEmptyExtension("terminated"); 1715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_refptr<Extension> blacklisted = 1721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci test_util::CreateEmptyExtension("blacklisted"); 1735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Add an extension to each set. 1755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) registry.AddEnabled(enabled); 1765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) registry.AddDisabled(disabled); 1775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) registry.AddTerminated(terminated); 1785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) registry.AddBlacklisted(blacklisted); 1795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Enabled is part of everything and the enabled list. 1815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE( 1825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) registry.GetExtensionById("enabled", ExtensionRegistry::EVERYTHING)); 1835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE( 1845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) registry.GetExtensionById("enabled", ExtensionRegistry::ENABLED)); 1855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE( 1865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) registry.GetExtensionById("enabled", ExtensionRegistry::DISABLED)); 1875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE( 1885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) registry.GetExtensionById("enabled", ExtensionRegistry::TERMINATED)); 1895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE( 1905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) registry.GetExtensionById("enabled", ExtensionRegistry::BLACKLISTED)); 1915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Disabled is part of everything and the disabled list. 1935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE( 1945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) registry.GetExtensionById("disabled", ExtensionRegistry::EVERYTHING)); 1955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE( 1965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) registry.GetExtensionById("disabled", ExtensionRegistry::ENABLED)); 1975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE( 1985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) registry.GetExtensionById("disabled", ExtensionRegistry::DISABLED)); 1995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE( 2005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) registry.GetExtensionById("disabled", ExtensionRegistry::TERMINATED)); 2015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE( 2025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) registry.GetExtensionById("disabled", ExtensionRegistry::BLACKLISTED)); 2035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Terminated is part of everything and the terminated list. 2055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE( 2065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) registry.GetExtensionById("terminated", ExtensionRegistry::EVERYTHING)); 2075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE( 2085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) registry.GetExtensionById("terminated", ExtensionRegistry::ENABLED)); 2095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE( 2105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) registry.GetExtensionById("terminated", ExtensionRegistry::DISABLED)); 2115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE( 2125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) registry.GetExtensionById("terminated", ExtensionRegistry::TERMINATED)); 2135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE( 2145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) registry.GetExtensionById("terminated", ExtensionRegistry::BLACKLISTED)); 2155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Blacklisted is part of everything and the blacklisted list. 2175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE( 2185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) registry.GetExtensionById("blacklisted", ExtensionRegistry::EVERYTHING)); 2195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE( 2205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) registry.GetExtensionById("blacklisted", ExtensionRegistry::ENABLED)); 2215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE( 2225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) registry.GetExtensionById("blacklisted", ExtensionRegistry::DISABLED)); 2235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE( 2245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) registry.GetExtensionById("blacklisted", ExtensionRegistry::TERMINATED)); 2255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE( 2265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) registry.GetExtensionById("blacklisted", ExtensionRegistry::BLACKLISTED)); 2275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Enabled can be found with multiple flags set. 2295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(registry.GetExtensionById( 2305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "enabled", ExtensionRegistry::ENABLED | ExtensionRegistry::TERMINATED)); 2315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Enabled isn't found if the wrong flags are set. 2335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE(registry.GetExtensionById( 2345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "enabled", ExtensionRegistry::DISABLED | ExtensionRegistry::BLACKLISTED)); 2355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 2365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 237effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochTEST_F(ExtensionRegistryTest, Observer) { 238c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ExtensionRegistry registry(NULL); 239effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch TestObserver observer; 240effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch registry.AddObserver(&observer); 241effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 242effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_TRUE(observer.loaded().empty()); 243effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_TRUE(observer.unloaded().empty()); 244cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(observer.installed().empty()); 245effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 246effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch scoped_refptr<const Extension> extension = 2471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci test_util::CreateEmptyExtension("id"); 248effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 249cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) registry.TriggerOnWillBeInstalled( 2501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci extension.get(), false, false, base::EmptyString()); 251cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(HasSingleExtension(observer.installed(), extension.get())); 252cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 253effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch registry.AddEnabled(extension); 2541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci registry.TriggerOnLoaded(extension.get()); 255effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 2561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci registry.TriggerOnWillBeInstalled(extension.get(), true, false, "foo"); 257cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 258effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_TRUE(HasSingleExtension(observer.loaded(), extension.get())); 259effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_TRUE(observer.unloaded().empty()); 26046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) registry.Shutdown(); 261effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 262effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch registry.RemoveEnabled(extension->id()); 2631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci registry.TriggerOnUnloaded(extension.get(), 2641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci UnloadedExtensionInfo::REASON_DISABLE); 265effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 266effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_TRUE(observer.loaded().empty()); 267effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_TRUE(HasSingleExtension(observer.unloaded(), extension.get())); 26846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) registry.Shutdown(); 269effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 2701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci registry.TriggerOnUninstalled(extension.get(), 2715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) extensions::UNINSTALL_REASON_FOR_TESTING); 272cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(observer.installed().empty()); 273cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(HasSingleExtension(observer.uninstalled(), extension.get())); 274cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 275effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch registry.RemoveObserver(&observer); 276effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 277effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 2785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} // namespace 2795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} // namespace extensions 280