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

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

Issue 8496002: Sync: Improve handling of database load failures (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 1 month 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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 <algorithm> 7 #include <algorithm>
8 #include <cstddef> 8 #include <cstddef>
9 #include <map> 9 #include <map>
10 #include <set> 10 #include <set>
(...skipping 354 matching lines...) Expand 10 before | Expand all | Expand 10 after
365 InitializeBackend(!HasSyncSetupCompleted()); 365 InitializeBackend(!HasSyncSetupCompleted());
366 366
367 if (!sync_global_error_.get()) { 367 if (!sync_global_error_.get()) {
368 sync_global_error_.reset(new SyncGlobalError(this)); 368 sync_global_error_.reset(new SyncGlobalError(this));
369 GlobalErrorServiceFactory::GetForProfile(profile_)->AddGlobalError( 369 GlobalErrorServiceFactory::GetForProfile(profile_)->AddGlobalError(
370 sync_global_error_.get()); 370 sync_global_error_.get());
371 AddObserver(sync_global_error_.get()); 371 AddObserver(sync_global_error_.get());
372 } 372 }
373 } 373 }
374 374
375 void ProfileSyncService::Shutdown(bool sync_disabled) { 375 void ProfileSyncService::Shutdown(bool delete_stale_data) {
376 // First, we spin down the backend and wait for it to stop syncing completely 376 // First, we spin down the backend and wait for it to stop syncing completely
377 // before we Stop the data type manager. This is to avoid a late sync cycle 377 // before we Stop the data type manager. This is to avoid a late sync cycle
378 // applying changes to the sync db that wouldn't get applied via 378 // applying changes to the sync db that wouldn't get applied via
379 // ChangeProcessors, leading to back-from-the-dead bugs. 379 // ChangeProcessors, leading to back-from-the-dead bugs.
380 if (backend_.get()) 380 if (backend_.get())
381 backend_->StopSyncingForShutdown(); 381 backend_->StopSyncingForShutdown();
382 382
383 // Stop all data type controllers, if needed. Note that until Stop 383 // Stop all data type controllers, if needed. Note that until Stop
384 // completes, it is possible in theory to have a ChangeProcessor apply a 384 // completes, it is possible in theory to have a ChangeProcessor apply a
385 // change from a native model. In that case, it will get applied to the sync 385 // change from a native model. In that case, it will get applied to the sync
(...skipping 20 matching lines...) Expand all
406 406
407 // Shutdown the migrator before the backend to ensure it doesn't pull a null 407 // Shutdown the migrator before the backend to ensure it doesn't pull a null
408 // snapshot. 408 // snapshot.
409 migrator_.reset(); 409 migrator_.reset();
410 sync_js_controller_.AttachJsBackend(WeakHandle<JsBackend>()); 410 sync_js_controller_.AttachJsBackend(WeakHandle<JsBackend>());
411 411
412 // Move aside the backend so nobody else tries to use it while we are 412 // Move aside the backend so nobody else tries to use it while we are
413 // shutting it down. 413 // shutting it down.
414 scoped_ptr<SyncBackendHost> doomed_backend(backend_.release()); 414 scoped_ptr<SyncBackendHost> doomed_backend(backend_.release());
415 if (doomed_backend.get()) { 415 if (doomed_backend.get()) {
416 doomed_backend->Shutdown(sync_disabled); 416 doomed_backend->Shutdown(delete_stale_data);
417 417
418 doomed_backend.reset(); 418 doomed_backend.reset();
419 } 419 }
420 420
421 scoped_runnable_method_factory_.RevokeAll(); 421 scoped_runnable_method_factory_.RevokeAll();
422 422
423 // Clear various flags. 423 // Clear various flags.
424 expect_sync_configuration_aborted_ = false; 424 expect_sync_configuration_aborted_ = false;
425 is_auth_in_progress_ = false; 425 is_auth_in_progress_ = false;
426 backend_initialized_ = false; 426 backend_initialized_ = false;
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
549 549
550 // Shut all data types down. 550 // Shut all data types down.
551 MessageLoop::current()->PostTask(FROM_HERE, 551 MessageLoop::current()->PostTask(FROM_HERE,
552 scoped_runnable_method_factory_.NewRunnableMethod( 552 scoped_runnable_method_factory_.NewRunnableMethod(
553 &ProfileSyncService::Shutdown, true)); 553 &ProfileSyncService::Shutdown, true));
554 } 554 }
555 555
556 void ProfileSyncService::OnBackendInitialized( 556 void ProfileSyncService::OnBackendInitialized(
557 const WeakHandle<JsBackend>& js_backend, bool success) { 557 const WeakHandle<JsBackend>& js_backend, bool success) {
558 if (!success) { 558 if (!success) {
559 // If backend initialization failed, abort. We only want to blow away 559 // We may have gotten here because the sync database is corrupt. We
560 // state (DBs, etc) if this was a first-time scenario that failed. 560 // force its deletion, just in case.
561 wizard_.Step(SyncSetupWizard::FATAL_ERROR); 561 wizard_.Step(SyncSetupWizard::FATAL_ERROR);
562 Shutdown(!HasSyncSetupCompleted()); 562 Shutdown(true);
563 return; 563 return;
564 } 564 }
565 565
566 backend_initialized_ = true; 566 backend_initialized_ = true;
567 567
568 sync_js_controller_.AttachJsBackend(js_backend); 568 sync_js_controller_.AttachJsBackend(js_backend);
569 569
570 // The very first time the backend initializes is effectively the first time 570 // The very first time the backend initializes is effectively the first time
571 // we can say we successfully "synced". last_synced_time_ will only be null 571 // we can say we successfully "synced". last_synced_time_ will only be null
572 // in this case, because the pref wasn't restored on StartUp. 572 // in this case, because the pref wasn't restored on StartUp.
(...skipping 986 matching lines...) Expand 10 before | Expand all | Expand 10 after
1559 << "Unrecoverable error."; 1559 << "Unrecoverable error.";
1560 } else { 1560 } else {
1561 VLOG(0) << "ConfigureDataTypeManager not invoked because backend is not " 1561 VLOG(0) << "ConfigureDataTypeManager not invoked because backend is not "
1562 << "initialized"; 1562 << "initialized";
1563 } 1563 }
1564 } 1564 }
1565 1565
1566 const FailedDatatypesHandler& ProfileSyncService::failed_datatypes_handler() { 1566 const FailedDatatypesHandler& ProfileSyncService::failed_datatypes_handler() {
1567 return failed_datatypes_handler_; 1567 return failed_datatypes_handler_;
1568 } 1568 }
OLDNEW
« chrome/browser/sync/profile_sync_service.h ('K') | « chrome/browser/sync/profile_sync_service.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698