Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1161)

Unified Diff: chrome/browser/extensions/extension_service_unittest.cc

Issue 6370009: Add in-profile external_extensions.json file for Chrome OS OEM customization. (Closed) Base URL: http://git.chromium.org/git/chromium.git
Patch Set: Address review comments. Created 9 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/extensions/extension_service_unittest.cc
diff --git a/chrome/browser/extensions/extension_service_unittest.cc b/chrome/browser/extensions/extension_service_unittest.cc
index 55255f35ec69b7d509dd2f02927491b579f998cd..8b6d54620078e32e32ec95a253814bda7f538d11 100644
--- a/chrome/browser/extensions/extension_service_unittest.cc
+++ b/chrome/browser/extensions/extension_service_unittest.cc
@@ -3034,6 +3034,67 @@ TEST_F(ExtensionServiceTest, ExternalUninstall) {
ASSERT_EQ(0u, loaded_.size());
}
+// Test that running multiple update checks simultaneously does not
+// keep the update from succeeding.
+TEST_F(ExtensionServiceTest, MultipleExternalUpdateCheck) {
+ InitializeEmptyExtensionService();
+
+ MockExtensionProvider* provider =
+ new MockExtensionProvider(service_.get(), Extension::EXTERNAL_PREF);
+ AddMockExternalProvider(provider);
+
+ // Verify that starting with no providers loads no extensions.
+ service_->Init();
+ loop_.RunAllPending();
+ ASSERT_EQ(0u, loaded_.size());
+
+ // Start two checks for updates.
+ provider->set_visit_count(0);
+ service_->CheckForExternalUpdates();
+ service_->CheckForExternalUpdates();
+ loop_.RunAllPending();
+
+ // Two calls should cause two checks for external extensions.
+ EXPECT_EQ(2, provider->visit_count());
+ EXPECT_EQ(0u, GetErrors().size());
+ EXPECT_EQ(0u, loaded_.size());
+
+ // Register a test extension externally using the mock registry provider.
+ FilePath source_path;
+ ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &source_path));
+ source_path = source_path.AppendASCII("extensions").AppendASCII("good.crx");
+ provider->UpdateOrAddExtension(good_crx, "1.0.0.0", source_path);
+
+ // Two checks for external updates should find the extension, and install it
+ // once.
+ provider->set_visit_count(0);
+ service_->CheckForExternalUpdates();
+ service_->CheckForExternalUpdates();
+ loop_.RunAllPending();
+ EXPECT_EQ(2, provider->visit_count());
+ ASSERT_EQ(0u, GetErrors().size());
+ ASSERT_EQ(1u, loaded_.size());
+ ASSERT_EQ(Extension::EXTERNAL_PREF, loaded_[0]->location());
+ ASSERT_EQ("1.0.0.0", loaded_[0]->version()->GetString());
+ ValidatePrefKeyCount(1);
+ ValidateIntegerPref(good_crx, "state", Extension::ENABLED);
+ ValidateIntegerPref(good_crx, "location", Extension::EXTERNAL_PREF);
+
+ provider->RemoveExtension(good_crx);
+ provider->set_visit_count(0);
+ service_->CheckForExternalUpdates();
+ service_->CheckForExternalUpdates();
+ loop_.RunAllPending();
+
+ // Two calls should cause two checks for external extensions.
+ // Because the external source no longer includes good_crx,
+ // good_crx will be uninstalled. So, expect that no extensions
+ // are loaded.
+ EXPECT_EQ(2, provider->visit_count());
+ EXPECT_EQ(0u, GetErrors().size());
+ EXPECT_EQ(0u, loaded_.size());
+}
+
TEST_F(ExtensionServiceTest, ExternalPrefProvider) {
InitializeEmptyExtensionService();
« no previous file with comments | « chrome/browser/extensions/extension_service.cc ('k') | chrome/browser/extensions/external_extension_provider_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698