• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2012 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_GLUE_DATA_TYPE_MANAGER_H__
6 #define CHROME_BROWSER_SYNC_GLUE_DATA_TYPE_MANAGER_H__
7 
8 #include <list>
9 #include <set>
10 #include <string>
11 
12 #include "chrome/browser/sync/glue/data_type_controller.h"
13 #include "sync/api/sync_error.h"
14 #include "sync/internal_api/public/base/model_type.h"
15 #include "sync/internal_api/public/configure_reason.h"
16 
17 namespace browser_sync {
18 
19 // This interface is for managing the start up and shut down life cycle
20 // of many different syncable data types.
21 class DataTypeManager {
22  public:
23   enum State {
24     STOPPED,           // No data types are currently running.
25     DOWNLOAD_PENDING,  // Not implemented yet: Waiting for the syncer to
26                        // complete the initial download of new data
27                        // types.
28 
29     CONFIGURING,       // Data types are being started.
30     RETRYING,          // Retrying a pending reconfiguration.
31 
32     CONFIGURED,        // All enabled data types are running.
33     STOPPING           // Data types are being stopped.
34   };
35 
36   // Update NotifyDone() in data_type_manager_impl.cc if you update
37   // this.
38   enum ConfigureStatus {
39     UNKNOWN = -1,
40     OK,                  // Configuration finished without error.
41     PARTIAL_SUCCESS,     // Some data types had an error while starting up.
42     ABORTED,             // Start was aborted by calling Stop() before
43                          // all types were started.
44     UNRECOVERABLE_ERROR  // We got an unrecoverable error during startup.
45   };
46 
47   // Note: |errors| is only filled when status is not OK.
48   struct ConfigureResult {
49     ConfigureResult();
50     ConfigureResult(ConfigureStatus status,
51                     syncer::ModelTypeSet requested_types);
52     ConfigureResult(ConfigureStatus status,
53                     syncer::ModelTypeSet requested_types,
54                     std::map<syncer::ModelType, syncer::SyncError>
55                         failed_data_types,
56                     syncer::ModelTypeSet unfinished_data_types,
57                     syncer::ModelTypeSet needs_crypto);
58     ~ConfigureResult();
59     ConfigureStatus status;
60     syncer::ModelTypeSet requested_types;
61 
62     // These types encountered a failure in association.
63     std::map<syncer::ModelType, syncer::SyncError> failed_data_types;
64 
65     // List of types that failed to finish loading/associating within our
66     // alloted time period(see |kAssociationTimeOutInSeconds|). We move
67     // forward here and allow these types to continue to load/associate in
68     // the background.
69     syncer::ModelTypeSet unfinished_data_types;
70 
71     // Those types that are unable to start due to the cryptographer not being
72     // ready.
73     syncer::ModelTypeSet needs_crypto;
74   };
75 
~DataTypeManager()76   virtual ~DataTypeManager() {}
77 
78   // Convert a ConfigureStatus to string for debug purposes.
79   static std::string ConfigureStatusToString(ConfigureStatus status);
80 
81   // Begins asynchronous configuration of data types.  Any currently
82   // running data types that are not in the desired_types set will be
83   // stopped.  Any stopped data types that are in the desired_types
84   // set will be started.  All other data types are left in their
85   // current state.  A SYNC_CONFIGURE_START notification will be sent
86   // to the UI thread when configuration is started and a
87   // SYNC_CONFIGURE_DONE notification will be sent (with a
88   // ConfigureResult detail) when configuration is complete.
89   //
90   // Note that you may call Configure() while configuration is in
91   // progress.  Configuration will be complete only when the
92   // desired_types supplied in the last call to Configure is achieved.
93   virtual void Configure(syncer::ModelTypeSet desired_types,
94                          syncer::ConfigureReason reason) = 0;
95 
96   virtual void PurgeForMigration(syncer::ModelTypeSet undesired_types,
97                                  syncer::ConfigureReason reason) = 0;
98 
99   // Synchronously stops all registered data types.  If called after
100   // Configure() is called but before it finishes, it will abort the
101   // configure and any data types that have been started will be
102   // stopped.
103   virtual void Stop() = 0;
104 
105   // The current state of the data type manager.
106   virtual State state() const = 0;
107 };
108 
109 }  // namespace browser_sync
110 
111 #endif  // CHROME_BROWSER_SYNC_GLUE_DATA_TYPE_MANAGER_H__
112