OLD | NEW |
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 "build/build_config.h" | 5 #include "build/build_config.h" |
6 | 6 |
7 #include "chrome/browser/sync/glue/sync_backend_host.h" | 7 #include "chrome/browser/sync/glue/sync_backend_host.h" |
8 | 8 |
9 #include <algorithm> | 9 #include <algorithm> |
10 #include <map> | 10 #include <map> |
(...skipping 613 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
624 | 624 |
625 registrar_.reset(); | 625 registrar_.reset(); |
626 chrome_sync_notification_bridge_.reset(); | 626 chrome_sync_notification_bridge_.reset(); |
627 core_ = NULL; // Releases reference to core_. | 627 core_ = NULL; // Releases reference to core_. |
628 } | 628 } |
629 | 629 |
630 void SyncBackendHost::ConfigureDataTypes( | 630 void SyncBackendHost::ConfigureDataTypes( |
631 syncer::ConfigureReason reason, | 631 syncer::ConfigureReason reason, |
632 syncer::ModelTypeSet types_to_add, | 632 syncer::ModelTypeSet types_to_add, |
633 syncer::ModelTypeSet types_to_remove, | 633 syncer::ModelTypeSet types_to_remove, |
634 NigoriState nigori_state, | |
635 const base::Callback<void(syncer::ModelTypeSet)>& ready_task, | 634 const base::Callback<void(syncer::ModelTypeSet)>& ready_task, |
636 const base::Callback<void()>& retry_callback) { | 635 const base::Callback<void()>& retry_callback) { |
637 // Only one configure is allowed at a time. This is guaranteed by our | 636 // Only one configure is allowed at a time. This is guaranteed by our |
638 // callers. The SyncBackendHost requests one configure as the backend is | 637 // callers. The SyncBackendHost requests one configure as the backend is |
639 // initializing and waits for it to complete. After initialization, all | 638 // initializing and waits for it to complete. After initialization, all |
640 // configurations will pass through the DataTypeManager, which is careful to | 639 // configurations will pass through the DataTypeManager, which is careful to |
641 // never send a new configure request until the current request succeeds. | 640 // never send a new configure request until the current request succeeds. |
642 | 641 |
643 DCHECK_GT(initialization_state_, NOT_INITIALIZED); | 642 DCHECK_GT(initialization_state_, NOT_INITIALIZED); |
644 | 643 |
645 syncer::ModelTypeSet types_to_add_with_nigori = types_to_add; | |
646 syncer::ModelTypeSet types_to_remove_with_nigori = types_to_remove; | |
647 if (nigori_state == WITH_NIGORI) { | |
648 types_to_add_with_nigori.Put(syncer::NIGORI); | |
649 types_to_remove_with_nigori.Remove(syncer::NIGORI); | |
650 } else { | |
651 types_to_add_with_nigori.Remove(syncer::NIGORI); | |
652 types_to_remove_with_nigori.Put(syncer::NIGORI); | |
653 } | |
654 | |
655 // The SyncBackendRegistrar's routing info will be updated by adding the | 644 // The SyncBackendRegistrar's routing info will be updated by adding the |
656 // types_to_add_with_nigori to the list then removing | 645 // types_to_add to the list then removing types_to_remove. Any types which |
657 // types_to_remove_with_nigori. Any types which are not in either of those | 646 // are not in either of those sets will remain untouched. |
658 // sets will remain untouched. | |
659 // | 647 // |
660 // Types which were not in the list previously are not fully downloaded, so we | 648 // Types which were not in the list previously are not fully downloaded, so we |
661 // must ask the syncer to download them. Any newly supported datatypes will | 649 // must ask the syncer to download them. Any newly supported datatypes will |
662 // not have been in that routing info list, so they will be among the types | 650 // not have been in that routing info list, so they will be among the types |
663 // downloaded if they are enabled. | 651 // downloaded if they are enabled. |
664 // | 652 // |
665 // The SyncBackendRegistrar's state was initially derived from the types | 653 // The SyncBackendRegistrar's state was initially derived from the types |
666 // marked initial_sync_ended when the sync database was loaded. Afterwards it | 654 // marked initial_sync_ended when the sync database was loaded. Afterwards it |
667 // is modified only by this function. We expect it to remain in sync with the | 655 // is modified only by this function. We expect it to remain in sync with the |
668 // backend because configuration requests are never aborted; they are retried | 656 // backend because configuration requests are never aborted; they are retried |
669 // until they succeed or the browser is closed. | 657 // until they succeed or the browser is closed. |
670 | 658 |
671 syncer::ModelTypeSet types_to_download = registrar_->ConfigureDataTypes( | 659 syncer::ModelTypeSet types_to_download = registrar_->ConfigureDataTypes( |
672 types_to_add_with_nigori, types_to_remove_with_nigori); | 660 types_to_add, types_to_remove); |
673 if (!types_to_download.Empty()) | 661 if (!types_to_download.Empty()) |
674 types_to_download.Put(syncer::NIGORI); | 662 types_to_download.Put(syncer::NIGORI); |
675 | 663 |
676 // TODO(sync): crbug.com/137550. | 664 // TODO(sync): crbug.com/137550. |
677 // It's dangerous to configure types that have progress markers. Types with | 665 // It's dangerous to configure types that have progress markers. Types with |
678 // progress markers can trigger a MIGRATION_DONE response. We are not | 666 // progress markers can trigger a MIGRATION_DONE response. We are not |
679 // prepared to handle a migration during a configure, so we must ensure that | 667 // prepared to handle a migration during a configure, so we must ensure that |
680 // all our types_to_download actually contain no data before we sync them. | 668 // all our types_to_download actually contain no data before we sync them. |
681 // | 669 // |
682 // The most common way to end up in this situation used to be types which had | 670 // The most common way to end up in this situation used to be types which had |
(...skipping 638 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1321 case NOT_INITIALIZED: | 1309 case NOT_INITIALIZED: |
1322 // This configuration should result in a download request if the nigori | 1310 // This configuration should result in a download request if the nigori |
1323 // type's initial_sync_ended bit is unset. If the download request | 1311 // type's initial_sync_ended bit is unset. If the download request |
1324 // contains progress markers, there is a risk that the server will try to | 1312 // contains progress markers, there is a risk that the server will try to |
1325 // trigger migration. That would be disastrous, so we must rely on the | 1313 // trigger migration. That would be disastrous, so we must rely on the |
1326 // sync manager to ensure that this type never has both progress markers | 1314 // sync manager to ensure that this type never has both progress markers |
1327 // and !initial_sync_ended. | 1315 // and !initial_sync_ended. |
1328 initialization_state_ = DOWNLOADING_NIGORI; | 1316 initialization_state_ = DOWNLOADING_NIGORI; |
1329 ConfigureDataTypes( | 1317 ConfigureDataTypes( |
1330 syncer::CONFIGURE_REASON_NEW_CLIENT, | 1318 syncer::CONFIGURE_REASON_NEW_CLIENT, |
| 1319 syncer::ModelTypeSet(syncer::NIGORI), |
1331 syncer::ModelTypeSet(), | 1320 syncer::ModelTypeSet(), |
1332 syncer::ModelTypeSet(), | |
1333 WITH_NIGORI, | |
1334 // Calls back into this function. | 1321 // Calls back into this function. |
1335 base::Bind( | 1322 base::Bind( |
1336 &SyncBackendHost:: | 1323 &SyncBackendHost:: |
1337 HandleNigoriConfigurationCompletedOnFrontendLoop, | 1324 HandleNigoriConfigurationCompletedOnFrontendLoop, |
1338 weak_ptr_factory_.GetWeakPtr(), js_backend), | 1325 weak_ptr_factory_.GetWeakPtr(), js_backend), |
1339 base::Bind(&SyncBackendHost::OnNigoriDownloadRetry, | 1326 base::Bind(&SyncBackendHost::OnNigoriDownloadRetry, |
1340 weak_ptr_factory_.GetWeakPtr())); | 1327 weak_ptr_factory_.GetWeakPtr())); |
1341 break; | 1328 break; |
1342 case DOWNLOADING_NIGORI: | 1329 case DOWNLOADING_NIGORI: |
1343 initialization_state_ = REFRESHING_NIGORI; | 1330 initialization_state_ = REFRESHING_NIGORI; |
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1542 FROM_HERE, | 1529 FROM_HERE, |
1543 base::Bind(&SyncBackendHost::Core::DoRefreshNigori, | 1530 base::Bind(&SyncBackendHost::Core::DoRefreshNigori, |
1544 core_.get(), sync_thread_done_callback)); | 1531 core_.get(), sync_thread_done_callback)); |
1545 } | 1532 } |
1546 | 1533 |
1547 #undef SDVLOG | 1534 #undef SDVLOG |
1548 | 1535 |
1549 #undef SLOG | 1536 #undef SLOG |
1550 | 1537 |
1551 } // namespace browser_sync | 1538 } // namespace browser_sync |
OLD | NEW |