Basic unit test for external install global error bubble.
BUG=229083
Review URL: https://chromiumcodereview.appspot.com/13831014
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@195579 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/chrome/browser/extensions/extension_service_unittest.cc b/chrome/browser/extensions/extension_service_unittest.cc
index 10ca8e4..4bb9f97 100644
--- a/chrome/browser/extensions/extension_service_unittest.cc
+++ b/chrome/browser/extensions/extension_service_unittest.cc
@@ -148,6 +148,7 @@
const char* const theme2_crx = "pjpgmfcmabopnnfonnhmdjglfpjjfkbf";
const char* const permissions_crx = "eagpmdpfmaekmmcejjbmjoecnejeiiin";
const char* const unpacked = "cbcdidchbppangcjoddlpdjlenngjldk";
+const char* const updates_from_webstore = "akjooamlhcgeopfifcmlggaebeocgokj";
struct ExtensionsOrder {
bool operator()(const Extension* a, const Extension* b) {
@@ -5870,8 +5871,38 @@
service_->EnableExtension(page_action);
EXPECT_TRUE(extensions::HasExternalInstallError(service_));
+ EXPECT_FALSE(extensions::HasExternalInstallBubble(service_));
service_->EnableExtension(theme_crx);
EXPECT_TRUE(extensions::HasExternalInstallError(service_));
+ EXPECT_FALSE(extensions::HasExternalInstallBubble(service_));
service_->EnableExtension(good_crx);
EXPECT_FALSE(extensions::HasExternalInstallError(service_));
+ EXPECT_FALSE(extensions::HasExternalInstallBubble(service_));
+}
+
+// Test that there is a bubble for external extensions that update
+// from the webstore.
+TEST_F(ExtensionServiceTest, ExternalInstallUpdatesFromWebstore) {
+ FeatureSwitch::ScopedOverride prompt(
+ FeatureSwitch::prompt_for_external_extensions(), true);
+
+ InitializeEmptyExtensionService();
+
+ //base::ScopedTempDir temp_dir;
+ //ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
+ base::FilePath crx_path = temp_dir_.path().AppendASCII("webstore.crx");
+ PackCRX(data_dir_.AppendASCII("update_from_webstore"),
+ data_dir_.AppendASCII("update_from_webstore.pem"),
+ crx_path);
+
+ MockExtensionProvider* provider =
+ new MockExtensionProvider(service_, Manifest::EXTERNAL_PREF);
+ AddMockExternalProvider(provider);
+
+ provider->UpdateOrAddExtension(updates_from_webstore, "1", crx_path);
+ service_->CheckForExternalUpdates();
+ loop_.RunUntilIdle();
+ EXPECT_TRUE(extensions::HasExternalInstallError(service_));
+ EXPECT_TRUE(extensions::HasExternalInstallBubble(service_));
+ EXPECT_FALSE(service_->IsExtensionEnabled(updates_from_webstore));
}
diff --git a/chrome/browser/extensions/external_install_ui.cc b/chrome/browser/extensions/external_install_ui.cc
index 291f0f9..5a9e6f4 100644
--- a/chrome/browser/extensions/external_install_ui.cc
+++ b/chrome/browser/extensions/external_install_ui.cc
@@ -398,4 +398,12 @@
return !!error;
}
+bool HasExternalInstallBubble(ExtensionService* service) {
+ GlobalErrorService* error_service =
+ GlobalErrorServiceFactory::GetForProfile(service->profile());
+ GlobalError* error = error_service->GetGlobalErrorByMenuItemCommandID(
+ kMenuCommandId);
+ return error && error->HasBubbleView();
+}
+
} // namespace extensions
diff --git a/chrome/browser/extensions/external_install_ui.h b/chrome/browser/extensions/external_install_ui.h
index b6caaf5..8324a0ac 100644
--- a/chrome/browser/extensions/external_install_ui.h
+++ b/chrome/browser/extensions/external_install_ui.h
@@ -20,6 +20,7 @@
// Used for testing.
bool HasExternalInstallError(ExtensionService* service);
+bool HasExternalInstallBubble(ExtensionService* service);
} // namespace extensions
diff --git a/chrome/test/data/extensions/update_from_webstore.pem b/chrome/test/data/extensions/update_from_webstore.pem
new file mode 100644
index 0000000..50fea4a
--- /dev/null
+++ b/chrome/test/data/extensions/update_from_webstore.pem
@@ -0,0 +1,16 @@
+-----BEGIN PRIVATE KEY-----
+MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBANKFu2T4330Mgldtc
+ZRSLJWJncOzaWLHps3Eeu/+a9/rJFCaBh8emVsYtM2JYZQ2iIXcSy0OMb9UcFyVKa
+VarYqWtB896UrrU2O4ky1osw55VPIS/EYkacHTIfulFMlDK1tiGr3iqrWetDVAZe3
+jr0s8F6Exy9ZbtaG6fc6YOn0FAgMBAAECgYEAv4z9IHeuakqqgkBL2ygV9w5bZUjm
+uAFvjcScE6iMoRaEWW576W7fHNtTD71T8xbXi+0Q3fMPYsbC4gq69QCX6141dspan
+nO19KX/JGyb22pKRb+EumMek84YS7r4Ta5xeZYABQhRUS7tnZJBPePlmLAhYxLM3t
+VCdtr8bP9e9QECQQDyB2q7so7TIMsF0Ai5qKq1xY540yqcd7aD3b1yMhqFLkP3FGx
+gdUkKXUYsPMuVYa3721PKYAfBYhdvzZLmbkdFAkEA3qy6ASqsC61jvCKL3mVuxmYw
+NfQ51iKjQ6P4dx6PPISA2pK8Z5PInPt+Yce5QP4ZjbmiIq9eX3RGPHBCCC7awQJAX
+PyCgkiQ3Qa9WadaotHtfFbBbSRcO682vSUFMwmS7NYgoJ4FIW4OOOArJLXa1bKooJ
+nccGVCtYaVUIwfw05dLQJAd/BJb/9wFAocwmVJOU0hUbQRG76kuHaHwhM77c2EEXC
+9hv2qhY/Qat37wOc3HY7AbNokPtJ+3qNegYdlycqTAQJBAI4vJqt3R1txRlvKGRJ0
+pS2baVG6QOwEjSRP9hfznkUiNqIgE49gTsn7zO13y6ix5gmHGn8aTuat+VrwUhJ2H
+IY=
+-----END PRIVATE KEY-----
diff --git a/chrome/test/data/extensions/update_from_webstore/manifest.json b/chrome/test/data/extensions/update_from_webstore/manifest.json
new file mode 100644
index 0000000..d108209
--- /dev/null
+++ b/chrome/test/data/extensions/update_from_webstore/manifest.json
@@ -0,0 +1,6 @@
+{
+ "name": "Test extension that updates from webstore",
+ "version": "1",
+ "manifest_version": 2,
+ "update_url": "https://clients2.google.com/service/update2/crx"
+}