OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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 "chrome/browser/extensions/extension_service_unittest.h" | 5 #include "chrome/browser/extensions/extension_service_unittest.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <set> | 8 #include <set> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 440 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
451 | 451 |
452 void ExtensionServiceTestBase::InitializeExtensionService( | 452 void ExtensionServiceTestBase::InitializeExtensionService( |
453 const ExtensionServiceTestBase::ExtensionServiceInitParams& params) { | 453 const ExtensionServiceTestBase::ExtensionServiceInitParams& params) { |
454 TestingProfile::Builder profile_builder; | 454 TestingProfile::Builder profile_builder; |
455 // Create a PrefService that only contains user defined preference values. | 455 // Create a PrefService that only contains user defined preference values. |
456 PrefServiceMockBuilder builder; | 456 PrefServiceMockBuilder builder; |
457 builder.WithUserFilePrefs( | 457 builder.WithUserFilePrefs( |
458 params.pref_file, loop_.message_loop_proxy()); | 458 params.pref_file, loop_.message_loop_proxy()); |
459 scoped_refptr<user_prefs::PrefRegistrySyncable> registry( | 459 scoped_refptr<user_prefs::PrefRegistrySyncable> registry( |
460 new user_prefs::PrefRegistrySyncable); | 460 new user_prefs::PrefRegistrySyncable); |
461 scoped_ptr<PrefServiceSyncable> prefs(builder.CreateSyncable(registry)); | 461 scoped_ptr<PrefServiceSyncable> prefs(builder.CreateSyncable(registry.get())); |
462 chrome::RegisterUserPrefs(registry); | 462 chrome::RegisterUserPrefs(registry.get()); |
463 profile_builder.SetPrefService(prefs.Pass()); | 463 profile_builder.SetPrefService(prefs.Pass()); |
464 profile_builder.SetPath(params.profile_path); | 464 profile_builder.SetPath(params.profile_path); |
465 profile_ = profile_builder.Build(); | 465 profile_ = profile_builder.Build(); |
466 | 466 |
467 TestExtensionSystem* system = static_cast<TestExtensionSystem*>( | 467 TestExtensionSystem* system = static_cast<TestExtensionSystem*>( |
468 ExtensionSystem::Get(profile_.get())); | 468 ExtensionSystem::Get(profile_.get())); |
469 if (!params.is_first_run) { | 469 if (!params.is_first_run) { |
470 ExtensionPrefs* prefs = system->CreateExtensionPrefs( | 470 ExtensionPrefs* prefs = system->CreateExtensionPrefs( |
471 CommandLine::ForCurrentProcess(), | 471 CommandLine::ForCurrentProcess(), |
472 params.extensions_install_dir); | 472 params.extensions_install_dir); |
(...skipping 323 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
796 if (install_state == INSTALL_UPDATED && !expected_old_name.empty()) | 796 if (install_state == INSTALL_UPDATED && !expected_old_name.empty()) |
797 EXPECT_EQ(expected_old_name, old_name_); | 797 EXPECT_EQ(expected_old_name, old_name_); |
798 EXPECT_EQ(0u, errors.size()) << path.value(); | 798 EXPECT_EQ(0u, errors.size()) << path.value(); |
799 | 799 |
800 if (install_state == INSTALL_WITHOUT_LOAD) { | 800 if (install_state == INSTALL_WITHOUT_LOAD) { |
801 EXPECT_EQ(0u, loaded_.size()) << path.value(); | 801 EXPECT_EQ(0u, loaded_.size()) << path.value(); |
802 } else { | 802 } else { |
803 EXPECT_EQ(1u, loaded_.size()) << path.value(); | 803 EXPECT_EQ(1u, loaded_.size()) << path.value(); |
804 EXPECT_EQ(expected_extensions_count_, service_->extensions()->size()) << | 804 EXPECT_EQ(expected_extensions_count_, service_->extensions()->size()) << |
805 path.value(); | 805 path.value(); |
806 extension = loaded_[0]; | 806 extension = loaded_[0].get(); |
807 EXPECT_TRUE(service_->GetExtensionById(extension->id(), false)) << | 807 EXPECT_TRUE(service_->GetExtensionById(extension->id(), false)) |
808 path.value(); | 808 << path.value(); |
809 } | 809 } |
810 | 810 |
811 for (std::vector<string16>::iterator err = errors.begin(); | 811 for (std::vector<string16>::iterator err = errors.begin(); |
812 err != errors.end(); ++err) { | 812 err != errors.end(); ++err) { |
813 LOG(ERROR) << *err; | 813 LOG(ERROR) << *err; |
814 } | 814 } |
815 } else { | 815 } else { |
816 EXPECT_FALSE(installed_) << path.value(); | 816 EXPECT_FALSE(installed_) << path.value(); |
817 EXPECT_EQ(0u, loaded_.size()) << path.value(); | 817 EXPECT_EQ(0u, loaded_.size()) << path.value(); |
818 EXPECT_EQ(1u, errors.size()) << path.value(); | 818 EXPECT_EQ(1u, errors.size()) << path.value(); |
(...skipping 389 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1208 ValidateIntegerPref(good0, "location", Manifest::INTERNAL); | 1208 ValidateIntegerPref(good0, "location", Manifest::INTERNAL); |
1209 ValidateIntegerPref(good1, "state", Extension::ENABLED); | 1209 ValidateIntegerPref(good1, "state", Extension::ENABLED); |
1210 ValidateIntegerPref(good1, "location", Manifest::INTERNAL); | 1210 ValidateIntegerPref(good1, "location", Manifest::INTERNAL); |
1211 ValidateIntegerPref(good2, "state", Extension::ENABLED); | 1211 ValidateIntegerPref(good2, "state", Extension::ENABLED); |
1212 ValidateIntegerPref(good2, "location", Manifest::INTERNAL); | 1212 ValidateIntegerPref(good2, "location", Manifest::INTERNAL); |
1213 | 1213 |
1214 URLPatternSet expected_patterns; | 1214 URLPatternSet expected_patterns; |
1215 AddPattern(&expected_patterns, "file:///*"); | 1215 AddPattern(&expected_patterns, "file:///*"); |
1216 AddPattern(&expected_patterns, "http://*.google.com/*"); | 1216 AddPattern(&expected_patterns, "http://*.google.com/*"); |
1217 AddPattern(&expected_patterns, "https://*.google.com/*"); | 1217 AddPattern(&expected_patterns, "https://*.google.com/*"); |
1218 const Extension* extension = loaded_[0]; | 1218 const Extension* extension = loaded_[0].get(); |
1219 const extensions::UserScriptList& scripts = | 1219 const extensions::UserScriptList& scripts = |
1220 extensions::ContentScriptsInfo::GetContentScripts(extension); | 1220 extensions::ContentScriptsInfo::GetContentScripts(extension); |
1221 ASSERT_EQ(2u, scripts.size()); | 1221 ASSERT_EQ(2u, scripts.size()); |
1222 EXPECT_EQ(expected_patterns, scripts[0].url_patterns()); | 1222 EXPECT_EQ(expected_patterns, scripts[0].url_patterns()); |
1223 EXPECT_EQ(2u, scripts[0].js_scripts().size()); | 1223 EXPECT_EQ(2u, scripts[0].js_scripts().size()); |
1224 ExtensionResource resource00(extension->id(), | 1224 ExtensionResource resource00(extension->id(), |
1225 scripts[0].js_scripts()[0].extension_root(), | 1225 scripts[0].js_scripts()[0].extension_root(), |
1226 scripts[0].js_scripts()[0].relative_path()); | 1226 scripts[0].js_scripts()[0].relative_path()); |
1227 base::FilePath expected_path = | 1227 base::FilePath expected_path = |
1228 base::MakeAbsoluteFilePath(extension->path().AppendASCII("script1.js")); | 1228 base::MakeAbsoluteFilePath(extension->path().AppendASCII("script1.js")); |
(...skipping 19 matching lines...) Expand all Loading... |
1248 expected_patterns.ClearPatterns(); | 1248 expected_patterns.ClearPatterns(); |
1249 AddPattern(&expected_patterns, "http://*.google.com/*"); | 1249 AddPattern(&expected_patterns, "http://*.google.com/*"); |
1250 AddPattern(&expected_patterns, "https://*.google.com/*"); | 1250 AddPattern(&expected_patterns, "https://*.google.com/*"); |
1251 EXPECT_EQ(expected_patterns, | 1251 EXPECT_EQ(expected_patterns, |
1252 extension->GetActivePermissions()->explicit_hosts()); | 1252 extension->GetActivePermissions()->explicit_hosts()); |
1253 | 1253 |
1254 EXPECT_EQ(std::string(good1), loaded_[1]->id()); | 1254 EXPECT_EQ(std::string(good1), loaded_[1]->id()); |
1255 EXPECT_EQ(std::string("My extension 2"), loaded_[1]->name()); | 1255 EXPECT_EQ(std::string("My extension 2"), loaded_[1]->name()); |
1256 EXPECT_EQ(std::string(), loaded_[1]->description()); | 1256 EXPECT_EQ(std::string(), loaded_[1]->description()); |
1257 EXPECT_EQ(loaded_[1]->GetResourceURL("background.html"), | 1257 EXPECT_EQ(loaded_[1]->GetResourceURL("background.html"), |
1258 extensions::BackgroundInfo::GetBackgroundURL(loaded_[1])); | 1258 extensions::BackgroundInfo::GetBackgroundURL(loaded_[1].get())); |
1259 EXPECT_EQ( | 1259 EXPECT_EQ(0u, |
1260 0u, extensions::ContentScriptsInfo::GetContentScripts(loaded_[1]).size()); | 1260 extensions::ContentScriptsInfo::GetContentScripts(loaded_[1].get()) |
| 1261 .size()); |
1261 | 1262 |
1262 // We don't parse the plugins section on Chrome OS. | 1263 // We don't parse the plugins section on Chrome OS. |
1263 #if defined(OS_CHROMEOS) | 1264 #if defined(OS_CHROMEOS) |
1264 EXPECT_TRUE(!extensions::PluginInfo::HasPlugins(loaded_[1])); | 1265 EXPECT_TRUE(!extensions::PluginInfo::HasPlugins(loaded_[1])); |
1265 #else | 1266 #else |
1266 ASSERT_TRUE(extensions::PluginInfo::HasPlugins(loaded_[1])); | 1267 ASSERT_TRUE(extensions::PluginInfo::HasPlugins(loaded_[1].get())); |
1267 const std::vector<extensions::PluginInfo>* plugins = | 1268 const std::vector<extensions::PluginInfo>* plugins = |
1268 extensions::PluginInfo::GetPlugins(loaded_[1]); | 1269 extensions::PluginInfo::GetPlugins(loaded_[1].get()); |
1269 ASSERT_TRUE(plugins); | 1270 ASSERT_TRUE(plugins); |
1270 ASSERT_EQ(2u, plugins->size()); | 1271 ASSERT_EQ(2u, plugins->size()); |
1271 EXPECT_EQ(loaded_[1]->path().AppendASCII("content_plugin.dll").value(), | 1272 EXPECT_EQ(loaded_[1]->path().AppendASCII("content_plugin.dll").value(), |
1272 plugins->at(0).path.value()); | 1273 plugins->at(0).path.value()); |
1273 EXPECT_TRUE(plugins->at(0).is_public); | 1274 EXPECT_TRUE(plugins->at(0).is_public); |
1274 EXPECT_EQ(loaded_[1]->path().AppendASCII("extension_plugin.dll").value(), | 1275 EXPECT_EQ(loaded_[1]->path().AppendASCII("extension_plugin.dll").value(), |
1275 plugins->at(1).path.value()); | 1276 plugins->at(1).path.value()); |
1276 EXPECT_FALSE(plugins->at(1).is_public); | 1277 EXPECT_FALSE(plugins->at(1).is_public); |
1277 #endif | 1278 #endif |
1278 | 1279 |
1279 EXPECT_EQ(Manifest::INTERNAL, loaded_[1]->location()); | 1280 EXPECT_EQ(Manifest::INTERNAL, loaded_[1]->location()); |
1280 | 1281 |
1281 int index = expected_num_extensions - 1; | 1282 int index = expected_num_extensions - 1; |
1282 EXPECT_EQ(std::string(good2), loaded_[index]->id()); | 1283 EXPECT_EQ(std::string(good2), loaded_[index]->id()); |
1283 EXPECT_EQ(std::string("My extension 3"), loaded_[index]->name()); | 1284 EXPECT_EQ(std::string("My extension 3"), loaded_[index]->name()); |
1284 EXPECT_EQ(std::string(), loaded_[index]->description()); | 1285 EXPECT_EQ(std::string(), loaded_[index]->description()); |
1285 EXPECT_EQ( | 1286 EXPECT_EQ(0u, |
1286 0u, | 1287 extensions::ContentScriptsInfo::GetContentScripts( |
1287 extensions::ContentScriptsInfo::GetContentScripts(loaded_[index]).size()); | 1288 loaded_[index].get()).size()); |
1288 EXPECT_EQ(Manifest::INTERNAL, loaded_[index]->location()); | 1289 EXPECT_EQ(Manifest::INTERNAL, loaded_[index]->location()); |
1289 }; | 1290 }; |
1290 | 1291 |
1291 // Test loading bad extensions from the profile directory. | 1292 // Test loading bad extensions from the profile directory. |
1292 TEST_F(ExtensionServiceTest, LoadAllExtensionsFromDirectoryFail) { | 1293 TEST_F(ExtensionServiceTest, LoadAllExtensionsFromDirectoryFail) { |
1293 // Initialize the test dir with a bad Preferences/extensions. | 1294 // Initialize the test dir with a bad Preferences/extensions. |
1294 base::FilePath source_install_dir = data_dir_ | 1295 base::FilePath source_install_dir = data_dir_ |
1295 .AppendASCII("bad") | 1296 .AppendASCII("bad") |
1296 .AppendASCII("Extensions"); | 1297 .AppendASCII("Extensions"); |
1297 base::FilePath pref_path = source_install_dir | 1298 base::FilePath pref_path = source_install_dir |
(...skipping 2902 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4200 ASSERT_EQ(0u, GetErrors().size()); | 4201 ASSERT_EQ(0u, GetErrors().size()); |
4201 ASSERT_EQ(1u, loaded_.size()); | 4202 ASSERT_EQ(1u, loaded_.size()); |
4202 ASSERT_EQ("1.0.0.1", loaded_[0]->version()->GetString()); | 4203 ASSERT_EQ("1.0.0.1", loaded_[0]->version()->GetString()); |
4203 ValidatePrefKeyCount(1); | 4204 ValidatePrefKeyCount(1); |
4204 ValidateIntegerPref(good_crx, "state", Extension::ENABLED); | 4205 ValidateIntegerPref(good_crx, "state", Extension::ENABLED); |
4205 ValidateIntegerPref(good_crx, "location", location); | 4206 ValidateIntegerPref(good_crx, "location", location); |
4206 | 4207 |
4207 // Uninstall the extension and reload. Nothing should happen because the | 4208 // Uninstall the extension and reload. Nothing should happen because the |
4208 // preference should prevent us from reinstalling. | 4209 // preference should prevent us from reinstalling. |
4209 std::string id = loaded_[0]->id(); | 4210 std::string id = loaded_[0]->id(); |
4210 bool no_uninstall = management_policy_->MustRemainEnabled(loaded_[0], NULL); | 4211 bool no_uninstall = |
| 4212 management_policy_->MustRemainEnabled(loaded_[0].get(), NULL); |
4211 service_->UninstallExtension(id, false, NULL); | 4213 service_->UninstallExtension(id, false, NULL); |
4212 loop_.RunUntilIdle(); | 4214 loop_.RunUntilIdle(); |
4213 | 4215 |
4214 base::FilePath install_path = extensions_install_dir_.AppendASCII(id); | 4216 base::FilePath install_path = extensions_install_dir_.AppendASCII(id); |
4215 if (no_uninstall) { | 4217 if (no_uninstall) { |
4216 // Policy controlled extensions should not have been touched by uninstall. | 4218 // Policy controlled extensions should not have been touched by uninstall. |
4217 ASSERT_TRUE(file_util::PathExists(install_path)); | 4219 ASSERT_TRUE(file_util::PathExists(install_path)); |
4218 } else { | 4220 } else { |
4219 // The extension should also be gone from the install directory. | 4221 // The extension should also be gone from the install directory. |
4220 ASSERT_FALSE(file_util::PathExists(install_path)); | 4222 ASSERT_FALSE(file_util::PathExists(install_path)); |
(...skipping 11 matching lines...) Expand all Loading... |
4232 | 4234 |
4233 loaded_.clear(); | 4235 loaded_.clear(); |
4234 service_->CheckForExternalUpdates(); | 4236 service_->CheckForExternalUpdates(); |
4235 loop_.RunUntilIdle(); | 4237 loop_.RunUntilIdle(); |
4236 ASSERT_EQ(1u, loaded_.size()); | 4238 ASSERT_EQ(1u, loaded_.size()); |
4237 } | 4239 } |
4238 ValidatePrefKeyCount(1); | 4240 ValidatePrefKeyCount(1); |
4239 ValidateIntegerPref(good_crx, "state", Extension::ENABLED); | 4241 ValidateIntegerPref(good_crx, "state", Extension::ENABLED); |
4240 ValidateIntegerPref(good_crx, "location", location); | 4242 ValidateIntegerPref(good_crx, "location", location); |
4241 | 4243 |
4242 if (management_policy_->MustRemainEnabled(loaded_[0], NULL)) { | 4244 if (management_policy_->MustRemainEnabled(loaded_[0].get(), NULL)) { |
4243 EXPECT_EQ(2, provider->visit_count()); | 4245 EXPECT_EQ(2, provider->visit_count()); |
4244 } else { | 4246 } else { |
4245 // Now test an externally triggered uninstall (deleting the registry key or | 4247 // Now test an externally triggered uninstall (deleting the registry key or |
4246 // the pref entry). | 4248 // the pref entry). |
4247 provider->RemoveExtension(good_crx); | 4249 provider->RemoveExtension(good_crx); |
4248 | 4250 |
4249 loaded_.clear(); | 4251 loaded_.clear(); |
4250 service_->OnExternalProviderReady(provider); | 4252 service_->OnExternalProviderReady(provider); |
4251 loop_.RunUntilIdle(); | 4253 loop_.RunUntilIdle(); |
4252 ASSERT_EQ(0u, loaded_.size()); | 4254 ASSERT_EQ(0u, loaded_.size()); |
(...skipping 1757 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6010 new MockExtensionProvider(service_, Manifest::EXTERNAL_PREF); | 6012 new MockExtensionProvider(service_, Manifest::EXTERNAL_PREF); |
6011 AddMockExternalProvider(provider); | 6013 AddMockExternalProvider(provider); |
6012 provider->UpdateOrAddExtension(updates_from_webstore, "1", crx_path); | 6014 provider->UpdateOrAddExtension(updates_from_webstore, "1", crx_path); |
6013 | 6015 |
6014 service_->CheckForExternalUpdates(); | 6016 service_->CheckForExternalUpdates(); |
6015 loop_.RunUntilIdle(); | 6017 loop_.RunUntilIdle(); |
6016 EXPECT_TRUE(extensions::HasExternalInstallError(service_)); | 6018 EXPECT_TRUE(extensions::HasExternalInstallError(service_)); |
6017 EXPECT_FALSE(extensions::HasExternalInstallBubble(service_)); | 6019 EXPECT_FALSE(extensions::HasExternalInstallBubble(service_)); |
6018 EXPECT_FALSE(service_->IsExtensionEnabled(updates_from_webstore)); | 6020 EXPECT_FALSE(service_->IsExtensionEnabled(updates_from_webstore)); |
6019 } | 6021 } |
OLD | NEW |