Home | History | Annotate | Download | only in sync
      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 #ifndef CHROME_BROWSER_SYNC_BACKUP_ROLLBACK_CONTROLLER_H_
      6 #define CHROME_BROWSER_SYNC_BACKUP_ROLLBACK_CONTROLLER_H_
      7 
      8 #include "base/callback.h"
      9 #include "base/memory/weak_ptr.h"
     10 
     11 class SupervisedUserSigninManagerWrapper;
     12 
     13 namespace sync_driver {
     14 class SyncPrefs;
     15 }
     16 
     17 namespace browser_sync {
     18 
     19 // BackupRollbackController takes two closures for starting backup/rollback
     20 // process. It calls the closures according to user's signin status or
     21 // received rollback command. Backup is not run when user signed in, even when
     22 // sync is not running.
     23 class BackupRollbackController {
     24  public:
     25   BackupRollbackController(sync_driver::SyncPrefs* sync_prefs,
     26                            const SupervisedUserSigninManagerWrapper* signin,
     27                            base::Closure start_backup,
     28                            base::Closure start_rollback);
     29   ~BackupRollbackController();
     30 
     31   // Post task to run |start_backup_| if conditions are met. Return true if
     32   // task is posted, false otherwise.
     33   bool StartBackup();
     34 
     35   // Post task to run |start_rollback_| if conditions are met. Return true if
     36   // task is posted, false otherwise.
     37   bool StartRollback();
     38 
     39   // Update rollback preference to indicate rollback is needed.
     40   void OnRollbackReceived();
     41 
     42   // Update rollback preference to indicate rollback is finished.
     43   void OnRollbackDone();
     44 
     45   // Return true if platform supports backup and backup is enabled.
     46   static bool IsBackupEnabled();
     47 
     48  private:
     49   sync_driver::SyncPrefs* sync_prefs_;
     50 
     51   // Use SupervisedUserSigninManagerWrapper instead of SigninManagerBase so that
     52   // supervised users are treated like regular signed-in users.
     53   const SupervisedUserSigninManagerWrapper* signin_;
     54 
     55   base::Closure start_backup_;
     56   base::Closure start_rollback_;
     57 
     58   DISALLOW_COPY_AND_ASSIGN(BackupRollbackController);
     59 };
     60 
     61 }  // namespace browser_sync
     62 
     63 #endif  // CHROME_BROWSER_SYNC_BACKUP_ROLLBACK_CONTROLLER_H_
     64