Home | History | Annotate | Download | only in sync
      1 // Copyright (c) 2011 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_SYNC_SETUP_WIZARD_H_
      6 #define CHROME_BROWSER_SYNC_SYNC_SETUP_WIZARD_H_
      7 #pragma once
      8 
      9 #include "base/basictypes.h"
     10 
     11 class SyncSetupFlow;
     12 class SyncSetupFlowContainer;
     13 class SyncSetupFlowHandler;
     14 
     15 class ProfileSyncService;
     16 
     17 class SyncSetupWizard {
     18  public:
     19   enum State {
     20     // Show the Google Account login UI.
     21     GAIA_LOGIN = 0,
     22     // A login attempt succeeded.  This will wait for an explicit transition
     23     // (via Step) to the next state.
     24     GAIA_SUCCESS,
     25     // Show the screen that confirms everything will be synced.
     26     SYNC_EVERYTHING,
     27     // Show the screen that lets you configure sync.
     28     // There are two tabs:
     29     //  Data Types --
     30     //   Choose either "Keep everything synced" or
     31     //   "Choose which data types to sync", and checkboxes for each data type.
     32     //  Encryption --
     33     //   Choose what to encrypt and whether to use a passphrase.
     34     CONFIGURE,
     35     // Show the screen that prompts for your passphrase
     36     ENTER_PASSPHRASE,
     37     // Show the passphrase "first time" screen for migrating users, where all
     38     // is explained and they choose between google password/custom passphrase.
     39     PASSPHRASE_MIGRATION,
     40     // The panic switch.  Something went terribly wrong during setup and we
     41     // can't recover.
     42     FATAL_ERROR,
     43     // The client can't set up sync at the moment due to a concurrent operation
     44     // to clear cloud data being in progress on the server.
     45     SETUP_ABORTED_BY_PENDING_CLEAR,
     46     // Loading screen with spinny throbber.
     47     SETTING_UP,
     48     // A final state for when setup completes and it is possible it is the
     49     // user's first time (globally speaking) as the cloud doesn't have any
     50     // bookmarks.  We show additional info in this case to explain setting up
     51     // more computers.
     52     DONE_FIRST_TIME,
     53     // A catch-all done case for any setup process.
     54     DONE
     55   };
     56 
     57   explicit SyncSetupWizard(ProfileSyncService* service);
     58   ~SyncSetupWizard();
     59 
     60   // Advances the wizard to the specified state if possible, or opens a
     61   // new dialog starting at |advance_state|.  If the wizard has never ran
     62   // through to completion, it will always attempt to do so.  Otherwise, e.g
     63   // for a transient auth failure, it will just run as far as is necessary
     64   // based on |advance_state| (so for auth failure, up to GAIA_SUCCESS).
     65   void Step(State advance_state);
     66 
     67   // Whether or not a dialog is currently showing.  Useful to determine
     68   // if various buttons in the UI should be enabled or disabled.
     69   bool IsVisible() const;
     70 
     71   // Focus the dialog if it is already open.  Does nothing if the dialog is
     72   // not visible.
     73   void Focus();
     74 
     75   SyncSetupFlow* AttachSyncSetupHandler(SyncSetupFlowHandler* handler);
     76 
     77  private:
     78   // If we just need to pop open an individual dialog, say to collect
     79   // gaia credentials in the event of a steady-state auth failure, this is
     80   // a "discrete" run (as in not a continuous wizard flow).  This returns
     81   // the end state to pass to Run for a given |start_state|.
     82   static State GetEndStateForDiscreteRun(State start_state);
     83 
     84   // Helper to return whether |state| warrants starting a new flow.
     85   static bool IsTerminalState(State state);
     86 
     87   ProfileSyncService* service_;
     88 
     89   SyncSetupFlowContainer* flow_container_;
     90 
     91   SyncSetupFlowHandler* flow_handler_;
     92 
     93   DISALLOW_COPY_AND_ASSIGN(SyncSetupWizard);
     94 };
     95 
     96 #endif  // CHROME_BROWSER_SYNC_SYNC_SETUP_WIZARD_H_
     97