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

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

Issue 15580002: Make use of InvalidationService (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: First set of review fixes Created 7 years, 7 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
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 <list> 8 #include <list>
9 #include <string> 9 #include <string>
10 #include <utility> 10 #include <utility>
11 #include <vector> 11 #include <vector>
12 12
13 #include "base/basictypes.h" 13 #include "base/basictypes.h"
14 #include "base/compiler_specific.h" 14 #include "base/compiler_specific.h"
15 #include "base/gtest_prod_util.h" 15 #include "base/gtest_prod_util.h"
16 #include "base/location.h" 16 #include "base/location.h"
17 #include "base/memory/scoped_ptr.h" 17 #include "base/memory/scoped_ptr.h"
18 #include "base/memory/weak_ptr.h" 18 #include "base/memory/weak_ptr.h"
19 #include "base/observer_list.h" 19 #include "base/observer_list.h"
20 #include "base/string16.h" 20 #include "base/string16.h"
21 #include "base/time.h" 21 #include "base/time.h"
22 #include "base/timer.h" 22 #include "base/timer.h"
23 #include "chrome/browser/invalidation/invalidation_frontend.h"
24 #include "chrome/browser/invalidation/invalidator_storage.h"
25 #include "chrome/browser/signin/signin_global_error.h" 23 #include "chrome/browser/signin/signin_global_error.h"
26 #include "chrome/browser/sync/backend_unrecoverable_error_handler.h" 24 #include "chrome/browser/sync/backend_unrecoverable_error_handler.h"
27 #include "chrome/browser/sync/failed_datatypes_handler.h" 25 #include "chrome/browser/sync/failed_datatypes_handler.h"
28 #include "chrome/browser/sync/glue/data_type_controller.h" 26 #include "chrome/browser/sync/glue/data_type_controller.h"
29 #include "chrome/browser/sync/glue/data_type_manager.h" 27 #include "chrome/browser/sync/glue/data_type_manager.h"
30 #include "chrome/browser/sync/glue/data_type_manager_observer.h" 28 #include "chrome/browser/sync/glue/data_type_manager_observer.h"
31 #include "chrome/browser/sync/glue/sync_backend_host.h" 29 #include "chrome/browser/sync/glue/sync_backend_host.h"
32 #include "chrome/browser/sync/profile_sync_service_base.h" 30 #include "chrome/browser/sync/profile_sync_service_base.h"
33 #include "chrome/browser/sync/profile_sync_service_observer.h" 31 #include "chrome/browser/sync/profile_sync_service_observer.h"
34 #include "chrome/browser/sync/sync_prefs.h" 32 #include "chrome/browser/sync/sync_prefs.h"
(...skipping 21 matching lines...) Expand all
56 class DeviceInfo; 54 class DeviceInfo;
57 class DataTypeManager; 55 class DataTypeManager;
58 class JsController; 56 class JsController;
59 class SessionModelAssociator; 57 class SessionModelAssociator;
60 58
61 namespace sessions { class SyncSessionSnapshot; } 59 namespace sessions { class SyncSessionSnapshot; }
62 } 60 }
63 61
64 namespace syncer { 62 namespace syncer {
65 class BaseTransaction; 63 class BaseTransaction;
66 class InvalidatorRegistrar;
67 struct SyncCredentials; 64 struct SyncCredentials;
68 struct UserShare; 65 struct UserShare;
69 } 66 }
70 67
71 namespace sync_pb { 68 namespace sync_pb {
72 class EncryptedData; 69 class EncryptedData;
73 } // namespace sync_pb 70 } // namespace sync_pb
74 71
75 // ProfileSyncService is the layer between browser subsystems like bookmarks, 72 // ProfileSyncService is the layer between browser subsystems like bookmarks,
76 // and the sync backend. Each subsystem is logically thought of as being 73 // and the sync backend. Each subsystem is logically thought of as being
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
154 // tell the sync engine that setup is completed and it can begin downloading 151 // tell the sync engine that setup is completed and it can begin downloading
155 // data from the sync server. 152 // data from the sync server.
156 // 153 //
157 class ProfileSyncService : public ProfileSyncServiceBase, 154 class ProfileSyncService : public ProfileSyncServiceBase,
158 public browser_sync::SyncFrontend, 155 public browser_sync::SyncFrontend,
159 public browser_sync::SyncPrefObserver, 156 public browser_sync::SyncPrefObserver,
160 public browser_sync::DataTypeManagerObserver, 157 public browser_sync::DataTypeManagerObserver,
161 public SigninGlobalError::AuthStatusProvider, 158 public SigninGlobalError::AuthStatusProvider,
162 public syncer::UnrecoverableErrorHandler, 159 public syncer::UnrecoverableErrorHandler,
163 public content::NotificationObserver, 160 public content::NotificationObserver,
164 public ProfileKeyedService, 161 public ProfileKeyedService {
165 public invalidation::InvalidationFrontend {
166 public: 162 public:
167 typedef browser_sync::SyncBackendHost::Status Status; 163 typedef browser_sync::SyncBackendHost::Status Status;
168 164
169 enum SyncEventCodes { 165 enum SyncEventCodes {
170 MIN_SYNC_EVENT_CODE = 0, 166 MIN_SYNC_EVENT_CODE = 0,
171 167
172 // Events starting the sync service. 168 // Events starting the sync service.
173 START_FROM_NTP = 1, // Sync was started from the ad in NTP 169 START_FROM_NTP = 1, // Sync was started from the ad in NTP
174 START_FROM_WRENCH = 2, // Sync was started from the Wrench menu. 170 START_FROM_WRENCH = 2, // Sync was started from the Wrench menu.
175 START_FROM_OPTIONS = 3, // Sync was started from Wrench->Options. 171 START_FROM_OPTIONS = 3, // Sync was started from Wrench->Options.
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
276 const std::string& client_id) const; 272 const std::string& client_id) const;
277 273
278 // Fills state_map with a map of current data types that are possible to 274 // Fills state_map with a map of current data types that are possible to
279 // sync, as well as their states. 275 // sync, as well as their states.
280 void GetDataTypeControllerStates( 276 void GetDataTypeControllerStates(
281 browser_sync::DataTypeController::StateMap* state_map) const; 277 browser_sync::DataTypeController::StateMap* state_map) const;
282 278
283 // Disables sync for user. Use ShowLoginDialog to enable. 279 // Disables sync for user. Use ShowLoginDialog to enable.
284 virtual void DisableForUser(); 280 virtual void DisableForUser();
285 281
286 // syncer::InvalidationHandler implementation (via SyncFrontend).
287 virtual void OnInvalidatorStateChange(
288 syncer::InvalidatorState state) OVERRIDE;
289 virtual void OnIncomingInvalidation(
290 const syncer::ObjectIdInvalidationMap& invalidation_map) OVERRIDE;
291
292 // SyncFrontend implementation. 282 // SyncFrontend implementation.
293 virtual void OnBackendInitialized( 283 virtual void OnBackendInitialized(
294 const syncer::WeakHandle<syncer::JsBackend>& js_backend, 284 const syncer::WeakHandle<syncer::JsBackend>& js_backend,
295 const syncer::WeakHandle<syncer::DataTypeDebugInfoListener>& 285 const syncer::WeakHandle<syncer::DataTypeDebugInfoListener>&
296 debug_info_listener, 286 debug_info_listener,
297 bool success) OVERRIDE; 287 bool success) OVERRIDE;
298 virtual void OnSyncCycleCompleted() OVERRIDE; 288 virtual void OnSyncCycleCompleted() OVERRIDE;
299 virtual void OnSyncConfigureRetry() OVERRIDE; 289 virtual void OnSyncConfigureRetry() OVERRIDE;
300 virtual void OnConnectionStatusChange( 290 virtual void OnConnectionStatusChange(
301 syncer::ConnectionStatus status) OVERRIDE; 291 syncer::ConnectionStatus status) OVERRIDE;
(...skipping 293 matching lines...) Expand 10 before | Expand all | Expand 10 after
595 // If true, the ProfileSyncService has detected that a new GAIA signin has 585 // If true, the ProfileSyncService has detected that a new GAIA signin has
596 // succeeded, and is waiting for initialization to complete. This is used by 586 // succeeded, and is waiting for initialization to complete. This is used by
597 // the UI to differentiate between a new auth error (encountered as part of 587 // the UI to differentiate between a new auth error (encountered as part of
598 // the initialization process) and a pre-existing auth error that just hasn't 588 // the initialization process) and a pre-existing auth error that just hasn't
599 // been cleared yet. Virtual for testing purposes. 589 // been cleared yet. Virtual for testing purposes.
600 virtual bool waiting_for_auth() const; 590 virtual bool waiting_for_auth() const;
601 591
602 // The set of currently enabled sync experiments. 592 // The set of currently enabled sync experiments.
603 const syncer::Experiments& current_experiments() const; 593 const syncer::Experiments& current_experiments() const;
604 594
605 // InvalidationFrontend implementation. It is an error to have
606 // registered handlers when Shutdown() is called.
607 virtual void RegisterInvalidationHandler(
608 syncer::InvalidationHandler* handler) OVERRIDE;
609 virtual void UpdateRegisteredInvalidationIds(
610 syncer::InvalidationHandler* handler,
611 const syncer::ObjectIdSet& ids) OVERRIDE;
612 virtual void UnregisterInvalidationHandler(
613 syncer::InvalidationHandler* handler) OVERRIDE;
614 virtual void AcknowledgeInvalidation(
615 const invalidation::ObjectId& id,
616 const syncer::AckHandle& ack_handle) OVERRIDE;
617
618 virtual syncer::InvalidatorState GetInvalidatorState() const OVERRIDE;
619
620 // ProfileKeyedService implementation. This must be called exactly 595 // ProfileKeyedService implementation. This must be called exactly
621 // once (before this object is destroyed). 596 // once (before this object is destroyed).
622 virtual void Shutdown() OVERRIDE; 597 virtual void Shutdown() OVERRIDE;
623 598
624 // Simulate an incoming notification for the given id and payload.
625 void EmitInvalidationForTest(
626 const invalidation::ObjectId& id,
627 const std::string& payload);
628
629 // Called when a datatype (SyncableService) has a need for sync to start 599 // Called when a datatype (SyncableService) has a need for sync to start
630 // ASAP, presumably because a local change event has occurred but we're 600 // ASAP, presumably because a local change event has occurred but we're
631 // still in deferred start mode, meaning the SyncableService hasn't been 601 // still in deferred start mode, meaning the SyncableService hasn't been
632 // told to MergeDataAndStartSyncing yet. 602 // told to MergeDataAndStartSyncing yet.
633 void OnDataTypeRequestsSyncStartup(syncer::ModelType type); 603 void OnDataTypeRequestsSyncStartup(syncer::ModelType type);
634 604
635 protected: 605 protected:
636 // Used by test classes that derive from ProfileSyncService. 606 // Used by test classes that derive from ProfileSyncService.
637 virtual browser_sync::SyncBackendHost* GetBackendForTest(); 607 virtual browser_sync::SyncBackendHost* GetBackendForTest();
638 608
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
689 private: 659 private:
690 enum UnrecoverableErrorReason { 660 enum UnrecoverableErrorReason {
691 ERROR_REASON_UNSET, 661 ERROR_REASON_UNSET,
692 ERROR_REASON_SYNCER, 662 ERROR_REASON_SYNCER,
693 ERROR_REASON_BACKEND_INIT_FAILURE, 663 ERROR_REASON_BACKEND_INIT_FAILURE,
694 ERROR_REASON_CONFIGURATION_RETRY, 664 ERROR_REASON_CONFIGURATION_RETRY,
695 ERROR_REASON_CONFIGURATION_FAILURE, 665 ERROR_REASON_CONFIGURATION_FAILURE,
696 ERROR_REASON_ACTIONABLE_ERROR, 666 ERROR_REASON_ACTIONABLE_ERROR,
697 ERROR_REASON_LIMIT 667 ERROR_REASON_LIMIT
698 }; 668 };
699 typedef std::vector<std::pair<invalidation::ObjectId,
700 syncer::AckHandle> > AckHandleReplayQueue;
701 friend class ProfileSyncServicePasswordTest; 669 friend class ProfileSyncServicePasswordTest;
702 friend class SyncTest; 670 friend class SyncTest;
703 friend class TestProfileSyncService; 671 friend class TestProfileSyncService;
704 FRIEND_TEST_ALL_PREFIXES(ProfileSyncServiceTest, InitialState); 672 FRIEND_TEST_ALL_PREFIXES(ProfileSyncServiceTest, InitialState);
705 673
706 // Detects and attempts to recover from a previous improper datatype 674 // Detects and attempts to recover from a previous improper datatype
707 // configuration where Keep Everything Synced and the preferred types were 675 // configuration where Keep Everything Synced and the preferred types were
708 // not correctly set. 676 // not correctly set.
709 void TrySyncDatatypePrefRecovery(); 677 void TrySyncDatatypePrefRecovery();
710 678
(...skipping 20 matching lines...) Expand all
731 // previous "Sync Data" folders. (useful if the folder is partial/corrupt). 699 // previous "Sync Data" folders. (useful if the folder is partial/corrupt).
732 void InitializeBackend(bool delete_sync_data_folder); 700 void InitializeBackend(bool delete_sync_data_folder);
733 701
734 // Initializes the various settings from the command line. 702 // Initializes the various settings from the command line.
735 void InitSettings(); 703 void InitSettings();
736 704
737 // Sets the last synced time to the current time. 705 // Sets the last synced time to the current time.
738 void UpdateLastSyncedTime(); 706 void UpdateLastSyncedTime();
739 707
740 void NotifyObservers(); 708 void NotifyObservers();
709 void NotifySyncCycleCompleted();
741 710
742 void ClearStaleErrors(); 711 void ClearStaleErrors();
743 712
744 void ClearUnrecoverableError(); 713 void ClearUnrecoverableError();
745 714
746 enum StartUpDeferredOption { 715 enum StartUpDeferredOption {
747 STARTUP_BACKEND_DEFERRED, 716 STARTUP_BACKEND_DEFERRED,
748 STARTUP_IMMEDIATE 717 STARTUP_IMMEDIATE
749 }; 718 };
750 void StartUp(StartUpDeferredOption deferred_option); 719 void StartUp(StartUpDeferredOption deferred_option);
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
785 void RefreshSpareBootstrapToken(const std::string& passphrase); 754 void RefreshSpareBootstrapToken(const std::string& passphrase);
786 #endif 755 #endif
787 756
788 // Internal unrecoverable error handler. Used to track error reason via 757 // Internal unrecoverable error handler. Used to track error reason via
789 // Sync.UnrecoverableErrors histogram. 758 // Sync.UnrecoverableErrors histogram.
790 void OnInternalUnrecoverableError(const tracked_objects::Location& from_here, 759 void OnInternalUnrecoverableError(const tracked_objects::Location& from_here,
791 const std::string& message, 760 const std::string& message,
792 bool delete_sync_database, 761 bool delete_sync_database,
793 UnrecoverableErrorReason reason); 762 UnrecoverableErrorReason reason);
794 763
795 // Must be called every time |backend_initialized_| or
796 // |invalidator_state_| is changed (but only if
797 // |invalidator_registrar_| is not NULL).
798 void UpdateInvalidatorRegistrarState();
799
800 // Returns the username (in form of an email address) that should be used in 764 // Returns the username (in form of an email address) that should be used in
801 // the credentials. 765 // the credentials.
802 std::string GetEffectiveUsername(); 766 std::string GetEffectiveUsername();
803 767
804 // Factory used to create various dependent objects. 768 // Factory used to create various dependent objects.
805 scoped_ptr<ProfileSyncComponentsFactory> factory_; 769 scoped_ptr<ProfileSyncComponentsFactory> factory_;
806 770
807 // The profile whose data we are synchronizing. 771 // The profile whose data we are synchronizing.
808 Profile* profile_; 772 Profile* profile_;
809 773
810 // The class that handles getting, setting, and persisting sync 774 // The class that handles getting, setting, and persisting sync
811 // preferences. 775 // preferences.
812 browser_sync::SyncPrefs sync_prefs_; 776 browser_sync::SyncPrefs sync_prefs_;
813 777
814 // TODO(tim): Move this to InvalidationService, once it exists. Bug 124137.
815 invalidation::InvalidatorStorage invalidator_storage_;
816
817 // TODO(ncarter): Put this in a profile, once there is UI for it. 778 // TODO(ncarter): Put this in a profile, once there is UI for it.
818 // This specifies where to find the sync server. 779 // This specifies where to find the sync server.
819 GURL sync_service_url_; 780 GURL sync_service_url_;
820 781
821 // The last time we detected a successful transition from SYNCING state. 782 // The last time we detected a successful transition from SYNCING state.
822 // Our backend notifies us whenever we should take a new snapshot. 783 // Our backend notifies us whenever we should take a new snapshot.
823 base::Time last_synced_time_; 784 base::Time last_synced_time_;
824 785
825 // The time that StartUp() is called. This member is zero if StartUp() has 786 // The time that StartUp() is called. This member is zero if StartUp() has
826 // never been called, and is reset to zero once OnBackendInitialized() is 787 // never been called, and is reset to zero once OnBackendInitialized() is
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
921 // If |true|, there is setup UI visible so we should not start downloading 882 // If |true|, there is setup UI visible so we should not start downloading
922 // data types. 883 // data types.
923 bool setup_in_progress_; 884 bool setup_in_progress_;
924 885
925 // The set of currently enabled sync experiments. 886 // The set of currently enabled sync experiments.
926 syncer::Experiments current_experiments_; 887 syncer::Experiments current_experiments_;
927 888
928 // Factory the backend will use to build the SyncManager. 889 // Factory the backend will use to build the SyncManager.
929 syncer::SyncManagerFactory sync_manager_factory_; 890 syncer::SyncManagerFactory sync_manager_factory_;
930 891
931 // Holds the current invalidator state as updated by
932 // OnInvalidatorStateChange(). Note that this is different from the
933 // state known by |invalidator_registrar_| (See
934 // UpdateInvalidatorState()).
935 syncer::InvalidatorState invalidator_state_;
936
937 // Dispatches invalidations to handlers. Set in Initialize() and
938 // unset in Shutdown().
939 scoped_ptr<syncer::InvalidatorRegistrar> invalidator_registrar_;
940 // Queues any acknowledgements received while the backend is uninitialized.
941 AckHandleReplayQueue ack_replay_queue_;
942
943 // Sync's internal debug info listener. Used to record datatype configuration 892 // Sync's internal debug info listener. Used to record datatype configuration
944 // and association information. 893 // and association information.
945 syncer::WeakHandle<syncer::DataTypeDebugInfoListener> debug_info_listener_; 894 syncer::WeakHandle<syncer::DataTypeDebugInfoListener> debug_info_listener_;
946 895
947 DISALLOW_COPY_AND_ASSIGN(ProfileSyncService); 896 DISALLOW_COPY_AND_ASSIGN(ProfileSyncService);
948 }; 897 };
949 898
950 bool ShouldShowActionOnUI( 899 bool ShouldShowActionOnUI(
951 const syncer::SyncProtocolError& error); 900 const syncer::SyncProtocolError& error);
952 901
953 902
954 #endif // CHROME_BROWSER_SYNC_PROFILE_SYNC_SERVICE_H_ 903 #endif // CHROME_BROWSER_SYNC_PROFILE_SYNC_SERVICE_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698