OLD | NEW |
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef CHROME_BROWSER_SYNC_PROFILE_SYNC_SERVICE_H_ | 5 #ifndef CHROME_BROWSER_SYNC_PROFILE_SYNC_SERVICE_H_ |
6 #define CHROME_BROWSER_SYNC_PROFILE_SYNC_SERVICE_H_ | 6 #define CHROME_BROWSER_SYNC_PROFILE_SYNC_SERVICE_H_ |
7 | 7 |
8 #include <string> | 8 #include <string> |
9 #include <map> | 9 #include <map> |
10 | 10 |
11 #include "base/basictypes.h" | 11 #include "base/basictypes.h" |
12 #include "base/observer_list.h" | 12 #include "base/observer_list.h" |
13 #include "base/scoped_ptr.h" | 13 #include "base/scoped_ptr.h" |
14 #include "base/time.h" | 14 #include "base/time.h" |
15 #include "chrome/browser/google_service_auth_error.h" | 15 #include "chrome/browser/google_service_auth_error.h" |
16 #include "chrome/browser/profile.h" | 16 #include "chrome/browser/profile.h" |
17 #include "chrome/browser/sync/glue/data_type_controller.h" | 17 #include "chrome/browser/sync/glue/data_type_controller.h" |
18 #include "chrome/browser/sync/glue/data_type_manager.h" | 18 #include "chrome/browser/sync/glue/data_type_manager.h" |
19 #include "chrome/browser/sync/glue/sync_backend_host.h" | 19 #include "chrome/browser/sync/glue/sync_backend_host.h" |
20 #include "chrome/browser/sync/notification_method.h" | 20 #include "chrome/browser/sync/notification_method.h" |
21 #include "chrome/browser/sync/sync_setup_wizard.h" | 21 #include "chrome/browser/sync/sync_setup_wizard.h" |
22 #include "chrome/browser/sync/syncable/model_type.h" | 22 #include "chrome/browser/sync/syncable/model_type.h" |
23 #include "chrome/browser/sync/unrecoverable_error_handler.h" | 23 #include "chrome/browser/sync/unrecoverable_error_handler.h" |
| 24 #include "chrome/common/notification_observer.h" |
| 25 #include "chrome/common/notification_registrar.h" |
24 #include "googleurl/src/gurl.h" | 26 #include "googleurl/src/gurl.h" |
25 #include "testing/gtest/include/gtest/gtest_prod.h" | 27 #include "testing/gtest/include/gtest/gtest_prod.h" |
26 | 28 |
| 29 class NotificationDetails; |
| 30 class NotificationSource; |
| 31 class NotificationType; |
| 32 |
27 // Various UI components such as the New Tab page can be driven by observing | 33 // Various UI components such as the New Tab page can be driven by observing |
28 // the ProfileSyncService through this interface. | 34 // the ProfileSyncService through this interface. |
29 class ProfileSyncServiceObserver { | 35 class ProfileSyncServiceObserver { |
30 public: | 36 public: |
31 // When one of the following events occurs, OnStateChanged() is called. | 37 // When one of the following events occurs, OnStateChanged() is called. |
32 // Observers should query the service to determine what happened. | 38 // Observers should query the service to determine what happened. |
33 // - We initialized successfully. | 39 // - We initialized successfully. |
34 // - There was an authentication error and the user needs to reauthenticate. | 40 // - There was an authentication error and the user needs to reauthenticate. |
35 // - The sync servers are unavailable at this time. | 41 // - The sync servers are unavailable at this time. |
36 // - Credentials are now in flight for authentication. | 42 // - Credentials are now in flight for authentication. |
37 virtual void OnStateChanged() = 0; | 43 virtual void OnStateChanged() = 0; |
38 protected: | 44 protected: |
39 virtual ~ProfileSyncServiceObserver() { } | 45 virtual ~ProfileSyncServiceObserver() { } |
40 }; | 46 }; |
41 | 47 |
42 // ProfileSyncService is the layer between browser subsystems like bookmarks, | 48 // ProfileSyncService is the layer between browser subsystems like bookmarks, |
43 // and the sync backend. | 49 // and the sync backend. |
44 class ProfileSyncService : public browser_sync::SyncFrontend, | 50 class ProfileSyncService : public browser_sync::SyncFrontend, |
45 public browser_sync::UnrecoverableErrorHandler { | 51 public browser_sync::UnrecoverableErrorHandler, |
| 52 public NotificationObserver { |
46 public: | 53 public: |
47 typedef ProfileSyncServiceObserver Observer; | 54 typedef ProfileSyncServiceObserver Observer; |
48 typedef browser_sync::SyncBackendHost::Status Status; | 55 typedef browser_sync::SyncBackendHost::Status Status; |
49 | 56 |
50 enum SyncEventCodes { | 57 enum SyncEventCodes { |
51 MIN_SYNC_EVENT_CODE = 0, | 58 MIN_SYNC_EVENT_CODE = 0, |
52 | 59 |
53 // Events starting the sync service. | 60 // Events starting the sync service. |
54 START_FROM_NTP = 1, // Sync was started from the ad in NTP | 61 START_FROM_NTP = 1, // Sync was started from the ad in NTP |
55 START_FROM_WRENCH = 2, // Sync was started from the Wrench menu. | 62 START_FROM_WRENCH = 2, // Sync was started from the Wrench menu. |
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
195 | 202 |
196 browser_sync::SyncBackendHost* backend() { return backend_.get(); } | 203 browser_sync::SyncBackendHost* backend() { return backend_.get(); } |
197 | 204 |
198 virtual void ActivateDataType( | 205 virtual void ActivateDataType( |
199 browser_sync::DataTypeController* data_type_controller, | 206 browser_sync::DataTypeController* data_type_controller, |
200 browser_sync::ChangeProcessor* change_processor); | 207 browser_sync::ChangeProcessor* change_processor); |
201 virtual void DeactivateDataType( | 208 virtual void DeactivateDataType( |
202 browser_sync::DataTypeController* data_type_controller, | 209 browser_sync::DataTypeController* data_type_controller, |
203 browser_sync::ChangeProcessor* change_processor); | 210 browser_sync::ChangeProcessor* change_processor); |
204 | 211 |
| 212 // NotificationObserver implementation. |
| 213 virtual void Observe(NotificationType type, |
| 214 const NotificationSource& source, |
| 215 const NotificationDetails& details); |
| 216 |
205 protected: | 217 protected: |
206 // Call this after any of the subsystems being synced (the bookmark | 218 // Call this after any of the subsystems being synced (the bookmark |
207 // model and the sync backend) finishes its initialization. When everything | 219 // model and the sync backend) finishes its initialization. When everything |
208 // is ready, this function will bootstrap the subsystems so that they are | 220 // is ready, this function will bootstrap the subsystems so that they are |
209 // initially in sync, and start forwarding changes between the two models. | 221 // initially in sync, and start forwarding changes between the two models. |
210 void StartProcessingChangesIfReady(); | 222 void StartProcessingChangesIfReady(); |
211 | 223 |
212 // Returns whether processing changes is allowed. Check this before doing | 224 // Returns whether processing changes is allowed. Check this before doing |
213 // any model-modifying operations. | 225 // any model-modifying operations. |
214 bool ShouldPushChanges(); | 226 bool ShouldPushChanges(); |
215 | 227 |
216 // Starts up the backend sync components. | 228 // Starts up the backend sync components. |
217 void StartUp(); | 229 void StartUp(); |
218 // Shuts down the backend sync components. | 230 // Shuts down the backend sync components. |
219 // |sync_disabled| indicates if syncing is being disabled or not. | 231 // |sync_disabled| indicates if syncing is being disabled or not. |
220 void Shutdown(bool sync_disabled); | 232 void Shutdown(bool sync_disabled); |
221 | 233 |
222 // Methods to register and remove preferences. | 234 // Methods to register and remove preferences. |
223 void RegisterPreferences(); | 235 void RegisterPreferences(); |
224 void ClearPreferences(); | 236 void ClearPreferences(); |
225 | 237 |
226 void DataTypeManagerStartCallback( | |
227 browser_sync::DataTypeManager::StartResult result); | |
228 | |
229 // Tests need to override this. If |delete_sync_data_folder| is true, then | 238 // Tests need to override this. If |delete_sync_data_folder| is true, then |
230 // this method will delete all previous "Sync Data" folders. (useful if the | 239 // this method will delete all previous "Sync Data" folders. (useful if the |
231 // folder is partial/corrupt) | 240 // folder is partial/corrupt) |
232 virtual void InitializeBackend(bool delete_sync_data_folder); | 241 virtual void InitializeBackend(bool delete_sync_data_folder); |
233 | 242 |
234 // We keep track of the last auth error observed so we can cover up the first | 243 // We keep track of the last auth error observed so we can cover up the first |
235 // "expected" auth failure from observers. | 244 // "expected" auth failure from observers. |
236 // TODO(timsteele): Same as expecting_first_run_auth_needed_event_. Remove | 245 // TODO(timsteele): Same as expecting_first_run_auth_needed_event_. Remove |
237 // this! | 246 // this! |
238 GoogleServiceAuthError last_auth_error_; | 247 GoogleServiceAuthError last_auth_error_; |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
309 // As its name suggests, this should NOT be used for anything other than UI. | 318 // As its name suggests, this should NOT be used for anything other than UI. |
310 bool is_auth_in_progress_; | 319 bool is_auth_in_progress_; |
311 | 320 |
312 SyncSetupWizard wizard_; | 321 SyncSetupWizard wizard_; |
313 | 322 |
314 // True if an unrecoverable error (e.g. violation of an assumed invariant) | 323 // True if an unrecoverable error (e.g. violation of an assumed invariant) |
315 // occurred during syncer operation. This value should be checked before | 324 // occurred during syncer operation. This value should be checked before |
316 // doing any work that might corrupt things further. | 325 // doing any work that might corrupt things further. |
317 bool unrecoverable_error_detected_; | 326 bool unrecoverable_error_detected_; |
318 | 327 |
319 // True if at least one of the data types started up was started for | |
320 // the first time. TODO(sync): Remove this when we have full | |
321 // support for starting multiple data types. | |
322 bool startup_had_first_time_; | |
323 | |
324 // Which peer-to-peer notification method to use. | 328 // Which peer-to-peer notification method to use. |
325 browser_sync::NotificationMethod notification_method_; | 329 browser_sync::NotificationMethod notification_method_; |
326 | 330 |
327 // Manages the start and stop of the various data types. | 331 // Manages the start and stop of the various data types. |
328 scoped_ptr<browser_sync::DataTypeManager> data_type_manager_; | 332 scoped_ptr<browser_sync::DataTypeManager> data_type_manager_; |
329 | 333 |
330 ObserverList<Observer> observers_; | 334 ObserverList<Observer> observers_; |
331 | 335 |
| 336 NotificationRegistrar registrar_; |
| 337 |
332 DISALLOW_COPY_AND_ASSIGN(ProfileSyncService); | 338 DISALLOW_COPY_AND_ASSIGN(ProfileSyncService); |
333 }; | 339 }; |
334 | 340 |
335 #endif // CHROME_BROWSER_SYNC_PROFILE_SYNC_SERVICE_H_ | 341 #endif // CHROME_BROWSER_SYNC_PROFILE_SYNC_SERVICE_H_ |
OLD | NEW |