| Index: chrome/browser/sync/glue/sync_backend_host.cc
|
| diff --git a/chrome/browser/sync/glue/sync_backend_host.cc b/chrome/browser/sync/glue/sync_backend_host.cc
|
| index fb63ce5e44b6c34c2b046e2204ece1a1d0e1224d..4dafe249d9d0a50de14532a140b73c135cfdcf2f 100644
|
| --- a/chrome/browser/sync/glue/sync_backend_host.cc
|
| +++ b/chrome/browser/sync/glue/sync_backend_host.cc
|
| @@ -15,6 +15,8 @@
|
| #include "chrome/browser/prefs/pref_service.h"
|
| #include "chrome/browser/profiles/profile.h"
|
| #include "chrome/browser/sync/engine/syncapi.h"
|
| +#include "chrome/browser/sync/glue/autofill_model_associator.h"
|
| +#include "chrome/browser/sync/glue/autofill_profile_model_associator.h"
|
| #include "chrome/browser/sync/glue/change_processor.h"
|
| #include "chrome/browser/sync/glue/database_model_worker.h"
|
| #include "chrome/browser/sync/glue/history_model_worker.h"
|
| @@ -24,6 +26,7 @@
|
| #include "chrome/browser/sync/sessions/session_state.h"
|
| // TODO(tim): Remove this! We should have a syncapi pass-thru instead.
|
| #include "chrome/browser/sync/syncable/directory_manager.h" // Cryptographer.
|
| +#include "chrome/browser/sync/syncable/model_type.h"
|
| #include "chrome/common/chrome_switches.h"
|
| #include "chrome/common/chrome_version_info.h"
|
| #include "chrome/common/net/gaia/gaia_constants.h"
|
| @@ -251,12 +254,73 @@ void SyncBackendHost::Shutdown(bool sync_disabled) {
|
| core_ = NULL; // Releases reference to core_.
|
| }
|
|
|
| +syncable::AutofillMigrationState
|
| + SyncBackendHost::GetAutofillMigrationState() {
|
| + return core_->syncapi()->GetAutofillMigrationState();
|
| +}
|
| +
|
| +void SyncBackendHost::SetAutofillMigrationState(
|
| + syncable::AutofillMigrationState state) {
|
| + return core_->syncapi()->SetAutofillMigrationState(state);
|
| +}
|
| +
|
| +syncable::AutofillMigrationDebugInfo
|
| + SyncBackendHost::GetAutofillMigrationDebugInfo() {
|
| + return core_->syncapi()->GetAutofillMigrationDebugInfo();
|
| +}
|
| +
|
| +void SyncBackendHost::SetAutofillMigrationDebugInfo(
|
| + syncable::AutofillMigrationDebugInfo::PropertyToSet property_to_set,
|
| + const syncable::AutofillMigrationDebugInfo& info) {
|
| + return core_->syncapi()->SetAutofillMigrationDebugInfo(property_to_set, info);
|
| +}
|
| +
|
| +void SyncBackendHost::ConfigureAutofillMigration() {
|
| + if (GetAutofillMigrationState() == syncable::NOT_DETERMINED) {
|
| + sync_api::ReadTransaction trans(GetUserShareHandle());
|
| + sync_api::ReadNode autofil_root_node(&trans);
|
| +
|
| + // Check for the presence of autofill node.
|
| + if (!autofil_root_node.InitByTagLookup(browser_sync::kAutofillTag)) {
|
| + SetAutofillMigrationState(syncable::INSUFFICIENT_INFO_TO_DETERMINE);
|
| + return;
|
| + }
|
| +
|
| + // Check for children under autofill node.
|
| + if (autofil_root_node.GetFirstChildId() == static_cast<int64>(0)) {
|
| + SetAutofillMigrationState(syncable::INSUFFICIENT_INFO_TO_DETERMINE);
|
| + return;
|
| + }
|
| +
|
| + sync_api::ReadNode autofill_profile_root_node(&trans);
|
| +
|
| + // Check for the presence of autofill profile root node.
|
| + if (!autofill_profile_root_node.InitByTagLookup(
|
| + browser_sync::kAutofillProfileTag)) {
|
| + SetAutofillMigrationState(syncable::NOT_MIGRATED);
|
| + return;
|
| + }
|
| +
|
| + // If our state is not determined then we should not have the autofill
|
| + // profile node.
|
| + DCHECK(false);
|
| +
|
| + // just set it as not migrated.
|
| + SetAutofillMigrationState(syncable::NOT_MIGRATED);
|
| + return;
|
| + }
|
| +}
|
| +
|
| void SyncBackendHost::ConfigureDataTypes(const syncable::ModelTypeSet& types,
|
| CancelableTask* ready_task) {
|
| // Only one configure is allowed at a time.
|
| DCHECK(!configure_ready_task_.get());
|
| DCHECK(syncapi_initialized_);
|
|
|
| + if (types.count(syncable::AUTOFILL_PROFILE) != 0) {
|
| + ConfigureAutofillMigration();
|
| + }
|
| +
|
| bool deleted_type = false;
|
|
|
| {
|
|
|