[email protected] | eb75f7b | 2012-01-04 09:07:28 | [diff] [blame] | 1 | // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
[email protected] | 25ae015 | 2011-11-18 14:40:02 | [diff] [blame] | 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
| 4 | |
[email protected] | 25ae015 | 2011-11-18 14:40:02 | [diff] [blame] | 5 | #include "chrome/browser/extensions/component_loader.h" |
| 6 | |
[email protected] | 443e931 | 2013-05-06 06:17:34 | [diff] [blame] | 7 | #include <string> |
| 8 | |
thestig | 18dfb7a5 | 2014-08-26 10:44:04 | [diff] [blame] | 9 | #include "base/files/file_util.h" |
[email protected] | 25ae015 | 2011-11-18 14:40:02 | [diff] [blame] | 10 | #include "base/path_service.h" |
[email protected] | 3853a4c | 2013-02-11 17:15:57 | [diff] [blame] | 11 | #include "base/prefs/pref_registry_simple.h" |
[email protected] | 25ae015 | 2011-11-18 14:40:02 | [diff] [blame] | 12 | #include "chrome/browser/extensions/test_extension_service.h" |
| 13 | #include "chrome/common/chrome_paths.h" |
[email protected] | 25ae015 | 2011-11-18 14:40:02 | [diff] [blame] | 14 | #include "chrome/common/pref_names.h" |
[email protected] | 7688968a | 2013-02-12 21:45:13 | [diff] [blame] | 15 | #include "chrome/test/base/testing_pref_service_syncable.h" |
[email protected] | 55e16cd | 2013-12-18 04:36:08 | [diff] [blame] | 16 | #include "chrome/test/base/testing_profile.h" |
[email protected] | f0c8c499 | 2014-05-15 17:37:26 | [diff] [blame] | 17 | #include "components/pref_registry/pref_registry_syncable.h" |
[email protected] | 75181f6 | 2014-03-19 21:41:12 | [diff] [blame] | 18 | #include "content/public/test/test_browser_thread_bundle.h" |
reillyg | a3acbc1 | 2014-11-11 23:17:12 | [diff] [blame^] | 19 | #include "extensions/browser/extension_registry.h" |
[email protected] | 993da5e | 2013-03-23 21:25:16 | [diff] [blame] | 20 | #include "extensions/common/constants.h" |
[email protected] | e4452d3 | 2013-11-15 23:07:41 | [diff] [blame] | 21 | #include "extensions/common/extension.h" |
[email protected] | 289c44b | 2013-12-17 03:26:57 | [diff] [blame] | 22 | #include "extensions/common/extension_set.h" |
[email protected] | 558878cc8 | 2013-11-09 01:25:51 | [diff] [blame] | 23 | #include "extensions/common/manifest_handlers/background_info.h" |
[email protected] | 25ae015 | 2011-11-18 14:40:02 | [diff] [blame] | 24 | #include "testing/gtest/include/gtest/gtest.h" |
| 25 | |
[email protected] | 06492ed | 2013-03-24 22:13:14 | [diff] [blame] | 26 | namespace extensions { |
[email protected] | 1c321ee5 | 2012-05-21 03:02:34 | [diff] [blame] | 27 | |
[email protected] | 25ae015 | 2011-11-18 14:40:02 | [diff] [blame] | 28 | namespace { |
| 29 | |
| 30 | class MockExtensionService : public TestExtensionService { |
| 31 | private: |
| 32 | bool ready_; |
[email protected] | 43cbd759 | 2011-12-08 08:52:10 | [diff] [blame] | 33 | size_t unloaded_count_; |
reillyg | a3acbc1 | 2014-11-11 23:17:12 | [diff] [blame^] | 34 | ExtensionRegistry* registry_; |
[email protected] | 25ae015 | 2011-11-18 14:40:02 | [diff] [blame] | 35 | |
| 36 | public: |
reillyg | a3acbc1 | 2014-11-11 23:17:12 | [diff] [blame^] | 37 | explicit MockExtensionService(Profile* profile) |
| 38 | : ready_(false), |
| 39 | unloaded_count_(0), |
| 40 | registry_(ExtensionRegistry::Get(profile)) {} |
[email protected] | 25ae015 | 2011-11-18 14:40:02 | [diff] [blame] | 41 | |
dcheng | ae36a4a | 2014-10-21 12:36:36 | [diff] [blame] | 42 | void AddComponentExtension(const Extension* extension) override { |
reillyg | a3acbc1 | 2014-11-11 23:17:12 | [diff] [blame^] | 43 | EXPECT_FALSE(registry_->enabled_extensions().Contains(extension->id())); |
[email protected] | 25ae015 | 2011-11-18 14:40:02 | [diff] [blame] | 44 | // ExtensionService must become the owner of the extension object. |
reillyg | a3acbc1 | 2014-11-11 23:17:12 | [diff] [blame^] | 45 | registry_->AddEnabled(extension); |
[email protected] | 25ae015 | 2011-11-18 14:40:02 | [diff] [blame] | 46 | } |
| 47 | |
dcheng | ae36a4a | 2014-10-21 12:36:36 | [diff] [blame] | 48 | void UnloadExtension(const std::string& extension_id, |
| 49 | UnloadedExtensionInfo::Reason reason) override { |
reillyg | a3acbc1 | 2014-11-11 23:17:12 | [diff] [blame^] | 50 | ASSERT_TRUE(registry_->enabled_extensions().Contains(extension_id)); |
[email protected] | 25ae015 | 2011-11-18 14:40:02 | [diff] [blame] | 51 | // Remove the extension with the matching id. |
reillyg | a3acbc1 | 2014-11-11 23:17:12 | [diff] [blame^] | 52 | registry_->RemoveEnabled(extension_id); |
[email protected] | 43cbd759 | 2011-12-08 08:52:10 | [diff] [blame] | 53 | unloaded_count_++; |
[email protected] | 25ae015 | 2011-11-18 14:40:02 | [diff] [blame] | 54 | } |
| 55 | |
dcheng | ae36a4a | 2014-10-21 12:36:36 | [diff] [blame] | 56 | void RemoveComponentExtension(const std::string& extension_id) override { |
[email protected] | b0af479 | 2013-10-23 09:12:13 | [diff] [blame] | 57 | UnloadExtension(extension_id, UnloadedExtensionInfo::REASON_DISABLE); |
[email protected] | 8b1ec20 | 2013-09-05 02:09:50 | [diff] [blame] | 58 | } |
| 59 | |
dcheng | ae36a4a | 2014-10-21 12:36:36 | [diff] [blame] | 60 | bool is_ready() override { return ready_; } |
[email protected] | 25ae015 | 2011-11-18 14:40:02 | [diff] [blame] | 61 | |
[email protected] | 25ae015 | 2011-11-18 14:40:02 | [diff] [blame] | 62 | void set_ready(bool ready) { |
| 63 | ready_ = ready; |
| 64 | } |
| 65 | |
[email protected] | 43cbd759 | 2011-12-08 08:52:10 | [diff] [blame] | 66 | size_t unloaded_count() const { |
| 67 | return unloaded_count_; |
| 68 | } |
| 69 | |
reillyg | a3acbc1 | 2014-11-11 23:17:12 | [diff] [blame^] | 70 | void clear_extensions() { registry_->ClearAll(); } |
[email protected] | 25ae015 | 2011-11-18 14:40:02 | [diff] [blame] | 71 | }; |
| 72 | |
| 73 | } // namespace |
| 74 | |
[email protected] | d592b1bd | 2013-05-06 06:40:47 | [diff] [blame] | 75 | class ComponentLoaderTest : public testing::Test { |
[email protected] | 25ae015 | 2011-11-18 14:40:02 | [diff] [blame] | 76 | public: |
[email protected] | e676f8f | 2013-04-04 09:04:37 | [diff] [blame] | 77 | ComponentLoaderTest() |
[email protected] | 25ae015 | 2011-11-18 14:40:02 | [diff] [blame] | 78 | // Note: we pass the same pref service here, to stand in for both |
| 79 | // user prefs and local state. |
reillyg | a3acbc1 | 2014-11-11 23:17:12 | [diff] [blame^] | 80 | : extension_service_(&profile_), |
| 81 | component_loader_(&extension_service_, |
[email protected] | 55e16cd | 2013-12-18 04:36:08 | [diff] [blame] | 82 | &prefs_, |
| 83 | &local_state_, |
reillyg | a3acbc1 | 2014-11-11 23:17:12 | [diff] [blame^] | 84 | &profile_) {} |
[email protected] | 25ae015 | 2011-11-18 14:40:02 | [diff] [blame] | 85 | |
dcheng | 7219181 | 2014-10-28 20:49:56 | [diff] [blame] | 86 | void SetUp() override { |
[email protected] | 25ae015 | 2011-11-18 14:40:02 | [diff] [blame] | 87 | extension_path_ = |
[email protected] | 43cbd759 | 2011-12-08 08:52:10 | [diff] [blame] | 88 | GetBasePath().AppendASCII("good") |
[email protected] | 25ae015 | 2011-11-18 14:40:02 | [diff] [blame] | 89 | .AppendASCII("Extensions") |
| 90 | .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj") |
| 91 | .AppendASCII("1.0.0.0"); |
| 92 | |
| 93 | // Read in the extension manifest. |
[email protected] | 82f84b9 | 2013-08-30 18:23:50 | [diff] [blame] | 94 | ASSERT_TRUE(base::ReadFileToString( |
[email protected] | 993da5e | 2013-03-23 21:25:16 | [diff] [blame] | 95 | extension_path_.Append(kManifestFilename), |
| 96 | &manifest_contents_)); |
[email protected] | 25ae015 | 2011-11-18 14:40:02 | [diff] [blame] | 97 | |
[email protected] | 25ae015 | 2011-11-18 14:40:02 | [diff] [blame] | 98 | // Register the local state prefs. |
| 99 | #if defined(OS_CHROMEOS) |
[email protected] | b1de2c7 | 2013-02-06 02:45:47 | [diff] [blame] | 100 | local_state_.registry()->RegisterBooleanPref( |
[email protected] | ced247a | 2014-06-13 19:14:19 | [diff] [blame] | 101 | prefs::kAccessibilitySpokenFeedbackEnabled, false); |
[email protected] | 25ae015 | 2011-11-18 14:40:02 | [diff] [blame] | 102 | #endif |
| 103 | } |
| 104 | |
| 105 | protected: |
reillyg | a3acbc1 | 2014-11-11 23:17:12 | [diff] [blame^] | 106 | TestingProfile profile_; |
[email protected] | 25ae015 | 2011-11-18 14:40:02 | [diff] [blame] | 107 | MockExtensionService extension_service_; |
[email protected] | 5b19952 | 2012-12-22 17:24:44 | [diff] [blame] | 108 | TestingPrefServiceSyncable prefs_; |
| 109 | TestingPrefServiceSimple local_state_; |
[email protected] | 25ae015 | 2011-11-18 14:40:02 | [diff] [blame] | 110 | ComponentLoader component_loader_; |
| 111 | |
| 112 | // The root directory of the text extension. |
[email protected] | 650b2d5 | 2013-02-10 03:41:45 | [diff] [blame] | 113 | base::FilePath extension_path_; |
[email protected] | 25ae015 | 2011-11-18 14:40:02 | [diff] [blame] | 114 | |
| 115 | // The contents of the text extension's manifest file. |
| 116 | std::string manifest_contents_; |
[email protected] | 43cbd759 | 2011-12-08 08:52:10 | [diff] [blame] | 117 | |
[email protected] | 75181f6 | 2014-03-19 21:41:12 | [diff] [blame] | 118 | content::TestBrowserThreadBundle thread_bundle_; |
| 119 | |
[email protected] | 650b2d5 | 2013-02-10 03:41:45 | [diff] [blame] | 120 | base::FilePath GetBasePath() { |
| 121 | base::FilePath test_data_dir; |
[email protected] | 43cbd759 | 2011-12-08 08:52:10 | [diff] [blame] | 122 | PathService::Get(chrome::DIR_TEST_DATA, &test_data_dir); |
| 123 | return test_data_dir.AppendASCII("extensions"); |
| 124 | } |
[email protected] | 25ae015 | 2011-11-18 14:40:02 | [diff] [blame] | 125 | }; |
| 126 | |
| 127 | TEST_F(ComponentLoaderTest, ParseManifest) { |
[email protected] | 023b3d1 | 2013-12-23 18:46:49 | [diff] [blame] | 128 | scoped_ptr<base::DictionaryValue> manifest; |
[email protected] | 25ae015 | 2011-11-18 14:40:02 | [diff] [blame] | 129 | |
| 130 | // Test invalid JSON. |
| 131 | manifest.reset( |
| 132 | component_loader_.ParseManifest("{ 'test': 3 } invalid")); |
[email protected] | ee837d3 | 2012-10-02 22:25:49 | [diff] [blame] | 133 | EXPECT_FALSE(manifest.get()); |
[email protected] | 25ae015 | 2011-11-18 14:40:02 | [diff] [blame] | 134 | |
| 135 | // Test manifests that are valid JSON, but don't have an object literal |
| 136 | // at the root. ParseManifest() should always return NULL. |
| 137 | |
[email protected] | 007b3f8 | 2013-04-09 08:46:45 | [diff] [blame] | 138 | manifest.reset(component_loader_.ParseManifest(std::string())); |
[email protected] | ee837d3 | 2012-10-02 22:25:49 | [diff] [blame] | 139 | EXPECT_FALSE(manifest.get()); |
[email protected] | 25ae015 | 2011-11-18 14:40:02 | [diff] [blame] | 140 | |
| 141 | manifest.reset(component_loader_.ParseManifest("[{ \"foo\": 3 }]")); |
[email protected] | ee837d3 | 2012-10-02 22:25:49 | [diff] [blame] | 142 | EXPECT_FALSE(manifest.get()); |
[email protected] | 25ae015 | 2011-11-18 14:40:02 | [diff] [blame] | 143 | |
| 144 | manifest.reset(component_loader_.ParseManifest("\"Test\"")); |
[email protected] | ee837d3 | 2012-10-02 22:25:49 | [diff] [blame] | 145 | EXPECT_FALSE(manifest.get()); |
[email protected] | 25ae015 | 2011-11-18 14:40:02 | [diff] [blame] | 146 | |
| 147 | manifest.reset(component_loader_.ParseManifest("42")); |
[email protected] | ee837d3 | 2012-10-02 22:25:49 | [diff] [blame] | 148 | EXPECT_FALSE(manifest.get()); |
[email protected] | 25ae015 | 2011-11-18 14:40:02 | [diff] [blame] | 149 | |
| 150 | manifest.reset(component_loader_.ParseManifest("true")); |
[email protected] | ee837d3 | 2012-10-02 22:25:49 | [diff] [blame] | 151 | EXPECT_FALSE(manifest.get()); |
[email protected] | 25ae015 | 2011-11-18 14:40:02 | [diff] [blame] | 152 | |
| 153 | manifest.reset(component_loader_.ParseManifest("false")); |
[email protected] | ee837d3 | 2012-10-02 22:25:49 | [diff] [blame] | 154 | EXPECT_FALSE(manifest.get()); |
[email protected] | 25ae015 | 2011-11-18 14:40:02 | [diff] [blame] | 155 | |
| 156 | manifest.reset(component_loader_.ParseManifest("null")); |
[email protected] | ee837d3 | 2012-10-02 22:25:49 | [diff] [blame] | 157 | EXPECT_FALSE(manifest.get()); |
[email protected] | 25ae015 | 2011-11-18 14:40:02 | [diff] [blame] | 158 | |
| 159 | // Test parsing valid JSON. |
| 160 | |
[email protected] | ee837d3 | 2012-10-02 22:25:49 | [diff] [blame] | 161 | int value = 0; |
[email protected] | 25ae015 | 2011-11-18 14:40:02 | [diff] [blame] | 162 | manifest.reset(component_loader_.ParseManifest( |
| 163 | "{ \"test\": { \"one\": 1 }, \"two\": 2 }")); |
[email protected] | ee837d3 | 2012-10-02 22:25:49 | [diff] [blame] | 164 | ASSERT_TRUE(manifest.get()); |
| 165 | EXPECT_TRUE(manifest->GetInteger("test.one", &value)); |
| 166 | EXPECT_EQ(1, value); |
[email protected] | 25ae015 | 2011-11-18 14:40:02 | [diff] [blame] | 167 | ASSERT_TRUE(manifest->GetInteger("two", &value)); |
[email protected] | ee837d3 | 2012-10-02 22:25:49 | [diff] [blame] | 168 | EXPECT_EQ(2, value); |
[email protected] | 25ae015 | 2011-11-18 14:40:02 | [diff] [blame] | 169 | |
| 170 | std::string string_value; |
| 171 | manifest.reset(component_loader_.ParseManifest(manifest_contents_)); |
[email protected] | eb75f7b | 2012-01-04 09:07:28 | [diff] [blame] | 172 | ASSERT_TRUE(manifest->GetString("background.page", &string_value)); |
[email protected] | ee837d3 | 2012-10-02 22:25:49 | [diff] [blame] | 173 | EXPECT_EQ("backgroundpage.html", string_value); |
[email protected] | 25ae015 | 2011-11-18 14:40:02 | [diff] [blame] | 174 | } |
| 175 | |
| 176 | // Test that the extension isn't loaded if the extension service isn't ready. |
| 177 | TEST_F(ComponentLoaderTest, AddWhenNotReady) { |
[email protected] | 25ae015 | 2011-11-18 14:40:02 | [diff] [blame] | 178 | extension_service_.set_ready(false); |
[email protected] | ee837d3 | 2012-10-02 22:25:49 | [diff] [blame] | 179 | std::string extension_id = |
| 180 | component_loader_.Add(manifest_contents_, extension_path_); |
| 181 | EXPECT_NE("", extension_id); |
reillyg | a3acbc1 | 2014-11-11 23:17:12 | [diff] [blame^] | 182 | ExtensionRegistry* registry = ExtensionRegistry::Get(&profile_); |
| 183 | EXPECT_EQ(0u, registry->enabled_extensions().size()); |
[email protected] | 25ae015 | 2011-11-18 14:40:02 | [diff] [blame] | 184 | } |
| 185 | |
| 186 | // Test that it *is* loaded when the extension service *is* ready. |
| 187 | TEST_F(ComponentLoaderTest, AddWhenReady) { |
[email protected] | 25ae015 | 2011-11-18 14:40:02 | [diff] [blame] | 188 | extension_service_.set_ready(true); |
[email protected] | ee837d3 | 2012-10-02 22:25:49 | [diff] [blame] | 189 | std::string extension_id = |
| 190 | component_loader_.Add(manifest_contents_, extension_path_); |
| 191 | EXPECT_NE("", extension_id); |
reillyg | a3acbc1 | 2014-11-11 23:17:12 | [diff] [blame^] | 192 | ExtensionRegistry* registry = ExtensionRegistry::Get(&profile_); |
| 193 | EXPECT_EQ(1u, registry->enabled_extensions().size()); |
| 194 | EXPECT_TRUE(registry->enabled_extensions().GetByID(extension_id)); |
[email protected] | 25ae015 | 2011-11-18 14:40:02 | [diff] [blame] | 195 | } |
| 196 | |
| 197 | TEST_F(ComponentLoaderTest, Remove) { |
| 198 | extension_service_.set_ready(false); |
reillyg | a3acbc1 | 2014-11-11 23:17:12 | [diff] [blame^] | 199 | ExtensionRegistry* registry = ExtensionRegistry::Get(&profile_); |
[email protected] | 25ae015 | 2011-11-18 14:40:02 | [diff] [blame] | 200 | |
| 201 | // Removing an extension that was never added should be ok. |
| 202 | component_loader_.Remove(extension_path_); |
reillyg | a3acbc1 | 2014-11-11 23:17:12 | [diff] [blame^] | 203 | EXPECT_EQ(0u, registry->enabled_extensions().size()); |
[email protected] | 25ae015 | 2011-11-18 14:40:02 | [diff] [blame] | 204 | |
[email protected] | eac8833 | 2012-12-26 17:57:45 | [diff] [blame] | 205 | // Try adding and removing before LoadAll() is called. |
[email protected] | 25ae015 | 2011-11-18 14:40:02 | [diff] [blame] | 206 | component_loader_.Add(manifest_contents_, extension_path_); |
| 207 | component_loader_.Remove(extension_path_); |
[email protected] | eac8833 | 2012-12-26 17:57:45 | [diff] [blame] | 208 | component_loader_.LoadAll(); |
reillyg | a3acbc1 | 2014-11-11 23:17:12 | [diff] [blame^] | 209 | EXPECT_EQ(0u, registry->enabled_extensions().size()); |
[email protected] | 25ae015 | 2011-11-18 14:40:02 | [diff] [blame] | 210 | |
| 211 | // Load an extension, and check that it's unloaded when Remove() is called. |
[email protected] | 25ae015 | 2011-11-18 14:40:02 | [diff] [blame] | 212 | extension_service_.set_ready(true); |
[email protected] | ee837d3 | 2012-10-02 22:25:49 | [diff] [blame] | 213 | std::string extension_id = |
| 214 | component_loader_.Add(manifest_contents_, extension_path_); |
reillyg | a3acbc1 | 2014-11-11 23:17:12 | [diff] [blame^] | 215 | EXPECT_EQ(1u, registry->enabled_extensions().size()); |
[email protected] | 25ae015 | 2011-11-18 14:40:02 | [diff] [blame] | 216 | component_loader_.Remove(extension_path_); |
reillyg | a3acbc1 | 2014-11-11 23:17:12 | [diff] [blame^] | 217 | EXPECT_EQ(0u, registry->enabled_extensions().size()); |
[email protected] | 25ae015 | 2011-11-18 14:40:02 | [diff] [blame] | 218 | |
[email protected] | eac8833 | 2012-12-26 17:57:45 | [diff] [blame] | 219 | // And after calling LoadAll(), it shouldn't get loaded. |
| 220 | component_loader_.LoadAll(); |
reillyg | a3acbc1 | 2014-11-11 23:17:12 | [diff] [blame^] | 221 | EXPECT_EQ(0u, registry->enabled_extensions().size()); |
[email protected] | 25ae015 | 2011-11-18 14:40:02 | [diff] [blame] | 222 | } |
| 223 | |
| 224 | TEST_F(ComponentLoaderTest, LoadAll) { |
| 225 | extension_service_.set_ready(false); |
reillyg | a3acbc1 | 2014-11-11 23:17:12 | [diff] [blame^] | 226 | ExtensionRegistry* registry = ExtensionRegistry::Get(&profile_); |
[email protected] | 25ae015 | 2011-11-18 14:40:02 | [diff] [blame] | 227 | |
| 228 | // No extensions should be loaded if none were added. |
[email protected] | eac8833 | 2012-12-26 17:57:45 | [diff] [blame] | 229 | component_loader_.LoadAll(); |
reillyg | a3acbc1 | 2014-11-11 23:17:12 | [diff] [blame^] | 230 | EXPECT_EQ(0u, registry->enabled_extensions().size()); |
[email protected] | 25ae015 | 2011-11-18 14:40:02 | [diff] [blame] | 231 | |
[email protected] | eac8833 | 2012-12-26 17:57:45 | [diff] [blame] | 232 | // Use LoadAll() to load the default extensions. |
[email protected] | bb12148 | 2012-12-08 06:49:38 | [diff] [blame] | 233 | component_loader_.AddDefaultComponentExtensions(false); |
[email protected] | eac8833 | 2012-12-26 17:57:45 | [diff] [blame] | 234 | component_loader_.LoadAll(); |
reillyg | a3acbc1 | 2014-11-11 23:17:12 | [diff] [blame^] | 235 | unsigned int default_count = registry->enabled_extensions().size(); |
[email protected] | 25ae015 | 2011-11-18 14:40:02 | [diff] [blame] | 236 | |
| 237 | // Clear the list of loaded extensions, and reload with one more. |
[email protected] | 84df833 | 2011-12-06 18:22:46 | [diff] [blame] | 238 | extension_service_.clear_extensions(); |
[email protected] | 25ae015 | 2011-11-18 14:40:02 | [diff] [blame] | 239 | component_loader_.Add(manifest_contents_, extension_path_); |
[email protected] | eac8833 | 2012-12-26 17:57:45 | [diff] [blame] | 240 | component_loader_.LoadAll(); |
[email protected] | 25ae015 | 2011-11-18 14:40:02 | [diff] [blame] | 241 | |
reillyg | a3acbc1 | 2014-11-11 23:17:12 | [diff] [blame^] | 242 | EXPECT_EQ(default_count + 1, registry->enabled_extensions().size()); |
[email protected] | 25ae015 | 2011-11-18 14:40:02 | [diff] [blame] | 243 | } |
| 244 | |
[email protected] | 43cbd759 | 2011-12-08 08:52:10 | [diff] [blame] | 245 | TEST_F(ComponentLoaderTest, AddOrReplace) { |
[email protected] | ee837d3 | 2012-10-02 22:25:49 | [diff] [blame] | 246 | EXPECT_EQ(0u, component_loader_.registered_extensions_count()); |
[email protected] | bb12148 | 2012-12-08 06:49:38 | [diff] [blame] | 247 | component_loader_.AddDefaultComponentExtensions(false); |
[email protected] | 43cbd759 | 2011-12-08 08:52:10 | [diff] [blame] | 248 | size_t const default_count = component_loader_.registered_extensions_count(); |
[email protected] | 650b2d5 | 2013-02-10 03:41:45 | [diff] [blame] | 249 | base::FilePath known_extension = GetBasePath() |
[email protected] | 43cbd759 | 2011-12-08 08:52:10 | [diff] [blame] | 250 | .AppendASCII("override_component_extension"); |
[email protected] | 650b2d5 | 2013-02-10 03:41:45 | [diff] [blame] | 251 | base::FilePath unknow_extension = extension_path_; |
[email protected] | 5583c05 | 2013-05-29 02:18:22 | [diff] [blame] | 252 | base::FilePath invalid_extension = GetBasePath().AppendASCII("bad"); |
[email protected] | 43cbd759 | 2011-12-08 08:52:10 | [diff] [blame] | 253 | |
| 254 | // Replace a default component extension. |
| 255 | component_loader_.AddOrReplace(known_extension); |
[email protected] | ee837d3 | 2012-10-02 22:25:49 | [diff] [blame] | 256 | EXPECT_EQ(default_count, |
[email protected] | 43cbd759 | 2011-12-08 08:52:10 | [diff] [blame] | 257 | component_loader_.registered_extensions_count()); |
| 258 | |
| 259 | // Add a new component extension. |
| 260 | component_loader_.AddOrReplace(unknow_extension); |
[email protected] | ee837d3 | 2012-10-02 22:25:49 | [diff] [blame] | 261 | EXPECT_EQ(default_count + 1, |
[email protected] | 43cbd759 | 2011-12-08 08:52:10 | [diff] [blame] | 262 | component_loader_.registered_extensions_count()); |
| 263 | |
| 264 | extension_service_.set_ready(true); |
[email protected] | eac8833 | 2012-12-26 17:57:45 | [diff] [blame] | 265 | component_loader_.LoadAll(); |
reillyg | a3acbc1 | 2014-11-11 23:17:12 | [diff] [blame^] | 266 | ExtensionRegistry* registry = ExtensionRegistry::Get(&profile_); |
[email protected] | 43cbd759 | 2011-12-08 08:52:10 | [diff] [blame] | 267 | |
reillyg | a3acbc1 | 2014-11-11 23:17:12 | [diff] [blame^] | 268 | EXPECT_EQ(default_count + 1, registry->enabled_extensions().size()); |
[email protected] | ee837d3 | 2012-10-02 22:25:49 | [diff] [blame] | 269 | EXPECT_EQ(0u, extension_service_.unloaded_count()); |
[email protected] | 43cbd759 | 2011-12-08 08:52:10 | [diff] [blame] | 270 | |
| 271 | // replace loaded component extension. |
| 272 | component_loader_.AddOrReplace(known_extension); |
reillyg | a3acbc1 | 2014-11-11 23:17:12 | [diff] [blame^] | 273 | EXPECT_EQ(default_count + 1, registry->enabled_extensions().size()); |
[email protected] | ee837d3 | 2012-10-02 22:25:49 | [diff] [blame] | 274 | EXPECT_EQ(1u, extension_service_.unloaded_count()); |
[email protected] | 5583c05 | 2013-05-29 02:18:22 | [diff] [blame] | 275 | |
| 276 | // Add an invalid component extension. |
| 277 | std::string extension_id = component_loader_.AddOrReplace(invalid_extension); |
| 278 | EXPECT_TRUE(extension_id.empty()); |
[email protected] | 43cbd759 | 2011-12-08 08:52:10 | [diff] [blame] | 279 | } |
| 280 | |
[email protected] | 25ae015 | 2011-11-18 14:40:02 | [diff] [blame] | 281 | } // namespace extensions |