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

Unified Diff: chrome/browser/webdata/autocomplete_syncable_service.cc

Issue 9585020: Cull autofill entries older than 60 days. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixed clang Created 8 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/webdata/autocomplete_syncable_service.cc
diff --git a/chrome/browser/webdata/autocomplete_syncable_service.cc b/chrome/browser/webdata/autocomplete_syncable_service.cc
index af1cde14a5b5d40e0d27e42a3d6dcf4f89693d82..cb4dcd4fc2ea1d4132157f864f4fe199a2b53dd0 100644
--- a/chrome/browser/webdata/autocomplete_syncable_service.cc
+++ b/chrome/browser/webdata/autocomplete_syncable_service.cc
@@ -108,16 +108,42 @@ SyncError AutocompleteSyncableService::MergeDataAndStartSyncing(
CreateOrUpdateEntry(*sync_iter, &new_db_entries, &new_synced_entries);
}
+ // Check if newly received items need culling.
+ bool need_to_cull_data = false;
+ base::Time culling_time = base::Time::Now() -
+ base::TimeDelta::FromDays(AutofillEntry::kExpirationPeriodInDays);
+ for (size_t i = 0; i < new_synced_entries.size() && !need_to_cull_data; ++i) {
+ if (new_synced_entries[i].LastAccessOlder(culling_time))
Ilya Sherman 2012/03/15 21:00:41 nit: Can we make this interface be "IsExpired()" a
GeorgeY 2012/03/17 00:36:16 sure, done
+ need_to_cull_data = true;
+ }
+
if (!SaveChangesToWebData(new_synced_entries))
return SyncError(FROM_HERE, "Failed to update webdata.", model_type());
WebDataService::NotifyOfMultipleAutofillChanges(web_data_service_);
+ keys_to_ignore_.clear();
SyncChangeList new_changes;
for (AutocompleteEntryMap::iterator i = new_db_entries.begin();
i != new_db_entries.end(); ++i) {
- new_changes.push_back(
- SyncChange(i->second.first, CreateSyncData(*(i->second.second))));
+ // Sync back only the data that appeared after |culling_time|.
+ if (!i->second.second->LastAccessOlder(culling_time)) {
+ new_changes.push_back(
+ SyncChange(i->second.first, CreateSyncData(*(i->second.second))));
+ } else {
+ need_to_cull_data = true;
+ // Key is not on the server and is too old, it will not ever be synced -
+ // delete it locally.
+ if (SyncChange::ACTION_ADD == i->second.first)
+ keys_to_ignore_.insert(i->first);
+ }
+ }
+
+ if (need_to_cull_data) {
+ // This will schedule deletion operation later on DB thread and we will
+ // be notified on the results of the deletion and deletes will be synced to
+ // the sync.
+ web_data_service_->RemoveFormElementsAccessedBefore(culling_time);
}
SyncError error = sync_processor_->ProcessSyncChanges(FROM_HERE, new_changes);
@@ -357,10 +383,12 @@ void AutocompleteSyncableService::ActOnChanges(
break;
}
case AutofillChange::REMOVE: {
- std::vector<base::Time> timestamps;
- AutofillEntry entry(change->key(), timestamps);
- new_changes.push_back(SyncChange(SyncChange::ACTION_DELETE,
- CreateSyncData(entry)));
+ if (keys_to_ignore_.find(change->key()) == keys_to_ignore_.end()) {
+ std::vector<base::Time> timestamps;
+ AutofillEntry entry(change->key(), timestamps);
+ new_changes.push_back(SyncChange(SyncChange::ACTION_DELETE,
+ CreateSyncData(entry)));
+ }
break;
}
default:
@@ -374,6 +402,8 @@ void AutocompleteSyncableService::ActOnChanges(
<< " Failed processing change:"
<< " Error:" << error.message();
}
+ // |keys_to_ignore_| are only needed for the very first notification.
+ keys_to_ignore_.clear();
}
SyncData AutocompleteSyncableService::CreateSyncData(

Powered by Google App Engine
This is Rietveld 408576698