Temporarily re-enabling SizeAfterPrefChange test with traces (this time for Linux...
[chromium-blink-merge.git] / chrome / browser / sync / backup_rollback_controller.cc
blob2866074608a15d62ae12be6064f69bed2c502055
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;
18 #endif
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) {
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)) {
39 return;
42 if (delay == base::TimeDelta()) {
43 TryStart();
44 } else {
45 base::MessageLoop::current()->PostDelayedTask(
46 FROM_HERE,
47 base::Bind(&BackupRollbackController::TryStart,
48 weak_ptr_factory_.GetWeakPtr()),
49 delay);
51 #endif
54 void BackupRollbackController::OnRollbackReceived() {
55 #if defined(OS_WIN) || defined(OS_MACOSX) || (defined(OS_LINUX) && !defined(OS_CHROMEOS))
56 sync_prefs_->SetRemainingRollbackTries(kRollbackLimits);
57 #endif
60 void BackupRollbackController::OnRollbackDone() {
61 #if defined(OS_WIN) || defined(OS_MACOSX) || (defined(OS_LINUX) && !defined(OS_CHROMEOS))
62 sync_prefs_->SetRemainingRollbackTries(0);
63 #endif
66 void BackupRollbackController::TryStart() {
67 if (!signin_->GetEffectiveUsername().empty()) {
68 DVLOG(1) << "Don't start backup/rollback when user is signed in.";
69 return;
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();
77 } else {
78 DVLOG(1) << "Start backup.";
79 start_backup_.Run();
83 } // namespace browser_sync