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

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

Issue 9956097: suppress user/password dialog when re-enabling sync (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Spare Bootstrap token. Created 8 years, 8 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 #include "chrome/browser/sync/profile_sync_service.h" 5 #include "chrome/browser/sync/profile_sync_service.h"
6 6
7 #include <cstddef> 7 #include <cstddef>
8 #include <map> 8 #include <map>
9 #include <set> 9 #include <set>
10 #include <utility> 10 #include <utility>
(...skipping 22 matching lines...) Expand all
33 #include "chrome/browser/sync/api/sync_error.h" 33 #include "chrome/browser/sync/api/sync_error.h"
34 #include "chrome/browser/sync/backend_migrator.h" 34 #include "chrome/browser/sync/backend_migrator.h"
35 #include "chrome/browser/sync/glue/change_processor.h" 35 #include "chrome/browser/sync/glue/change_processor.h"
36 #include "chrome/browser/sync/glue/chrome_report_unrecoverable_error.h" 36 #include "chrome/browser/sync/glue/chrome_report_unrecoverable_error.h"
37 #include "chrome/browser/sync/glue/data_type_controller.h" 37 #include "chrome/browser/sync/glue/data_type_controller.h"
38 #include "chrome/browser/sync/glue/session_data_type_controller.h" 38 #include "chrome/browser/sync/glue/session_data_type_controller.h"
39 #include "chrome/browser/sync/glue/session_model_associator.h" 39 #include "chrome/browser/sync/glue/session_model_associator.h"
40 #include "chrome/browser/sync/glue/typed_url_data_type_controller.h" 40 #include "chrome/browser/sync/glue/typed_url_data_type_controller.h"
41 #include "chrome/browser/sync/internal_api/configure_reason.h" 41 #include "chrome/browser/sync/internal_api/configure_reason.h"
42 #include "chrome/browser/sync/internal_api/sync_manager.h" 42 #include "chrome/browser/sync/internal_api/sync_manager.h"
43 #include "chrome/browser/sync/internal_api/write_node.h"
44 #include "chrome/browser/sync/internal_api/write_transaction.h"
43 #include "chrome/browser/sync/profile_sync_components_factory_impl.h" 45 #include "chrome/browser/sync/profile_sync_components_factory_impl.h"
44 #include "chrome/browser/sync/sync_global_error.h" 46 #include "chrome/browser/sync/sync_global_error.h"
45 #include "chrome/browser/sync/user_selectable_sync_type.h" 47 #include "chrome/browser/sync/user_selectable_sync_type.h"
46 #include "chrome/browser/ui/browser.h" 48 #include "chrome/browser/ui/browser.h"
47 #include "chrome/browser/ui/browser_list.h" 49 #include "chrome/browser/ui/browser_list.h"
48 #include "chrome/browser/ui/browser_window.h" 50 #include "chrome/browser/ui/browser_window.h"
49 #include "chrome/browser/ui/global_error_service.h" 51 #include "chrome/browser/ui/global_error_service.h"
50 #include "chrome/browser/ui/global_error_service_factory.h" 52 #include "chrome/browser/ui/global_error_service_factory.h"
51 #include "chrome/browser/ui/webui/signin/login_ui_service.h" 53 #include "chrome/browser/ui/webui/signin/login_ui_service.h"
52 #include "chrome/browser/ui/webui/signin/login_ui_service_factory.h" 54 #include "chrome/browser/ui/webui/signin/login_ui_service_factory.h"
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
194 196
195 RegisterAuthNotifications(); 197 RegisterAuthNotifications();
196 198
197 if (!HasSyncSetupCompleted()) 199 if (!HasSyncSetupCompleted())
198 DisableForUser(); // Clean up in case of previous crash / setup abort. 200 DisableForUser(); // Clean up in case of previous crash / setup abort.
199 201
200 TryStart(); 202 TryStart();
201 } 203 }
202 204
203 void ProfileSyncService::TryStart() { 205 void ProfileSyncService::TryStart() {
206 LOG(WARNING) << "TryStart";
204 if (!sync_prefs_.IsStartSuppressed() && AreCredentialsAvailable()) { 207 if (!sync_prefs_.IsStartSuppressed() && AreCredentialsAvailable()) {
205 if (HasSyncSetupCompleted() || auto_start_enabled_) { 208 if (HasSyncSetupCompleted() || auto_start_enabled_) {
206 // If sync setup has completed we always start the backend. 209 // If sync setup has completed we always start the backend.
207 // If autostart is enabled, but we haven't completed sync setup, we try to 210 // If autostart is enabled, but we haven't completed sync setup, we try to
208 // start sync anyway, since it's possible we crashed/shutdown after 211 // start sync anyway, since it's possible we crashed/shutdown after
209 // logging in but before the backend finished initializing the last time. 212 // logging in but before the backend finished initializing the last time.
210 // Note that if we haven't finished setting up sync, backend bring up will 213 // Note that if we haven't finished setting up sync, backend bring up will
211 // be done by the wizard. 214 // be done by the wizard.
212 StartUp(); 215 StartUp();
213 } 216 }
214 } else if (HasSyncSetupCompleted()) { 217 } else if (HasSyncSetupCompleted()) {
215 TokenService* token_service = TokenServiceFactory::GetForProfile(profile_); 218 TokenService* token_service = TokenServiceFactory::GetForProfile(profile_);
216 if (token_service && token_service->TokensLoadedFromDB() && 219 if (token_service && token_service->TokensLoadedFromDB() &&
217 !AreCredentialsAvailable()) { 220 !AreCredentialsAvailable()) {
218 // The token service has lost sync's tokens. We cannot recover from this 221 // The token service has lost sync's tokens. We cannot recover from this
219 // without signing back in, which is not yet supported. For now, we 222 // without signing back in, which is not yet supported. For now, we
220 // trigger an unrecoverable error. 223 // trigger an unrecoverable error.
221 OnUnrecoverableError(FROM_HERE, "Sync credentials lost."); 224 OnUnrecoverableError(FROM_HERE, "Sync credentials lost.");
222 } 225 }
226 } else {
227 LOG(WARNING) << "TryStart: did nothing.";
223 } 228 }
224 } 229 }
225 230
226 void ProfileSyncService::RegisterAuthNotifications() { 231 void ProfileSyncService::RegisterAuthNotifications() {
227 TokenService* token_service = TokenServiceFactory::GetForProfile(profile_); 232 TokenService* token_service = TokenServiceFactory::GetForProfile(profile_);
228 registrar_.Add(this, 233 registrar_.Add(this,
229 chrome::NOTIFICATION_TOKEN_AVAILABLE, 234 chrome::NOTIFICATION_TOKEN_AVAILABLE,
230 content::Source<TokenService>(token_service)); 235 content::Source<TokenService>(token_service));
231 registrar_.Add(this, 236 registrar_.Add(this,
232 chrome::NOTIFICATION_TOKEN_LOADING_FINISHED, 237 chrome::NOTIFICATION_TOKEN_LOADING_FINISHED,
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
325 scoped_refptr<net::URLRequestContextGetter> request_context_getter( 330 scoped_refptr<net::URLRequestContextGetter> request_context_getter(
326 profile_->GetRequestContext()); 331 profile_->GetRequestContext());
327 332
328 if (delete_stale_data) 333 if (delete_stale_data)
329 ClearStaleErrors(); 334 ClearStaleErrors();
330 335
331 backend_unrecoverable_error_handler_.reset( 336 backend_unrecoverable_error_handler_.reset(
332 new browser_sync::BackendUnrecoverableErrorHandler( 337 new browser_sync::BackendUnrecoverableErrorHandler(
333 MakeWeakHandle(AsWeakPtr()))); 338 MakeWeakHandle(AsWeakPtr())));
334 339
340 LOG(WARNING) << "Initializing backend";
335 backend_->Initialize( 341 backend_->Initialize(
336 this, 342 this,
337 MakeWeakHandle(sync_js_controller_.AsWeakPtr()), 343 MakeWeakHandle(sync_js_controller_.AsWeakPtr()),
338 sync_service_url_, 344 sync_service_url_,
339 initial_types, 345 initial_types,
340 credentials, 346 credentials,
341 delete_stale_data, 347 delete_stale_data,
342 backend_unrecoverable_error_handler_.get(), 348 backend_unrecoverable_error_handler_.get(),
343 &browser_sync::ChromeReportUnrecoverableError); 349 &browser_sync::ChromeReportUnrecoverableError);
344 } 350 }
345 351
346 void ProfileSyncService::CreateBackend() { 352 void ProfileSyncService::CreateBackend() {
353 LOG(WARNING) << "CreateBackend";
347 backend_.reset( 354 backend_.reset(
348 new SyncBackendHost(profile_->GetDebugName(), 355 new SyncBackendHost(profile_->GetDebugName(),
349 profile_, sync_prefs_.AsWeakPtr())); 356 profile_, sync_prefs_.AsWeakPtr()));
350 } 357 }
351 358
352 bool ProfileSyncService::IsEncryptedDatatypeEnabled() const { 359 bool ProfileSyncService::IsEncryptedDatatypeEnabled() const {
353 if (encryption_pending()) 360 if (encryption_pending())
354 return true; 361 return true;
355 const syncable::ModelTypeSet preferred_types = GetPreferredDataTypes(); 362 const syncable::ModelTypeSet preferred_types = GetPreferredDataTypes();
356 const syncable::ModelTypeSet encrypted_types = GetEncryptedDataTypes(); 363 const syncable::ModelTypeSet encrypted_types = GetEncryptedDataTypes();
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
390 // Don't start up multiple times. 397 // Don't start up multiple times.
391 if (backend_.get()) { 398 if (backend_.get()) {
392 DVLOG(1) << "Skipping bringing up backend host."; 399 DVLOG(1) << "Skipping bringing up backend host.";
393 return; 400 return;
394 } 401 }
395 402
396 DCHECK(AreCredentialsAvailable()); 403 DCHECK(AreCredentialsAvailable());
397 404
398 last_synced_time_ = sync_prefs_.GetLastSyncedTime(); 405 last_synced_time_ = sync_prefs_.GetLastSyncedTime();
399 406
400 CreateBackend(); 407 CreateBackend();
Nicolas Zea 2012/04/03 21:00:33 Right before this is where you should probably fil
kochi 2012/04/03 22:45:43 Done.
401 408
402 // Initialize the backend. Every time we start up a new SyncBackendHost, 409 // Initialize the backend. Every time we start up a new SyncBackendHost,
403 // we'll want to start from a fresh SyncDB, so delete any old one that might 410 // we'll want to start from a fresh SyncDB, so delete any old one that might
404 // be there. 411 // be there.
405 InitializeBackend(!HasSyncSetupCompleted()); 412 InitializeBackend(!HasSyncSetupCompleted());
406 413
407 if (!sync_global_error_.get()) { 414 if (!sync_global_error_.get()) {
408 sync_global_error_.reset(new SyncGlobalError(this)); 415 sync_global_error_.reset(new SyncGlobalError(this));
409 GlobalErrorServiceFactory::GetForProfile(profile_)->AddGlobalError( 416 GlobalErrorServiceFactory::GetForProfile(profile_)->AddGlobalError(
410 sync_global_error_.get()); 417 sync_global_error_.get());
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after
612 failed_datatypes_handler_.UpdateFailedDatatypes(errors, 619 failed_datatypes_handler_.UpdateFailedDatatypes(errors,
613 FailedDatatypesHandler::RUNTIME); 620 FailedDatatypesHandler::RUNTIME);
614 621
615 MessageLoop::current()->PostTask(FROM_HERE, 622 MessageLoop::current()->PostTask(FROM_HERE,
616 base::Bind(&ProfileSyncService::ReconfigureDatatypeManager, 623 base::Bind(&ProfileSyncService::ReconfigureDatatypeManager,
617 weak_factory_.GetWeakPtr())); 624 weak_factory_.GetWeakPtr()));
618 } 625 }
619 626
620 void ProfileSyncService::OnBackendInitialized( 627 void ProfileSyncService::OnBackendInitialized(
621 const WeakHandle<JsBackend>& js_backend, bool success) { 628 const WeakHandle<JsBackend>& js_backend, bool success) {
629 LOG(WARNING) << "OnBackendInitialized() : " << success;
622 if (!HasSyncSetupCompleted()) { 630 if (!HasSyncSetupCompleted()) {
623 UMA_HISTOGRAM_BOOLEAN("Sync.BackendInitializeFirstTimeSuccess", success); 631 UMA_HISTOGRAM_BOOLEAN("Sync.BackendInitializeFirstTimeSuccess", success);
624 } else { 632 } else {
625 UMA_HISTOGRAM_BOOLEAN("Sync.BackendInitializeRestoreSuccess", success); 633 UMA_HISTOGRAM_BOOLEAN("Sync.BackendInitializeRestoreSuccess", success);
626 } 634 }
627 635
628 if (!success) { 636 if (!success) {
629 // Something went unexpectedly wrong. Play it safe: nuke our current state 637 // Something went unexpectedly wrong. Play it safe: nuke our current state
630 // and prepare ourselves to try again later. 638 // and prepare ourselves to try again later.
631 DisableForUser(); 639 DisableForUser();
(...skipping 26 matching lines...) Expand all
658 } 666 }
659 667
660 if (HasSyncSetupCompleted()) { 668 if (HasSyncSetupCompleted()) {
661 ConfigureDataTypeManager(); 669 ConfigureDataTypeManager();
662 } else { 670 } else {
663 DCHECK(FirstSetupInProgress()); 671 DCHECK(FirstSetupInProgress());
664 } 672 }
665 } 673 }
666 674
667 void ProfileSyncService::OnSyncCycleCompleted() { 675 void ProfileSyncService::OnSyncCycleCompleted() {
676 LOG(WARNING) << "OnSyncCycleCompleted";
668 UpdateLastSyncedTime(); 677 UpdateLastSyncedTime();
669 if (GetSessionModelAssociator()) { 678 if (GetSessionModelAssociator()) {
670 // Trigger garbage collection of old sessions now that we've downloaded 679 // Trigger garbage collection of old sessions now that we've downloaded
671 // any new session data. TODO(zea): Have this be a notification the session 680 // any new session data. TODO(zea): Have this be a notification the session
672 // model associator listens too. Also consider somehow plumbing the current 681 // model associator listens too. Also consider somehow plumbing the current
673 // server time as last reported by CheckServerReachable, so we don't have to 682 // server time as last reported by CheckServerReachable, so we don't have to
674 // rely on the local clock, which may be off significantly. 683 // rely on the local clock, which may be off significantly.
675 MessageLoop::current()->PostTask(FROM_HERE, 684 MessageLoop::current()->PostTask(FROM_HERE,
676 base::Bind(&browser_sync::SessionModelAssociator::DeleteStaleSessions, 685 base::Bind(&browser_sync::SessionModelAssociator::DeleteStaleSessions,
677 GetSessionModelAssociator()->AsWeakPtr())); 686 GetSessionModelAssociator()->AsWeakPtr()));
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
770 default: 779 default:
771 NOTREACHED(); 780 NOTREACHED();
772 return GoogleServiceAuthError(GoogleServiceAuthError::CONNECTION_FAILED); 781 return GoogleServiceAuthError(GoogleServiceAuthError::CONNECTION_FAILED);
773 } 782 }
774 } 783 }
775 784
776 } // namespace 785 } // namespace
777 786
778 void ProfileSyncService::OnConnectionStatusChange( 787 void ProfileSyncService::OnConnectionStatusChange(
779 sync_api::ConnectionStatus status) { 788 sync_api::ConnectionStatus status) {
789 LOG(WARNING) << "OnConnectionStatusChange";
780 UpdateAuthErrorState(ConnectionStatusToAuthError(status)); 790 UpdateAuthErrorState(ConnectionStatusToAuthError(status));
781 } 791 }
782 792
783 void ProfileSyncService::OnStopSyncingPermanently() { 793 void ProfileSyncService::OnStopSyncingPermanently() {
794 LOG(WARNING) << "OnStopSyncingPermanently";
784 UpdateAuthErrorState( 795 UpdateAuthErrorState(
785 GoogleServiceAuthError(GoogleServiceAuthError::SERVICE_UNAVAILABLE)); 796 GoogleServiceAuthError(GoogleServiceAuthError::SERVICE_UNAVAILABLE));
786 sync_prefs_.SetStartSuppressed(true); 797 sync_prefs_.SetStartSuppressed(true);
787 DisableForUser(); 798 DisableForUser();
788 } 799 }
789 800
790 void ProfileSyncService::OnClearServerDataTimeout() { 801 void ProfileSyncService::OnClearServerDataTimeout() {
802 LOG(WARNING) << "OnClearServerDataTimeout";
791 if (clear_server_data_state_ != CLEAR_SUCCEEDED && 803 if (clear_server_data_state_ != CLEAR_SUCCEEDED &&
792 clear_server_data_state_ != CLEAR_FAILED) { 804 clear_server_data_state_ != CLEAR_FAILED) {
793 clear_server_data_state_ = CLEAR_FAILED; 805 clear_server_data_state_ = CLEAR_FAILED;
794 NotifyObservers(); 806 NotifyObservers();
795 } 807 }
796 } 808 }
797 809
798 void ProfileSyncService::OnClearServerDataFailed() { 810 void ProfileSyncService::OnClearServerDataFailed() {
811 LOG(WARNING) << "OnClearServerDataFailed";
799 clear_server_data_timer_.Stop(); 812 clear_server_data_timer_.Stop();
800 813
801 // Only once clear has succeeded there is no longer a need to transition to 814 // Only once clear has succeeded there is no longer a need to transition to
802 // a failed state as sync is disabled locally. Also, no need to fire off 815 // a failed state as sync is disabled locally. Also, no need to fire off
803 // the observers if the state didn't change (i.e. it was FAILED before). 816 // the observers if the state didn't change (i.e. it was FAILED before).
804 if (clear_server_data_state_ != CLEAR_SUCCEEDED && 817 if (clear_server_data_state_ != CLEAR_SUCCEEDED &&
805 clear_server_data_state_ != CLEAR_FAILED) { 818 clear_server_data_state_ != CLEAR_FAILED) {
806 clear_server_data_state_ = CLEAR_FAILED; 819 clear_server_data_state_ = CLEAR_FAILED;
807 NotifyObservers(); 820 NotifyObservers();
808 } 821 }
809 } 822 }
810 823
811 void ProfileSyncService::OnClearServerDataSucceeded() { 824 void ProfileSyncService::OnClearServerDataSucceeded() {
825 LOG(WARNING) << "OnClearServerDataSucceeded";
812 clear_server_data_timer_.Stop(); 826 clear_server_data_timer_.Stop();
813 827
814 // Even if the timout fired, we still transition to the succeeded state as 828 // Even if the timout fired, we still transition to the succeeded state as
815 // we want UI to update itself and no longer allow the user to press "clear" 829 // we want UI to update itself and no longer allow the user to press "clear"
816 if (clear_server_data_state_ != CLEAR_SUCCEEDED) { 830 if (clear_server_data_state_ != CLEAR_SUCCEEDED) {
817 clear_server_data_state_ = CLEAR_SUCCEEDED; 831 clear_server_data_state_ = CLEAR_SUCCEEDED;
818 NotifyObservers(); 832 NotifyObservers();
819 } 833 }
820 } 834 }
821 835
822 void ProfileSyncService::OnPassphraseRequired( 836 void ProfileSyncService::OnPassphraseRequired(
823 sync_api::PassphraseRequiredReason reason, 837 sync_api::PassphraseRequiredReason reason,
824 const sync_pb::EncryptedData& pending_keys) { 838 const sync_pb::EncryptedData& pending_keys) {
839 LOG(WARNING) << "OnPassphraseRequired";
825 DCHECK(backend_.get()); 840 DCHECK(backend_.get());
826 DCHECK(backend_->IsNigoriEnabled()); 841 DCHECK(backend_->IsNigoriEnabled());
827 842
828 // TODO(lipalani) : add this check to other locations as well. 843 // TODO(lipalani) : add this check to other locations as well.
829 if (unrecoverable_error_detected_) { 844 if (unrecoverable_error_detected_) {
830 // When unrecoverable error is detected we post a task to shutdown the 845 // When unrecoverable error is detected we post a task to shutdown the
831 // backend. The task might not have executed yet. 846 // backend. The task might not have executed yet.
832 return; 847 return;
833 } 848 }
834 849
835 DVLOG(1) << "Passphrase required with reason: " 850 DVLOG(1) << "Passphrase required with reason: "
836 << sync_api::PassphraseRequiredReasonToString(reason); 851 << sync_api::PassphraseRequiredReasonToString(reason);
837 passphrase_required_reason_ = reason; 852 passphrase_required_reason_ = reason;
838 853
839 // Notify observers that the passphrase status may have changed. 854 // Notify observers that the passphrase status may have changed.
840 NotifyObservers(); 855 NotifyObservers();
841 } 856 }
842 857
843 void ProfileSyncService::OnPassphraseAccepted() { 858 void ProfileSyncService::OnPassphraseAccepted() {
859 LOG(WARNING) << "OnPassphraseAccepted";
844 DVLOG(1) << "Received OnPassphraseAccepted."; 860 DVLOG(1) << "Received OnPassphraseAccepted.";
845 // If we are not using an explicit passphrase, and we have a cache of the gaia 861 // If we are not using an explicit passphrase, and we have a cache of the gaia
846 // password, use it for encryption at this point. 862 // password, use it for encryption at this point.
847 DCHECK(cached_passphrase_.empty()) << 863 DCHECK(cached_passphrase_.empty()) <<
848 "Passphrase no longer required but there is still a cached passphrase"; 864 "Passphrase no longer required but there is still a cached passphrase";
849 865
850 // Reset passphrase_required_reason_ since we know we no longer require the 866 // Reset passphrase_required_reason_ since we know we no longer require the
851 // passphrase. We do this here rather than down in ResolvePassphraseRequired() 867 // passphrase. We do this here rather than down in ResolvePassphraseRequired()
852 // because that can be called by OnPassphraseRequired() if no encrypted data 868 // because that can be called by OnPassphraseRequired() if no encrypted data
853 // types are enabled, and we don't want to clobber the true passphrase error. 869 // types are enabled, and we don't want to clobber the true passphrase error.
(...skipping 18 matching lines...) Expand all
872 encrypted_types_ = encrypted_types; 888 encrypted_types_ = encrypted_types;
873 encrypt_everything_ = encrypt_everything; 889 encrypt_everything_ = encrypt_everything;
874 DVLOG(1) << "Encrypted types changed to " 890 DVLOG(1) << "Encrypted types changed to "
875 << syncable::ModelTypeSetToString(encrypted_types_) 891 << syncable::ModelTypeSetToString(encrypted_types_)
876 << " (encrypt everything is set to " 892 << " (encrypt everything is set to "
877 << (encrypt_everything_ ? "true" : "false") << ")"; 893 << (encrypt_everything_ ? "true" : "false") << ")";
878 DCHECK(encrypted_types_.Has(syncable::PASSWORDS)); 894 DCHECK(encrypted_types_.Has(syncable::PASSWORDS));
879 } 895 }
880 896
881 void ProfileSyncService::OnEncryptionComplete() { 897 void ProfileSyncService::OnEncryptionComplete() {
898 LOG(WARNING) << "OnEncryptionComplete";
882 DVLOG(1) << "Encryption complete"; 899 DVLOG(1) << "Encryption complete";
883 if (encryption_pending_ && encrypt_everything_) { 900 if (encryption_pending_ && encrypt_everything_) {
884 encryption_pending_ = false; 901 encryption_pending_ = false;
885 // This is to nudge the integration tests when encryption is 902 // This is to nudge the integration tests when encryption is
886 // finished. 903 // finished.
887 NotifyObservers(); 904 NotifyObservers();
888 } 905 }
889 } 906 }
890 907
891 void ProfileSyncService::OnMigrationNeededForTypes( 908 void ProfileSyncService::OnMigrationNeededForTypes(
892 syncable::ModelTypeSet types) { 909 syncable::ModelTypeSet types) {
893 DCHECK(backend_initialized_); 910 DCHECK(backend_initialized_);
894 DCHECK(data_type_manager_.get()); 911 DCHECK(data_type_manager_.get());
895 912
896 // Migrator must be valid, because we don't sync until it is created and this 913 // Migrator must be valid, because we don't sync until it is created and this
897 // callback originates from a sync cycle. 914 // callback originates from a sync cycle.
898 migrator_->MigrateTypes(types); 915 migrator_->MigrateTypes(types);
899 } 916 }
900 917
901 void ProfileSyncService::OnActionableError(const SyncProtocolError& error) { 918 void ProfileSyncService::OnActionableError(const SyncProtocolError& error) {
919 LOG(WARNING) << "OnActionableError";
902 last_actionable_error_ = error; 920 last_actionable_error_ = error;
903 DCHECK_NE(last_actionable_error_.action, 921 DCHECK_NE(last_actionable_error_.action,
904 browser_sync::UNKNOWN_ACTION); 922 browser_sync::UNKNOWN_ACTION);
905 switch (error.action) { 923 switch (error.action) {
906 case browser_sync::UPGRADE_CLIENT: 924 case browser_sync::UPGRADE_CLIENT:
907 case browser_sync::CLEAR_USER_DATA_AND_RESYNC: 925 case browser_sync::CLEAR_USER_DATA_AND_RESYNC:
908 case browser_sync::ENABLE_SYNC_ON_ACCOUNT: 926 case browser_sync::ENABLE_SYNC_ON_ACCOUNT:
909 case browser_sync::STOP_AND_RESTART_SYNC: 927 case browser_sync::STOP_AND_RESTART_SYNC:
910 // TODO(lipalani) : if setup in progress we want to display these 928 // TODO(lipalani) : if setup in progress we want to display these
911 // actions in the popup. The current experience might not be optimal for 929 // actions in the popup. The current experience might not be optimal for
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
1064 // Selected type has changed - log it. 1082 // Selected type has changed - log it.
1065 UMA_HISTOGRAM_ENUMERATION( 1083 UMA_HISTOGRAM_ENUMERATION(
1066 "Sync.CustomSync", 1084 "Sync.CustomSync",
1067 user_selectable_types[i], 1085 user_selectable_types[i],
1068 browser_sync::user_selectable_type::SELECTABLE_DATATYPE_COUNT + 1); 1086 browser_sync::user_selectable_type::SELECTABLE_DATATYPE_COUNT + 1);
1069 } 1087 }
1070 } 1088 }
1071 } 1089 }
1072 } 1090 }
1073 1091
1092 void ProfileSyncService::RefreshSpareBootstrapToken(const std::string& passphras e) {
1093 // All accesses to the cryptographer are protected by a transaction.
1094 sync_api::WriteTransaction trans(FROM_HERE, GetUserShare());
1095 browser_sync::Cryptographer* cryptographer = trans.GetCryptographer();
Nicolas Zea 2012/04/03 21:00:33 This is using the sync's internal cryptographer. I
kochi 2012/04/03 22:45:43 Thanks! This code snippet was very cryptic and I
1096 browser_sync::KeyParams key_params = {"localhost", "dummy", passphrase};
1097 sync_api::WriteNode node(&trans);
1098 if (!node.InitByTagLookup(browser_sync::kNigoriTag)) {
1099 NOTREACHED();
1100 return;
1101 }
1102
1103 std::string bootstrap_token;
1104 if (!cryptographer->AddKey(key_params)) {
1105 NOTREACHED() << "Failed to add key to cryptographer.";
1106 }
1107 cryptographer->GetBootstrapToken(&bootstrap_token);
1108 sync_prefs_.SetSpareBootstrapToken(bootstrap_token);
1109 }
1110
1074 void ProfileSyncService::OnUserChoseDatatypes(bool sync_everything, 1111 void ProfileSyncService::OnUserChoseDatatypes(bool sync_everything,
1075 syncable::ModelTypeSet chosen_types) { 1112 syncable::ModelTypeSet chosen_types) {
1076 if (!backend_.get() && 1113 if (!backend_.get() &&
1077 unrecoverable_error_detected_ == false) { 1114 unrecoverable_error_detected_ == false) {
1078 NOTREACHED(); 1115 NOTREACHED();
1079 return; 1116 return;
1080 } 1117 }
1081 1118
1082 UpdateSelectedTypesHistogram(sync_everything, chosen_types); 1119 UpdateSelectedTypesHistogram(sync_everything, chosen_types);
1083 sync_prefs_.SetKeepEverythingSynced(sync_everything); 1120 sync_prefs_.SetKeepEverythingSynced(sync_everything);
(...skipping 338 matching lines...) Expand 10 before | Expand all | Expand 10 after
1422 content::Details<const GoogleServiceSigninSuccessDetails>( 1459 content::Details<const GoogleServiceSigninSuccessDetails>(
1423 details).ptr(); 1460 details).ptr();
1424 DCHECK(!successful->password.empty()); 1461 DCHECK(!successful->password.empty());
1425 if (!sync_prefs_.IsStartSuppressed()) { 1462 if (!sync_prefs_.IsStartSuppressed()) {
1426 cached_passphrase_ = successful->password; 1463 cached_passphrase_ = successful->password;
1427 // Try to consume the passphrase we just cached. If the sync backend 1464 // Try to consume the passphrase we just cached. If the sync backend
1428 // is not running yet, the passphrase will remain cached until the 1465 // is not running yet, the passphrase will remain cached until the
1429 // backend starts up. 1466 // backend starts up.
1430 ConsumeCachedPassphraseIfPossible(); 1467 ConsumeCachedPassphraseIfPossible();
1431 } 1468 }
1469 RefreshSpareBootstrapToken(successful->password);
Nicolas Zea 2012/04/03 21:00:33 Condition this on OS_CHROMEOS
kochi 2012/04/03 22:45:43 Done.
1432 if (!sync_initialized() || 1470 if (!sync_initialized() ||
1433 GetAuthError().state() != GoogleServiceAuthError::NONE) { 1471 GetAuthError().state() != GoogleServiceAuthError::NONE) {
1434 // Track the fact that we're still waiting for auth to complete. 1472 // Track the fact that we're still waiting for auth to complete.
1435 is_auth_in_progress_ = true; 1473 is_auth_in_progress_ = true;
1436 } 1474 }
1437 break; 1475 break;
1438 } 1476 }
1439 case chrome::NOTIFICATION_TOKEN_REQUEST_FAILED: { 1477 case chrome::NOTIFICATION_TOKEN_REQUEST_FAILED: {
1478 LOG(WARNING) << "Got NOTIFICATION_TOKEN_REQUEST_FAILED";
1440 const TokenService::TokenRequestFailedDetails& token_details = 1479 const TokenService::TokenRequestFailedDetails& token_details =
1441 *(content::Details<const TokenService::TokenRequestFailedDetails>( 1480 *(content::Details<const TokenService::TokenRequestFailedDetails>(
1442 details).ptr()); 1481 details).ptr());
1443 if (IsTokenServiceRelevant(token_details.service())) { 1482 if (IsTokenServiceRelevant(token_details.service())) {
1444 GoogleServiceAuthError error( 1483 GoogleServiceAuthError error(
1445 GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS); 1484 GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS);
1446 UpdateAuthErrorState(error); 1485 UpdateAuthErrorState(error);
1447 } 1486 }
1448 break; 1487 break;
1449 } 1488 }
1450 case chrome::NOTIFICATION_TOKEN_AVAILABLE: { 1489 case chrome::NOTIFICATION_TOKEN_AVAILABLE: {
1490 LOG(WARNING) << "Got NOTIFICATION_TOKEN_AVAILABLE";
1451 const TokenService::TokenAvailableDetails& token_details = 1491 const TokenService::TokenAvailableDetails& token_details =
1452 *(content::Details<const TokenService::TokenAvailableDetails>( 1492 *(content::Details<const TokenService::TokenAvailableDetails>(
1453 details).ptr()); 1493 details).ptr());
1454 if (IsTokenServiceRelevant(token_details.service()) && 1494 if (IsTokenServiceRelevant(token_details.service()) &&
1455 AreCredentialsAvailable()) { 1495 AreCredentialsAvailable()) {
1456 if (backend_initialized_) 1496 if (backend_initialized_)
1457 backend_->UpdateCredentials(GetCredentials()); 1497 backend_->UpdateCredentials(GetCredentials());
1458 else if (!sync_prefs_.IsStartSuppressed()) 1498 else if (!sync_prefs_.IsStartSuppressed())
1459 StartUp(); 1499 StartUp();
1460 } 1500 }
1461 break; 1501 break;
1462 } 1502 }
1463 case chrome::NOTIFICATION_TOKEN_LOADING_FINISHED: { 1503 case chrome::NOTIFICATION_TOKEN_LOADING_FINISHED: {
1504 LOG(WARNING) << "Got NOTIFICATION_TOKEN_LOADING_FINISHED";
1464 // This notification gets fired when TokenService loads the tokens 1505 // This notification gets fired when TokenService loads the tokens
1465 // from storage. 1506 // from storage.
1466 if (AreCredentialsAvailable()) { 1507 if (AreCredentialsAvailable()) {
1467 // Initialize the backend if sync token was loaded. 1508 // Initialize the backend if sync token was loaded.
1468 if (backend_initialized_) { 1509 if (backend_initialized_) {
1469 backend_->UpdateCredentials(GetCredentials()); 1510 backend_->UpdateCredentials(GetCredentials());
1470 } 1511 }
1471 if (!sync_prefs_.IsStartSuppressed()) 1512 if (!sync_prefs_.IsStartSuppressed())
1472 StartUp(); 1513 StartUp();
1473 } else if (!auto_start_enabled_ && 1514 } else if (!auto_start_enabled_ &&
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
1528 return false; 1569 return false;
1529 1570
1530 return data_type_manager_->state() == DataTypeManager::CONFIGURED; 1571 return data_type_manager_->state() == DataTypeManager::CONFIGURED;
1531 } 1572 }
1532 1573
1533 void ProfileSyncService::StopAndSuppress() { 1574 void ProfileSyncService::StopAndSuppress() {
1534 sync_prefs_.SetStartSuppressed(true); 1575 sync_prefs_.SetStartSuppressed(true);
1535 ShutdownImpl(false); 1576 ShutdownImpl(false);
1536 } 1577 }
1537 1578
1538 void ProfileSyncService::UnsuppressAndStart() { 1579 void ProfileSyncService::Unsuppress() {
1580 LOG(WARNING) << "Unsuppress()";
1539 DCHECK(profile_); 1581 DCHECK(profile_);
1540 sync_prefs_.SetStartSuppressed(false); 1582 sync_prefs_.SetStartSuppressed(false);
1583 }
1584
1585 void ProfileSyncService::UnsuppressAndStart() {
1586 LOG(WARNING) << "UnsuppressAndStart()";
1587 Unsuppress();
1541 // Set username in SigninManager, as SigninManager::OnGetUserInfoSuccess 1588 // Set username in SigninManager, as SigninManager::OnGetUserInfoSuccess
1542 // is never called for some clients. 1589 // is never called for some clients.
1543 if (signin_ && signin_->GetAuthenticatedUsername().empty()) { 1590 if (signin_ && signin_->GetAuthenticatedUsername().empty()) {
1544 signin_->SetAuthenticatedUsername(sync_prefs_.GetGoogleServicesUsername()); 1591 signin_->SetAuthenticatedUsername(sync_prefs_.GetGoogleServicesUsername());
1545 } 1592 }
1546 TryStart(); 1593 TryStart();
1547 } 1594 }
1548 1595
1549 void ProfileSyncService::AcknowledgeSyncedTypes() { 1596 void ProfileSyncService::AcknowledgeSyncedTypes() {
1550 sync_prefs_.AcknowledgeSyncedTypes(GetRegisteredDataTypes()); 1597 sync_prefs_.AcknowledgeSyncedTypes(GetRegisteredDataTypes());
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
1586 // See http://stackoverflow.com/questions/6224121/is-new-this-myclass-undefine d-behaviour-after-directly-calling-the-destru. 1633 // See http://stackoverflow.com/questions/6224121/is-new-this-myclass-undefine d-behaviour-after-directly-calling-the-destru.
1587 ProfileSyncService* old_this = this; 1634 ProfileSyncService* old_this = this;
1588 this->~ProfileSyncService(); 1635 this->~ProfileSyncService();
1589 new(old_this) ProfileSyncService( 1636 new(old_this) ProfileSyncService(
1590 new ProfileSyncComponentsFactoryImpl(profile, 1637 new ProfileSyncComponentsFactoryImpl(profile,
1591 CommandLine::ForCurrentProcess()), 1638 CommandLine::ForCurrentProcess()),
1592 profile, 1639 profile,
1593 signin, 1640 signin,
1594 behavior); 1641 behavior);
1595 } 1642 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698