Index: chrome/browser/extensions/extension_service_unittest.cc |
=================================================================== |
--- chrome/browser/extensions/extension_service_unittest.cc (revision 210446) |
+++ chrome/browser/extensions/extension_service_unittest.cc (working copy) |
@@ -82,9 +82,11 @@ |
#include "content/public/browser/notification_registrar.h" |
#include "content/public/browser/notification_service.h" |
#include "content/public/browser/plugin_service.h" |
+#include "content/public/browser/render_process_host.h" |
#include "content/public/browser/storage_partition.h" |
#include "content/public/common/content_constants.h" |
#include "content/public/test/test_browser_thread.h" |
+#include "content/public/test/test_utils.h" |
#include "extensions/common/constants.h" |
#include "extensions/common/extension_resource.h" |
#include "extensions/common/url_pattern.h" |
@@ -195,6 +197,11 @@ |
return temp_file; |
} |
+ |
+bool WaitForCountNotificationsCallback(int *count) { |
+ return --(*count) == 0; |
+} |
+ |
} // namespace |
class MockExtensionProvider : public extensions::ExternalProviderInterface { |
@@ -577,8 +584,13 @@ |
void ExtensionServiceTestBase::SetUp() { |
ExtensionErrorReporter::GetInstance()->ClearErrors(); |
+ content::RenderProcessHost::SetRunRendererInProcess(true); |
} |
+void ExtensionServiceTestBase::TearDown() { |
+ content::RenderProcessHost::SetRunRendererInProcess(false); |
+} |
+ |
class ExtensionServiceTest |
: public ExtensionServiceTestBase, public content::NotificationObserver { |
public: |
@@ -686,6 +698,11 @@ |
if (!(creation_flags & Extension::WAS_INSTALLED_BY_DEFAULT)) { |
installer->set_allow_silent_install(true); |
} |
+ |
+ content::WindowedNotificationObserver windowed_observer( |
+ chrome::NOTIFICATION_CRX_INSTALLER_DONE, |
+ content::Source<extensions::CrxInstaller>(installer)); |
+ |
installer->InstallCrx(crx_path); |
} |
@@ -786,7 +803,10 @@ |
const Extension* WaitForCrxInstall(const base::FilePath& path, |
InstallState install_state, |
const std::string& expected_old_name) { |
- loop_.RunUntilIdle(); |
+ content::WindowedNotificationObserver( |
+ chrome::NOTIFICATION_CRX_INSTALLER_DONE, |
+ content::NotificationService::AllSources()).Wait(); |
+ |
std::vector<string16> errors = GetErrors(); |
const Extension* extension = NULL; |
if (install_state != INSTALL_FAILED) { |
@@ -872,9 +892,17 @@ |
previous_enabled_extension_count + |
service_->disabled_extensions()->size(); |
- service_->UpdateExtension(id, path, GURL(), NULL); |
- loop_.RunUntilIdle(); |
+ extensions::CrxInstaller* installer = NULL; |
+ service_->UpdateExtension(id, path, GURL(), &installer); |
+ if (installer) { |
+ content::WindowedNotificationObserver( |
+ chrome::NOTIFICATION_CRX_INSTALLER_DONE, |
+ content::Source<extensions::CrxInstaller>(installer)).Wait(); |
+ } else { |
+ loop_.RunUntilIdle(); |
+ } |
+ |
std::vector<string16> errors = GetErrors(); |
int error_count = errors.size(); |
int enabled_extension_count = |
@@ -1584,14 +1612,17 @@ |
// Register and install an external extension. |
Version version("1.0.0.0"); |
- service_->OnExternalExtensionFileFound( |
- good_crx, |
- &version, |
- path, |
- Manifest::EXTERNAL_PREF, |
- Extension::FROM_BOOKMARK, |
- false /* mark_acknowledged */); |
- loop_.RunUntilIdle(); |
+ if (service_->OnExternalExtensionFileFound( |
+ good_crx, |
+ &version, |
+ path, |
+ Manifest::EXTERNAL_PREF, |
+ Extension::FROM_BOOKMARK, |
+ false /* mark_acknowledged */)) { |
+ content::WindowedNotificationObserver( |
+ chrome::NOTIFICATION_CRX_INSTALLER_DONE, |
+ content::NotificationService::AllSources()).Wait(); |
+ } |
const Extension* extension = service_->GetExtensionById(good_crx, false); |
ASSERT_TRUE(extension); |
@@ -1616,10 +1647,14 @@ |
Version version("1.0.0.0"); |
// Install an external extension. |
- service_->OnExternalExtensionFileFound(good_crx, &version, |
- path, Manifest::EXTERNAL_PREF, |
- Extension::NO_FLAGS, false); |
- loop_.RunUntilIdle(); |
+ if (service_->OnExternalExtensionFileFound(good_crx, &version, |
+ path, Manifest::EXTERNAL_PREF, |
+ Extension::NO_FLAGS, false)) { |
+ content::WindowedNotificationObserver( |
+ chrome::NOTIFICATION_CRX_INSTALLER_DONE, |
+ content::NotificationService::AllSources()).Wait(); |
+ } |
+ |
ASSERT_TRUE(service_->GetExtensionById(good_crx, false)); |
// Uninstall it and check that its killbit gets set. |
@@ -1702,14 +1737,19 @@ |
wrong_id, &version, path, Manifest::EXTERNAL_PREF, |
Extension::NO_FLAGS, false); |
- loop_.RunUntilIdle(); |
+ content::WindowedNotificationObserver( |
+ chrome::NOTIFICATION_CRX_INSTALLER_DONE, |
+ content::NotificationService::AllSources()).Wait(); |
ASSERT_FALSE(service_->GetExtensionById(good_crx, false)); |
// Try again with the right ID. Expect success. |
- service_->OnExternalExtensionFileFound( |
- correct_id, &version, path, Manifest::EXTERNAL_PREF, |
- Extension::NO_FLAGS, false); |
- loop_.RunUntilIdle(); |
+ if (service_->OnExternalExtensionFileFound( |
+ correct_id, &version, path, Manifest::EXTERNAL_PREF, |
+ Extension::NO_FLAGS, false)) { |
+ content::WindowedNotificationObserver( |
+ chrome::NOTIFICATION_CRX_INSTALLER_DONE, |
+ content::NotificationService::AllSources()).Wait(); |
+ } |
ASSERT_TRUE(service_->GetExtensionById(good_crx, false)); |
} |
@@ -1726,16 +1766,21 @@ |
good_crx, &wrong_version, path, Manifest::EXTERNAL_PREF, |
Extension::NO_FLAGS, false); |
- loop_.RunUntilIdle(); |
+ content::WindowedNotificationObserver( |
+ chrome::NOTIFICATION_CRX_INSTALLER_DONE, |
+ content::NotificationService::AllSources()).Wait(); |
ASSERT_FALSE(service_->GetExtensionById(good_crx, false)); |
// Try again with the right version. Expect success. |
service_->pending_extension_manager()->Remove(good_crx); |
Version correct_version("1.0.0.0"); |
- service_->OnExternalExtensionFileFound( |
- good_crx, &correct_version, path, Manifest::EXTERNAL_PREF, |
- Extension::NO_FLAGS, false); |
- loop_.RunUntilIdle(); |
+ if (service_->OnExternalExtensionFileFound( |
+ good_crx, &correct_version, path, Manifest::EXTERNAL_PREF, |
+ Extension::NO_FLAGS, false)) { |
+ content::WindowedNotificationObserver( |
+ chrome::NOTIFICATION_CRX_INSTALLER_DONE, |
+ content::NotificationService::AllSources()).Wait(); |
+ } |
ASSERT_TRUE(service_->GetExtensionById(good_crx, false)); |
} |
@@ -3410,7 +3455,9 @@ |
// Reloading extensions should find our externally registered extension |
// and install it. |
service_->CheckForExternalUpdates(); |
- loop_.RunUntilIdle(); |
+ content::WindowedNotificationObserver( |
+ chrome::NOTIFICATION_CRX_INSTALLER_DONE, |
+ content::NotificationService::AllSources()).Wait(); |
// Extension should be installed despite blacklist. |
ASSERT_EQ(1u, service_->extensions()->size()); |
@@ -3588,8 +3635,12 @@ |
// Providers are set up. Let them run. |
service_->CheckForExternalUpdates(); |
- loop_.RunUntilIdle(); |
+ int count = 2; |
+ content::WindowedNotificationObserver( |
+ chrome::NOTIFICATION_CRX_INSTALLER_DONE, |
+ base::Bind(&WaitForCountNotificationsCallback, &count)).Wait(); |
+ |
ASSERT_EQ(2u, service_->extensions()->size()); |
EXPECT_TRUE(service_->GetExtensionById(good_crx, false)); |
EXPECT_TRUE(service_->GetExtensionById(page_action, false)); |
@@ -3628,14 +3679,15 @@ |
ASSERT_EQ(0u, service_->extensions()->size()); |
service_->CheckForExternalUpdates(); |
- loop_.RunUntilIdle(); |
+ content::WindowedNotificationObserver( |
+ chrome::NOTIFICATION_CRX_INSTALLER_DONE, |
+ content::NotificationService::AllSources()).Wait(); |
ASSERT_EQ(1u, service_->extensions()->size()); |
EXPECT_TRUE(service_->GetExtensionById(good_crx, false)); |
const Extension* extension = service_->GetExtensionById(good_crx, false); |
EXPECT_TRUE(extension->from_webstore()); |
EXPECT_TRUE(extension->was_installed_by_default()); |
- |
} |
#endif |
@@ -4253,7 +4305,9 @@ |
// Reloading extensions should find our externally registered extension |
// and install it. |
service_->CheckForExternalUpdates(); |
- loop_.RunUntilIdle(); |
+ content::WindowedNotificationObserver( |
+ chrome::NOTIFICATION_CRX_INSTALLER_DONE, |
+ content::NotificationService::AllSources()).Wait(); |
ASSERT_EQ(0u, GetErrors().size()); |
ASSERT_EQ(1u, loaded_.size()); |
@@ -4280,7 +4334,9 @@ |
loaded_.clear(); |
service_->CheckForExternalUpdates(); |
- loop_.RunUntilIdle(); |
+ content::WindowedNotificationObserver( |
+ chrome::NOTIFICATION_CRX_INSTALLER_DONE, |
+ content::NotificationService::AllSources()).Wait(); |
ASSERT_EQ(0u, GetErrors().size()); |
ASSERT_EQ(1u, loaded_.size()); |
ASSERT_EQ("1.0.0.1", loaded_[0]->version()->GetString()); |
@@ -4317,7 +4373,9 @@ |
loaded_.clear(); |
service_->CheckForExternalUpdates(); |
- loop_.RunUntilIdle(); |
+ content::WindowedNotificationObserver( |
+ chrome::NOTIFICATION_CRX_INSTALLER_DONE, |
+ content::NotificationService::AllSources()).Wait(); |
ASSERT_EQ(1u, loaded_.size()); |
} |
ValidatePrefKeyCount(1); |
@@ -4344,7 +4402,9 @@ |
// from the external provider. |
provider->UpdateOrAddExtension(good_crx, "1.0.0.1", source_path); |
service_->CheckForExternalUpdates(); |
- loop_.RunUntilIdle(); |
+ content::WindowedNotificationObserver( |
+ chrome::NOTIFICATION_CRX_INSTALLER_DONE, |
+ content::NotificationService::AllSources()).Wait(); |
ASSERT_EQ(1u, loaded_.size()); |
ASSERT_EQ(0u, GetErrors().size()); |
@@ -4495,7 +4555,9 @@ |
provider->set_visit_count(0); |
service_->CheckForExternalUpdates(); |
service_->CheckForExternalUpdates(); |
- loop_.RunUntilIdle(); |
+ content::WindowedNotificationObserver( |
+ chrome::NOTIFICATION_CRX_INSTALLER_DONE, |
+ content::NotificationService::AllSources()).Wait(); |
EXPECT_EQ(2, provider->visit_count()); |
ASSERT_EQ(0u, GetErrors().size()); |
ASSERT_EQ(1u, loaded_.size()); |
@@ -5888,7 +5950,7 @@ |
ASSERT_EQ(Manifest::EXTERNAL_PREF, GetPendingLocation()); |
ASSERT_FALSE(IsCrxInstalled()); |
- // Another request from sync should be ignorred. |
+ // Another request from sync should be ignored. |
EXPECT_FALSE(AddPendingSyncInstall()); |
ASSERT_EQ(Manifest::EXTERNAL_PREF, GetPendingLocation()); |
ASSERT_FALSE(IsCrxInstalled()); |
@@ -5975,7 +6037,9 @@ |
data_dir_.AppendASCII("hosted_app.crx")); |
service_->CheckForExternalUpdates(); |
- loop_.RunUntilIdle(); |
+ content::WindowedNotificationObserver( |
+ chrome::NOTIFICATION_CRX_INSTALLER_DONE, |
+ content::NotificationService::AllSources()).Wait(); |
EXPECT_FALSE(extensions::HasExternalInstallError(service_)); |
// Another normal extension, but installed externally. |
@@ -5984,7 +6048,9 @@ |
data_dir_.AppendASCII("page_action.crx")); |
service_->CheckForExternalUpdates(); |
- loop_.RunUntilIdle(); |
+ content::WindowedNotificationObserver( |
+ chrome::NOTIFICATION_CRX_INSTALLER_DONE, |
+ content::NotificationService::AllSources()).Wait(); |
EXPECT_TRUE(extensions::HasExternalInstallError(service_)); |
} |
@@ -6003,7 +6069,9 @@ |
data_dir_.AppendASCII("page_action.crx")); |
service_->CheckForExternalUpdates(); |
- loop_.RunUntilIdle(); |
+ content::WindowedNotificationObserver( |
+ chrome::NOTIFICATION_CRX_INSTALLER_DONE, |
+ content::NotificationService::AllSources()).Wait(); |
EXPECT_TRUE(extensions::HasExternalInstallError(service_)); |
EXPECT_FALSE(service_->IsExtensionEnabled(page_action)); |
@@ -6035,7 +6103,10 @@ |
data_dir_.AppendASCII("theme.crx")); |
service_->CheckForExternalUpdates(); |
- loop_.RunUntilIdle(); |
+ int count = 3; |
+ content::WindowedNotificationObserver( |
+ chrome::NOTIFICATION_CRX_INSTALLER_DONE, |
+ base::Bind(&WaitForCountNotificationsCallback, &count)).Wait(); |
EXPECT_TRUE(extensions::HasExternalInstallError(service_)); |
EXPECT_FALSE(service_->IsExtensionEnabled(page_action)); |
EXPECT_FALSE(service_->IsExtensionEnabled(good_crx)); |
@@ -6073,7 +6144,9 @@ |
provider->UpdateOrAddExtension(updates_from_webstore, "1", crx_path); |
service_->CheckForExternalUpdates(); |
- loop_.RunUntilIdle(); |
+ content::WindowedNotificationObserver( |
+ chrome::NOTIFICATION_CRX_INSTALLER_DONE, |
+ content::NotificationService::AllSources()).Wait(); |
EXPECT_TRUE(extensions::HasExternalInstallError(service_)); |
EXPECT_TRUE(extensions::HasExternalInstallBubble(service_)); |
EXPECT_FALSE(service_->IsExtensionEnabled(updates_from_webstore)); |
@@ -6097,7 +6170,9 @@ |
provider->UpdateOrAddExtension(updates_from_webstore, "1", crx_path); |
service_->CheckForExternalUpdates(); |
- loop_.RunUntilIdle(); |
+ content::WindowedNotificationObserver( |
+ chrome::NOTIFICATION_CRX_INSTALLER_DONE, |
+ content::NotificationService::AllSources()).Wait(); |
EXPECT_TRUE(extensions::HasExternalInstallError(service_)); |
EXPECT_FALSE(extensions::HasExternalInstallBubble(service_)); |
EXPECT_FALSE(service_->IsExtensionEnabled(updates_from_webstore)); |