#ifndef CHROME_BROWSER_MANAGED_MODE_CHROMEOS_MANAGER_PASSWORD_SERVICE_H_
#define CHROME_BROWSER_MANAGED_MODE_CHROMEOS_MANAGER_PASSWORD_SERVICE_H_
#include <string>
#include "base/compiler_specific.h"
#include "base/memory/scoped_ptr.h"
#include "base/memory/weak_ptr.h"
#include "chrome/browser/chromeos/login/extended_authenticator.h"
#include "chrome/browser/managed_mode/managed_user_shared_settings_service.h"
#include "chrome/browser/managed_mode/managed_user_sync_service.h"
#include "chrome/browser/managed_mode/managed_users.h"
#include "components/keyed_service/core/keyed_service.h"
namespace chromeos {
class ManagerPasswordService
    : public KeyedService,
      public chromeos::ExtendedAuthenticator::AuthStatusConsumer {
 public:
  ManagerPasswordService();
  virtual ~ManagerPasswordService();
  virtual void Shutdown() OVERRIDE;
  void Init(const std::string& user_id,
            ManagedUserSyncService* user_service,
            ManagedUserSharedSettingsService* service);
  
  virtual void OnAuthenticationFailure(ExtendedAuthenticator::AuthState state)
      OVERRIDE;
 private:
  void OnSharedSettingsChange(const std::string& mu_id, const std::string& key);
  void GetManagedUsersCallback(const std::string& sync_mu_id,
                               const std::string& user_id,
                               scoped_ptr<base::DictionaryValue> password_data,
                               const base::DictionaryValue* managed_users);
  void OnAddKeySuccess(const UserContext& master_key_context,
                       const std::string& user_id,
                       scoped_ptr<base::DictionaryValue> password_data);
  void OnContextTransformed(const UserContext& master_key_context);
  void OnNewManagerKeySuccess(const UserContext& master_key_context);
  void OnOldManagedUserKeyDeleted(const UserContext& master_key_context);
  void OnOldManagerKeyDeleted(const UserContext& master_key_context);
  
  
  std::string user_id_;
  ManagedUserSyncService* user_service_;
  ManagedUserSharedSettingsService* settings_service_;
  scoped_ptr<ManagedUserSharedSettingsService::ChangeCallbackList::Subscription>
      settings_service_subscription_;
  scoped_refptr<ExtendedAuthenticator> authenticator_;
  base::WeakPtrFactory<ManagerPasswordService> weak_ptr_factory_;
  DISALLOW_COPY_AND_ASSIGN(ManagerPasswordService);
};
}  
#endif