Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 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 <utility> | 9 #include <utility> |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 55 class ProfileSyncComponentsFactory; | 55 class ProfileSyncComponentsFactory; |
| 56 class SupervisedUserSigninManagerWrapper; | 56 class SupervisedUserSigninManagerWrapper; |
| 57 class SyncErrorController; | 57 class SyncErrorController; |
| 58 | 58 |
| 59 namespace base { | 59 namespace base { |
| 60 class CommandLine; | 60 class CommandLine; |
| 61 }; | 61 }; |
| 62 | 62 |
| 63 namespace browser_sync { | 63 namespace browser_sync { |
| 64 class BackendMigrator; | 64 class BackendMigrator; |
| 65 class ChangeProcessor; | |
| 66 class DataTypeManager; | |
| 67 class DeviceInfo; | 65 class DeviceInfo; |
| 68 class FaviconCache; | 66 class FaviconCache; |
| 69 class JsController; | 67 class JsController; |
| 70 class OpenTabsUIDelegate; | 68 class OpenTabsUIDelegate; |
| 71 | 69 |
| 72 namespace sessions { | 70 namespace sessions { |
| 73 class SyncSessionSnapshot; | 71 class SyncSessionSnapshot; |
| 74 } // namespace sessions | 72 } // namespace sessions |
| 75 } // namespace browser_sync | 73 } // namespace browser_sync |
| 76 | 74 |
| 75 namespace sync_driver { | |
| 76 class ChangeProcessor; | |
| 77 class DataTypeManager; | |
| 78 } | |
|
maxbogue
2014/07/21 22:14:21
// namespace sync_driver
Nicolas Zea
2014/07/21 22:23:31
Done.
| |
| 79 | |
| 77 namespace syncer { | 80 namespace syncer { |
| 78 class BaseTransaction; | 81 class BaseTransaction; |
| 79 class NetworkResources; | 82 class NetworkResources; |
| 80 struct CommitCounters; | 83 struct CommitCounters; |
| 81 struct StatusCounters; | 84 struct StatusCounters; |
| 82 struct SyncCredentials; | 85 struct SyncCredentials; |
| 83 struct UpdateCounters; | 86 struct UpdateCounters; |
| 84 struct UserShare; | 87 struct UserShare; |
| 85 } // namespace syncer | 88 } // namespace syncer |
| 86 | 89 |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 167 // SetSetupInProgress(false) should be called when configuration is complete. | 170 // SetSetupInProgress(false) should be called when configuration is complete. |
| 168 // When SetSyncSetupCompleted() == false, but SetSetupInProgress(true) has | 171 // When SetSyncSetupCompleted() == false, but SetSetupInProgress(true) has |
| 169 // been called, then the sync engine knows not to download any user data. | 172 // been called, then the sync engine knows not to download any user data. |
| 170 // | 173 // |
| 171 // When initial sync is complete, the UI code should call | 174 // When initial sync is complete, the UI code should call |
| 172 // SetSyncSetupCompleted() followed by SetSetupInProgress(false) - this will | 175 // SetSyncSetupCompleted() followed by SetSetupInProgress(false) - this will |
| 173 // tell the sync engine that setup is completed and it can begin downloading | 176 // tell the sync engine that setup is completed and it can begin downloading |
| 174 // data from the sync server. | 177 // data from the sync server. |
| 175 // | 178 // |
| 176 class ProfileSyncService : public ProfileSyncServiceBase, | 179 class ProfileSyncService : public ProfileSyncServiceBase, |
| 177 public browser_sync::SyncFrontend, | 180 public sync_driver::SyncFrontend, |
| 178 public sync_driver::SyncPrefObserver, | 181 public sync_driver::SyncPrefObserver, |
| 179 public browser_sync::DataTypeManagerObserver, | 182 public sync_driver::DataTypeManagerObserver, |
| 180 public syncer::UnrecoverableErrorHandler, | 183 public syncer::UnrecoverableErrorHandler, |
| 181 public KeyedService, | 184 public KeyedService, |
| 182 public browser_sync::DataTypeEncryptionHandler, | 185 public sync_driver::DataTypeEncryptionHandler, |
| 183 public OAuth2TokenService::Consumer, | 186 public OAuth2TokenService::Consumer, |
| 184 public OAuth2TokenService::Observer, | 187 public OAuth2TokenService::Observer, |
| 185 public SessionsSyncManager::SyncInternalApiDelegate, | 188 public SessionsSyncManager::SyncInternalApiDelegate, |
| 186 public SigninManagerBase::Observer { | 189 public SigninManagerBase::Observer { |
| 187 public: | 190 public: |
| 188 typedef browser_sync::SyncBackendHost::Status Status; | 191 typedef browser_sync::SyncBackendHost::Status Status; |
| 189 | 192 |
| 190 // Status of sync server connection, sync token and token request. | 193 // Status of sync server connection, sync token and token request. |
| 191 struct SyncTokenStatus { | 194 struct SyncTokenStatus { |
| 192 SyncTokenStatus(); | 195 SyncTokenStatus(); |
| (...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 320 | 323 |
| 321 // Return whether OAuth2 refresh token is loaded and available for the backend | 324 // Return whether OAuth2 refresh token is loaded and available for the backend |
| 322 // to start up. Virtual to enable mocking in tests. | 325 // to start up. Virtual to enable mocking in tests. |
| 323 virtual bool IsOAuthRefreshTokenAvailable(); | 326 virtual bool IsOAuthRefreshTokenAvailable(); |
| 324 | 327 |
| 325 // Registers a data type controller with the sync service. This | 328 // Registers a data type controller with the sync service. This |
| 326 // makes the data type controller available for use, it does not | 329 // makes the data type controller available for use, it does not |
| 327 // enable or activate the synchronization of the data type (see | 330 // enable or activate the synchronization of the data type (see |
| 328 // ActivateDataType). Takes ownership of the pointer. | 331 // ActivateDataType). Takes ownership of the pointer. |
| 329 void RegisterDataTypeController( | 332 void RegisterDataTypeController( |
| 330 browser_sync::DataTypeController* data_type_controller); | 333 sync_driver::DataTypeController* data_type_controller); |
| 331 | 334 |
| 332 // Registers a type whose sync storage will not be managed by the | 335 // Registers a type whose sync storage will not be managed by the |
| 333 // ProfileSyncService. It declares that this sync type may be activated at | 336 // ProfileSyncService. It declares that this sync type may be activated at |
| 334 // some point in the future. This function call does not enable or activate | 337 // some point in the future. This function call does not enable or activate |
| 335 // the syncing of this type | 338 // the syncing of this type |
| 336 void RegisterNonBlockingType(syncer::ModelType type); | 339 void RegisterNonBlockingType(syncer::ModelType type); |
| 337 | 340 |
| 338 // Called by a component that supports non-blocking sync when it is ready to | 341 // Called by a component that supports non-blocking sync when it is ready to |
| 339 // initialize its connection to the sync backend. | 342 // initialize its connection to the sync backend. |
| 340 // | 343 // |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 382 virtual void AddObserverForDeviceInfoChange( | 385 virtual void AddObserverForDeviceInfoChange( |
| 383 browser_sync::SyncedDeviceTracker::Observer* observer); | 386 browser_sync::SyncedDeviceTracker::Observer* observer); |
| 384 | 387 |
| 385 // Removes the observer from device info notification. | 388 // Removes the observer from device info notification. |
| 386 virtual void RemoveObserverForDeviceInfoChange( | 389 virtual void RemoveObserverForDeviceInfoChange( |
| 387 browser_sync::SyncedDeviceTracker::Observer* observer); | 390 browser_sync::SyncedDeviceTracker::Observer* observer); |
| 388 | 391 |
| 389 // Fills state_map with a map of current data types that are possible to | 392 // Fills state_map with a map of current data types that are possible to |
| 390 // sync, as well as their states. | 393 // sync, as well as their states. |
| 391 void GetDataTypeControllerStates( | 394 void GetDataTypeControllerStates( |
| 392 browser_sync::DataTypeController::StateMap* state_map) const; | 395 sync_driver::DataTypeController::StateMap* state_map) const; |
| 393 | 396 |
| 394 // Disables sync for user. Use ShowLoginDialog to enable. | 397 // Disables sync for user. Use ShowLoginDialog to enable. |
| 395 virtual void DisableForUser(); | 398 virtual void DisableForUser(); |
| 396 | 399 |
| 397 // Disables sync for the user and prevents it from starting on next restart. | 400 // Disables sync for the user and prevents it from starting on next restart. |
| 398 virtual void StopSyncingPermanently(); | 401 virtual void StopSyncingPermanently(); |
| 399 | 402 |
| 400 // SyncFrontend implementation. | 403 // SyncFrontend implementation. |
| 401 virtual void OnBackendInitialized( | 404 virtual void OnBackendInitialized( |
| 402 const syncer::WeakHandle<syncer::JsBackend>& js_backend, | 405 const syncer::WeakHandle<syncer::JsBackend>& js_backend, |
| (...skipping 24 matching lines...) Expand all Loading... | |
| 427 virtual void OnEncryptionComplete() OVERRIDE; | 430 virtual void OnEncryptionComplete() OVERRIDE; |
| 428 virtual void OnMigrationNeededForTypes( | 431 virtual void OnMigrationNeededForTypes( |
| 429 syncer::ModelTypeSet types) OVERRIDE; | 432 syncer::ModelTypeSet types) OVERRIDE; |
| 430 virtual void OnExperimentsChanged( | 433 virtual void OnExperimentsChanged( |
| 431 const syncer::Experiments& experiments) OVERRIDE; | 434 const syncer::Experiments& experiments) OVERRIDE; |
| 432 virtual void OnActionableError( | 435 virtual void OnActionableError( |
| 433 const syncer::SyncProtocolError& error) OVERRIDE; | 436 const syncer::SyncProtocolError& error) OVERRIDE; |
| 434 | 437 |
| 435 // DataTypeManagerObserver implementation. | 438 // DataTypeManagerObserver implementation. |
| 436 virtual void OnConfigureDone( | 439 virtual void OnConfigureDone( |
| 437 const browser_sync::DataTypeManager::ConfigureResult& result) OVERRIDE; | 440 const sync_driver::DataTypeManager::ConfigureResult& result) OVERRIDE; |
| 438 virtual void OnConfigureRetry() OVERRIDE; | 441 virtual void OnConfigureRetry() OVERRIDE; |
| 439 virtual void OnConfigureStart() OVERRIDE; | 442 virtual void OnConfigureStart() OVERRIDE; |
| 440 | 443 |
| 441 // DataTypeEncryptionHandler implementation. | 444 // DataTypeEncryptionHandler implementation. |
| 442 virtual bool IsPassphraseRequired() const OVERRIDE; | 445 virtual bool IsPassphraseRequired() const OVERRIDE; |
| 443 virtual syncer::ModelTypeSet GetEncryptedDataTypes() const OVERRIDE; | 446 virtual syncer::ModelTypeSet GetEncryptedDataTypes() const OVERRIDE; |
| 444 | 447 |
| 445 // SigninManagerBase::Observer implementation. | 448 // SigninManagerBase::Observer implementation. |
| 446 virtual void GoogleSigninSucceeded(const std::string& username, | 449 virtual void GoogleSigninSucceeded(const std::string& username, |
| 447 const std::string& password) OVERRIDE; | 450 const std::string& password) OVERRIDE; |
| (...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 708 | 711 |
| 709 // Marks all currently registered types as "acknowledged" so we won't prompt | 712 // Marks all currently registered types as "acknowledged" so we won't prompt |
| 710 // the user about them any more. | 713 // the user about them any more. |
| 711 void AcknowledgeSyncedTypes(); | 714 void AcknowledgeSyncedTypes(); |
| 712 | 715 |
| 713 SyncErrorController* sync_error_controller() { | 716 SyncErrorController* sync_error_controller() { |
| 714 return sync_error_controller_.get(); | 717 return sync_error_controller_.get(); |
| 715 } | 718 } |
| 716 | 719 |
| 717 // TODO(sync): This is only used in tests. Can we remove it? | 720 // TODO(sync): This is only used in tests. Can we remove it? |
| 718 const browser_sync::FailedDataTypesHandler& failed_data_types_handler() const; | 721 const sync_driver::FailedDataTypesHandler& failed_data_types_handler() const; |
| 719 | 722 |
| 720 browser_sync::DataTypeManager::ConfigureStatus configure_status() { | 723 sync_driver::DataTypeManager::ConfigureStatus configure_status() { |
| 721 return configure_status_; | 724 return configure_status_; |
| 722 } | 725 } |
| 723 | 726 |
| 724 // If true, the ProfileSyncService has detected that a new GAIA signin has | 727 // If true, the ProfileSyncService has detected that a new GAIA signin has |
| 725 // succeeded, and is waiting for initialization to complete. This is used by | 728 // succeeded, and is waiting for initialization to complete. This is used by |
| 726 // the UI to differentiate between a new auth error (encountered as part of | 729 // the UI to differentiate between a new auth error (encountered as part of |
| 727 // the initialization process) and a pre-existing auth error that just hasn't | 730 // the initialization process) and a pre-existing auth error that just hasn't |
| 728 // been cleared yet. Virtual for testing purposes. | 731 // been cleared yet. Virtual for testing purposes. |
| 729 virtual bool waiting_for_auth() const; | 732 virtual bool waiting_for_auth() const; |
| 730 | 733 |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 793 // Shuts down the backend sync components. | 796 // Shuts down the backend sync components. |
| 794 // |option| indicates if syncing is being disabled or not, and whether | 797 // |option| indicates if syncing is being disabled or not, and whether |
| 795 // to claim ownership of sync thread from backend. | 798 // to claim ownership of sync thread from backend. |
| 796 void ShutdownImpl(browser_sync::SyncBackendHost::ShutdownOption option); | 799 void ShutdownImpl(browser_sync::SyncBackendHost::ShutdownOption option); |
| 797 | 800 |
| 798 // Return SyncCredentials from the OAuth2TokenService. | 801 // Return SyncCredentials from the OAuth2TokenService. |
| 799 syncer::SyncCredentials GetCredentials(); | 802 syncer::SyncCredentials GetCredentials(); |
| 800 | 803 |
| 801 virtual syncer::WeakHandle<syncer::JsEventHandler> GetJsEventHandler(); | 804 virtual syncer::WeakHandle<syncer::JsEventHandler> GetJsEventHandler(); |
| 802 | 805 |
| 803 const browser_sync::DataTypeController::TypeMap& | 806 const sync_driver::DataTypeController::TypeMap& |
| 804 directory_data_type_controllers() { | 807 directory_data_type_controllers() { |
| 805 return directory_data_type_controllers_; | 808 return directory_data_type_controllers_; |
| 806 } | 809 } |
| 807 | 810 |
| 808 // Helper method for managing encryption UI. | 811 // Helper method for managing encryption UI. |
| 809 bool IsEncryptedDatatypeEnabled() const; | 812 bool IsEncryptedDatatypeEnabled() const; |
| 810 | 813 |
| 811 // Helper for OnUnrecoverableError. | 814 // Helper for OnUnrecoverableError. |
| 812 // TODO(tim): Use an enum for |delete_sync_database| here, in ShutdownImpl, | 815 // TODO(tim): Use an enum for |delete_sync_database| here, in ShutdownImpl, |
| 813 // and in SyncBackendHost::Shutdown. | 816 // and in SyncBackendHost::Shutdown. |
| (...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 985 // The time that OnConfigureStart is called. This member is zero if | 988 // The time that OnConfigureStart is called. This member is zero if |
| 986 // OnConfigureStart has not yet been called, and is reset to zero once | 989 // OnConfigureStart has not yet been called, and is reset to zero once |
| 987 // OnConfigureDone is called. | 990 // OnConfigureDone is called. |
| 988 base::Time sync_configure_start_time_; | 991 base::Time sync_configure_start_time_; |
| 989 | 992 |
| 990 // Indicates if this is the first time sync is being configured. This value | 993 // Indicates if this is the first time sync is being configured. This value |
| 991 // is equal to !HasSyncSetupCompleted() at the time of OnBackendInitialized(). | 994 // is equal to !HasSyncSetupCompleted() at the time of OnBackendInitialized(). |
| 992 bool is_first_time_sync_configure_; | 995 bool is_first_time_sync_configure_; |
| 993 | 996 |
| 994 // List of available data type controllers for directory types. | 997 // List of available data type controllers for directory types. |
| 995 browser_sync::DataTypeController::TypeMap directory_data_type_controllers_; | 998 sync_driver::DataTypeController::TypeMap directory_data_type_controllers_; |
| 996 | 999 |
| 997 // Whether the SyncBackendHost has been initialized. | 1000 // Whether the SyncBackendHost has been initialized. |
| 998 bool backend_initialized_; | 1001 bool backend_initialized_; |
| 999 | 1002 |
| 1000 // Set when sync receives DISABLED_BY_ADMIN error from server. Prevents | 1003 // Set when sync receives DISABLED_BY_ADMIN error from server. Prevents |
| 1001 // ProfileSyncService from starting backend till browser restarted or user | 1004 // ProfileSyncService from starting backend till browser restarted or user |
| 1002 // signed out. | 1005 // signed out. |
| 1003 bool sync_disabled_by_admin_; | 1006 bool sync_disabled_by_admin_; |
| 1004 | 1007 |
| 1005 // Set to true if a signin has completed but we're still waiting for the | 1008 // Set to true if a signin has completed but we're still waiting for the |
| 1006 // backend to refresh its credentials. | 1009 // backend to refresh its credentials. |
| 1007 bool is_auth_in_progress_; | 1010 bool is_auth_in_progress_; |
| 1008 | 1011 |
| 1009 // Encapsulates user signin - used to set/get the user's authenticated | 1012 // Encapsulates user signin - used to set/get the user's authenticated |
| 1010 // email address. | 1013 // email address. |
| 1011 const scoped_ptr<SupervisedUserSigninManagerWrapper> signin_; | 1014 const scoped_ptr<SupervisedUserSigninManagerWrapper> signin_; |
| 1012 | 1015 |
| 1013 // Information describing an unrecoverable error. | 1016 // Information describing an unrecoverable error. |
| 1014 UnrecoverableErrorReason unrecoverable_error_reason_; | 1017 UnrecoverableErrorReason unrecoverable_error_reason_; |
| 1015 std::string unrecoverable_error_message_; | 1018 std::string unrecoverable_error_message_; |
| 1016 tracked_objects::Location unrecoverable_error_location_; | 1019 tracked_objects::Location unrecoverable_error_location_; |
| 1017 | 1020 |
| 1018 // Manages the start and stop of the directory data types. | 1021 // Manages the start and stop of the directory data types. |
| 1019 scoped_ptr<browser_sync::DataTypeManager> directory_data_type_manager_; | 1022 scoped_ptr<sync_driver::DataTypeManager> directory_data_type_manager_; |
| 1020 | 1023 |
| 1021 // Manager for the non-blocking data types. | 1024 // Manager for the non-blocking data types. |
| 1022 browser_sync::NonBlockingDataTypeManager non_blocking_data_type_manager_; | 1025 sync_driver::NonBlockingDataTypeManager non_blocking_data_type_manager_; |
| 1023 | 1026 |
| 1024 ObserverList<ProfileSyncServiceBase::Observer> observers_; | 1027 ObserverList<ProfileSyncServiceBase::Observer> observers_; |
| 1025 ObserverList<browser_sync::ProtocolEventObserver> protocol_event_observers_; | 1028 ObserverList<browser_sync::ProtocolEventObserver> protocol_event_observers_; |
| 1026 ObserverList<syncer::TypeDebugInfoObserver> type_debug_info_observers_; | 1029 ObserverList<syncer::TypeDebugInfoObserver> type_debug_info_observers_; |
| 1027 | 1030 |
| 1028 syncer::SyncJsController sync_js_controller_; | 1031 syncer::SyncJsController sync_js_controller_; |
| 1029 | 1032 |
| 1030 // This allows us to gracefully handle an ABORTED return code from the | 1033 // This allows us to gracefully handle an ABORTED return code from the |
| 1031 // DataTypeManager in the event that the server informed us to cease and | 1034 // DataTypeManager in the event that the server informed us to cease and |
| 1032 // desist syncing immediately. | 1035 // desist syncing immediately. |
| (...skipping 21 matching lines...) Expand all Loading... | |
| 1054 | 1057 |
| 1055 // This is the last |SyncProtocolError| we received from the server that had | 1058 // This is the last |SyncProtocolError| we received from the server that had |
| 1056 // an action set on it. | 1059 // an action set on it. |
| 1057 syncer::SyncProtocolError last_actionable_error_; | 1060 syncer::SyncProtocolError last_actionable_error_; |
| 1058 | 1061 |
| 1059 // Exposes sync errors to the UI. | 1062 // Exposes sync errors to the UI. |
| 1060 scoped_ptr<SyncErrorController> sync_error_controller_; | 1063 scoped_ptr<SyncErrorController> sync_error_controller_; |
| 1061 | 1064 |
| 1062 // Tracks the set of failed data types (those that encounter an error | 1065 // Tracks the set of failed data types (those that encounter an error |
| 1063 // or must delay loading for some reason). | 1066 // or must delay loading for some reason). |
| 1064 browser_sync::FailedDataTypesHandler failed_data_types_handler_; | 1067 sync_driver::FailedDataTypesHandler failed_data_types_handler_; |
| 1065 | 1068 |
| 1066 browser_sync::DataTypeManager::ConfigureStatus configure_status_; | 1069 sync_driver::DataTypeManager::ConfigureStatus configure_status_; |
| 1067 | 1070 |
| 1068 // The set of currently enabled sync experiments. | 1071 // The set of currently enabled sync experiments. |
| 1069 syncer::Experiments current_experiments_; | 1072 syncer::Experiments current_experiments_; |
| 1070 | 1073 |
| 1071 // Sync's internal debug info listener. Used to record datatype configuration | 1074 // Sync's internal debug info listener. Used to record datatype configuration |
| 1072 // and association information. | 1075 // and association information. |
| 1073 syncer::WeakHandle<syncer::DataTypeDebugInfoListener> debug_info_listener_; | 1076 syncer::WeakHandle<syncer::DataTypeDebugInfoListener> debug_info_listener_; |
| 1074 | 1077 |
| 1075 // A thread where all the sync operations happen. | 1078 // A thread where all the sync operations happen. |
| 1076 // OWNERSHIP Notes: | 1079 // OWNERSHIP Notes: |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1136 scoped_ptr<base::Time> last_backup_time_; | 1139 scoped_ptr<base::Time> last_backup_time_; |
| 1137 | 1140 |
| 1138 DISALLOW_COPY_AND_ASSIGN(ProfileSyncService); | 1141 DISALLOW_COPY_AND_ASSIGN(ProfileSyncService); |
| 1139 }; | 1142 }; |
| 1140 | 1143 |
| 1141 bool ShouldShowActionOnUI( | 1144 bool ShouldShowActionOnUI( |
| 1142 const syncer::SyncProtocolError& error); | 1145 const syncer::SyncProtocolError& error); |
| 1143 | 1146 |
| 1144 | 1147 |
| 1145 #endif // CHROME_BROWSER_SYNC_PROFILE_SYNC_SERVICE_H_ | 1148 #endif // CHROME_BROWSER_SYNC_PROFILE_SYNC_SERVICE_H_ |
| OLD | NEW |