Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(136)

Side by Side Diff: chrome/browser/sync/profile_sync_service.h

Issue 17911005: Merge 208347 "Revert 208315 "Make use of InvalidationService"" (Closed) Base URL: svn://svn.chromium.org/chrome/branches/1547/src/
Patch Set: Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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>
11 11
12 #include "base/basictypes.h" 12 #include "base/basictypes.h"
13 #include "base/compiler_specific.h" 13 #include "base/compiler_specific.h"
14 #include "base/gtest_prod_util.h" 14 #include "base/gtest_prod_util.h"
15 #include "base/location.h" 15 #include "base/location.h"
16 #include "base/memory/scoped_ptr.h" 16 #include "base/memory/scoped_ptr.h"
17 #include "base/memory/weak_ptr.h" 17 #include "base/memory/weak_ptr.h"
18 #include "base/observer_list.h" 18 #include "base/observer_list.h"
19 #include "base/strings/string16.h" 19 #include "base/strings/string16.h"
20 #include "base/time.h" 20 #include "base/time.h"
21 #include "base/timer.h" 21 #include "base/timer.h"
22 #include "chrome/browser/invalidation/invalidation_frontend.h"
23 #include "chrome/browser/invalidation/invalidator_storage.h"
22 #include "chrome/browser/signin/oauth2_token_service.h" 24 #include "chrome/browser/signin/oauth2_token_service.h"
23 #include "chrome/browser/signin/signin_global_error.h" 25 #include "chrome/browser/signin/signin_global_error.h"
24 #include "chrome/browser/sync/backend_unrecoverable_error_handler.h" 26 #include "chrome/browser/sync/backend_unrecoverable_error_handler.h"
25 #include "chrome/browser/sync/glue/data_type_controller.h" 27 #include "chrome/browser/sync/glue/data_type_controller.h"
26 #include "chrome/browser/sync/glue/data_type_encryption_handler.h" 28 #include "chrome/browser/sync/glue/data_type_encryption_handler.h"
27 #include "chrome/browser/sync/glue/data_type_manager.h" 29 #include "chrome/browser/sync/glue/data_type_manager.h"
28 #include "chrome/browser/sync/glue/data_type_manager_observer.h" 30 #include "chrome/browser/sync/glue/data_type_manager_observer.h"
29 #include "chrome/browser/sync/glue/failed_data_types_handler.h" 31 #include "chrome/browser/sync/glue/failed_data_types_handler.h"
30 #include "chrome/browser/sync/glue/sync_backend_host.h" 32 #include "chrome/browser/sync/glue/sync_backend_host.h"
31 #include "chrome/browser/sync/profile_sync_service_base.h" 33 #include "chrome/browser/sync/profile_sync_service_base.h"
(...skipping 24 matching lines...) Expand all
56 class DeviceInfo; 58 class DeviceInfo;
57 class DataTypeManager; 59 class DataTypeManager;
58 class JsController; 60 class JsController;
59 class SessionModelAssociator; 61 class SessionModelAssociator;
60 62
61 namespace sessions { class SyncSessionSnapshot; } 63 namespace sessions { class SyncSessionSnapshot; }
62 } 64 }
63 65
64 namespace syncer { 66 namespace syncer {
65 class BaseTransaction; 67 class BaseTransaction;
68 class InvalidatorRegistrar;
66 struct SyncCredentials; 69 struct SyncCredentials;
67 struct UserShare; 70 struct UserShare;
68 } 71 }
69 72
70 namespace sync_pb { 73 namespace sync_pb {
71 class EncryptedData; 74 class EncryptedData;
72 } // namespace sync_pb 75 } // namespace sync_pb
73 76
74 // ProfileSyncService is the layer between browser subsystems like bookmarks, 77 // ProfileSyncService is the layer between browser subsystems like bookmarks,
75 // and the sync backend. Each subsystem is logically thought of as being 78 // and the sync backend. Each subsystem is logically thought of as being
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
155 // data from the sync server. 158 // data from the sync server.
156 // 159 //
157 class ProfileSyncService : public ProfileSyncServiceBase, 160 class ProfileSyncService : public ProfileSyncServiceBase,
158 public browser_sync::SyncFrontend, 161 public browser_sync::SyncFrontend,
159 public browser_sync::SyncPrefObserver, 162 public browser_sync::SyncPrefObserver,
160 public browser_sync::DataTypeManagerObserver, 163 public browser_sync::DataTypeManagerObserver,
161 public SigninGlobalError::AuthStatusProvider, 164 public SigninGlobalError::AuthStatusProvider,
162 public syncer::UnrecoverableErrorHandler, 165 public syncer::UnrecoverableErrorHandler,
163 public content::NotificationObserver, 166 public content::NotificationObserver,
164 public BrowserContextKeyedService, 167 public BrowserContextKeyedService,
168 public invalidation::InvalidationFrontend,
165 public browser_sync::DataTypeEncryptionHandler, 169 public browser_sync::DataTypeEncryptionHandler,
166 public OAuth2TokenService::Consumer { 170 public OAuth2TokenService::Consumer {
167 public: 171 public:
168 typedef browser_sync::SyncBackendHost::Status Status; 172 typedef browser_sync::SyncBackendHost::Status Status;
169 173
170 enum SyncEventCodes { 174 enum SyncEventCodes {
171 MIN_SYNC_EVENT_CODE = 0, 175 MIN_SYNC_EVENT_CODE = 0,
172 176
173 // Events starting the sync service. 177 // Events starting the sync service.
174 START_FROM_NTP = 1, // Sync was started from the ad in NTP 178 START_FROM_NTP = 1, // Sync was started from the ad in NTP
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
277 const std::string& client_id) const; 281 const std::string& client_id) const;
278 282
279 // Fills state_map with a map of current data types that are possible to 283 // Fills state_map with a map of current data types that are possible to
280 // sync, as well as their states. 284 // sync, as well as their states.
281 void GetDataTypeControllerStates( 285 void GetDataTypeControllerStates(
282 browser_sync::DataTypeController::StateMap* state_map) const; 286 browser_sync::DataTypeController::StateMap* state_map) const;
283 287
284 // Disables sync for user. Use ShowLoginDialog to enable. 288 // Disables sync for user. Use ShowLoginDialog to enable.
285 virtual void DisableForUser(); 289 virtual void DisableForUser();
286 290
291 // syncer::InvalidationHandler implementation (via SyncFrontend).
292 virtual void OnInvalidatorStateChange(
293 syncer::InvalidatorState state) OVERRIDE;
294 virtual void OnIncomingInvalidation(
295 const syncer::ObjectIdInvalidationMap& invalidation_map) OVERRIDE;
296
287 // SyncFrontend implementation. 297 // SyncFrontend implementation.
288 virtual void OnBackendInitialized( 298 virtual void OnBackendInitialized(
289 const syncer::WeakHandle<syncer::JsBackend>& js_backend, 299 const syncer::WeakHandle<syncer::JsBackend>& js_backend,
290 const syncer::WeakHandle<syncer::DataTypeDebugInfoListener>& 300 const syncer::WeakHandle<syncer::DataTypeDebugInfoListener>&
291 debug_info_listener, 301 debug_info_listener,
292 bool success) OVERRIDE; 302 bool success) OVERRIDE;
293 virtual void OnSyncCycleCompleted() OVERRIDE; 303 virtual void OnSyncCycleCompleted() OVERRIDE;
294 virtual void OnSyncConfigureRetry() OVERRIDE; 304 virtual void OnSyncConfigureRetry() OVERRIDE;
295 virtual void OnConnectionStatusChange( 305 virtual void OnConnectionStatusChange(
296 syncer::ConnectionStatus status) OVERRIDE; 306 syncer::ConnectionStatus status) OVERRIDE;
(...skipping 286 matching lines...) Expand 10 before | Expand all | Expand 10 after
583 // If true, the ProfileSyncService has detected that a new GAIA signin has 593 // If true, the ProfileSyncService has detected that a new GAIA signin has
584 // succeeded, and is waiting for initialization to complete. This is used by 594 // succeeded, and is waiting for initialization to complete. This is used by
585 // the UI to differentiate between a new auth error (encountered as part of 595 // the UI to differentiate between a new auth error (encountered as part of
586 // the initialization process) and a pre-existing auth error that just hasn't 596 // the initialization process) and a pre-existing auth error that just hasn't
587 // been cleared yet. Virtual for testing purposes. 597 // been cleared yet. Virtual for testing purposes.
588 virtual bool waiting_for_auth() const; 598 virtual bool waiting_for_auth() const;
589 599
590 // The set of currently enabled sync experiments. 600 // The set of currently enabled sync experiments.
591 const syncer::Experiments& current_experiments() const; 601 const syncer::Experiments& current_experiments() const;
592 602
603 // InvalidationFrontend implementation. It is an error to have
604 // registered handlers when Shutdown() is called.
605 virtual void RegisterInvalidationHandler(
606 syncer::InvalidationHandler* handler) OVERRIDE;
607 virtual void UpdateRegisteredInvalidationIds(
608 syncer::InvalidationHandler* handler,
609 const syncer::ObjectIdSet& ids) OVERRIDE;
610 virtual void UnregisterInvalidationHandler(
611 syncer::InvalidationHandler* handler) OVERRIDE;
612 virtual void AcknowledgeInvalidation(
613 const invalidation::ObjectId& id,
614 const syncer::AckHandle& ack_handle) OVERRIDE;
615
616 virtual syncer::InvalidatorState GetInvalidatorState() const OVERRIDE;
617
593 // OAuth2TokenService::Consumer implementation 618 // OAuth2TokenService::Consumer implementation
594 virtual void OnGetTokenSuccess( 619 virtual void OnGetTokenSuccess(
595 const OAuth2TokenService::Request* request, 620 const OAuth2TokenService::Request* request,
596 const std::string& access_token, 621 const std::string& access_token,
597 const base::Time& expiration_time) OVERRIDE; 622 const base::Time& expiration_time) OVERRIDE;
598 virtual void OnGetTokenFailure( 623 virtual void OnGetTokenFailure(
599 const OAuth2TokenService::Request* request, 624 const OAuth2TokenService::Request* request,
600 const GoogleServiceAuthError& error) OVERRIDE; 625 const GoogleServiceAuthError& error) OVERRIDE;
601 626
602 // BrowserContextKeyedService implementation. This must be called exactly 627 // BrowserContextKeyedService implementation. This must be called exactly
603 // once (before this object is destroyed). 628 // once (before this object is destroyed).
604 virtual void Shutdown() OVERRIDE; 629 virtual void Shutdown() OVERRIDE;
605 630
631 // Simulate an incoming notification for the given id and payload.
632 void EmitInvalidationForTest(
633 const invalidation::ObjectId& id,
634 const std::string& payload);
635
606 // Called when a datatype (SyncableService) has a need for sync to start 636 // Called when a datatype (SyncableService) has a need for sync to start
607 // ASAP, presumably because a local change event has occurred but we're 637 // ASAP, presumably because a local change event has occurred but we're
608 // still in deferred start mode, meaning the SyncableService hasn't been 638 // still in deferred start mode, meaning the SyncableService hasn't been
609 // told to MergeDataAndStartSyncing yet. 639 // told to MergeDataAndStartSyncing yet.
610 void OnDataTypeRequestsSyncStartup(syncer::ModelType type); 640 void OnDataTypeRequestsSyncStartup(syncer::ModelType type);
611 641
612 protected: 642 protected:
613 // Used by test classes that derive from ProfileSyncService. 643 // Used by test classes that derive from ProfileSyncService.
614 virtual browser_sync::SyncBackendHost* GetBackendForTest(); 644 virtual browser_sync::SyncBackendHost* GetBackendForTest();
615 645
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
666 private: 696 private:
667 enum UnrecoverableErrorReason { 697 enum UnrecoverableErrorReason {
668 ERROR_REASON_UNSET, 698 ERROR_REASON_UNSET,
669 ERROR_REASON_SYNCER, 699 ERROR_REASON_SYNCER,
670 ERROR_REASON_BACKEND_INIT_FAILURE, 700 ERROR_REASON_BACKEND_INIT_FAILURE,
671 ERROR_REASON_CONFIGURATION_RETRY, 701 ERROR_REASON_CONFIGURATION_RETRY,
672 ERROR_REASON_CONFIGURATION_FAILURE, 702 ERROR_REASON_CONFIGURATION_FAILURE,
673 ERROR_REASON_ACTIONABLE_ERROR, 703 ERROR_REASON_ACTIONABLE_ERROR,
674 ERROR_REASON_LIMIT 704 ERROR_REASON_LIMIT
675 }; 705 };
706 typedef std::vector<std::pair<invalidation::ObjectId,
707 syncer::AckHandle> > AckHandleReplayQueue;
676 friend class ProfileSyncServicePasswordTest; 708 friend class ProfileSyncServicePasswordTest;
677 friend class SyncTest; 709 friend class SyncTest;
678 friend class TestProfileSyncService; 710 friend class TestProfileSyncService;
679 FRIEND_TEST_ALL_PREFIXES(ProfileSyncServiceTest, InitialState); 711 FRIEND_TEST_ALL_PREFIXES(ProfileSyncServiceTest, InitialState);
680 712
681 // Detects and attempts to recover from a previous improper datatype 713 // Detects and attempts to recover from a previous improper datatype
682 // configuration where Keep Everything Synced and the preferred types were 714 // configuration where Keep Everything Synced and the preferred types were
683 // not correctly set. 715 // not correctly set.
684 void TrySyncDatatypePrefRecovery(); 716 void TrySyncDatatypePrefRecovery();
685 717
(...skipping 26 matching lines...) Expand all
712 // previous "Sync Data" folders. (useful if the folder is partial/corrupt). 744 // previous "Sync Data" folders. (useful if the folder is partial/corrupt).
713 void InitializeBackend(bool delete_sync_data_folder); 745 void InitializeBackend(bool delete_sync_data_folder);
714 746
715 // Initializes the various settings from the command line. 747 // Initializes the various settings from the command line.
716 void InitSettings(); 748 void InitSettings();
717 749
718 // Sets the last synced time to the current time. 750 // Sets the last synced time to the current time.
719 void UpdateLastSyncedTime(); 751 void UpdateLastSyncedTime();
720 752
721 void NotifyObservers(); 753 void NotifyObservers();
722 void NotifySyncCycleCompleted();
723 754
724 void ClearStaleErrors(); 755 void ClearStaleErrors();
725 756
726 void ClearUnrecoverableError(); 757 void ClearUnrecoverableError();
727 758
728 enum StartUpDeferredOption { 759 enum StartUpDeferredOption {
729 STARTUP_BACKEND_DEFERRED, 760 STARTUP_BACKEND_DEFERRED,
730 STARTUP_IMMEDIATE 761 STARTUP_IMMEDIATE
731 }; 762 };
732 void StartUp(StartUpDeferredOption deferred_option); 763 void StartUp(StartUpDeferredOption deferred_option);
(...skipping 29 matching lines...) Expand all
762 void RefreshSpareBootstrapToken(const std::string& passphrase); 793 void RefreshSpareBootstrapToken(const std::string& passphrase);
763 #endif 794 #endif
764 795
765 // Internal unrecoverable error handler. Used to track error reason via 796 // Internal unrecoverable error handler. Used to track error reason via
766 // Sync.UnrecoverableErrors histogram. 797 // Sync.UnrecoverableErrors histogram.
767 void OnInternalUnrecoverableError(const tracked_objects::Location& from_here, 798 void OnInternalUnrecoverableError(const tracked_objects::Location& from_here,
768 const std::string& message, 799 const std::string& message,
769 bool delete_sync_database, 800 bool delete_sync_database,
770 UnrecoverableErrorReason reason); 801 UnrecoverableErrorReason reason);
771 802
803 // Must be called every time |backend_initialized_| or
804 // |invalidator_state_| is changed (but only if
805 // |invalidator_registrar_| is not NULL).
806 void UpdateInvalidatorRegistrarState();
807
772 // Returns the username (in form of an email address) that should be used in 808 // Returns the username (in form of an email address) that should be used in
773 // the credentials. 809 // the credentials.
774 std::string GetEffectiveUsername(); 810 std::string GetEffectiveUsername();
775 811
776 // Factory used to create various dependent objects. 812 // Factory used to create various dependent objects.
777 scoped_ptr<ProfileSyncComponentsFactory> factory_; 813 scoped_ptr<ProfileSyncComponentsFactory> factory_;
778 814
779 // The profile whose data we are synchronizing. 815 // The profile whose data we are synchronizing.
780 Profile* profile_; 816 Profile* profile_;
781 817
782 // The class that handles getting, setting, and persisting sync 818 // The class that handles getting, setting, and persisting sync
783 // preferences. 819 // preferences.
784 browser_sync::SyncPrefs sync_prefs_; 820 browser_sync::SyncPrefs sync_prefs_;
785 821
822 // TODO(tim): Move this to InvalidationService, once it exists. Bug 124137.
823 invalidation::InvalidatorStorage invalidator_storage_;
824
786 // TODO(ncarter): Put this in a profile, once there is UI for it. 825 // TODO(ncarter): Put this in a profile, once there is UI for it.
787 // This specifies where to find the sync server. 826 // This specifies where to find the sync server.
788 GURL sync_service_url_; 827 GURL sync_service_url_;
789 828
790 // The last time we detected a successful transition from SYNCING state. 829 // The last time we detected a successful transition from SYNCING state.
791 // Our backend notifies us whenever we should take a new snapshot. 830 // Our backend notifies us whenever we should take a new snapshot.
792 base::Time last_synced_time_; 831 base::Time last_synced_time_;
793 832
794 // The time that StartUp() is called. This member is zero if StartUp() has 833 // The time that StartUp() is called. This member is zero if StartUp() has
795 // never been called, and is reset to zero once OnBackendInitialized() is 834 // never been called, and is reset to zero once OnBackendInitialized() is
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
896 // If |true|, there is setup UI visible so we should not start downloading 935 // If |true|, there is setup UI visible so we should not start downloading
897 // data types. 936 // data types.
898 bool setup_in_progress_; 937 bool setup_in_progress_;
899 938
900 // The set of currently enabled sync experiments. 939 // The set of currently enabled sync experiments.
901 syncer::Experiments current_experiments_; 940 syncer::Experiments current_experiments_;
902 941
903 // Factory the backend will use to build the SyncManager. 942 // Factory the backend will use to build the SyncManager.
904 syncer::SyncManagerFactory sync_manager_factory_; 943 syncer::SyncManagerFactory sync_manager_factory_;
905 944
945 // Holds the current invalidator state as updated by
946 // OnInvalidatorStateChange(). Note that this is different from the
947 // state known by |invalidator_registrar_| (See
948 // UpdateInvalidatorState()).
949 syncer::InvalidatorState invalidator_state_;
950
951 // Dispatches invalidations to handlers. Set in Initialize() and
952 // unset in Shutdown().
953 scoped_ptr<syncer::InvalidatorRegistrar> invalidator_registrar_;
954 // Queues any acknowledgements received while the backend is uninitialized.
955 AckHandleReplayQueue ack_replay_queue_;
956
906 // Sync's internal debug info listener. Used to record datatype configuration 957 // Sync's internal debug info listener. Used to record datatype configuration
907 // and association information. 958 // and association information.
908 syncer::WeakHandle<syncer::DataTypeDebugInfoListener> debug_info_listener_; 959 syncer::WeakHandle<syncer::DataTypeDebugInfoListener> debug_info_listener_;
909 960
910 // Specifies whenever to use oauth2 access token or ClientLogin token in 961 // Specifies whenever to use oauth2 access token or ClientLogin token in
911 // communications with sync and xmpp servers. 962 // communications with sync and xmpp servers.
912 // TODO(pavely): Remove once android is converted to oauth2 tokens. 963 // TODO(pavely): Remove once android is converted to oauth2 tokens.
913 bool use_oauth2_token_; 964 bool use_oauth2_token_;
914 965
915 // ProfileSyncService needs to remember access token in order to invalidate it 966 // ProfileSyncService needs to remember access token in order to invalidate it
(...skipping 10 matching lines...) Expand all
926 net::BackoffEntry request_access_token_backoff_; 977 net::BackoffEntry request_access_token_backoff_;
927 978
928 DISALLOW_COPY_AND_ASSIGN(ProfileSyncService); 979 DISALLOW_COPY_AND_ASSIGN(ProfileSyncService);
929 }; 980 };
930 981
931 bool ShouldShowActionOnUI( 982 bool ShouldShowActionOnUI(
932 const syncer::SyncProtocolError& error); 983 const syncer::SyncProtocolError& error);
933 984
934 985
935 #endif // CHROME_BROWSER_SYNC_PROFILE_SYNC_SERVICE_H_ 986 #endif // CHROME_BROWSER_SYNC_PROFILE_SYNC_SERVICE_H_
OLDNEW
« no previous file with comments | « chrome/browser/sync/glue/sync_backend_host_unittest.cc ('k') | chrome/browser/sync/profile_sync_service.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698