blob: 5b767b0a213ea759de7d957eb0490e349fa62b0a [file] [log] [blame]
// 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_BACKUP_ROLLBACK_CONTROLLER_H_
#define CHROME_BROWSER_SYNC_BACKUP_ROLLBACK_CONTROLLER_H_
#include "base/callback.h"
#include "base/memory/weak_ptr.h"
class SupervisedUserSigninManagerWrapper;
namespace sync_driver {
class SyncPrefs;
}
namespace browser_sync {
// BackupRollbackController takes two closures for starting backup/rollback
// process. It calls the closures according to user's signin status or
// received rollback command. Backup is not run when user signed in, even when
// sync is not running.
class BackupRollbackController {
public:
BackupRollbackController(sync_driver::SyncPrefs* sync_prefs,
const SupervisedUserSigninManagerWrapper* signin,
base::Closure start_backup,
base::Closure start_rollback);
~BackupRollbackController();
// Post task to run |start_backup_| if conditions are met. Return true if
// task is posted, false otherwise.
bool StartBackup();
// Post task to run |start_rollback_| if conditions are met. Return true if
// task is posted, false otherwise.
bool StartRollback();
// Update rollback preference to indicate rollback is needed.
void OnRollbackReceived();
// Update rollback preference to indicate rollback is finished.
void OnRollbackDone();
// Return true if platform supports backup and backup is enabled.
static bool IsBackupEnabled();
private:
sync_driver::SyncPrefs* sync_prefs_;
// Use SupervisedUserSigninManagerWrapper instead of SigninManagerBase because
// SigninManagerBase could return non-empty user name for supervised user,
// which would cause backup to trumpet normal sync for supervised user.
const SupervisedUserSigninManagerWrapper* signin_;
base::Closure start_backup_;
base::Closure start_rollback_;
DISALLOW_COPY_AND_ASSIGN(BackupRollbackController);
};
} // namespace browser_sync
#endif // CHROME_BROWSER_SYNC_BACKUP_ROLLBACK_CONTROLLER_H_