Index: chrome/browser/sync/test/integration/extensions_helper.cc |
diff --git a/chrome/browser/sync/test/integration/extensions_helper.cc b/chrome/browser/sync/test/integration/extensions_helper.cc |
index 1dad8f42181b51ea6efebe6800e145ff705d3a29..126f96a44eaaa8a972072619aa76a71ba23e2ac4 100644 |
--- a/chrome/browser/sync/test/integration/extensions_helper.cc |
+++ b/chrome/browser/sync/test/integration/extensions_helper.cc |
@@ -6,17 +6,14 @@ |
#include "base/logging.h" |
#include "base/macros.h" |
+#include "base/memory/ptr_util.h" |
#include "chrome/browser/chrome_notification_types.h" |
#include "chrome/browser/profiles/profile.h" |
-#include "chrome/browser/sync/test/integration/status_change_checker.h" |
#include "chrome/browser/sync/test/integration/sync_datatype_helper.h" |
#include "chrome/browser/sync/test/integration/sync_extension_helper.h" |
#include "chrome/browser/sync/test/integration/sync_extension_installer.h" |
-#include "content/public/browser/notification_observer.h" |
-#include "content/public/browser/notification_registrar.h" |
#include "content/public/browser/notification_source.h" |
#include "extensions/browser/extension_registry.h" |
-#include "extensions/browser/extension_registry_observer.h" |
#include "extensions/common/manifest.h" |
using sync_datatype_helper::test; |
@@ -130,70 +127,29 @@ void InstallExtensionsPendingForSync(Profile* profile) { |
SyncExtensionHelper::GetInstance()->InstallExtensionsPendingForSync(profile); |
} |
-namespace { |
- |
-// A helper class to implement waiting for a set of profiles to have matching |
-// extensions lists. It waits for calls on both interfaces: |
-// ExtensionRegistryObserver and NotificationObserver. Observing |
-// NOTIFICATION_EXTENSION_UPDATING_STARTED notification is needed for tests |
-// against local server because in such tests extensions are not installed and |
-// ExtensionRegistryObserver methods are not called. |
-class ExtensionsMatchChecker : public StatusChangeChecker, |
- public extensions::ExtensionRegistryObserver, |
- public content::NotificationObserver { |
- public: |
- explicit ExtensionsMatchChecker(const std::vector<Profile*>& profiles); |
- ~ExtensionsMatchChecker() override; |
- |
- // StatusChangeChecker implementation. |
- std::string GetDebugMessage() const override; |
- bool IsExitConditionSatisfied() override; |
- |
- // extensions::ExtensionRegistryObserver implementation. |
- void OnExtensionLoaded(content::BrowserContext* context, |
- const extensions::Extension* extension) override; |
- void OnExtensionUnloaded( |
- content::BrowserContext* context, |
- const extensions::Extension* extenion, |
- extensions::UnloadedExtensionInfo::Reason reason) override; |
- void OnExtensionInstalled(content::BrowserContext* browser_context, |
- const extensions::Extension* extension, |
- bool is_update) override; |
- void OnExtensionUninstalled(content::BrowserContext* browser_context, |
- const extensions::Extension* extension, |
- extensions::UninstallReason reason) override; |
- |
- // content::NotificationObserver implementation. |
- void Observe(int type, |
- const content::NotificationSource& source, |
- const content::NotificationDetails& details) override; |
- |
- void Wait(); |
- |
- private: |
- std::vector<Profile*> profiles_; |
- ScopedVector<SyncedExtensionInstaller> synced_extension_installers_; |
- content::NotificationRegistrar registrar_; |
- bool observing_; |
- |
- DISALLOW_COPY_AND_ASSIGN(ExtensionsMatchChecker); |
-}; |
- |
-ExtensionsMatchChecker::ExtensionsMatchChecker( |
- const std::vector<Profile*>& profiles) |
- : profiles_(profiles), observing_(false) { |
+} // namespace extensions_helper |
+ |
+ExtensionsMatchChecker::ExtensionsMatchChecker() |
+ : profiles_(test()->GetAllProfiles()) { |
DCHECK_GE(profiles_.size(), 2U); |
+ for (Profile* profile : profiles_) { |
+ // Begin mocking the installation of synced extensions from the web store. |
+ synced_extension_installers_.push_back( |
+ base::MakeUnique<SyncedExtensionInstaller>(profile)); |
+ |
+ extensions::ExtensionRegistry* registry = |
+ extensions::ExtensionRegistry::Get(profile); |
+ registry->AddObserver(this); |
+ registrar_.Add(this, extensions::NOTIFICATION_EXTENSION_UPDATING_STARTED, |
+ content::Source<Profile>(profile)); |
+ } |
} |
ExtensionsMatchChecker::~ExtensionsMatchChecker() { |
- if (observing_) { |
- for (std::vector<Profile*>::iterator it = profiles_.begin(); |
- it != profiles_.end(); |
- ++it) { |
- extensions::ExtensionRegistry* registry = |
- extensions::ExtensionRegistry::Get(*it); |
- registry->RemoveObserver(this); |
- } |
+ for (Profile* profile : profiles_) { |
+ extensions::ExtensionRegistry* registry = |
+ extensions::ExtensionRegistry::Get(profile); |
+ registry->RemoveObserver(this); |
} |
} |
@@ -248,43 +204,3 @@ void ExtensionsMatchChecker::Observe( |
DCHECK_EQ(extensions::NOTIFICATION_EXTENSION_UPDATING_STARTED, type); |
CheckExitCondition(); |
} |
- |
-void ExtensionsMatchChecker::Wait() { |
- for (std::vector<Profile*>::iterator it = profiles_.begin(); |
- it != profiles_.end(); |
- ++it) { |
- // Begin mocking the installation of synced extensions from the web store. |
- synced_extension_installers_.push_back(new SyncedExtensionInstaller(*it)); |
- |
- extensions::ExtensionRegistry* registry = |
- extensions::ExtensionRegistry::Get(*it); |
- registry->AddObserver(this); |
- registrar_.Add(this, extensions::NOTIFICATION_EXTENSION_UPDATING_STARTED, |
- content::Source<Profile>(*it)); |
- } |
- |
- observing_ = true; |
- |
- if (IsExitConditionSatisfied()) { |
- DVLOG(1) << "Extensions matched without waiting"; |
- return; |
- } |
- |
- DVLOG(1) << "Starting Wait: " << GetDebugMessage(); |
- StartBlockingWait(); |
-} |
- |
-} // namespace |
- |
-bool AwaitAllProfilesHaveSameExtensions() { |
- std::vector<Profile*> profiles; |
- for (int i = 0; i < test()->num_clients(); ++i) { |
- profiles.push_back(test()->GetProfile(i)); |
- } |
- |
- ExtensionsMatchChecker checker(profiles); |
- checker.Wait(); |
- return !checker.TimedOut(); |
-} |
- |
-} // namespace extensions_helper |