#include "base/command_line.h"
#include "base/message_loop/message_loop.h"
#include "base/metrics/field_trial.h"
-#include "chrome/browser/sync/managed_user_signin_manager_wrapper.h"
+#include "chrome/browser/sync/supervised_user_signin_manager_wrapper.h"
#include "chrome/common/chrome_switches.h"
#include "components/sync_driver/sync_prefs.h"
BackupRollbackController::BackupRollbackController(
sync_driver::SyncPrefs* sync_prefs,
- const ManagedUserSigninManagerWrapper* signin,
+ const SupervisedUserSigninManagerWrapper* signin,
base::Closure start_backup,
base::Closure start_rollback)
: sync_prefs_(sync_prefs),
signin_(signin),
start_backup_(start_backup),
- start_rollback_(start_rollback),
- weak_ptr_factory_(this) {
+ start_rollback_(start_rollback) {
}
BackupRollbackController::~BackupRollbackController() {
}
-void BackupRollbackController::Start(base::TimeDelta delay) {
+bool BackupRollbackController::StartBackup() {
if (!IsBackupEnabled())
- return;
+ return false;
+
+ // Disable rollback to previous backup DB because it will be overwritten by
+ // new backup.
+ sync_prefs_->SetRemainingRollbackTries(0);
+ base::MessageLoop::current()->PostTask(FROM_HERE, start_backup_);
+ return true;
+}
- if (!CommandLine::ForCurrentProcess()->HasSwitch(
- switches::kSyncEnableRollback)) {
+bool BackupRollbackController::StartRollback() {
+ if (!IsBackupEnabled())
+ return false;
+
+ // Don't roll back if disabled or user is signed in.
+ if (CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kSyncDisableRollback) ||
+ !signin_->GetEffectiveUsername().empty()) {
sync_prefs_->SetRemainingRollbackTries(0);
+ return false;
}
- if (delay == base::TimeDelta()) {
- TryStart();
- } else {
- base::MessageLoop::current()->PostDelayedTask(
- FROM_HERE,
- base::Bind(&BackupRollbackController::TryStart,
- weak_ptr_factory_.GetWeakPtr()),
- delay);
- }
+ int rollback_tries = sync_prefs_->GetRemainingRollbackTries();
+ if (rollback_tries <= 0)
+ return false; // No pending rollback.
+
+ sync_prefs_->SetRemainingRollbackTries(rollback_tries - 1);
+ base::MessageLoop::current()->PostTask(FROM_HERE, start_rollback_);
+ return true;
}
void BackupRollbackController::OnRollbackReceived() {
#endif
}
-void BackupRollbackController::TryStart() {
- if (!signin_->GetEffectiveUsername().empty()) {
- DVLOG(1) << "Don't start backup/rollback when user is signed in.";
- return;
- }
-
- int rollback_tries = sync_prefs_->GetRemainingRollbackTries();
- if (rollback_tries > 0) {
- DVLOG(1) << "Start rollback.";
- sync_prefs_->SetRemainingRollbackTries(rollback_tries - 1);
- start_rollback_.Run();
- } else {
- DVLOG(1) << "Start backup.";
- start_backup_.Run();
- }
-}
-
// static
bool BackupRollbackController::IsBackupEnabled() {
#if defined(ENABLE_PRE_SYNC_BACKUP)