summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authormek@chromium.org <mek@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-06 04:58:05 +0000
committermek@chromium.org <mek@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-06 04:58:05 +0000
commit2a94720ff7860b9b1eee9c50885f5f4b3c577c63 (patch)
treea4b37abf57dd59efa6adb585de2294706a7620c0 /chrome
parent98adfa35e969586a0b2c869c662d4b7ad3a3a146 (diff)
downloadchromium_src-2a94720ff7860b9b1eee9c50885f5f4b3c577c63.zip
chromium_src-2a94720ff7860b9b1eee9c50885f5f4b3c577c63.tar.gz
chromium_src-2a94720ff7860b9b1eee9c50885f5f4b3c577c63.tar.bz2
Add unit test to ensure calling ReloadExtension twice in a row works, and fix the code to make this test pass.
BUG=179599 Review URL: https://chromiumcodereview.appspot.com/12497007 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@186369 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r--chrome/browser/extensions/extension_service.cc7
-rw-r--r--chrome/browser/extensions/extension_service_unittest.cc37
2 files changed, 44 insertions, 0 deletions
diff --git a/chrome/browser/extensions/extension_service.cc b/chrome/browser/extensions/extension_service.cc
index 4b4063c..2c2156b 100644
--- a/chrome/browser/extensions/extension_service.cc
+++ b/chrome/browser/extensions/extension_service.cc
@@ -712,6 +712,13 @@ void ExtensionService::ReloadExtensionWithEvents(
const std::string& extension_id,
int events) {
CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+
+ // If the extension is already reloading, don't reload again.
+ if (extension_prefs_->GetDisableReasons(extension_id) &
+ Extension::DISABLE_RELOAD) {
+ return;
+ }
+
base::FilePath path;
const Extension* current_extension = GetExtensionById(extension_id, false);
diff --git a/chrome/browser/extensions/extension_service_unittest.cc b/chrome/browser/extensions/extension_service_unittest.cc
index ad6816a..57d0638 100644
--- a/chrome/browser/extensions/extension_service_unittest.cc
+++ b/chrome/browser/extensions/extension_service_unittest.cc
@@ -3600,6 +3600,43 @@ TEST_F(ExtensionServiceTest, ReloadExtensions) {
EXPECT_EQ(0u, service_->disabled_extensions()->size());
}
+// Tests reloading an extension.
+TEST_F(ExtensionServiceTest, ReloadExtension) {
+ InitializeEmptyExtensionService();
+ InitializeExtensionProcessManager();
+
+ // Simple extension that should install without error.
+ const char* extension_id = "behllobkkfkfnphdnhnkndlbkcpglgmj";
+ base::FilePath ext = data_dir_
+ .AppendASCII("good")
+ .AppendASCII("Extensions")
+ .AppendASCII(extension_id)
+ .AppendASCII("1.0.0.0");
+ extensions::UnpackedInstaller::Create(service_)->Load(ext);
+ loop_.RunUntilIdle();
+
+ EXPECT_EQ(1u, service_->extensions()->size());
+ EXPECT_EQ(0u, service_->disabled_extensions()->size());
+
+ service_->ReloadExtension(extension_id);
+
+ // Extension should be disabled now, waiting to be reloaded.
+ EXPECT_EQ(0u, service_->extensions()->size());
+ EXPECT_EQ(1u, service_->disabled_extensions()->size());
+ EXPECT_EQ(Extension::DISABLE_RELOAD,
+ service_->extension_prefs()->GetDisableReasons(extension_id));
+
+ // Reloading again should not crash.
+ service_->ReloadExtension(extension_id);
+
+ // Finish reloading
+ loop_.RunUntilIdle();
+
+ // Extension should be enabled again.
+ EXPECT_EQ(1u, service_->extensions()->size());
+ EXPECT_EQ(0u, service_->disabled_extensions()->size());
+}
+
TEST_F(ExtensionServiceTest, UninstallExtension) {
InitializeEmptyExtensionService();
InstallCRX(data_dir_.AppendASCII("good.crx"), INSTALL_NEW);