diff options
author | lipalani@chromium.org <lipalani@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-01-11 00:27:08 +0000 |
---|---|---|
committer | lipalani@chromium.org <lipalani@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-01-11 00:27:08 +0000 |
commit | 48fbd3e7631e313aab0836f8992bf63e88c67b69 (patch) | |
tree | fb5006ad9559bd135aa20952085bc680b01c4dda /chrome/browser/sync | |
parent | fc655ba83a54efcf179e1b0941481c3ebfe4cb2c (diff) | |
download | chromium_src-48fbd3e7631e313aab0836f8992bf63e88c67b69.zip chromium_src-48fbd3e7631e313aab0836f8992bf63e88c67b69.tar.gz chromium_src-48fbd3e7631e313aab0836f8992bf63e88c67b69.tar.bz2 |
Removing the command line flag for enabling autofill profile datatype.
BUG=
TEST=
Review URL: http://codereview.chromium.org/6140002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@70970 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/sync')
10 files changed, 43 insertions, 1557 deletions
diff --git a/chrome/browser/sync/glue/autofill_change_processor.cc b/chrome/browser/sync/glue/autofill_change_processor.cc index 6914308..ec5a673 100644 --- a/chrome/browser/sync/glue/autofill_change_processor.cc +++ b/chrome/browser/sync/glue/autofill_change_processor.cc @@ -12,7 +12,6 @@ #include "chrome/browser/autofill/personal_data_manager.h" #include "chrome/browser/prefs/pref_service.h" #include "chrome/browser/profiles/profile.h" -#include "chrome/browser/sync/glue/autofill_change_processor2.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/do_optimistic_refresh_task.h" diff --git a/chrome/browser/sync/glue/autofill_change_processor.h b/chrome/browser/sync/glue/autofill_change_processor.h index ba132fa..3b5ff35 100644 --- a/chrome/browser/sync/glue/autofill_change_processor.h +++ b/chrome/browser/sync/glue/autofill_change_processor.h @@ -12,7 +12,6 @@ #include "chrome/browser/autofill/credit_card.h" #include "chrome/browser/autofill/personal_data_manager.h" #include "chrome/browser/sync/engine/syncapi.h" -#include "chrome/browser/sync/glue/autofill_change_processor2.h" #include "chrome/browser/sync/glue/change_processor.h" #include "chrome/browser/sync/glue/sync_backend_host.h" #include "chrome/browser/sync/protocol/autofill_specifics.pb.h" diff --git a/chrome/browser/sync/glue/autofill_change_processor2.cc b/chrome/browser/sync/glue/autofill_change_processor2.cc deleted file mode 100644 index 49b669c..0000000 --- a/chrome/browser/sync/glue/autofill_change_processor2.cc +++ /dev/null @@ -1,583 +0,0 @@ -// Copyright (c) 2010 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/browser/sync/glue/autofill_change_processor2.h" - -#include <string> -#include <vector> - -#include "base/string_util.h" -#include "base/utf_string_conversions.h" -#include "chrome/browser/autofill/personal_data_manager.h" -#include "chrome/browser/profiles/profile.h" -#include "chrome/browser/sync/glue/autofill_model_associator.h" -#include "chrome/browser/sync/glue/autofill_model_associator2.h" -#include "chrome/browser/sync/profile_sync_service.h" -#include "chrome/browser/webdata/autofill_change.h" -#include "chrome/browser/webdata/web_data_service.h" -#include "chrome/browser/webdata/web_database.h" -#include "chrome/common/notification_service.h" - -namespace browser_sync { - -class AutofillModelAssociator2; -struct AutofillChangeProcessor2::AutofillChangeRecord { - sync_api::SyncManager::ChangeRecord::Action action_; - int64 id_; - sync_pb::AutofillSpecifics autofill_; - AutofillChangeRecord(sync_api::SyncManager::ChangeRecord::Action action, - int64 id, const sync_pb::AutofillSpecifics& autofill) - : action_(action), - id_(id), - autofill_(autofill) { } -}; - -AutofillChangeProcessor2::AutofillChangeProcessor2( - AutofillModelAssociator2* model_associator, - WebDatabase* web_database, - PersonalDataManager* personal_data, - UnrecoverableErrorHandler* error_handler) - : ChangeProcessor(error_handler), - model_associator_(model_associator), - web_database_(web_database), - personal_data_(personal_data), - observing_(false) { - DCHECK(model_associator); - DCHECK(web_database); - DCHECK(error_handler); - DCHECK(personal_data); - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB)); - StartObserving(); -} - -AutofillChangeProcessor2::~AutofillChangeProcessor2() {} - -void AutofillChangeProcessor2::Observe(NotificationType type, - const NotificationSource& source, - const NotificationDetails& details) { - // Ensure this notification came from our web database. - WebDataService* wds = Source<WebDataService>(source).ptr(); - if (!wds || wds->GetDatabase() != web_database_) - return; - - DCHECK(running()); - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB)); - if (!observing_) - return; - - sync_api::WriteTransaction trans(share_handle()); - sync_api::ReadNode autofill_root(&trans); - if (!autofill_root.InitByTagLookup(kAutofillTag)) { - error_handler()->OnUnrecoverableError(FROM_HERE, - "Server did not create the top-level autofill node. " - "We might be running against an out-of-date server."); - return; - } - - switch (type.value) { - case NotificationType::AUTOFILL_ENTRIES_CHANGED: { - AutofillChangeList* changes = Details<AutofillChangeList>(details).ptr(); - ObserveAutofillEntriesChanged(changes, &trans, autofill_root); - break; - } - case NotificationType::AUTOFILL_PROFILE_CHANGED: { - AutofillProfileChange* change = - Details<AutofillProfileChange>(details).ptr(); - ObserveAutofillProfileChanged(change, &trans, autofill_root); - break; - } - default: - NOTREACHED() << "Invalid NotificationType."; - } -} - -void AutofillChangeProcessor2::ChangeProfileLabelIfAlreadyTaken( - sync_api::BaseTransaction* trans, - const string16& pre_update_label, - AutoFillProfile* profile, - std::string* tag) { - DCHECK_EQ(AutofillModelAssociator2::ProfileLabelToTag(profile->Label()), - *tag); - sync_api::ReadNode read_node(trans); - if (!pre_update_label.empty() && pre_update_label == profile->Label()) - return; - if (read_node.InitByClientTagLookup(syncable::AUTOFILL, *tag)) { - // Handle the edge case of duplicate labels. - string16 new_label(AutofillModelAssociator2::MakeUniqueLabel( - profile->Label(), pre_update_label, trans)); - if (new_label.empty()) { - error_handler()->OnUnrecoverableError(FROM_HERE, - "No unique label; can't move aside"); - return; - } - OverrideProfileLabel(new_label, profile, tag); - } -} - -void AutofillChangeProcessor2::OverrideProfileLabel( - const string16& new_label, - AutoFillProfile* profile_to_update, - std::string* tag_to_update) { - tag_to_update->assign(AutofillModelAssociator2::ProfileLabelToTag(new_label)); - - profile_to_update->set_label(new_label); - if (!web_database_->UpdateAutoFillProfile(*profile_to_update)) { - std::string err = "Failed to overwrite label for node "; - err += UTF16ToUTF8(new_label); - error_handler()->OnUnrecoverableError(FROM_HERE, err); - return; - } - - // Notify the PersonalDataManager that it's out of date. - PostOptimisticRefreshTask(); -} - -void AutofillChangeProcessor2::PostOptimisticRefreshTask() { - BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, - new AutofillModelAssociator2::DoOptimisticRefreshTask( - personal_data_)); -} - -void AutofillChangeProcessor2::AddAutofillProfileSyncNode( - sync_api::WriteTransaction* trans, const sync_api::BaseNode& autofill, - const std::string& tag, const AutoFillProfile* profile) { - sync_api::WriteNode sync_node(trans); - if (!sync_node.InitUniqueByCreation(syncable::AUTOFILL, autofill, tag)) { - error_handler()->OnUnrecoverableError(FROM_HERE, - "Failed to create autofill sync node."); - return; - } - sync_node.SetTitle(UTF8ToWide(tag)); - - WriteAutofillProfile(*profile, &sync_node); - model_associator_->Associate(&tag, sync_node.GetId()); -} - -void AutofillChangeProcessor2::ObserveAutofillProfileChanged( - AutofillProfileChange* change, sync_api::WriteTransaction* trans, - const sync_api::ReadNode& autofill_root) { - std::string tag(AutofillModelAssociator2::ProfileLabelToTag(change->key())); - switch (change->type()) { - case AutofillProfileChange::ADD: { - scoped_ptr<AutoFillProfile> clone( - static_cast<AutoFillProfile*>(change->profile()->Clone())); - DCHECK_EQ(clone->Label(), change->key()); - ChangeProfileLabelIfAlreadyTaken(trans, string16(), clone.get(), &tag); - AddAutofillProfileSyncNode(trans, autofill_root, tag, clone.get()); - break; - } - case AutofillProfileChange::UPDATE: { - scoped_ptr<AutoFillProfile> clone( - static_cast<AutoFillProfile*>(change->profile()->Clone())); - std::string pre_update_tag = AutofillModelAssociator2::ProfileLabelToTag( - change->pre_update_label()); - DCHECK_EQ(clone->Label(), change->key()); - sync_api::WriteNode sync_node(trans); - ChangeProfileLabelIfAlreadyTaken(trans, change->pre_update_label(), - clone.get(), &tag); - if (pre_update_tag != tag) { - // If the label changes, replace the node instead of updating it. - RemoveSyncNode(pre_update_tag, trans); - AddAutofillProfileSyncNode(trans, autofill_root, tag, clone.get()); - return; - } - int64 sync_id = model_associator_->GetSyncIdFromChromeId(tag); - if (sync_api::kInvalidId == sync_id) { - std::string err = "Unexpected notification for: " + tag; - error_handler()->OnUnrecoverableError(FROM_HERE, err); - return; - } else { - if (!sync_node.InitByIdLookup(sync_id)) { - error_handler()->OnUnrecoverableError(FROM_HERE, - "Autofill node lookup failed."); - return; - } - WriteAutofillProfile(*clone.get(), &sync_node); - } - break; - } - case AutofillProfileChange::REMOVE: { - RemoveSyncNode(tag, trans); - break; - } - } -} - -void AutofillChangeProcessor2::ObserveAutofillEntriesChanged( - AutofillChangeList* changes, sync_api::WriteTransaction* trans, - const sync_api::ReadNode& autofill_root) { - for (AutofillChangeList::iterator change = changes->begin(); - change != changes->end(); ++change) { - switch (change->type()) { - case AutofillChange::ADD: - { - sync_api::WriteNode sync_node(trans); - std::string tag = - AutofillModelAssociator2::KeyToTag(change->key().name(), - change->key().value()); - if (!sync_node.InitUniqueByCreation(syncable::AUTOFILL, - autofill_root, tag)) { - error_handler()->OnUnrecoverableError(FROM_HERE, - "Failed to create autofill sync node."); - return; - } - - std::vector<base::Time> timestamps; - if (!web_database_->GetAutofillTimestamps( - change->key().name(), - change->key().value(), - ×tamps)) { - error_handler()->OnUnrecoverableError(FROM_HERE, - "Failed to get timestamps."); - return; - } - - sync_node.SetTitle(UTF8ToWide(tag)); - - WriteAutofillEntry(AutofillEntry(change->key(), timestamps), - &sync_node); - model_associator_->Associate(&tag, sync_node.GetId()); - } - break; - - case AutofillChange::UPDATE: - { - sync_api::WriteNode sync_node(trans); - std::string tag = AutofillModelAssociator2::KeyToTag( - change->key().name(), change->key().value()); - int64 sync_id = model_associator_->GetSyncIdFromChromeId(tag); - if (sync_api::kInvalidId == sync_id) { - std::string err = "Unexpected notification for: " + - UTF16ToUTF8(change->key().name()); - error_handler()->OnUnrecoverableError(FROM_HERE, err); - return; - } else { - if (!sync_node.InitByIdLookup(sync_id)) { - error_handler()->OnUnrecoverableError(FROM_HERE, - "Autofill node lookup failed."); - return; - } - } - - std::vector<base::Time> timestamps; - if (!web_database_->GetAutofillTimestamps( - change->key().name(), - change->key().value(), - ×tamps)) { - error_handler()->OnUnrecoverableError(FROM_HERE, - "Failed to get timestamps."); - return; - } - - WriteAutofillEntry(AutofillEntry(change->key(), timestamps), - &sync_node); - } - break; - case AutofillChange::REMOVE: { - std::string tag = AutofillModelAssociator2::KeyToTag( - change->key().name(), change->key().value()); - RemoveSyncNode(tag, trans); - } - break; - } - } -} - -void AutofillChangeProcessor2::RemoveSyncNode(const std::string& tag, - sync_api::WriteTransaction* trans) { - sync_api::WriteNode sync_node(trans); - int64 sync_id = model_associator_->GetSyncIdFromChromeId(tag); - if (sync_api::kInvalidId == sync_id) { - std::string err = "Unexpected notification for: " + tag; - error_handler()->OnUnrecoverableError(FROM_HERE, err); - return; - } else { - if (!sync_node.InitByIdLookup(sync_id)) { - error_handler()->OnUnrecoverableError(FROM_HERE, - "Autofill node lookup failed."); - return; - } - model_associator_->Disassociate(sync_node.GetId()); - sync_node.Remove(); - } -} - -void AutofillChangeProcessor2::ApplyChangesFromSyncModel( - const sync_api::BaseTransaction* trans, - const sync_api::SyncManager::ChangeRecord* changes, - int change_count) { - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB)); - if (!running()) - return; - StopObserving(); - - sync_api::ReadNode autofill_root(trans); - if (!autofill_root.InitByTagLookup(kAutofillTag)) { - error_handler()->OnUnrecoverableError(FROM_HERE, - "Autofill root node lookup failed."); - return; - } - - for (int i = 0; i < change_count; ++i) { - sync_api::SyncManager::ChangeRecord::Action action(changes[i].action); - if (sync_api::SyncManager::ChangeRecord::ACTION_DELETE == action) { - DCHECK(changes[i].specifics.HasExtension(sync_pb::autofill)) - << "Autofill specifics data not present on delete!"; - const sync_pb::AutofillSpecifics& autofill = - changes[i].specifics.GetExtension(sync_pb::autofill); - if (autofill.has_value() || autofill.has_profile()) { - autofill_changes_.push_back(AutofillChangeRecord(changes[i].action, - changes[i].id, - autofill)); - } else { - NOTREACHED() << "Autofill specifics has no data!"; - } - continue; - } - - // Handle an update or add. - sync_api::ReadNode sync_node(trans); - if (!sync_node.InitByIdLookup(changes[i].id)) { - error_handler()->OnUnrecoverableError(FROM_HERE, - "Autofill node lookup failed."); - return; - } - - // Check that the changed node is a child of the autofills folder. - DCHECK(autofill_root.GetId() == sync_node.GetParentId()); - DCHECK(syncable::AUTOFILL == sync_node.GetModelType()); - - const sync_pb::AutofillSpecifics& autofill( - sync_node.GetAutofillSpecifics()); - int64 sync_id = sync_node.GetId(); - if (autofill.has_value() || autofill.has_profile()) { - autofill_changes_.push_back(AutofillChangeRecord(changes[i].action, - sync_id, autofill)); - } else { - NOTREACHED() << "Autofill specifics has no data!"; - } - } - - StartObserving(); -} - -void AutofillChangeProcessor2::CommitChangesFromSyncModel() { - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB)); - if (!running()) - return; - StopObserving(); - - std::vector<AutofillEntry> new_entries; - for (unsigned int i = 0; i < autofill_changes_.size(); i++) { - // Handle deletions. - if (sync_api::SyncManager::ChangeRecord::ACTION_DELETE == - autofill_changes_[i].action_) { - if (autofill_changes_[i].autofill_.has_value()) { - ApplySyncAutofillEntryDelete(autofill_changes_[i].autofill_); - } else if (autofill_changes_[i].autofill_.has_profile()) { - ApplySyncAutofillProfileDelete(autofill_changes_[i].autofill_.profile(), - autofill_changes_[i].id_); - } else { - NOTREACHED() << "Autofill's CommitChanges received change with no" - " data!"; - } - continue; - } - - // Handle update/adds. - if (autofill_changes_[i].autofill_.has_value()) { - ApplySyncAutofillEntryChange(autofill_changes_[i].action_, - autofill_changes_[i].autofill_, &new_entries, - autofill_changes_[i].id_); - } else if (autofill_changes_[i].autofill_.has_profile()) { - ApplySyncAutofillProfileChange(autofill_changes_[i].action_, - autofill_changes_[i].autofill_.profile(), - autofill_changes_[i].id_); - } else { - NOTREACHED() << "Autofill's CommitChanges received change with no data!"; - } - } - autofill_changes_.clear(); - - // Make changes - if (!web_database_->UpdateAutofillEntries(new_entries)) { - error_handler()->OnUnrecoverableError(FROM_HERE, - "Could not update autofill entries."); - return; - } - - PostOptimisticRefreshTask(); - - StartObserving(); -} - -void AutofillChangeProcessor2::ApplySyncAutofillEntryDelete( - const sync_pb::AutofillSpecifics& autofill) { - if (!web_database_->RemoveFormElement( - UTF8ToUTF16(autofill.name()), UTF8ToUTF16(autofill.value()))) { - error_handler()->OnUnrecoverableError(FROM_HERE, - "Could not remove autofill node."); - return; - } -} - -void AutofillChangeProcessor2::ApplySyncAutofillEntryChange( - sync_api::SyncManager::ChangeRecord::Action action, - const sync_pb::AutofillSpecifics& autofill, - std::vector<AutofillEntry>* new_entries, - int64 sync_id) { - DCHECK_NE(sync_api::SyncManager::ChangeRecord::ACTION_DELETE, action); - - std::vector<base::Time> timestamps; - size_t timestamps_size = autofill.usage_timestamp_size(); - for (size_t c = 0; c < timestamps_size; ++c) { - timestamps.push_back( - base::Time::FromInternalValue(autofill.usage_timestamp(c))); - } - AutofillKey k(UTF8ToUTF16(autofill.name()), UTF8ToUTF16(autofill.value())); - AutofillEntry new_entry(k, timestamps); - - new_entries->push_back(new_entry); - std::string tag(AutofillModelAssociator2::KeyToTag(k.name(), k.value())); - if (action == sync_api::SyncManager::ChangeRecord::ACTION_ADD) - model_associator_->Associate(&tag, sync_id); -} - -void AutofillChangeProcessor2::ApplySyncAutofillProfileChange( - sync_api::SyncManager::ChangeRecord::Action action, - const sync_pb::AutofillProfileSpecifics& profile, - int64 sync_id) { - DCHECK_NE(sync_api::SyncManager::ChangeRecord::ACTION_DELETE, action); - - std::string tag(AutofillModelAssociator2::ProfileLabelToTag( - UTF8ToUTF16(profile.label()))); - switch (action) { - case sync_api::SyncManager::ChangeRecord::ACTION_ADD: { - PersonalDataManager* pdm = model_associator_->sync_service()-> - profile()->GetPersonalDataManager(); - scoped_ptr<AutoFillProfile> p( - pdm->CreateNewEmptyAutoFillProfileForDBThread( - UTF8ToUTF16(profile.label()))); - AutofillModelAssociator2::OverwriteProfileWithServerData(p.get(), - profile); - - model_associator_->Associate(&tag, sync_id); - if (!web_database_->AddAutoFillProfile(*p.get())) { - NOTREACHED() << "Couldn't add autofill profile: " << profile.label(); - return; - } - break; - } - case sync_api::SyncManager::ChangeRecord::ACTION_UPDATE: { - AutoFillProfile* p = NULL; - string16 label = UTF8ToUTF16(profile.label()); - if (!web_database_->GetAutoFillProfileForLabel(label, &p)) { - NOTREACHED() << "Couldn't retrieve autofill profile: " << label; - return; - } - AutofillModelAssociator2::OverwriteProfileWithServerData(p, profile); - if (!web_database_->UpdateAutoFillProfile(*p)) { - NOTREACHED() << "Couldn't update autofill profile: " << label; - return; - } - delete p; - break; - } - default: - NOTREACHED(); - } -} - -void AutofillChangeProcessor2::ApplySyncAutofillProfileDelete( - const sync_pb::AutofillProfileSpecifics& profile, - int64 sync_id) { - string16 label(UTF8ToUTF16(profile.label())); - AutoFillProfile* ptr = NULL; - bool get_success = web_database_->GetAutoFillProfileForLabel(label, &ptr); - scoped_ptr<AutoFillProfile> p(ptr); - if (!get_success) { - NOTREACHED() << "Couldn't retrieve autofill profile: " << label; - return; - } - if (!web_database_->RemoveAutoFillProfile(p->guid())) { - NOTREACHED() << "Couldn't remove autofill profile: " << label; - return; - } - model_associator_->Disassociate(sync_id); -} - -void AutofillChangeProcessor2::StartImpl(Profile* profile) { - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB)); - observing_ = true; -} - -void AutofillChangeProcessor2::StopImpl() { - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); - observing_ = false; -} - - -void AutofillChangeProcessor2::StartObserving() { - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB)); - notification_registrar_.Add(this, NotificationType::AUTOFILL_ENTRIES_CHANGED, - NotificationService::AllSources()); - notification_registrar_.Add(this, NotificationType::AUTOFILL_PROFILE_CHANGED, - NotificationService::AllSources()); -} - -void AutofillChangeProcessor2::StopObserving() { - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB)); - notification_registrar_.RemoveAll(); -} - -// static -void AutofillChangeProcessor2::WriteAutofillEntry( - const AutofillEntry& entry, - sync_api::WriteNode* node) { - sync_pb::AutofillSpecifics autofill; - autofill.set_name(UTF16ToUTF8(entry.key().name())); - autofill.set_value(UTF16ToUTF8(entry.key().value())); - const std::vector<base::Time>& ts(entry.timestamps()); - for (std::vector<base::Time>::const_iterator timestamp = ts.begin(); - timestamp != ts.end(); ++timestamp) { - autofill.add_usage_timestamp(timestamp->ToInternalValue()); - } - node->SetAutofillSpecifics(autofill); -} - -// static -void AutofillChangeProcessor2::WriteAutofillProfile( - const AutoFillProfile& profile, sync_api::WriteNode* node) { - sync_pb::AutofillSpecifics autofill; - sync_pb::AutofillProfileSpecifics* s(autofill.mutable_profile()); - s->set_label(UTF16ToUTF8(profile.Label())); - s->set_name_first(UTF16ToUTF8( - profile.GetFieldText(AutoFillType(NAME_FIRST)))); - s->set_name_middle(UTF16ToUTF8( - profile.GetFieldText(AutoFillType(NAME_MIDDLE)))); - s->set_name_last(UTF16ToUTF8(profile.GetFieldText(AutoFillType(NAME_LAST)))); - s->set_address_home_line1( - UTF16ToUTF8(profile.GetFieldText(AutoFillType(ADDRESS_HOME_LINE1)))); - s->set_address_home_line2( - UTF16ToUTF8(profile.GetFieldText(AutoFillType(ADDRESS_HOME_LINE2)))); - s->set_address_home_city(UTF16ToUTF8(profile.GetFieldText( - AutoFillType(ADDRESS_HOME_CITY)))); - s->set_address_home_state(UTF16ToUTF8(profile.GetFieldText( - AutoFillType(ADDRESS_HOME_STATE)))); - s->set_address_home_country(UTF16ToUTF8(profile.GetFieldText( - AutoFillType(ADDRESS_HOME_COUNTRY)))); - s->set_address_home_zip(UTF16ToUTF8(profile.GetFieldText( - AutoFillType(ADDRESS_HOME_ZIP)))); - s->set_email_address(UTF16ToUTF8(profile.GetFieldText( - AutoFillType(EMAIL_ADDRESS)))); - s->set_company_name(UTF16ToUTF8(profile.GetFieldText( - AutoFillType(COMPANY_NAME)))); - s->set_phone_fax_whole_number(UTF16ToUTF8(profile.GetFieldText( - AutoFillType(PHONE_FAX_WHOLE_NUMBER)))); - s->set_phone_home_whole_number(UTF16ToUTF8(profile.GetFieldText( - AutoFillType(PHONE_HOME_WHOLE_NUMBER)))); - node->SetAutofillSpecifics(autofill); -} - -} // namespace browser_sync diff --git a/chrome/browser/sync/glue/autofill_change_processor2.h b/chrome/browser/sync/glue/autofill_change_processor2.h deleted file mode 100644 index 25d7f51..0000000 --- a/chrome/browser/sync/glue/autofill_change_processor2.h +++ /dev/null @@ -1,172 +0,0 @@ -// Copyright (c) 2010 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef CHROME_BROWSER_SYNC_GLUE_AUTOFILL_CHANGE_PROCESSOR2_H_ -#define CHROME_BROWSER_SYNC_GLUE_AUTOFILL_CHANGE_PROCESSOR2_H_ -#pragma once - -#include <string> -#include <vector> - -#include "chrome/browser/autofill/autofill_profile.h" -#include "chrome/browser/autofill/credit_card.h" -#include "chrome/browser/autofill/personal_data_manager.h" -#include "chrome/browser/sync/engine/syncapi.h" -#include "chrome/browser/sync/glue/change_processor.h" -#include "chrome/browser/sync/glue/sync_backend_host.h" -#include "chrome/browser/sync/protocol/autofill_specifics.pb.h" -#include "chrome/browser/webdata/web_data_service.h" -#include "chrome/common/notification_observer.h" -#include "chrome/common/notification_registrar.h" - -class AutofillCreditCardChange; -class AutofillEntry; -class AutofillProfileChange; -class PersonalDataManager; -class WebDatabase; - -namespace browser_sync { - -class AutofillModelAssociator2; -class UnrecoverableErrorHandler; - -// This class is responsible for taking changes from the web data service and -// applying them to the sync_api 'syncable' model, and vice versa. All -// operations and use of this class are from the DB thread. -class AutofillChangeProcessor2 : public ChangeProcessor, - public NotificationObserver { - public: - AutofillChangeProcessor2(AutofillModelAssociator2* model_associator, - WebDatabase* web_database, - PersonalDataManager* personal_data, - UnrecoverableErrorHandler* error_handler); - virtual ~AutofillChangeProcessor2(); - - // NotificationObserver implementation. - // WebDataService -> sync_api model change application. - virtual void Observe(NotificationType type, - const NotificationSource& source, - const NotificationDetails& details); - - // sync_api model -> WebDataService change application. - virtual void ApplyChangesFromSyncModel( - const sync_api::BaseTransaction* trans, - const sync_api::SyncManager::ChangeRecord* changes, - int change_count); - - // Commit any changes from ApplyChangesFromSyncModel buffered in - // autofill_changes_. - virtual void CommitChangesFromSyncModel(); - - // Copy the properties of the given Autofill entry into the sync - // node. - static void WriteAutofillEntry(const AutofillEntry& entry, - sync_api::WriteNode* node); - // As above, for autofill profiles. - static void WriteAutofillProfile(const AutoFillProfile& profile, - sync_api::WriteNode* node); - // TODO(georgey) : add the same processing for CC info (already in protocol - // buffers). - - protected: - virtual void StartImpl(Profile* profile); - virtual void StopImpl(); - - private: - void StartObserving(); - void StopObserving(); - - // A function to remove the sync node for an autofill entry or profile. - void RemoveSyncNode(const std::string& tag, - sync_api::WriteTransaction* trans); - - // These two methods are dispatched to by Observe depending on the type. - void ObserveAutofillEntriesChanged(AutofillChangeList* changes, - sync_api::WriteTransaction* trans, - const sync_api::ReadNode& autofill_root); - void ObserveAutofillProfileChanged(AutofillProfileChange* change, - sync_api::WriteTransaction* trans, - const sync_api::ReadNode& autofill_root); - - // The following methods are the implementation of ApplyChangeFromSyncModel - // for the respective autofill subtypes. - void ApplySyncAutofillEntryChange( - sync_api::SyncManager::ChangeRecord::Action action, - const sync_pb::AutofillSpecifics& autofill, - std::vector<AutofillEntry>* new_entries, - int64 sync_id); - void ApplySyncAutofillProfileChange( - sync_api::SyncManager::ChangeRecord::Action action, - const sync_pb::AutofillProfileSpecifics& profile, - int64 sync_id); - - // Delete is a special case of change application. - void ApplySyncAutofillEntryDelete( - const sync_pb::AutofillSpecifics& autofill); - void ApplySyncAutofillProfileDelete( - const sync_pb::AutofillProfileSpecifics& profile, - int64 sync_id); - - // If the chrome model tries to add an AutoFillProfile with a label that - // is already in use, we perform a move-aside by calling-back into the chrome - // model and overwriting the label with a unique value we can apply for sync. - // This method should be called on an ADD notification from the chrome model. - // |tag| contains the unique sync client tag identifier for |profile|, which - // is derived from the profile label using ProfileLabelToTag. - // |existing_unique_label| is the current label of the object, if any; this - // is an allowed value, because it's taken by the item in question. - // For new items, set |existing_unique_label| to the empty string. - void ChangeProfileLabelIfAlreadyTaken( - sync_api::BaseTransaction* trans, - const string16& existing_unique_label, - AutoFillProfile* profile, - std::string* tag); - - // Reassign the label of the profile, write this back to the web database, - // and update |tag| with the tag corresponding to the new label. - void OverrideProfileLabel( - const string16& new_label, - AutoFillProfile* profile_to_update, - std::string* tag_to_update); - - // Helper to create a sync node with tag |tag|, storing |profile| as - // the node's AutofillSpecifics. - void AddAutofillProfileSyncNode( - sync_api::WriteTransaction* trans, - const sync_api::BaseNode& autofill, - const std::string& tag, - const AutoFillProfile* profile); - - // Helper to post a task to the UI loop to inform the PersonalDataManager - // it needs to refresh itself. - void PostOptimisticRefreshTask(); - - // The two models should be associated according to this ModelAssociator. - AutofillModelAssociator2* model_associator_; - - // The model we are processing changes from. This is owned by the - // WebDataService which is kept alive by our data type controller - // holding a reference. - WebDatabase* web_database_; - - // We periodically tell the PersonalDataManager to refresh as we make - // changes to the autofill data in the WebDatabase. - PersonalDataManager* personal_data_; - - NotificationRegistrar notification_registrar_; - - bool observing_; - - // Record of changes from ApplyChangesFromSyncModel. These are then processed - // in CommitChangesFromSyncModel. - struct AutofillChangeRecord; - std::vector<AutofillChangeRecord> autofill_changes_; - - DISALLOW_COPY_AND_ASSIGN(AutofillChangeProcessor2); -}; - -} // namespace browser_sync - -#endif // CHROME_BROWSER_SYNC_GLUE_AUTOFILL_CHANGE_PROCESSOR2_H_ - diff --git a/chrome/browser/sync/glue/autofill_model_associator.h b/chrome/browser/sync/glue/autofill_model_associator.h index 553580f..fb660e6 100644 --- a/chrome/browser/sync/glue/autofill_model_associator.h +++ b/chrome/browser/sync/glue/autofill_model_associator.h @@ -16,7 +16,6 @@ #include "base/ref_counted.h" #include "chrome/browser/autofill/personal_data_manager.h" #include "chrome/browser/sync/engine/syncapi.h" -#include "chrome/browser/sync/glue/autofill_model_associator2.h" #include "chrome/browser/sync/glue/model_associator.h" #include "chrome/browser/sync/protocol/autofill_specifics.pb.h" #include "chrome/browser/webdata/autofill_entry.h" diff --git a/chrome/browser/sync/glue/autofill_model_associator2.cc b/chrome/browser/sync/glue/autofill_model_associator2.cc deleted file mode 100644 index 28872df..0000000 --- a/chrome/browser/sync/glue/autofill_model_associator2.cc +++ /dev/null @@ -1,547 +0,0 @@ -// Copyright (c) 2010 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/browser/sync/glue/autofill_model_associator2.h" - -#include <vector> - -#include "base/task.h" -#include "base/time.h" -#include "base/string_number_conversions.h" -#include "base/utf_string_conversions.h" -#include "chrome/browser/autofill/autofill_profile.h" -#include "chrome/browser/browser_thread.h" -#include "chrome/browser/profiles/profile.h" -#include "chrome/browser/sync/engine/syncapi.h" -#include "chrome/browser/sync/glue/autofill_change_processor.h" -#include "chrome/browser/sync/profile_sync_service.h" -#include "chrome/browser/sync/protocol/autofill_specifics.pb.h" -#include "chrome/browser/webdata/web_database.h" -#include "net/base/escape.h" - -using base::TimeTicks; - -namespace browser_sync { - -extern const char kAutofillTag[]; -extern const char kAutofillEntryNamespaceTag[]; -const char kAutofillProfileNamespaceTag[] = "autofill_profile|"; - -static const int kMaxNumAttemptsToFindUniqueLabel = 100; - -struct AutofillModelAssociator2::DataBundle { - std::set<AutofillKey> current_entries; - std::vector<AutofillEntry> new_entries; - std::set<string16> current_profiles; - std::vector<AutoFillProfile*> updated_profiles; - std::vector<AutoFillProfile*> new_profiles; // We own these pointers. - ~DataBundle() { STLDeleteElements(&new_profiles); } -}; - -AutofillModelAssociator2::DoOptimisticRefreshTask::DoOptimisticRefreshTask( - PersonalDataManager* pdm) : pdm_(pdm) {} - -AutofillModelAssociator2::DoOptimisticRefreshTask::~DoOptimisticRefreshTask() {} - -void AutofillModelAssociator2::DoOptimisticRefreshTask::Run() { - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); - pdm_->Refresh(); -} - -AutofillModelAssociator2::AutofillModelAssociator2( - ProfileSyncService* sync_service, - WebDatabase* web_database, - PersonalDataManager* personal_data) - : sync_service_(sync_service), - web_database_(web_database), - personal_data_(personal_data), - autofill_node_id_(sync_api::kInvalidId), - abort_association_pending_(false) { - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB)); - DCHECK(sync_service_); - DCHECK(web_database_); - DCHECK(personal_data_); -} - -AutofillModelAssociator2::~AutofillModelAssociator2() { - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB)); -} - -bool AutofillModelAssociator2::TraverseAndAssociateChromeAutofillEntries( - sync_api::WriteTransaction* write_trans, - const sync_api::ReadNode& autofill_root, - const std::vector<AutofillEntry>& all_entries_from_db, - std::set<AutofillKey>* current_entries, - std::vector<AutofillEntry>* new_entries) { - - const std::vector<AutofillEntry>& entries = all_entries_from_db; - for (std::vector<AutofillEntry>::const_iterator ix = entries.begin(); - ix != entries.end(); ++ix) { - std::string tag = KeyToTag(ix->key().name(), ix->key().value()); - if (id_map_.find(tag) != id_map_.end()) { - // It seems that name/value pairs are not unique in the web database. - // As a result, we have to filter out duplicates here. This is probably - // a bug in the database. - continue; - } - - sync_api::ReadNode node(write_trans); - if (node.InitByClientTagLookup(syncable::AUTOFILL, tag)) { - const sync_pb::AutofillSpecifics& autofill(node.GetAutofillSpecifics()); - DCHECK_EQ(tag, KeyToTag(UTF8ToUTF16(autofill.name()), - UTF8ToUTF16(autofill.value()))); - - std::vector<base::Time> timestamps; - if (MergeTimestamps(autofill, ix->timestamps(), ×tamps)) { - AutofillEntry new_entry(ix->key(), timestamps); - new_entries->push_back(new_entry); - - sync_api::WriteNode write_node(write_trans); - if (!write_node.InitByClientTagLookup(syncable::AUTOFILL, tag)) { - LOG(ERROR) << "Failed to write autofill sync node."; - return false; - } - AutofillChangeProcessor2::WriteAutofillEntry(new_entry, &write_node); - } - - Associate(&tag, node.GetId()); - } else { - sync_api::WriteNode node(write_trans); - if (!node.InitUniqueByCreation(syncable::AUTOFILL, - autofill_root, tag)) { - LOG(ERROR) << "Failed to create autofill sync node."; - return false; - } - node.SetTitle(UTF8ToWide(tag)); - AutofillChangeProcessor2::WriteAutofillEntry(*ix, &node); - Associate(&tag, node.GetId()); - } - - current_entries->insert(ix->key()); - } - return true; -} - -bool AutofillModelAssociator2::TraverseAndAssociateChromeAutoFillProfiles( - sync_api::WriteTransaction* write_trans, - const sync_api::ReadNode& autofill_root, - const std::vector<AutoFillProfile*>& all_profiles_from_db, - std::set<string16>* current_profiles, - std::vector<AutoFillProfile*>* updated_profiles) { - const std::vector<AutoFillProfile*>& profiles = all_profiles_from_db; - for (std::vector<AutoFillProfile*>::const_iterator ix = profiles.begin(); - ix != profiles.end(); ++ix) { - string16 label((*ix)->Label()); - std::string tag(ProfileLabelToTag(label)); - - sync_api::ReadNode node(write_trans); - if (node.InitByClientTagLookup(syncable::AUTOFILL, tag)) { - const sync_pb::AutofillSpecifics& autofill(node.GetAutofillSpecifics()); - DCHECK(autofill.has_profile()); - DCHECK_EQ(ProfileLabelToTag(UTF8ToUTF16(autofill.profile().label())), - tag); - int64 sync_id = node.GetId(); - if (id_map_.find(tag) != id_map_.end()) { - // We just looked up something we already associated. Move aside. - label = MakeUniqueLabel(label, string16(), write_trans); - if (label.empty()) { - return false; - } - tag = ProfileLabelToTag(label); - // TODO(dhollowa): Replace with |AutoFillProfile::set_guid|. - // http://crbug.com/58813 - (*ix)->set_label(label); - if (!MakeNewAutofillProfileSyncNode(write_trans, autofill_root, - tag, **ix, &sync_id)) { - return false; - } - updated_profiles->push_back(*ix); - } else { - // Overwrite local with cloud state. - if (OverwriteProfileWithServerData(*ix, autofill.profile())) - updated_profiles->push_back(*ix); - sync_id = node.GetId(); - } - - Associate(&tag, sync_id); - } else { - int64 id; - if (!MakeNewAutofillProfileSyncNode(write_trans, autofill_root, - tag, **ix, &id)) { - return false; - } - Associate(&tag, id); - } - current_profiles->insert(label); - } - return true; -} - -// static -string16 AutofillModelAssociator2::MakeUniqueLabel( - const string16& non_unique_label, - const string16& existing_unique_label, - sync_api::BaseTransaction* trans) { - if (!non_unique_label.empty() && non_unique_label == existing_unique_label) { - return existing_unique_label; - } - int unique_id = 1; // Priming so we start by appending "2". - while (unique_id++ < kMaxNumAttemptsToFindUniqueLabel) { - string16 suffix(base::IntToString16(unique_id)); - string16 unique_label = non_unique_label + suffix; - if (unique_label == existing_unique_label) - return unique_label; // We'll use the one we already have. - sync_api::ReadNode node(trans); - if (node.InitByClientTagLookup(syncable::AUTOFILL, - ProfileLabelToTag(unique_label))) { - continue; - } - return unique_label; - } - - LOG(ERROR) << "Couldn't create unique tag for autofill node. Srsly?!"; - return string16(); -} - -bool AutofillModelAssociator2::MakeNewAutofillProfileSyncNode( - sync_api::WriteTransaction* trans, const sync_api::BaseNode& autofill_root, - const std::string& tag, const AutoFillProfile& profile, int64* sync_id) { - sync_api::WriteNode node(trans); - if (!node.InitUniqueByCreation(syncable::AUTOFILL, autofill_root, tag)) { - LOG(ERROR) << "Failed to create autofill sync node."; - return false; - } - node.SetTitle(UTF8ToWide(tag)); - AutofillChangeProcessor2::WriteAutofillProfile(profile, &node); - *sync_id = node.GetId(); - return true; -} - - -bool AutofillModelAssociator2::LoadAutofillData( - std::vector<AutofillEntry>* entries, - std::vector<AutoFillProfile*>* profiles) { - if (IsAbortPending()) - return false; - if (!web_database_->GetAllAutofillEntries(entries)) - return false; - - if (IsAbortPending()) - return false; - if (!web_database_->GetAutoFillProfiles(profiles)) - return false; - - return true; -} - -bool AutofillModelAssociator2::AssociateModels() { - VLOG(1) << "Associating Autofill Models"; - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB)); - { - AutoLock lock(abort_association_pending_lock_); - abort_association_pending_ = false; - } - - // TODO(zork): Attempt to load the model association from storage. - std::vector<AutofillEntry> entries; - ScopedVector<AutoFillProfile> profiles; - - if (!LoadAutofillData(&entries, &profiles.get())) { - LOG(ERROR) << "Could not get the autofill data from WebDatabase."; - return false; - } - - DataBundle bundle; - { - sync_api::WriteTransaction trans( - sync_service_->backend()->GetUserShareHandle()); - - sync_api::ReadNode autofill_root(&trans); - if (!autofill_root.InitByTagLookup(kAutofillTag)) { - LOG(ERROR) << "Server did not create the top-level autofill node. We " - << "might be running against an out-of-date server."; - return false; - } - - if (!TraverseAndAssociateChromeAutofillEntries(&trans, autofill_root, - entries, &bundle.current_entries, &bundle.new_entries) || - !TraverseAndAssociateChromeAutoFillProfiles(&trans, autofill_root, - profiles.get(), &bundle.current_profiles, - &bundle.updated_profiles) || - !TraverseAndAssociateAllSyncNodes(&trans, autofill_root, &bundle)) { - return false; - } - } - - // Since we're on the DB thread, we don't have to worry about updating - // the autofill database after closing the write transaction, since - // this is the only thread that writes to the database. We also don't have - // to worry about the sync model getting out of sync, because changes are - // propogated to the ChangeProcessor on this thread. - if (!SaveChangesToWebData(bundle)) { - LOG(ERROR) << "Failed to update autofill entries."; - return false; - } - - BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, - new DoOptimisticRefreshTask(personal_data_)); - return true; -} - -bool AutofillModelAssociator2::SaveChangesToWebData(const DataBundle& bundle) { - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB)); - - if (IsAbortPending()) - return false; - - if (bundle.new_entries.size() && - !web_database_->UpdateAutofillEntries(bundle.new_entries)) { - return false; - } - - for (size_t i = 0; i < bundle.new_profiles.size(); i++) { - if (IsAbortPending()) - return false; - if (!web_database_->AddAutoFillProfile(*bundle.new_profiles[i])) - return false; - } - - for (size_t i = 0; i < bundle.updated_profiles.size(); i++) { - if (IsAbortPending()) - return false; - if (!web_database_->UpdateAutoFillProfile(*bundle.updated_profiles[i])) - return false; - } - return true; -} - -bool AutofillModelAssociator2::TraverseAndAssociateAllSyncNodes( - sync_api::WriteTransaction* write_trans, - const sync_api::ReadNode& autofill_root, - DataBundle* bundle) { - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB)); - - int64 sync_child_id = autofill_root.GetFirstChildId(); - while (sync_child_id != sync_api::kInvalidId) { - sync_api::ReadNode sync_child(write_trans); - if (!sync_child.InitByIdLookup(sync_child_id)) { - LOG(ERROR) << "Failed to fetch child node."; - return false; - } - const sync_pb::AutofillSpecifics& autofill( - sync_child.GetAutofillSpecifics()); - - if (autofill.has_value()) - AddNativeEntryIfNeeded(autofill, bundle, sync_child); - else if (autofill.has_profile()) - AddNativeProfileIfNeeded(autofill.profile(), bundle, sync_child); - else - NOTREACHED() << "AutofillSpecifics has no autofill data!"; - - sync_child_id = sync_child.GetSuccessorId(); - } - return true; -} - -void AutofillModelAssociator2::AddNativeEntryIfNeeded( - const sync_pb::AutofillSpecifics& autofill, DataBundle* bundle, - const sync_api::ReadNode& node) { - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB)); - AutofillKey key(UTF8ToUTF16(autofill.name()), UTF8ToUTF16(autofill.value())); - - if (bundle->current_entries.find(key) == bundle->current_entries.end()) { - std::vector<base::Time> timestamps; - int timestamps_count = autofill.usage_timestamp_size(); - for (int c = 0; c < timestamps_count; ++c) { - timestamps.push_back(base::Time::FromInternalValue( - autofill.usage_timestamp(c))); - } - std::string tag(KeyToTag(key.name(), key.value())); - Associate(&tag, node.GetId()); - bundle->new_entries.push_back(AutofillEntry(key, timestamps)); - } -} - -void AutofillModelAssociator2::AddNativeProfileIfNeeded( - const sync_pb::AutofillProfileSpecifics& profile, DataBundle* bundle, - const sync_api::ReadNode& node) { - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB)); - if (bundle->current_profiles.find(UTF8ToUTF16(profile.label())) == - bundle->current_profiles.end()) { - std::string tag(ProfileLabelToTag(UTF8ToUTF16(profile.label()))); - Associate(&tag, node.GetId()); - AutoFillProfile* p = personal_data_-> - CreateNewEmptyAutoFillProfileForDBThread(UTF8ToUTF16(profile.label())); - OverwriteProfileWithServerData(p, profile); - bundle->new_profiles.push_back(p); - } -} - -bool AutofillModelAssociator2::DisassociateModels() { - id_map_.clear(); - id_map_inverse_.clear(); - return true; -} - -bool AutofillModelAssociator2::SyncModelHasUserCreatedNodes(bool* has_nodes) { - DCHECK(has_nodes); - *has_nodes = false; - int64 autofill_sync_id; - if (!GetSyncIdForTaggedNode(kAutofillTag, &autofill_sync_id)) { - LOG(ERROR) << "Server did not create the top-level autofill node. We " - << "might be running against an out-of-date server."; - return false; - } - sync_api::ReadTransaction trans( - sync_service_->backend()->GetUserShareHandle()); - - sync_api::ReadNode autofill_node(&trans); - if (!autofill_node.InitByIdLookup(autofill_sync_id)) { - LOG(ERROR) << "Server did not create the top-level autofill node. We " - << "might be running against an out-of-date server."; - return false; - } - - // The sync model has user created nodes if the autofill folder has any - // children. - *has_nodes = sync_api::kInvalidId != autofill_node.GetFirstChildId(); - return true; -} - -void AutofillModelAssociator2::AbortAssociation() { - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); - AutoLock lock(abort_association_pending_lock_); - abort_association_pending_ = true; -} - -const std::string* -AutofillModelAssociator2::GetChromeNodeFromSyncId(int64 sync_id) { - return NULL; -} - -bool AutofillModelAssociator2::InitSyncNodeFromChromeId( - const std::string& node_id, - sync_api::BaseNode* sync_node) { - return false; -} - -int64 AutofillModelAssociator2::GetSyncIdFromChromeId( - const std::string& autofill) { - AutofillToSyncIdMap::const_iterator iter = id_map_.find(autofill); - return iter == id_map_.end() ? sync_api::kInvalidId : iter->second; -} - -void AutofillModelAssociator2::Associate( - const std::string* autofill, int64 sync_id) { - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB)); - DCHECK_NE(sync_api::kInvalidId, sync_id); - DCHECK(id_map_.find(*autofill) == id_map_.end()); - DCHECK(id_map_inverse_.find(sync_id) == id_map_inverse_.end()); - id_map_[*autofill] = sync_id; - id_map_inverse_[sync_id] = *autofill; -} - -void AutofillModelAssociator2::Disassociate(int64 sync_id) { - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB)); - SyncIdToAutofillMap::iterator iter = id_map_inverse_.find(sync_id); - if (iter == id_map_inverse_.end()) - return; - CHECK(id_map_.erase(iter->second)); - id_map_inverse_.erase(iter); -} - -bool AutofillModelAssociator2::GetSyncIdForTaggedNode(const std::string& tag, - int64* sync_id) { - sync_api::ReadTransaction trans( - sync_service_->backend()->GetUserShareHandle()); - sync_api::ReadNode sync_node(&trans); - if (!sync_node.InitByTagLookup(tag.c_str())) - return false; - *sync_id = sync_node.GetId(); - return true; -} - -bool AutofillModelAssociator2::IsAbortPending() { - AutoLock lock(abort_association_pending_lock_); - return abort_association_pending_; -} - -// static -std::string AutofillModelAssociator2::KeyToTag(const string16& name, - const string16& value) { - std::string ns(kAutofillEntryNamespaceTag); - return ns + EscapePath(UTF16ToUTF8(name)) + "|" + - EscapePath(UTF16ToUTF8(value)); -} - -// static -std::string AutofillModelAssociator2::ProfileLabelToTag(const string16& label) { - std::string ns(kAutofillProfileNamespaceTag); - return ns + EscapePath(UTF16ToUTF8(label)); -} - -// static -bool AutofillModelAssociator2::MergeTimestamps( - const sync_pb::AutofillSpecifics& autofill, - const std::vector<base::Time>& timestamps, - std::vector<base::Time>* new_timestamps) { - DCHECK(new_timestamps); - std::set<base::Time> timestamp_union(timestamps.begin(), - timestamps.end()); - - size_t timestamps_count = autofill.usage_timestamp_size(); - - bool different = timestamps.size() != timestamps_count; - for (size_t c = 0; c < timestamps_count; ++c) { - if (timestamp_union.insert(base::Time::FromInternalValue( - autofill.usage_timestamp(c))).second) { - different = true; - } - } - - if (different) { - new_timestamps->insert(new_timestamps->begin(), - timestamp_union.begin(), - timestamp_union.end()); - } - return different; -} - -// Helper to compare the local value and cloud value of a field, merge into -// the local value if they differ, and return whether the merge happened. -bool MergeField2(FormGroup* f, AutoFillFieldType t, - const std::string& specifics_field) { - if (UTF16ToUTF8(f->GetFieldText(AutoFillType(t))) == specifics_field) - return false; - f->SetInfo(AutoFillType(t), UTF8ToUTF16(specifics_field)); - return true; -} - -// static -bool AutofillModelAssociator2::OverwriteProfileWithServerData( - AutoFillProfile* merge_into, - const sync_pb::AutofillProfileSpecifics& specifics) { - bool diff = false; - AutoFillProfile* p = merge_into; - const sync_pb::AutofillProfileSpecifics& s(specifics); - diff = MergeField2(p, NAME_FIRST, s.name_first()) || diff; - diff = MergeField2(p, NAME_LAST, s.name_last()) || diff; - diff = MergeField2(p, NAME_MIDDLE, s.name_middle()) || diff; - diff = MergeField2(p, ADDRESS_HOME_LINE1, s.address_home_line1()) || diff; - diff = MergeField2(p, ADDRESS_HOME_LINE2, s.address_home_line2()) || diff; - diff = MergeField2(p, ADDRESS_HOME_CITY, s.address_home_city()) || diff; - diff = MergeField2(p, ADDRESS_HOME_STATE, s.address_home_state()) || diff; - diff = MergeField2(p, ADDRESS_HOME_COUNTRY, s.address_home_country()) || diff; - diff = MergeField2(p, ADDRESS_HOME_ZIP, s.address_home_zip()) || diff; - diff = MergeField2(p, EMAIL_ADDRESS, s.email_address()) || diff; - diff = MergeField2(p, COMPANY_NAME, s.company_name()) || diff; - diff = MergeField2(p, PHONE_FAX_WHOLE_NUMBER, s.phone_fax_whole_number()) - || diff; - diff = MergeField2(p, PHONE_HOME_WHOLE_NUMBER, s.phone_home_whole_number()) - || diff; - return diff; -} - -} // namespace browser_sync - diff --git a/chrome/browser/sync/glue/autofill_model_associator2.h b/chrome/browser/sync/glue/autofill_model_associator2.h deleted file mode 100644 index 2b50310..0000000 --- a/chrome/browser/sync/glue/autofill_model_associator2.h +++ /dev/null @@ -1,212 +0,0 @@ -// Copyright (c) 2010 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef CHROME_BROWSER_SYNC_GLUE_AUTOFILL_MODEL_ASSOCIATOR2_H_ -#define CHROME_BROWSER_SYNC_GLUE_AUTOFILL_MODEL_ASSOCIATOR2_H_ -#pragma once - -#include <map> -#include <set> -#include <string> -#include <vector> - -#include "base/basictypes.h" -#include "base/lock.h" -#include "base/ref_counted.h" -#include "chrome/browser/autofill/personal_data_manager.h" -#include "chrome/browser/sync/engine/syncapi.h" -#include "chrome/browser/sync/glue/model_associator.h" -#include "chrome/browser/sync/protocol/autofill_specifics.pb.h" -#include "chrome/browser/webdata/autofill_entry.h" - -class AutoFillProfile; - -class ProfileSyncService; -class WebDatabase; - -namespace sync_api { -class WriteTransaction; -} - -namespace browser_sync { - -class AutofillChangeProcessor; -class UnrecoverableErrorHandler; - -extern const char kAutofillTag[]; -extern const char kAutofillProfileNamespaceTag[]; -extern const char kAutofillEntryNamespaceTag[]; - -// Contains all model association related logic: -// * Algorithm to associate autofill model and sync model. -// We do not check if we have local data before this run; we always -// merge and sync. -class AutofillModelAssociator2 - : public PerDataTypeAssociatorInterface<std::string, std::string> { - public: - static syncable::ModelType model_type() { return syncable::AUTOFILL; } - AutofillModelAssociator2(ProfileSyncService* sync_service, - WebDatabase* web_database, - PersonalDataManager* data_manager); - virtual ~AutofillModelAssociator2(); - - // A task used by this class and the change processor to inform the - // PersonalDataManager living on the UI thread that it needs to refresh. - class DoOptimisticRefreshTask : public Task { - public: - explicit DoOptimisticRefreshTask(PersonalDataManager* pdm); - virtual ~DoOptimisticRefreshTask(); - virtual void Run(); - private: - scoped_refptr<PersonalDataManager> pdm_; - }; - - // PerDataTypeAssociatorInterface implementation. - // - // Iterates through the sync model looking for matched pairs of items. - virtual bool AssociateModels(); - - // Clears all associations. - virtual bool DisassociateModels(); - - // The has_nodes out param is true if the sync model has nodes other - // than the permanent tagged nodes. - virtual bool SyncModelHasUserCreatedNodes(bool* has_nodes); - - // See ModelAssociator interface. - virtual void AbortAssociation(); - - // Not implemented. - virtual const std::string* GetChromeNodeFromSyncId(int64 sync_id); - - // Not implemented. - virtual bool InitSyncNodeFromChromeId(const std::string& node_id, - sync_api::BaseNode* sync_node); - - // Returns the sync id for the given autofill name, or sync_api::kInvalidId - // if the autofill name is not associated to any sync id. - virtual int64 GetSyncIdFromChromeId(const std::string& node_id); - - // Associates the given autofill name with the given sync id. - virtual void Associate(const std::string* node, int64 sync_id); - - // Remove the association that corresponds to the given sync id. - virtual void Disassociate(int64 sync_id); - - // Returns whether a node with the given permanent tag was found and update - // |sync_id| with that node's id. - virtual bool GetSyncIdForTaggedNode(const std::string& tag, int64* sync_id); - - static std::string KeyToTag(const string16& name, const string16& value); - static std::string ProfileLabelToTag(const string16& label); - - static bool MergeTimestamps(const sync_pb::AutofillSpecifics& autofill, - const std::vector<base::Time>& timestamps, - std::vector<base::Time>* new_timestamps); - static bool OverwriteProfileWithServerData( - AutoFillProfile* merge_into, - const sync_pb::AutofillProfileSpecifics& specifics); - - // TODO(georgey) : add the same processing for CC info (already in protocol - // buffers). - - // Returns sync service instance. - ProfileSyncService* sync_service() { return sync_service_; } - - // Compute and apply suffix to a label so that the resulting label is - // unique in the sync database. - // |new_non_unique_label| is the colliding label which is to be uniquified. - // |existing_unique_label| is the current label of the object, if any; this - // is treated as a unique label even if colliding. If no such label is - // available, |existing_unique_label| may be empty. - static string16 MakeUniqueLabel(const string16& new_non_unique_label, - const string16& existing_unique_label, - sync_api::BaseTransaction* trans); - - private: - typedef std::map<std::string, int64> AutofillToSyncIdMap; - typedef std::map<int64, std::string> SyncIdToAutofillMap; - - // A convenience wrapper of a bunch of state we pass around while associating - // models, and send to the WebDatabase for persistence. - struct DataBundle; - - // Helper to query WebDatabase for the current autofill state. - bool LoadAutofillData(std::vector<AutofillEntry>* entries, - std::vector<AutoFillProfile*>* profiles); - - // We split up model association first by autofill sub-type (entries, and - // profiles. There is a Traverse* method for each of these. - bool TraverseAndAssociateChromeAutofillEntries( - sync_api::WriteTransaction* write_trans, - const sync_api::ReadNode& autofill_root, - const std::vector<AutofillEntry>& all_entries_from_db, - std::set<AutofillKey>* current_entries, - std::vector<AutofillEntry>* new_entries); - bool TraverseAndAssociateChromeAutoFillProfiles( - sync_api::WriteTransaction* write_trans, - const sync_api::ReadNode& autofill_root, - const std::vector<AutoFillProfile*>& all_profiles_from_db, - std::set<string16>* current_profiles, - std::vector<AutoFillProfile*>* updated_profiles); - - // Once the above traversals are complete, we traverse the sync model to - // associate all remaining nodes. - bool TraverseAndAssociateAllSyncNodes( - sync_api::WriteTransaction* write_trans, - const sync_api::ReadNode& autofill_root, - DataBundle* bundle); - - // Helper to persist any changes that occured during model association to - // the WebDatabase. - bool SaveChangesToWebData(const DataBundle& bundle); - - // Helper to insert an AutofillEntry into the WebDatabase (e.g. in response - // to encountering a sync node that doesn't exist yet locally). - void AddNativeEntryIfNeeded(const sync_pb::AutofillSpecifics& autofill, - DataBundle* bundle, - const sync_api::ReadNode& node); - - // Helper to insert an AutoFillProfile into the WebDatabase (e.g. in response - // to encountering a sync node that doesn't exist yet locally). - void AddNativeProfileIfNeeded( - const sync_pb::AutofillProfileSpecifics& profile, - DataBundle* bundle, - const sync_api::ReadNode& node); - - // Helper to insert a sync node for the given AutoFillProfile (e.g. in - // response to encountering a native profile that doesn't exist yet in the - // cloud). - bool MakeNewAutofillProfileSyncNode( - sync_api::WriteTransaction* trans, - const sync_api::BaseNode& autofill_root, - const std::string& tag, - const AutoFillProfile& profile, - int64* sync_id); - - // Called at various points in model association to determine if the - // user requested an abort. - bool IsAbortPending(); - - ProfileSyncService* sync_service_; - WebDatabase* web_database_; - PersonalDataManager* personal_data_; - int64 autofill_node_id_; - - AutofillToSyncIdMap id_map_; - SyncIdToAutofillMap id_map_inverse_; - - // Abort association pending flag and lock. If this is set to true - // (via the AbortAssociation method), return from the - // AssociateModels method as soon as possible. - Lock abort_association_pending_lock_; - bool abort_association_pending_; - - DISALLOW_COPY_AND_ASSIGN(AutofillModelAssociator2); -}; - -} // namespace browser_sync - -#endif // CHROME_BROWSER_SYNC_GLUE_AUTOFILL_MODEL_ASSOCIATOR2_H_ - diff --git a/chrome/browser/sync/profile_sync_factory_impl.cc b/chrome/browser/sync/profile_sync_factory_impl.cc index 07c1145..991ea96 100644 --- a/chrome/browser/sync/profile_sync_factory_impl.cc +++ b/chrome/browser/sync/profile_sync_factory_impl.cc @@ -6,10 +6,8 @@ #include "chrome/browser/profiles/profile.h" #include "chrome/browser/sync/glue/app_data_type_controller.h" #include "chrome/browser/sync/glue/autofill_change_processor.h" -#include "chrome/browser/sync/glue/autofill_change_processor2.h" #include "chrome/browser/sync/glue/autofill_data_type_controller.h" #include "chrome/browser/sync/glue/autofill_model_associator.h" -#include "chrome/browser/sync/glue/autofill_model_associator2.h" #include "chrome/browser/sync/glue/autofill_profile_change_processor.h" #include "chrome/browser/sync/glue/autofill_profile_data_type_controller.h" #include "chrome/browser/sync/glue/autofill_profile_model_associator.h" @@ -45,12 +43,10 @@ using browser_sync::AppDataTypeController; using browser_sync::AutofillChangeProcessor; -using browser_sync::AutofillChangeProcessor2; using browser_sync::AutofillProfileChangeProcessor; using browser_sync::AutofillDataTypeController; using browser_sync::AutofillProfileDataTypeController; using browser_sync::AutofillModelAssociator; -using browser_sync::AutofillModelAssociator2; using browser_sync::AutofillProfileModelAssociator; using browser_sync::BookmarkChangeProcessor; using browser_sync::BookmarkDataTypeController; @@ -153,8 +149,7 @@ ProfileSyncService* ProfileSyncFactoryImpl::CreateProfileSyncService( new SessionDataTypeController(this, pss)); } - if (!command_line_->HasSwitch(switches::kDisableSyncAutofillProfile) && - command_line_->HasSwitch(switches::kEnableSyncNewAutofill)) { + if (!command_line_->HasSwitch(switches::kDisableSyncAutofillProfile)) { pss->RegisterDataTypeController(new AutofillProfileDataTypeController( this, profile_, pss)); } @@ -189,29 +184,17 @@ ProfileSyncFactoryImpl::CreateAutofillSyncComponents( PersonalDataManager* personal_data, browser_sync::UnrecoverableErrorHandler* error_handler) { - if (command_line_->HasSwitch(switches::kEnableSyncNewAutofill)) { - AutofillModelAssociator* model_associator = - new AutofillModelAssociator(profile_sync_service, - web_database, - personal_data); - AutofillChangeProcessor* change_processor = - new AutofillChangeProcessor(model_associator, - web_database, - personal_data, - error_handler); - return SyncComponents(model_associator, change_processor); - } else { - AutofillModelAssociator2* model_associator = - new AutofillModelAssociator2(profile_sync_service, - web_database, - personal_data); - AutofillChangeProcessor2* change_processor = - new AutofillChangeProcessor2(model_associator, - web_database, - personal_data, - error_handler); - return SyncComponents(model_associator, change_processor); - } + AutofillModelAssociator* model_associator = + new AutofillModelAssociator(profile_sync_service, + web_database, + personal_data); + AutofillChangeProcessor* change_processor = + new AutofillChangeProcessor(model_associator, + web_database, + personal_data, + error_handler); + return SyncComponents(model_associator, change_processor); + } ProfileSyncFactory::SyncComponents diff --git a/chrome/browser/sync/profile_sync_factory_impl_unittest.cc b/chrome/browser/sync/profile_sync_factory_impl_unittest.cc index f622ef4..daf43ae 100644 --- a/chrome/browser/sync/profile_sync_factory_impl_unittest.cc +++ b/chrome/browser/sync/profile_sync_factory_impl_unittest.cc @@ -43,13 +43,14 @@ TEST_F(ProfileSyncFactoryImplTest, CreatePSSDefault) { DataTypeController::StateMap controller_states; DataTypeController::StateMap* controller_states_ptr = &controller_states; pss->GetDataTypeControllerStates(controller_states_ptr); - EXPECT_EQ(6U, controller_states_ptr->size()); + EXPECT_EQ(7U, controller_states_ptr->size()); EXPECT_EQ(1U, controller_states_ptr->count(syncable::BOOKMARKS)); EXPECT_EQ(1U, controller_states_ptr->count(syncable::PREFERENCES)); EXPECT_EQ(1U, controller_states_ptr->count(syncable::AUTOFILL)); EXPECT_EQ(1U, controller_states_ptr->count(syncable::THEMES)); EXPECT_EQ(1U, controller_states_ptr->count(syncable::EXTENSIONS)); EXPECT_EQ(1U, controller_states_ptr->count(syncable::APPS)); + EXPECT_EQ(1U, controller_states_ptr->count(syncable::AUTOFILL_PROFILE)); } TEST_F(ProfileSyncFactoryImplTest, CreatePSSDisableAutofill) { @@ -59,13 +60,14 @@ TEST_F(ProfileSyncFactoryImplTest, CreatePSSDisableAutofill) { DataTypeController::StateMap controller_states; DataTypeController::StateMap* controller_states_ptr = &controller_states; pss->GetDataTypeControllerStates(controller_states_ptr); - EXPECT_EQ(5U, controller_states_ptr->size()); + EXPECT_EQ(6U, controller_states_ptr->size()); EXPECT_EQ(1U, controller_states_ptr->count(syncable::BOOKMARKS)); EXPECT_EQ(1U, controller_states_ptr->count(syncable::PREFERENCES)); EXPECT_EQ(0U, controller_states_ptr->count(syncable::AUTOFILL)); EXPECT_EQ(1U, controller_states_ptr->count(syncable::THEMES)); EXPECT_EQ(1U, controller_states_ptr->count(syncable::EXTENSIONS)); EXPECT_EQ(1U, controller_states_ptr->count(syncable::APPS)); + EXPECT_EQ(1U, controller_states_ptr->count(syncable::AUTOFILL_PROFILE)); } TEST_F(ProfileSyncFactoryImplTest, CreatePSSDisableBookmarks) { @@ -75,13 +77,14 @@ TEST_F(ProfileSyncFactoryImplTest, CreatePSSDisableBookmarks) { DataTypeController::StateMap controller_states; DataTypeController::StateMap* controller_states_ptr = &controller_states; pss->GetDataTypeControllerStates(controller_states_ptr); - EXPECT_EQ(5U, controller_states_ptr->size()); + EXPECT_EQ(6U, controller_states_ptr->size()); EXPECT_EQ(0U, controller_states_ptr->count(syncable::BOOKMARKS)); EXPECT_EQ(1U, controller_states_ptr->count(syncable::PREFERENCES)); EXPECT_EQ(1U, controller_states_ptr->count(syncable::AUTOFILL)); EXPECT_EQ(1U, controller_states_ptr->count(syncable::THEMES)); EXPECT_EQ(1U, controller_states_ptr->count(syncable::EXTENSIONS)); EXPECT_EQ(1U, controller_states_ptr->count(syncable::APPS)); + EXPECT_EQ(1U, controller_states_ptr->count(syncable::AUTOFILL_PROFILE)); } TEST_F(ProfileSyncFactoryImplTest, CreatePSSDisablePreferences) { @@ -91,13 +94,14 @@ TEST_F(ProfileSyncFactoryImplTest, CreatePSSDisablePreferences) { DataTypeController::StateMap controller_states; DataTypeController::StateMap* controller_states_ptr = &controller_states; pss->GetDataTypeControllerStates(controller_states_ptr); - EXPECT_EQ(5U, controller_states_ptr->size()); + EXPECT_EQ(6U, controller_states_ptr->size()); EXPECT_EQ(1U, controller_states_ptr->count(syncable::BOOKMARKS)); EXPECT_EQ(0U, controller_states_ptr->count(syncable::PREFERENCES)); EXPECT_EQ(1U, controller_states_ptr->count(syncable::AUTOFILL)); EXPECT_EQ(1U, controller_states_ptr->count(syncable::THEMES)); EXPECT_EQ(1U, controller_states_ptr->count(syncable::EXTENSIONS)); EXPECT_EQ(1U, controller_states_ptr->count(syncable::APPS)); + EXPECT_EQ(1U, controller_states_ptr->count(syncable::AUTOFILL_PROFILE)); } TEST_F(ProfileSyncFactoryImplTest, CreatePSSDisableThemes) { @@ -107,13 +111,14 @@ TEST_F(ProfileSyncFactoryImplTest, CreatePSSDisableThemes) { DataTypeController::StateMap controller_states; DataTypeController::StateMap* controller_states_ptr = &controller_states; pss->GetDataTypeControllerStates(controller_states_ptr); - EXPECT_EQ(5U, controller_states_ptr->size()); + EXPECT_EQ(6U, controller_states_ptr->size()); EXPECT_EQ(1U, controller_states_ptr->count(syncable::BOOKMARKS)); EXPECT_EQ(1U, controller_states_ptr->count(syncable::PREFERENCES)); EXPECT_EQ(1U, controller_states_ptr->count(syncable::AUTOFILL)); EXPECT_EQ(0U, controller_states_ptr->count(syncable::THEMES)); EXPECT_EQ(1U, controller_states_ptr->count(syncable::EXTENSIONS)); EXPECT_EQ(1U, controller_states_ptr->count(syncable::APPS)); + EXPECT_EQ(1U, controller_states_ptr->count(syncable::AUTOFILL_PROFILE)); } TEST_F(ProfileSyncFactoryImplTest, CreatePSSDisableExtensions) { @@ -123,13 +128,14 @@ TEST_F(ProfileSyncFactoryImplTest, CreatePSSDisableExtensions) { DataTypeController::StateMap controller_states; DataTypeController::StateMap* controller_states_ptr = &controller_states; pss->GetDataTypeControllerStates(controller_states_ptr); - EXPECT_EQ(5U, controller_states_ptr->size()); + EXPECT_EQ(6U, controller_states_ptr->size()); EXPECT_EQ(1U, controller_states_ptr->count(syncable::BOOKMARKS)); EXPECT_EQ(1U, controller_states_ptr->count(syncable::PREFERENCES)); EXPECT_EQ(1U, controller_states_ptr->count(syncable::AUTOFILL)); EXPECT_EQ(1U, controller_states_ptr->count(syncable::THEMES)); EXPECT_EQ(0U, controller_states_ptr->count(syncable::EXTENSIONS)); EXPECT_EQ(1U, controller_states_ptr->count(syncable::APPS)); + EXPECT_EQ(1U, controller_states_ptr->count(syncable::AUTOFILL_PROFILE)); } TEST_F(ProfileSyncFactoryImplTest, CreatePSSDisableApps) { @@ -139,11 +145,29 @@ TEST_F(ProfileSyncFactoryImplTest, CreatePSSDisableApps) { DataTypeController::StateMap controller_states; DataTypeController::StateMap* controller_states_ptr = &controller_states; pss->GetDataTypeControllerStates(controller_states_ptr); - EXPECT_EQ(5U, controller_states_ptr->size()); + EXPECT_EQ(6U, controller_states_ptr->size()); EXPECT_EQ(1U, controller_states_ptr->count(syncable::BOOKMARKS)); EXPECT_EQ(1U, controller_states_ptr->count(syncable::PREFERENCES)); EXPECT_EQ(1U, controller_states_ptr->count(syncable::AUTOFILL)); EXPECT_EQ(1U, controller_states_ptr->count(syncable::THEMES)); EXPECT_EQ(1U, controller_states_ptr->count(syncable::EXTENSIONS)); EXPECT_EQ(0U, controller_states_ptr->count(syncable::APPS)); + EXPECT_EQ(1U, controller_states_ptr->count(syncable::AUTOFILL_PROFILE)); +} + +TEST_F(ProfileSyncFactoryImplTest, CreatePSSDisableAutofillProfile) { + command_line_->AppendSwitch(switches::kDisableSyncAutofillProfile); + scoped_ptr<ProfileSyncService> pss; + pss.reset(profile_sync_service_factory_->CreateProfileSyncService("")); + DataTypeController::StateMap controller_states; + DataTypeController::StateMap* controller_states_ptr = &controller_states; + pss->GetDataTypeControllerStates(controller_states_ptr); + EXPECT_EQ(6U, controller_states_ptr->size()); + EXPECT_EQ(1U, controller_states_ptr->count(syncable::BOOKMARKS)); + EXPECT_EQ(1U, controller_states_ptr->count(syncable::PREFERENCES)); + EXPECT_EQ(1U, controller_states_ptr->count(syncable::AUTOFILL)); + EXPECT_EQ(1U, controller_states_ptr->count(syncable::THEMES)); + EXPECT_EQ(1U, controller_states_ptr->count(syncable::EXTENSIONS)); + EXPECT_EQ(1U, controller_states_ptr->count(syncable::APPS)); + EXPECT_EQ(0U, controller_states_ptr->count(syncable::AUTOFILL_PROFILE)); } diff --git a/chrome/browser/sync/profile_sync_service_autofill_unittest.cc b/chrome/browser/sync/profile_sync_service_autofill_unittest.cc index 025c573..0342474 100644 --- a/chrome/browser/sync/profile_sync_service_autofill_unittest.cc +++ b/chrome/browser/sync/profile_sync_service_autofill_unittest.cc @@ -24,10 +24,8 @@ #include "chrome/browser/sync/engine/syncapi.h" #include "chrome/browser/sync/engine/syncer_util.h" #include "chrome/browser/sync/glue/autofill_change_processor.h" -#include "chrome/browser/sync/glue/autofill_change_processor2.h" #include "chrome/browser/sync/glue/autofill_data_type_controller.h" #include "chrome/browser/sync/glue/autofill_model_associator.h" -#include "chrome/browser/sync/glue/autofill_model_associator2.h" #include "chrome/browser/sync/glue/autofill_profile_change_processor.h" #include "chrome/browser/sync/glue/autofill_profile_data_type_controller.h" #include "chrome/browser/sync/glue/autofill_profile_model_associator.h" @@ -53,10 +51,8 @@ using base::Time; using base::WaitableEvent; using browser_sync::AutofillChangeProcessor; -using browser_sync::AutofillChangeProcessor2; using browser_sync::AutofillDataTypeController; using browser_sync::AutofillModelAssociator; -using browser_sync::AutofillModelAssociator2; using browser_sync::AutofillProfileChangeProcessor; using browser_sync::AutofillProfileDataTypeController; using browser_sync::AutofillProfileModelAssociator; |