c7018e3953575cadffe62b0058abe3cf87336fd5
[platform/framework/web/crosswalk.git] / src / chrome / browser / sync / backup_rollback_controller.cc
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.
4
5 #include "chrome/browser/sync/backup_rollback_controller.h"
6
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"
12
13 namespace browser_sync {
14
15 #if defined(ENABLE_PRE_SYNC_BACKUP)
16 // Number of rollback attempts to try before giving up.
17 static const int kRollbackLimits = 3;
18 #endif
19
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),
26       signin_(signin),
27       start_backup_(start_backup),
28       start_rollback_(start_rollback),
29       weak_ptr_factory_(this) {
30 }
31
32 BackupRollbackController::~BackupRollbackController() {
33 }
34
35 void BackupRollbackController::Start(base::TimeDelta delay) {
36 #if defined(ENABLE_PRE_SYNC_BACKUP)
37   if (CommandLine::ForCurrentProcess()->HasSwitch(
38           switches::kSyncDisableBackup)) {
39     return;
40   }
41
42   if (!CommandLine::ForCurrentProcess()->HasSwitch(
43           switches::kSyncEnableRollback)) {
44     sync_prefs_->SetRemainingRollbackTries(0);
45   }
46
47   if (delay == base::TimeDelta()) {
48     TryStart();
49   } else {
50     base::MessageLoop::current()->PostDelayedTask(
51         FROM_HERE,
52         base::Bind(&BackupRollbackController::TryStart,
53                    weak_ptr_factory_.GetWeakPtr()),
54         delay);
55   }
56 #endif
57 }
58
59 void BackupRollbackController::OnRollbackReceived() {
60 #if defined(ENABLE_PRE_SYNC_BACKUP)
61   sync_prefs_->SetRemainingRollbackTries(kRollbackLimits);
62 #endif
63 }
64
65 void BackupRollbackController::OnRollbackDone() {
66 #if defined(ENABLE_PRE_SYNC_BACKUP)
67   sync_prefs_->SetRemainingRollbackTries(0);
68 #endif
69 }
70
71 void BackupRollbackController::TryStart() {
72   if (!signin_->GetEffectiveUsername().empty()) {
73     DVLOG(1) << "Don't start backup/rollback when user is signed in.";
74     return;
75   }
76
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();
82   } else {
83     DVLOG(1) << "Start backup.";
84     start_backup_.Run();
85   }
86 }
87
88 }  // namespace browser_sync