Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / sync / backup_rollback_controller.cc
index 5a727bb..ab11277 100644 (file)
@@ -7,7 +7,7 @@
 #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"
 
@@ -24,37 +24,48 @@ static char kSyncBackupFinchDisabled[] = "disabled";
 
 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() {
@@ -69,23 +80,6 @@ void BackupRollbackController::OnRollbackDone() {
 #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)