1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "chrome/browser/sync/backup_rollback_controller.h"
7 #include "base/command_line.h"
8 #include "base/message_loop/message_loop.h"
9 #include "chrome/browser/sync/managed_user_signin_manager_wrapper.h"
10 #include "chrome/common/chrome_switches.h"
11 #include "components/sync_driver/sync_prefs.h"
13 namespace browser_sync {
15 #if defined(ENABLE_PRE_SYNC_BACKUP)
16 // Number of rollback attempts to try before giving up.
17 static const int kRollbackLimits = 3;
20 BackupRollbackController::BackupRollbackController(
21 sync_driver::SyncPrefs* sync_prefs,
22 const ManagedUserSigninManagerWrapper* signin,
23 base::Closure start_backup,
24 base::Closure start_rollback)
25 : sync_prefs_(sync_prefs),
27 start_backup_(start_backup),
28 start_rollback_(start_rollback),
29 weak_ptr_factory_(this) {
32 BackupRollbackController::~BackupRollbackController() {
35 void BackupRollbackController::Start(base::TimeDelta delay) {
36 #if defined(ENABLE_PRE_SYNC_BACKUP)
37 if (CommandLine::ForCurrentProcess()->HasSwitch(
38 switches::kSyncDisableBackup)) {
42 if (!CommandLine::ForCurrentProcess()->HasSwitch(
43 switches::kSyncEnableRollback)) {
44 sync_prefs_->SetRemainingRollbackTries(0);
47 if (delay == base::TimeDelta()) {
50 base::MessageLoop::current()->PostDelayedTask(
52 base::Bind(&BackupRollbackController::TryStart,
53 weak_ptr_factory_.GetWeakPtr()),
59 void BackupRollbackController::OnRollbackReceived() {
60 #if defined(ENABLE_PRE_SYNC_BACKUP)
61 sync_prefs_->SetRemainingRollbackTries(kRollbackLimits);
65 void BackupRollbackController::OnRollbackDone() {
66 #if defined(ENABLE_PRE_SYNC_BACKUP)
67 sync_prefs_->SetRemainingRollbackTries(0);
71 void BackupRollbackController::TryStart() {
72 if (!signin_->GetEffectiveUsername().empty()) {
73 DVLOG(1) << "Don't start backup/rollback when user is signed in.";
77 int rollback_tries = sync_prefs_->GetRemainingRollbackTries();
78 if (rollback_tries > 0) {
79 DVLOG(1) << "Start rollback.";
80 sync_prefs_->SetRemainingRollbackTries(rollback_tries - 1);
81 start_rollback_.Run();
83 DVLOG(1) << "Start backup.";
88 } // namespace browser_sync