// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CHROME_BROWSER_SYNC_TEST_INTEGRATION_SYNC_EXTENSION_INSTALLER_H_
#define CHROME_BROWSER_SYNC_TEST_INTEGRATION_SYNC_EXTENSION_INSTALLER_H_

#include "base/basictypes.h"
#include "base/compiler_specific.h"
#include "base/memory/weak_ptr.h"
#include "content/public/browser/notification_observer.h"
#include "content/public/browser/notification_registrar.h"

class Profile;

// A helper class to help mimic the timing of installs of synced extensions
// from the app store.
//
// Listens for attempts to contact the web store.  When it detects such an
// attempt (which will fail in tests), it posts a task to fake the installation
// of synced extensions.
//
// Also installs any pending synced extensions when this class is instantiated.
// This is to avoid a potential races between the emitting of notifications and
// the instantation of this class.
class SyncedExtensionInstaller : public content::NotificationObserver {
 public:
  explicit SyncedExtensionInstaller(Profile* profile);
  virtual ~SyncedExtensionInstaller();

  // content::NotificationObserver implementation.
  virtual void Observe(int type,
                       const content::NotificationSource& source,
                       const content::NotificationDetails& details) OVERRIDE;

 private:
  void DoInstallSyncedExtensions();

  Profile* profile_;
  content::NotificationRegistrar registrar_;

  base::WeakPtrFactory<SyncedExtensionInstaller> weak_ptr_factory_;

  DISALLOW_COPY_AND_ASSIGN(SyncedExtensionInstaller);
};

#endif  // CHROME_BROWSER_SYNC_TEST_INTEGRATION_SYNC_EXTENSION_INSTALLER_H_
