| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 <string> | 5 #include <string> |
| 6 | 6 |
| 7 #include "chrome/browser/extensions/component_loader.h" | 7 #include "chrome/browser/extensions/component_loader.h" |
| 8 | 8 |
| 9 #include "base/file_util.h" | 9 #include "base/file_util.h" |
| 10 #include "base/path_service.h" | 10 #include "base/path_service.h" |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 117 return test_data_dir.AppendASCII("extensions"); | 117 return test_data_dir.AppendASCII("extensions"); |
| 118 } | 118 } |
| 119 }; | 119 }; |
| 120 | 120 |
| 121 TEST_F(ComponentLoaderTest, ParseManifest) { | 121 TEST_F(ComponentLoaderTest, ParseManifest) { |
| 122 scoped_ptr<DictionaryValue> manifest; | 122 scoped_ptr<DictionaryValue> manifest; |
| 123 | 123 |
| 124 // Test invalid JSON. | 124 // Test invalid JSON. |
| 125 manifest.reset( | 125 manifest.reset( |
| 126 component_loader_.ParseManifest("{ 'test': 3 } invalid")); | 126 component_loader_.ParseManifest("{ 'test': 3 } invalid")); |
| 127 ASSERT_EQ((DictionaryValue*)NULL, manifest.get()); | 127 EXPECT_FALSE(manifest.get()); |
| 128 | 128 |
| 129 // Test manifests that are valid JSON, but don't have an object literal | 129 // Test manifests that are valid JSON, but don't have an object literal |
| 130 // at the root. ParseManifest() should always return NULL. | 130 // at the root. ParseManifest() should always return NULL. |
| 131 | 131 |
| 132 manifest.reset(component_loader_.ParseManifest("")); | 132 manifest.reset(component_loader_.ParseManifest("")); |
| 133 ASSERT_EQ((DictionaryValue*)NULL, manifest.get()); | 133 EXPECT_FALSE(manifest.get()); |
| 134 | 134 |
| 135 manifest.reset(component_loader_.ParseManifest("[{ \"foo\": 3 }]")); | 135 manifest.reset(component_loader_.ParseManifest("[{ \"foo\": 3 }]")); |
| 136 ASSERT_EQ((DictionaryValue*)NULL, manifest.get()); | 136 EXPECT_FALSE(manifest.get()); |
| 137 | 137 |
| 138 manifest.reset(component_loader_.ParseManifest("\"Test\"")); | 138 manifest.reset(component_loader_.ParseManifest("\"Test\"")); |
| 139 ASSERT_EQ((DictionaryValue*)NULL, manifest.get()); | 139 EXPECT_FALSE(manifest.get()); |
| 140 | 140 |
| 141 manifest.reset(component_loader_.ParseManifest("42")); | 141 manifest.reset(component_loader_.ParseManifest("42")); |
| 142 ASSERT_EQ((DictionaryValue*)NULL, manifest.get()); | 142 EXPECT_FALSE(manifest.get()); |
| 143 | 143 |
| 144 manifest.reset(component_loader_.ParseManifest("true")); | 144 manifest.reset(component_loader_.ParseManifest("true")); |
| 145 ASSERT_EQ((DictionaryValue*)NULL, manifest.get()); | 145 EXPECT_FALSE(manifest.get()); |
| 146 | 146 |
| 147 manifest.reset(component_loader_.ParseManifest("false")); | 147 manifest.reset(component_loader_.ParseManifest("false")); |
| 148 ASSERT_EQ((DictionaryValue*)NULL, manifest.get()); | 148 EXPECT_FALSE(manifest.get()); |
| 149 | 149 |
| 150 manifest.reset(component_loader_.ParseManifest("null")); | 150 manifest.reset(component_loader_.ParseManifest("null")); |
| 151 ASSERT_EQ((DictionaryValue*)NULL, manifest.get()); | 151 EXPECT_FALSE(manifest.get()); |
| 152 | 152 |
| 153 // Test parsing valid JSON. | 153 // Test parsing valid JSON. |
| 154 | 154 |
| 155 int value; | 155 int value = 0; |
| 156 manifest.reset(component_loader_.ParseManifest( | 156 manifest.reset(component_loader_.ParseManifest( |
| 157 "{ \"test\": { \"one\": 1 }, \"two\": 2 }")); | 157 "{ \"test\": { \"one\": 1 }, \"two\": 2 }")); |
| 158 ASSERT_NE(manifest.get(), (DictionaryValue*)NULL); | 158 ASSERT_TRUE(manifest.get()); |
| 159 ASSERT_TRUE(manifest->GetInteger("test.one", &value)); | 159 EXPECT_TRUE(manifest->GetInteger("test.one", &value)); |
| 160 ASSERT_EQ(1, value); | 160 EXPECT_EQ(1, value); |
| 161 ASSERT_TRUE(manifest->GetInteger("two", &value)); | 161 ASSERT_TRUE(manifest->GetInteger("two", &value)); |
| 162 ASSERT_EQ(2, value); | 162 EXPECT_EQ(2, value); |
| 163 | 163 |
| 164 std::string string_value; | 164 std::string string_value; |
| 165 manifest.reset(component_loader_.ParseManifest(manifest_contents_)); | 165 manifest.reset(component_loader_.ParseManifest(manifest_contents_)); |
| 166 ASSERT_TRUE(manifest->GetString("background.page", &string_value)); | 166 ASSERT_TRUE(manifest->GetString("background.page", &string_value)); |
| 167 ASSERT_EQ("backgroundpage.html", string_value); | 167 EXPECT_EQ("backgroundpage.html", string_value); |
| 168 } | 168 } |
| 169 | 169 |
| 170 // Test that the extension isn't loaded if the extension service isn't ready. | 170 // Test that the extension isn't loaded if the extension service isn't ready. |
| 171 TEST_F(ComponentLoaderTest, AddWhenNotReady) { | 171 TEST_F(ComponentLoaderTest, AddWhenNotReady) { |
| 172 scoped_refptr<const Extension> extension; | |
| 173 extension_service_.set_ready(false); | 172 extension_service_.set_ready(false); |
| 174 extension = component_loader_.Add(manifest_contents_, extension_path_); | 173 std::string extension_id = |
| 175 ASSERT_EQ((Extension*)NULL, extension.get()); | 174 component_loader_.Add(manifest_contents_, extension_path_); |
| 176 ASSERT_EQ(0u, extension_service_.extensions()->size()); | 175 EXPECT_NE("", extension_id); |
| 176 EXPECT_EQ(0u, extension_service_.extensions()->size()); |
| 177 } | 177 } |
| 178 | 178 |
| 179 // Test that it *is* loaded when the extension service *is* ready. | 179 // Test that it *is* loaded when the extension service *is* ready. |
| 180 TEST_F(ComponentLoaderTest, AddWhenReady) { | 180 TEST_F(ComponentLoaderTest, AddWhenReady) { |
| 181 scoped_refptr<const Extension> extension; | |
| 182 extension_service_.set_ready(true); | 181 extension_service_.set_ready(true); |
| 183 extension = component_loader_.Add(manifest_contents_, extension_path_); | 182 std::string extension_id = |
| 184 ASSERT_NE((Extension*)NULL, extension.get()); | 183 component_loader_.Add(manifest_contents_, extension_path_); |
| 185 ASSERT_EQ(1u, extension_service_.extensions()->size()); | 184 EXPECT_NE("", extension_id); |
| 185 EXPECT_EQ(1u, extension_service_.extensions()->size()); |
| 186 EXPECT_TRUE(extension_service_.extensions()->GetByID(extension_id)); |
| 186 } | 187 } |
| 187 | 188 |
| 188 TEST_F(ComponentLoaderTest, Remove) { | 189 TEST_F(ComponentLoaderTest, Remove) { |
| 189 extension_service_.set_ready(false); | 190 extension_service_.set_ready(false); |
| 190 | 191 |
| 191 // Removing an extension that was never added should be ok. | 192 // Removing an extension that was never added should be ok. |
| 192 component_loader_.Remove(extension_path_); | 193 component_loader_.Remove(extension_path_); |
| 193 ASSERT_EQ(0u, extension_service_.extensions()->size()); | 194 EXPECT_EQ(0u, extension_service_.extensions()->size()); |
| 194 | 195 |
| 195 // Try adding and removing before LoadAll() is called. | 196 // Try adding and removing before LoadAll() is called. |
| 196 component_loader_.Add(manifest_contents_, extension_path_); | 197 component_loader_.Add(manifest_contents_, extension_path_); |
| 197 component_loader_.Remove(extension_path_); | 198 component_loader_.Remove(extension_path_); |
| 198 component_loader_.LoadAll(); | 199 component_loader_.LoadAll(); |
| 199 ASSERT_EQ(0u, extension_service_.extensions()->size()); | 200 EXPECT_EQ(0u, extension_service_.extensions()->size()); |
| 200 | 201 |
| 201 // Load an extension, and check that it's unloaded when Remove() is called. | 202 // Load an extension, and check that it's unloaded when Remove() is called. |
| 202 scoped_refptr<const Extension> extension; | |
| 203 extension_service_.set_ready(true); | 203 extension_service_.set_ready(true); |
| 204 extension = component_loader_.Add(manifest_contents_, extension_path_); | 204 std::string extension_id = |
| 205 ASSERT_NE((Extension*)NULL, extension.get()); | 205 component_loader_.Add(manifest_contents_, extension_path_); |
| 206 EXPECT_EQ(1u, extension_service_.extensions()->size()); |
| 206 component_loader_.Remove(extension_path_); | 207 component_loader_.Remove(extension_path_); |
| 207 ASSERT_EQ(0u, extension_service_.extensions()->size()); | 208 EXPECT_EQ(0u, extension_service_.extensions()->size()); |
| 208 | 209 |
| 209 // And after calling LoadAll(), it shouldn't get loaded. | 210 // And after calling LoadAll(), it shouldn't get loaded. |
| 210 component_loader_.LoadAll(); | 211 component_loader_.LoadAll(); |
| 211 ASSERT_EQ(0u, extension_service_.extensions()->size()); | 212 EXPECT_EQ(0u, extension_service_.extensions()->size()); |
| 212 } | 213 } |
| 213 | 214 |
| 214 TEST_F(ComponentLoaderTest, LoadAll) { | 215 TEST_F(ComponentLoaderTest, LoadAll) { |
| 215 extension_service_.set_ready(false); | 216 extension_service_.set_ready(false); |
| 216 | 217 |
| 217 // No extensions should be loaded if none were added. | 218 // No extensions should be loaded if none were added. |
| 218 component_loader_.LoadAll(); | 219 component_loader_.LoadAll(); |
| 219 ASSERT_EQ(0u, extension_service_.extensions()->size()); | 220 EXPECT_EQ(0u, extension_service_.extensions()->size()); |
| 220 | 221 |
| 221 // Use LoadAll() to load the default extensions. | 222 // Use LoadAll() to load the default extensions. |
| 222 component_loader_.AddDefaultComponentExtensions(); | 223 component_loader_.AddDefaultComponentExtensions(); |
| 223 component_loader_.LoadAll(); | 224 component_loader_.LoadAll(); |
| 224 unsigned int default_count = extension_service_.extensions()->size(); | 225 unsigned int default_count = extension_service_.extensions()->size(); |
| 225 | 226 |
| 226 // Clear the list of loaded extensions, and reload with one more. | 227 // Clear the list of loaded extensions, and reload with one more. |
| 227 extension_service_.clear_extensions(); | 228 extension_service_.clear_extensions(); |
| 228 component_loader_.Add(manifest_contents_, extension_path_); | 229 component_loader_.Add(manifest_contents_, extension_path_); |
| 229 component_loader_.LoadAll(); | 230 component_loader_.LoadAll(); |
| 230 | 231 |
| 231 ASSERT_EQ(default_count + 1, extension_service_.extensions()->size()); | 232 EXPECT_EQ(default_count + 1, extension_service_.extensions()->size()); |
| 232 } | 233 } |
| 233 | 234 |
| 234 TEST_F(ComponentLoaderTest, EnterpriseWebStore) { | 235 TEST_F(ComponentLoaderTest, EnterpriseWebStore) { |
| 235 component_loader_.AddDefaultComponentExtensions(); | 236 component_loader_.AddDefaultComponentExtensions(); |
| 236 component_loader_.LoadAll(); | 237 component_loader_.LoadAll(); |
| 237 unsigned int default_count = extension_service_.extensions()->size(); | 238 unsigned int default_count = extension_service_.extensions()->size(); |
| 238 | 239 |
| 239 // Set the pref, and it should get loaded automatically. | 240 // Set the pref, and it should get loaded automatically. |
| 240 extension_service_.set_ready(true); | 241 extension_service_.set_ready(true); |
| 241 prefs_.SetUserPref(prefs::kEnterpriseWebStoreURL, | 242 prefs_.SetUserPref(prefs::kEnterpriseWebStoreURL, |
| 242 Value::CreateStringValue("http://www.google.com")); | 243 Value::CreateStringValue("http://www.google.com")); |
| 243 ASSERT_EQ(default_count + 1, extension_service_.extensions()->size()); | 244 EXPECT_EQ(default_count + 1, extension_service_.extensions()->size()); |
| 244 | 245 |
| 245 // Now that the pref is set, check if it's added by default. | 246 // Now that the pref is set, check if it's added by default. |
| 246 extension_service_.set_ready(false); | 247 extension_service_.set_ready(false); |
| 247 extension_service_.clear_extensions(); | 248 extension_service_.clear_extensions(); |
| 248 component_loader_.ClearAllRegistered(); | 249 component_loader_.ClearAllRegistered(); |
| 249 component_loader_.AddDefaultComponentExtensions(); | 250 component_loader_.AddDefaultComponentExtensions(); |
| 250 component_loader_.LoadAll(); | 251 component_loader_.LoadAll(); |
| 251 ASSERT_EQ(default_count + 1, extension_service_.extensions()->size()); | 252 EXPECT_EQ(default_count + 1, extension_service_.extensions()->size()); |
| 252 | 253 |
| 253 // Number of loaded extensions should be the same after changing the pref. | 254 // Number of loaded extensions should be the same after changing the pref. |
| 254 prefs_.SetUserPref(prefs::kEnterpriseWebStoreURL, | 255 prefs_.SetUserPref(prefs::kEnterpriseWebStoreURL, |
| 255 Value::CreateStringValue("http://www.google.de")); | 256 Value::CreateStringValue("http://www.google.de")); |
| 256 ASSERT_EQ(default_count + 1, extension_service_.extensions()->size()); | 257 EXPECT_EQ(default_count + 1, extension_service_.extensions()->size()); |
| 257 } | 258 } |
| 258 | 259 |
| 259 TEST_F(ComponentLoaderTest, AddOrReplace) { | 260 TEST_F(ComponentLoaderTest, AddOrReplace) { |
| 260 ASSERT_EQ(0u, component_loader_.registered_extensions_count()); | 261 EXPECT_EQ(0u, component_loader_.registered_extensions_count()); |
| 261 component_loader_.AddDefaultComponentExtensions(); | 262 component_loader_.AddDefaultComponentExtensions(); |
| 262 size_t const default_count = component_loader_.registered_extensions_count(); | 263 size_t const default_count = component_loader_.registered_extensions_count(); |
| 263 FilePath known_extension = GetBasePath() | 264 FilePath known_extension = GetBasePath() |
| 264 .AppendASCII("override_component_extension"); | 265 .AppendASCII("override_component_extension"); |
| 265 FilePath unknow_extension = extension_path_; | 266 FilePath unknow_extension = extension_path_; |
| 266 | 267 |
| 267 // Replace a default component extension. | 268 // Replace a default component extension. |
| 268 component_loader_.AddOrReplace(known_extension); | 269 component_loader_.AddOrReplace(known_extension); |
| 269 ASSERT_EQ(default_count, | 270 EXPECT_EQ(default_count, |
| 270 component_loader_.registered_extensions_count()); | 271 component_loader_.registered_extensions_count()); |
| 271 | 272 |
| 272 // Add a new component extension. | 273 // Add a new component extension. |
| 273 component_loader_.AddOrReplace(unknow_extension); | 274 component_loader_.AddOrReplace(unknow_extension); |
| 274 ASSERT_EQ(default_count + 1, | 275 EXPECT_EQ(default_count + 1, |
| 275 component_loader_.registered_extensions_count()); | 276 component_loader_.registered_extensions_count()); |
| 276 | 277 |
| 277 extension_service_.set_ready(true); | 278 extension_service_.set_ready(true); |
| 278 component_loader_.LoadAll(); | 279 component_loader_.LoadAll(); |
| 279 | 280 |
| 280 ASSERT_EQ(default_count + 1, extension_service_.extensions()->size()); | 281 EXPECT_EQ(default_count + 1, extension_service_.extensions()->size()); |
| 281 ASSERT_EQ(0u, extension_service_.unloaded_count()); | 282 EXPECT_EQ(0u, extension_service_.unloaded_count()); |
| 282 | 283 |
| 283 // replace loaded component extension. | 284 // replace loaded component extension. |
| 284 component_loader_.AddOrReplace(known_extension); | 285 component_loader_.AddOrReplace(known_extension); |
| 285 ASSERT_EQ(default_count + 1, extension_service_.extensions()->size()); | 286 EXPECT_EQ(default_count + 1, extension_service_.extensions()->size()); |
| 286 ASSERT_EQ(1u, extension_service_.unloaded_count()); | 287 EXPECT_EQ(1u, extension_service_.unloaded_count()); |
| 287 } | 288 } |
| 288 | 289 |
| 289 } // namespace extensions | 290 } // namespace extensions |
| OLD | NEW |