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

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

Issue 18119009: Make utility process run in-process when running in single-process mode. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: add comment Created 7 years, 6 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
===================================================================
--- chrome/browser/extensions/extension_service_unittest.cc (revision 209067)
+++ chrome/browser/extensions/extension_service_unittest.cc (working copy)
@@ -12,6 +12,7 @@
#include "base/basictypes.h"
#include "base/bind.h"
#include "base/command_line.h"
+#include "base/debug/trace_event_impl.h"
#include "base/file_util.h"
#include "base/files/file_enumerator.h"
#include "base/files/scoped_temp_dir.h"
@@ -82,9 +83,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 +198,11 @@
return temp_file;
}
+
+bool WaitForCountNotificationsCallback(int *count) {
+ return --(*count) == 0;
+}
+
} // namespace
class MockExtensionProvider : public extensions::ExternalProviderInterface {
@@ -428,6 +436,7 @@
// Our message loop may be used in tests which require it to be an IO loop.
ExtensionServiceTestBase::ExtensionServiceTestBase()
: loop_(base::MessageLoop::TYPE_IO),
+ at_exit_manager_(new base::ShadowingAtExitManager),
service_(NULL),
management_policy_(NULL),
expected_extensions_count_(0),
@@ -453,6 +462,11 @@
base::MessageLoop::current()->RunUntilIdle();
profile_.reset(NULL);
base::MessageLoop::current()->RunUntilIdle();
+ at_exit_manager_.reset();
+
+ // This is needed because otherwise the next unit test which creates an
+ // in-process utility thread won't be able to create a TraceLog instance.
+ base::debug::TraceLog::Resurrect();
}
void ExtensionServiceTestBase::InitializeExtensionService(
@@ -577,8 +591,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:
@@ -681,11 +700,17 @@
void StartCRXInstall(const base::FilePath& crx_path, int creation_flags) {
ASSERT_TRUE(file_util::PathExists(crx_path))
<< "Path does not exist: "<< crx_path.value().c_str();
+
scoped_refptr<CrxInstaller> installer(CrxInstaller::Create(service_, NULL));
installer->set_creation_flags(creation_flags);
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 +811,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 +900,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 +1620,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);
@@ -1601,6 +1640,7 @@
// Upgrade to version 2.0, the flag should be preserved.
path = data_dir_.AppendASCII("good2.crx");
UpdateExtension(good_crx, path, ENABLED);
+
ValidateBooleanPref(good_crx, kPrefFromBookmark, true);
extension = service_->GetExtensionById(good_crx, false);
ASSERT_TRUE(extension);
@@ -1616,10 +1656,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 +1746,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 +1775,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 +3464,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 +3644,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 +3688,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 +4314,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 +4343,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 +4382,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 +4411,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 +4564,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 +5959,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 +6046,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 +6057,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 +6078,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 +6112,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 +6153,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 +6179,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));

Powered by Google App Engine
This is Rietveld 408576698