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

Side by Side Diff: components/browser_sync/profile_sync_service.h

Issue 2559123002: [Sync] SyncEngine refactor part 2: SyncServiceBase. (Closed)
Patch Set: Address comments. Created 4 years 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 COMPONENTS_BROWSER_SYNC_PROFILE_SYNC_SERVICE_H_ 5 #ifndef COMPONENTS_BROWSER_SYNC_PROFILE_SYNC_SERVICE_H_
6 #define COMPONENTS_BROWSER_SYNC_PROFILE_SYNC_SERVICE_H_ 6 #define COMPONENTS_BROWSER_SYNC_PROFILE_SYNC_SERVICE_H_
7 7
8 #include <memory> 8 #include <memory>
9 #include <set> 9 #include <set>
10 #include <string> 10 #include <string>
(...skipping 21 matching lines...) Expand all
32 #include "components/sync/base/model_type.h" 32 #include "components/sync/base/model_type.h"
33 #include "components/sync/base/sync_prefs.h" 33 #include "components/sync/base/sync_prefs.h"
34 #include "components/sync/base/unrecoverable_error_handler.h" 34 #include "components/sync/base/unrecoverable_error_handler.h"
35 #include "components/sync/device_info/local_device_info_provider.h" 35 #include "components/sync/device_info/local_device_info_provider.h"
36 #include "components/sync/driver/data_type_controller.h" 36 #include "components/sync/driver/data_type_controller.h"
37 #include "components/sync/driver/data_type_manager.h" 37 #include "components/sync/driver/data_type_manager.h"
38 #include "components/sync/driver/data_type_manager_observer.h" 38 #include "components/sync/driver/data_type_manager_observer.h"
39 #include "components/sync/driver/data_type_status_table.h" 39 #include "components/sync/driver/data_type_status_table.h"
40 #include "components/sync/driver/startup_controller.h" 40 #include "components/sync/driver/startup_controller.h"
41 #include "components/sync/driver/sync_client.h" 41 #include "components/sync/driver/sync_client.h"
42 #include "components/sync/driver/sync_service.h" 42 #include "components/sync/driver/sync_service_base.h"
43 #include "components/sync/driver/sync_stopped_reporter.h" 43 #include "components/sync/driver/sync_stopped_reporter.h"
44 #include "components/sync/engine/events/protocol_event_observer.h" 44 #include "components/sync/engine/events/protocol_event_observer.h"
45 #include "components/sync/engine/model_safe_worker.h" 45 #include "components/sync/engine/model_safe_worker.h"
46 #include "components/sync/engine/net/network_time_update_callback.h" 46 #include "components/sync/engine/net/network_time_update_callback.h"
47 #include "components/sync/engine/shutdown_reason.h" 47 #include "components/sync/engine/shutdown_reason.h"
48 #include "components/sync/engine/sync_engine.h" 48 #include "components/sync/engine/sync_engine.h"
49 #include "components/sync/engine/sync_engine_host.h" 49 #include "components/sync/engine/sync_engine_host.h"
50 #include "components/sync/engine/sync_manager_factory.h" 50 #include "components/sync/engine/sync_manager_factory.h"
51 #include "components/sync/js/sync_js_controller.h" 51 #include "components/sync/js/sync_js_controller.h"
52 #include "components/sync/syncable/user_share.h" 52 #include "components/sync/syncable/user_share.h"
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
163 // * GetSetupInProgressHandle() 163 // * GetSetupInProgressHandle()
164 // 164 //
165 // SetFirstSetupComplete() should be called once the user has finished setting 165 // SetFirstSetupComplete() should be called once the user has finished setting
166 // up sync at least once on their account. GetSetupInProgressHandle() should 166 // up sync at least once on their account. GetSetupInProgressHandle() should
167 // be called while the user is actively configuring their account. The handle 167 // be called while the user is actively configuring their account. The handle
168 // should be deleted once configuration is complete. 168 // should be deleted once configuration is complete.
169 // 169 //
170 // Once first setup has completed and there are no outstanding 170 // Once first setup has completed and there are no outstanding
171 // setup-in-progress handles, CanConfigureDataTypes() will return true and 171 // setup-in-progress handles, CanConfigureDataTypes() will return true and
172 // datatype configuration can begin. 172 // datatype configuration can begin.
173 class ProfileSyncService : public syncer::SyncService, 173 class ProfileSyncService : public syncer::SyncServiceBase,
174 public syncer::SyncEngineHost,
175 public syncer::SyncPrefObserver, 174 public syncer::SyncPrefObserver,
176 public syncer::DataTypeManagerObserver, 175 public syncer::DataTypeManagerObserver,
177 public syncer::UnrecoverableErrorHandler, 176 public syncer::UnrecoverableErrorHandler,
178 public KeyedService, 177 public KeyedService,
179 public OAuth2TokenService::Consumer, 178 public OAuth2TokenService::Consumer,
180 public OAuth2TokenService::Observer, 179 public OAuth2TokenService::Observer,
181 public SigninManagerBase::Observer, 180 public SigninManagerBase::Observer,
182 public GaiaCookieManagerService::Observer { 181 public GaiaCookieManagerService::Observer {
183 public: 182 public:
184 typedef syncer::SyncEngine::Status Status; 183 typedef syncer::SyncEngine::Status Status;
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
225 AUTO_START, 224 AUTO_START,
226 MANUAL_START, 225 MANUAL_START,
227 }; 226 };
228 227
229 // Bundles the arguments for ProfileSyncService construction. This is a 228 // Bundles the arguments for ProfileSyncService construction. This is a
230 // movable struct. Because of the non-POD data members, it needs out-of-line 229 // movable struct. Because of the non-POD data members, it needs out-of-line
231 // constructors, so in particular the move constructor needs to be 230 // constructors, so in particular the move constructor needs to be
232 // explicitly defined. 231 // explicitly defined.
233 struct InitParams { 232 struct InitParams {
234 InitParams(); 233 InitParams();
234 InitParams(InitParams&& other);
235 ~InitParams(); 235 ~InitParams();
236 InitParams(InitParams&& other); // NOLINT
237 236
238 std::unique_ptr<syncer::SyncClient> sync_client; 237 std::unique_ptr<syncer::SyncClient> sync_client;
239 std::unique_ptr<SigninManagerWrapper> signin_wrapper; 238 std::unique_ptr<SigninManagerWrapper> signin_wrapper;
240 ProfileOAuth2TokenService* oauth2_token_service = nullptr; 239 ProfileOAuth2TokenService* oauth2_token_service = nullptr;
241 GaiaCookieManagerService* gaia_cookie_manager_service = nullptr; 240 GaiaCookieManagerService* gaia_cookie_manager_service = nullptr;
242 StartBehavior start_behavior = MANUAL_START; 241 StartBehavior start_behavior = MANUAL_START;
243 syncer::NetworkTimeUpdateCallback network_time_update_callback; 242 syncer::NetworkTimeUpdateCallback network_time_update_callback;
244 base::FilePath base_directory; 243 base::FilePath base_directory;
245 scoped_refptr<net::URLRequestContextGetter> url_request_context; 244 scoped_refptr<net::URLRequestContextGetter> url_request_context;
246 std::string debug_identifier; 245 std::string debug_identifier;
(...skipping 334 matching lines...) Expand 10 before | Expand all | Expand 10 after
581 580
582 // Needed to test whether the directory is deleted properly. 581 // Needed to test whether the directory is deleted properly.
583 base::FilePath GetDirectoryPathForTest() const; 582 base::FilePath GetDirectoryPathForTest() const;
584 583
585 // Sometimes we need to wait for tasks on the sync thread in tests. 584 // Sometimes we need to wait for tasks on the sync thread in tests.
586 base::MessageLoop* GetSyncLoopForTest() const; 585 base::MessageLoop* GetSyncLoopForTest() const;
587 586
588 // Triggers sync cycle with request to update specified |types|. 587 // Triggers sync cycle with request to update specified |types|.
589 void RefreshTypesForTest(syncer::ModelTypeSet types); 588 void RefreshTypesForTest(syncer::ModelTypeSet types);
590 589
590 protected:
591 // SyncServiceBase implementation.
592 syncer::SyncCredentials GetCredentials() override;
593 syncer::WeakHandle<syncer::JsEventHandler> GetJsEventHandler() override;
594 syncer::SyncEngine::HttpPostProviderFactoryGetter
595 MakeHttpPostProviderFactoryGetter() override;
596 std::unique_ptr<syncer::SyncEncryptionHandler::NigoriState>
597 MoveSavedNigoriState() override;
598 syncer::WeakHandle<syncer::UnrecoverableErrorHandler>
599 GetUnrecoverableErrorHandler() override;
600
591 private: 601 private:
592 enum UnrecoverableErrorReason { 602 enum UnrecoverableErrorReason {
593 ERROR_REASON_UNSET, 603 ERROR_REASON_UNSET,
594 ERROR_REASON_SYNCER, 604 ERROR_REASON_SYNCER,
595 ERROR_REASON_ENGINE_INIT_FAILURE, 605 ERROR_REASON_ENGINE_INIT_FAILURE,
596 ERROR_REASON_CONFIGURATION_RETRY, 606 ERROR_REASON_CONFIGURATION_RETRY,
597 ERROR_REASON_CONFIGURATION_FAILURE, 607 ERROR_REASON_CONFIGURATION_FAILURE,
598 ERROR_REASON_ACTIONABLE_ERROR, 608 ERROR_REASON_ACTIONABLE_ERROR,
599 ERROR_REASON_LIMIT 609 ERROR_REASON_LIMIT
600 }; 610 };
(...skipping 24 matching lines...) Expand all
625 friend class TestProfileSyncService; 635 friend class TestProfileSyncService;
626 636
627 // Helper to install and configure a data type manager. 637 // Helper to install and configure a data type manager.
628 void ConfigureDataTypeManager(); 638 void ConfigureDataTypeManager();
629 639
630 // Shuts down the engine sync components. 640 // Shuts down the engine sync components.
631 // |reason| dictates if syncing is being disabled or not, and whether 641 // |reason| dictates if syncing is being disabled or not, and whether
632 // to claim ownership of sync thread from engine. 642 // to claim ownership of sync thread from engine.
633 void ShutdownImpl(syncer::ShutdownReason reason); 643 void ShutdownImpl(syncer::ShutdownReason reason);
634 644
635 // Return SyncCredentials from the OAuth2TokenService.
636 syncer::SyncCredentials GetCredentials();
637
638 virtual syncer::WeakHandle<syncer::JsEventHandler> GetJsEventHandler();
639
640 // Helper method for managing encryption UI. 645 // Helper method for managing encryption UI.
641 bool IsEncryptedDatatypeEnabled() const; 646 bool IsEncryptedDatatypeEnabled() const;
642 647
643 // Helper for OnUnrecoverableError. 648 // Helper for OnUnrecoverableError.
644 // TODO(tim): Use an enum for |delete_sync_database| here, in ShutdownImpl, 649 // TODO(tim): Use an enum for |delete_sync_database| here, in ShutdownImpl,
645 // and in SyncEngine::Shutdown. 650 // and in SyncEngine::Shutdown.
646 void OnUnrecoverableErrorImpl(const tracked_objects::Location& from_here, 651 void OnUnrecoverableErrorImpl(const tracked_objects::Location& from_here,
647 const std::string& message, 652 const std::string& message,
648 bool delete_sync_database); 653 bool delete_sync_database);
649 654
(...skipping 14 matching lines...) Expand all
664 // This routine is invoked once the engine has started up to use the 669 // This routine is invoked once the engine has started up to use the
665 // cached passphrase and clear it out when it is done. 670 // cached passphrase and clear it out when it is done.
666 void ConsumeCachedPassphraseIfPossible(); 671 void ConsumeCachedPassphraseIfPossible();
667 672
668 // RequestAccessToken initiates RPC to request downscoped access token from 673 // RequestAccessToken initiates RPC to request downscoped access token from
669 // refresh token. This happens when a new OAuth2 login token is loaded and 674 // refresh token. This happens when a new OAuth2 login token is loaded and
670 // when sync server returns AUTH_ERROR which indicates it is time to refresh 675 // when sync server returns AUTH_ERROR which indicates it is time to refresh
671 // token. 676 // token.
672 void RequestAccessToken(); 677 void RequestAccessToken();
673 678
674 // Return true if engine should start from a fresh sync DB.
675 bool ShouldDeleteSyncFolder();
676
677 // If |delete_sync_data_folder| is true, then this method will delete all
678 // previous "Sync Data" folders. (useful if the folder is partial/corrupt).
679 void InitializeEngine(bool delete_sync_data_folder);
680
681 // Sets the last synced time to the current time. 679 // Sets the last synced time to the current time.
682 void UpdateLastSyncedTime(); 680 void UpdateLastSyncedTime();
683 681
684 void NotifyObservers(); 682 void NotifyObservers();
685 void NotifySyncCycleCompleted(); 683 void NotifySyncCycleCompleted();
686 void NotifyForeignSessionUpdated(); 684 void NotifyForeignSessionUpdated();
687 685
688 void ClearStaleErrors(); 686 void ClearStaleErrors();
689 687
690 void ClearUnrecoverableError(); 688 void ClearUnrecoverableError();
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
763 bool CanConfigureDataTypes() const; 761 bool CanConfigureDataTypes() const;
764 762
765 // Called when a SetupInProgressHandle issued by this instance is destroyed. 763 // Called when a SetupInProgressHandle issued by this instance is destroyed.
766 virtual void OnSetupInProgressHandleDestroyed(); 764 virtual void OnSetupInProgressHandleDestroyed();
767 765
768 // This is a cache of the last authentication response we received from the 766 // This is a cache of the last authentication response we received from the
769 // sync server. The UI queries this to display appropriate messaging to the 767 // sync server. The UI queries this to display appropriate messaging to the
770 // user. 768 // user.
771 GoogleServiceAuthError last_auth_error_; 769 GoogleServiceAuthError last_auth_error_;
772 770
773 // Our asynchronous engine to communicate with sync components living on
774 // other threads.
775 std::unique_ptr<syncer::SyncEngine> engine_;
776
777 // Was the last SYNC_PASSPHRASE_REQUIRED notification sent because it 771 // Was the last SYNC_PASSPHRASE_REQUIRED notification sent because it
778 // was required for encryption, decryption with a cached passphrase, or 772 // was required for encryption, decryption with a cached passphrase, or
779 // because a new passphrase is required? 773 // because a new passphrase is required?
780 syncer::PassphraseRequiredReason passphrase_required_reason_; 774 syncer::PassphraseRequiredReason passphrase_required_reason_;
781 775
782 // This profile's SyncClient, which abstracts away non-Sync dependencies and
783 // the Sync API component factory.
784 std::unique_ptr<syncer::SyncClient> sync_client_;
785
786 // The class that handles getting, setting, and persisting sync
787 // preferences.
788 syncer::SyncPrefs sync_prefs_;
789
790 // TODO(ncarter): Put this in a profile, once there is UI for it. 776 // TODO(ncarter): Put this in a profile, once there is UI for it.
791 // This specifies where to find the sync server. 777 // This specifies where to find the sync server.
792 const GURL sync_service_url_; 778 const GURL sync_service_url_;
793 779
794 // The time that OnConfigureStart is called. This member is zero if 780 // The time that OnConfigureStart is called. This member is zero if
795 // OnConfigureStart has not yet been called, and is reset to zero once 781 // OnConfigureStart has not yet been called, and is reset to zero once
796 // OnConfigureDone is called. 782 // OnConfigureDone is called.
797 base::Time sync_configure_start_time_; 783 base::Time sync_configure_start_time_;
798 784
799 // Callback to update the network time; used for initializing the engine. 785 // Callback to update the network time; used for initializing the engine.
800 syncer::NetworkTimeUpdateCallback network_time_update_callback_; 786 syncer::NetworkTimeUpdateCallback network_time_update_callback_;
801 787
802 // The path to the base directory under which sync should store its
803 // information.
804 base::FilePath base_directory_;
805
806 // The request context in which sync should operate. 788 // The request context in which sync should operate.
807 scoped_refptr<net::URLRequestContextGetter> url_request_context_; 789 scoped_refptr<net::URLRequestContextGetter> url_request_context_;
808 790
809 // An identifier representing this instance for debugging purposes.
810 std::string debug_identifier_;
811
812 // The product channel of the embedder.
813 version_info::Channel channel_;
814
815 // Threading context. 791 // Threading context.
816 base::SequencedWorkerPool* blocking_pool_; 792 base::SequencedWorkerPool* blocking_pool_;
817 793
818 // Indicates if this is the first time sync is being configured. This value 794 // Indicates if this is the first time sync is being configured. This value
819 // is equal to !IsFirstSetupComplete() at the time of OnEngineInitialized(). 795 // is equal to !IsFirstSetupComplete() at the time of OnEngineInitialized().
820 bool is_first_time_sync_configure_; 796 bool is_first_time_sync_configure_;
821 797
822 // Number of UIs currently configuring the Sync service. When this number 798 // Number of UIs currently configuring the Sync service. When this number
823 // is decremented back to zero, Sync setup is marked no longer in progress. 799 // is decremented back to zero, Sync setup is marked no longer in progress.
824 int outstanding_setup_in_progress_handles_ = 0; 800 int outstanding_setup_in_progress_handles_ = 0;
825 801
826 // List of available data type controllers. 802 // List of available data type controllers.
827 syncer::DataTypeController::TypeMap data_type_controllers_; 803 syncer::DataTypeController::TypeMap data_type_controllers_;
828 804
829 // Whether the SyncEngine has been initialized. 805 // Whether the SyncEngine has been initialized.
830 bool engine_initialized_; 806 bool engine_initialized_;
831 807
832 // Set when sync receives DISABLED_BY_ADMIN error from server. Prevents 808 // Set when sync receives DISABLED_BY_ADMIN error from server. Prevents
833 // ProfileSyncService from starting engine till browser restarted or user 809 // ProfileSyncService from starting engine till browser restarted or user
834 // signed out. 810 // signed out.
835 bool sync_disabled_by_admin_; 811 bool sync_disabled_by_admin_;
836 812
837 // Set to true if a signin has completed but we're still waiting for the 813 // Set to true if a signin has completed but we're still waiting for the
838 // engine to refresh its credentials. 814 // engine to refresh its credentials.
839 bool is_auth_in_progress_; 815 bool is_auth_in_progress_;
840 816
841 // Encapsulates user signin - used to set/get the user's authenticated
842 // email address.
843 const std::unique_ptr<SigninManagerWrapper> signin_;
844
845 // Information describing an unrecoverable error. 817 // Information describing an unrecoverable error.
846 UnrecoverableErrorReason unrecoverable_error_reason_; 818 UnrecoverableErrorReason unrecoverable_error_reason_;
847 std::string unrecoverable_error_message_; 819 std::string unrecoverable_error_message_;
848 tracked_objects::Location unrecoverable_error_location_; 820 tracked_objects::Location unrecoverable_error_location_;
849 821
850 // Manages the start and stop of the data types. 822 // Manages the start and stop of the data types.
851 std::unique_ptr<syncer::DataTypeManager> data_type_manager_; 823 std::unique_ptr<syncer::DataTypeManager> data_type_manager_;
852 824
853 base::ObserverList<syncer::SyncServiceObserver> observers_; 825 base::ObserverList<syncer::SyncServiceObserver> observers_;
854 base::ObserverList<syncer::ProtocolEventObserver> protocol_event_observers_; 826 base::ObserverList<syncer::ProtocolEventObserver> protocol_event_observers_;
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
899 871
900 syncer::DataTypeManager::ConfigureStatus configure_status_; 872 syncer::DataTypeManager::ConfigureStatus configure_status_;
901 873
902 // The set of currently enabled sync experiments. 874 // The set of currently enabled sync experiments.
903 syncer::Experiments current_experiments_; 875 syncer::Experiments current_experiments_;
904 876
905 // Sync's internal debug info listener. Used to record datatype configuration 877 // Sync's internal debug info listener. Used to record datatype configuration
906 // and association information. 878 // and association information.
907 syncer::WeakHandle<syncer::DataTypeDebugInfoListener> debug_info_listener_; 879 syncer::WeakHandle<syncer::DataTypeDebugInfoListener> debug_info_listener_;
908 880
909 // The thread where all the sync operations happen. This thread is kept alive
910 // until browser shutdown and reused if sync is turned off and on again. It is
911 // joined during the shutdown process, but there is an abort mechanism in
912 // place to prevent slow HTTP requests from blocking browser shutdown.
913 std::unique_ptr<base::Thread> sync_thread_;
914
915 // ProfileSyncService uses this service to get access tokens. 881 // ProfileSyncService uses this service to get access tokens.
916 ProfileOAuth2TokenService* const oauth2_token_service_; 882 ProfileOAuth2TokenService* const oauth2_token_service_;
917 883
918 // ProfileSyncService needs to remember access token in order to invalidate it 884 // ProfileSyncService needs to remember access token in order to invalidate it
919 // with OAuth2TokenService. 885 // with OAuth2TokenService.
920 std::string access_token_; 886 std::string access_token_;
921 887
922 // ProfileSyncService needs to hold reference to access_token_request_ for 888 // ProfileSyncService needs to hold reference to access_token_request_ for
923 // the duration of request in order to receive callbacks. 889 // the duration of request in order to receive callbacks.
924 std::unique_ptr<OAuth2TokenService::Request> access_token_request_; 890 std::unique_ptr<OAuth2TokenService::Request> access_token_request_;
(...skipping 20 matching lines...) Expand all
945 // Locally owned SyncableService and ModelTypeSyncBridge implementations. 911 // Locally owned SyncableService and ModelTypeSyncBridge implementations.
946 std::unique_ptr<sync_sessions::SessionsSyncManager> sessions_sync_manager_; 912 std::unique_ptr<sync_sessions::SessionsSyncManager> sessions_sync_manager_;
947 std::unique_ptr<syncer::DeviceInfoSyncService> device_info_sync_service_; 913 std::unique_ptr<syncer::DeviceInfoSyncService> device_info_sync_service_;
948 std::unique_ptr<syncer::DeviceInfoSyncBridge> device_info_service_; 914 std::unique_ptr<syncer::DeviceInfoSyncBridge> device_info_service_;
949 915
950 std::unique_ptr<syncer::NetworkResources> network_resources_; 916 std::unique_ptr<syncer::NetworkResources> network_resources_;
951 917
952 StartBehavior start_behavior_; 918 StartBehavior start_behavior_;
953 std::unique_ptr<syncer::StartupController> startup_controller_; 919 std::unique_ptr<syncer::StartupController> startup_controller_;
954 920
955 // The full path to the sync data directory.
956 base::FilePath directory_path_;
957
958 std::unique_ptr<syncer::SyncStoppedReporter> sync_stopped_reporter_; 921 std::unique_ptr<syncer::SyncStoppedReporter> sync_stopped_reporter_;
959 922
960 // Listens for the system being under memory pressure. 923 // Listens for the system being under memory pressure.
961 std::unique_ptr<base::MemoryPressureListener> memory_pressure_listener_; 924 std::unique_ptr<base::MemoryPressureListener> memory_pressure_listener_;
962 925
963 // Nigori state after user switching to custom passphrase, saved until 926 // Nigori state after user switching to custom passphrase, saved until
964 // transition steps complete. It will be injected into new engine after sync 927 // transition steps complete. It will be injected into new engine after sync
965 // restart. 928 // restart.
966 std::unique_ptr<syncer::SyncEncryptionHandler::NigoriState> 929 std::unique_ptr<syncer::SyncEncryptionHandler::NigoriState>
967 saved_nigori_state_; 930 saved_nigori_state_;
(...skipping 24 matching lines...) Expand all
992 base::WeakPtrFactory<ProfileSyncService> weak_factory_; 955 base::WeakPtrFactory<ProfileSyncService> weak_factory_;
993 956
994 DISALLOW_COPY_AND_ASSIGN(ProfileSyncService); 957 DISALLOW_COPY_AND_ASSIGN(ProfileSyncService);
995 }; 958 };
996 959
997 bool ShouldShowActionOnUI(const syncer::SyncProtocolError& error); 960 bool ShouldShowActionOnUI(const syncer::SyncProtocolError& error);
998 961
999 } // namespace browser_sync 962 } // namespace browser_sync
1000 963
1001 #endif // COMPONENTS_BROWSER_SYNC_PROFILE_SYNC_SERVICE_H_ 964 #endif // COMPONENTS_BROWSER_SYNC_PROFILE_SYNC_SERVICE_H_
OLDNEW
« no previous file with comments | « components/browser_sync/abstract_profile_sync_service_test.cc ('k') | components/browser_sync/profile_sync_service.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698