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(OS_WIN) || defined(OS_MACOSX) || (defined(OS_LINUX) && !defined(OS_CHROMEOS))
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(OS_WIN) || defined(OS_MACOSX) || (defined(OS_LINUX) && !defined(OS_CHROMEOS))
37 if (!CommandLine::ForCurrentProcess()->HasSwitch(
38 switches::kSyncEnableBackupRollback
)) {
42 if (delay
== base::TimeDelta()) {
45 base::MessageLoop::current()->PostDelayedTask(
47 base::Bind(&BackupRollbackController::TryStart
,
48 weak_ptr_factory_
.GetWeakPtr()),
54 void BackupRollbackController::OnRollbackReceived() {
55 #if defined(OS_WIN) || defined(OS_MACOSX) || (defined(OS_LINUX) && !defined(OS_CHROMEOS))
56 sync_prefs_
->SetRemainingRollbackTries(kRollbackLimits
);
60 void BackupRollbackController::OnRollbackDone() {
61 #if defined(OS_WIN) || defined(OS_MACOSX) || (defined(OS_LINUX) && !defined(OS_CHROMEOS))
62 sync_prefs_
->SetRemainingRollbackTries(0);
66 void BackupRollbackController::TryStart() {
67 if (!signin_
->GetEffectiveUsername().empty()) {
68 DVLOG(1) << "Don't start backup/rollback when user is signed in.";
72 int rollback_tries
= sync_prefs_
->GetRemainingRollbackTries();
73 if (rollback_tries
> 0) {
74 DVLOG(1) << "Start rollback.";
75 sync_prefs_
->SetRemainingRollbackTries(rollback_tries
- 1);
76 start_rollback_
.Run();
78 DVLOG(1) << "Start backup.";
83 } // namespace browser_sync