summaryrefslogtreecommitdiffstats
path: root/chrome/browser/sync
diff options
context:
space:
mode:
authorlipalani@chromium.org <lipalani@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-01-11 00:27:08 +0000
committerlipalani@chromium.org <lipalani@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-01-11 00:27:08 +0000
commit48fbd3e7631e313aab0836f8992bf63e88c67b69 (patch)
treefb5006ad9559bd135aa20952085bc680b01c4dda /chrome/browser/sync
parentfc655ba83a54efcf179e1b0941481c3ebfe4cb2c (diff)
downloadchromium_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')
-rw-r--r--chrome/browser/sync/glue/autofill_change_processor.cc1
-rw-r--r--chrome/browser/sync/glue/autofill_change_processor.h1
-rw-r--r--chrome/browser/sync/glue/autofill_change_processor2.cc583
-rw-r--r--chrome/browser/sync/glue/autofill_change_processor2.h172
-rw-r--r--chrome/browser/sync/glue/autofill_model_associator.h1
-rw-r--r--chrome/browser/sync/glue/autofill_model_associator2.cc547
-rw-r--r--chrome/browser/sync/glue/autofill_model_associator2.h212
-rw-r--r--chrome/browser/sync/profile_sync_factory_impl.cc41
-rw-r--r--chrome/browser/sync/profile_sync_factory_impl_unittest.cc38
-rw-r--r--chrome/browser/sync/profile_sync_service_autofill_unittest.cc4
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(),
- &timestamps)) {
- 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(),
- &timestamps)) {
- 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(), &timestamps)) {
- 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;