| 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 | 
|  |