Disable view source for Developer Tools.
[chromium-blink-merge.git] / chrome / browser / sync / glue / sync_backend_host.h
blobbd14103d748d044734913777bf4a4553456fb1bd
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.
5 #ifndef CHROME_BROWSER_SYNC_GLUE_SYNC_BACKEND_HOST_H_
6 #define CHROME_BROWSER_SYNC_GLUE_SYNC_BACKEND_HOST_H_
8 #include <string>
10 #include "base/basictypes.h"
11 #include "base/callback.h"
12 #include "base/compiler_specific.h"
13 #include "base/memory/scoped_ptr.h"
14 #include "base/threading/thread.h"
15 #include "chrome/browser/sync/glue/backend_data_type_configurer.h"
16 #include "sync/internal_api/public/base/model_type.h"
17 #include "sync/internal_api/public/configure_reason.h"
18 #include "sync/internal_api/public/sessions/sync_session_snapshot.h"
19 #include "sync/internal_api/public/sync_manager.h"
20 #include "sync/internal_api/public/sync_manager_factory.h"
21 #include "sync/internal_api/public/util/report_unrecoverable_error_function.h"
22 #include "sync/internal_api/public/util/unrecoverable_error_handler.h"
23 #include "sync/internal_api/public/util/weak_handle.h"
25 class GURL;
27 namespace base {
28 class MessageLoop;
31 namespace syncer {
32 class NetworkResources;
33 class SyncManagerFactory;
36 namespace browser_sync {
38 class ChangeProcessor;
39 class SyncFrontend;
40 class SyncedDeviceTracker;
42 // An API to "host" the top level SyncAPI element.
44 // This class handles dispatch of potentially blocking calls to appropriate
45 // threads and ensures that the SyncFrontend is only accessed on the UI loop.
46 class SyncBackendHost : public BackendDataTypeConfigurer {
47 public:
48 typedef syncer::SyncStatus Status;
50 // Stubs used by implementing classes.
51 SyncBackendHost();
52 virtual ~SyncBackendHost();
54 // Called on the frontend's thread to kick off asynchronous initialization.
55 // Optionally deletes the "Sync Data" folder during init in order to make
56 // sure we're starting fresh.
58 // |report_unrecoverable_error_function| can be NULL. Note:
59 // |unrecoverable_error_handler| may be invoked from any thread.
60 virtual void Initialize(
61 SyncFrontend* frontend,
62 scoped_ptr<base::Thread> sync_thread,
63 const syncer::WeakHandle<syncer::JsEventHandler>& event_handler,
64 const GURL& service_url,
65 const syncer::SyncCredentials& credentials,
66 bool delete_sync_data_folder,
67 scoped_ptr<syncer::SyncManagerFactory> sync_manager_factory,
68 scoped_ptr<syncer::UnrecoverableErrorHandler> unrecoverable_error_handler,
69 syncer::ReportUnrecoverableErrorFunction
70 report_unrecoverable_error_function,
71 syncer::NetworkResources* network_resources) = 0;
73 // Called on the frontend's thread to update SyncCredentials.
74 virtual void UpdateCredentials(
75 const syncer::SyncCredentials& credentials) = 0;
77 // This starts the SyncerThread running a Syncer object to communicate with
78 // sync servers. Until this is called, no changes will leave or enter this
79 // browser from the cloud / sync servers.
80 // Called on |frontend_loop_|.
81 virtual void StartSyncingWithServer() = 0;
83 // Called on |frontend_loop_| to asynchronously set a new passphrase for
84 // encryption. Note that it is an error to call SetEncryptionPassphrase under
85 // the following circumstances:
86 // - An explicit passphrase has already been set
87 // - |is_explicit| is true and we have pending keys.
88 // When |is_explicit| is false, a couple of things could happen:
89 // - If there are pending keys, we try to decrypt them. If decryption works,
90 // this acts like a call to SetDecryptionPassphrase. If not, the GAIA
91 // passphrase passed in is cached so we can re-encrypt with it in future.
92 // - If there are no pending keys, data is encrypted with |passphrase| (this
93 // is a no-op if data was already encrypted with |passphrase|.)
94 virtual void SetEncryptionPassphrase(
95 const std::string& passphrase,
96 bool is_explicit) = 0;
98 // Called on |frontend_loop_| to use the provided passphrase to asynchronously
99 // attempt decryption. Returns false immediately if the passphrase could not
100 // be used to decrypt a locally cached copy of encrypted keys; returns true
101 // otherwise. If new encrypted keys arrive during the asynchronous call,
102 // OnPassphraseRequired may be triggered at a later time. It is an error to
103 // call this when there are no pending keys.
104 virtual bool SetDecryptionPassphrase(const std::string& passphrase)
105 WARN_UNUSED_RESULT = 0;
107 // Called on |frontend_loop_| to kick off shutdown procedure. Attempts to cut
108 // short any long-lived or blocking sync thread tasks so that the shutdown on
109 // sync thread task that we're about to post won't have to wait very long.
110 virtual void StopSyncingForShutdown() = 0;
112 // Called on |frontend_loop_| to kick off shutdown.
113 // See the implementation and Core::DoShutdown for details.
114 // Must be called *after* StopSyncingForShutdown. Caller should claim sync
115 // thread using STOP_AND_CLAIM_THREAD or DISABLE_AND_CLAIM_THREAD if sync
116 // backend might be recreated later because otherwise:
117 // * sync loop may be stopped on main loop and cause it to be blocked.
118 // * new/old backend may interfere with each other if new backend is created
119 // before old one finishes cleanup.
120 enum ShutdownOption {
121 STOP, // Stop syncing and let backend stop sync thread.
122 STOP_AND_CLAIM_THREAD, // Stop syncing and return sync thread.
123 DISABLE_AND_CLAIM_THREAD, // Disable sync and return sync thread.
125 virtual scoped_ptr<base::Thread> Shutdown(ShutdownOption option) = 0;
127 // Removes all current registrations from the backend on the
128 // InvalidationService.
129 virtual void UnregisterInvalidationIds() = 0;
131 // Changes the set of data types that are currently being synced.
132 // The ready_task will be run when configuration is done with the
133 // set of all types that failed configuration (i.e., if its argument
134 // is non-empty, then an error was encountered).
135 virtual void ConfigureDataTypes(
136 syncer::ConfigureReason reason,
137 const DataTypeConfigStateMap& config_state_map,
138 const base::Callback<void(syncer::ModelTypeSet,
139 syncer::ModelTypeSet)>& ready_task,
140 const base::Callback<void()>& retry_callback) OVERRIDE = 0;
142 // Turns on encryption of all present and future sync data.
143 virtual void EnableEncryptEverything() = 0;
145 // Activates change processing for the given data type. This must
146 // be called synchronously with the data type's model association so
147 // no changes are dropped between model association and change
148 // processor activation.
149 virtual void ActivateDataType(
150 syncer::ModelType type, syncer::ModelSafeGroup group,
151 ChangeProcessor* change_processor) = 0;
153 // Deactivates change processing for the given data type.
154 virtual void DeactivateDataType(syncer::ModelType type) = 0;
156 // Called on |frontend_loop_| to obtain a handle to the UserShare needed for
157 // creating transactions. Should not be called before we signal
158 // initialization is complete with OnBackendInitialized().
159 virtual syncer::UserShare* GetUserShare() const = 0;
161 // Called from any thread to obtain current status information in detailed or
162 // summarized form.
163 virtual Status GetDetailedStatus() = 0;
164 virtual syncer::sessions::SyncSessionSnapshot
165 GetLastSessionSnapshot() const = 0;
167 // Determines if the underlying sync engine has made any local changes to
168 // items that have not yet been synced with the server.
169 // ONLY CALL THIS IF OnInitializationComplete was called!
170 virtual bool HasUnsyncedItems() const = 0;
172 // Whether or not we are syncing encryption keys.
173 virtual bool IsNigoriEnabled() const = 0;
175 // Returns the type of passphrase being used to encrypt data. See
176 // sync_encryption_handler.h.
177 virtual syncer::PassphraseType GetPassphraseType() const = 0;
179 // If an explicit passphrase is in use, returns the time at which that
180 // passphrase was set (if available).
181 virtual base::Time GetExplicitPassphraseTime() const = 0;
183 // True if the cryptographer has any keys available to attempt decryption.
184 // Could mean we've downloaded and loaded Nigori objects, or we bootstrapped
185 // using a token previously received.
186 virtual bool IsCryptographerReady(
187 const syncer::BaseTransaction* trans) const = 0;
189 virtual void GetModelSafeRoutingInfo(
190 syncer::ModelSafeRoutingInfo* out) const = 0;
192 // Fetches the DeviceInfo tracker.
193 virtual SyncedDeviceTracker* GetSyncedDeviceTracker() const = 0;
195 virtual base::MessageLoop* GetSyncLoopForTesting() = 0;
197 DISALLOW_COPY_AND_ASSIGN(SyncBackendHost);
200 } // namespace browser_sync
202 #endif // CHROME_BROWSER_SYNC_GLUE_SYNC_BACKEND_HOST_H_