| 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 |