Chromium Code Reviews| Index: components/autofill/core/browser/webdata/autocomplete_sync_bridge.cc |
| diff --git a/components/autofill/core/browser/webdata/autocomplete_sync_bridge.cc b/components/autofill/core/browser/webdata/autocomplete_sync_bridge.cc |
| index 9b8e201d66b8f6db43b0ee61bcb5b259d692d5a2..37ce4094973f0e451238e6d824796d9e410c9aa3 100644 |
| --- a/components/autofill/core/browser/webdata/autocomplete_sync_bridge.cc |
| +++ b/components/autofill/core/browser/webdata/autocomplete_sync_bridge.cc |
| @@ -5,10 +5,13 @@ |
| #include "components/autofill/core/browser/webdata/autocomplete_sync_bridge.h" |
| #include <unordered_set> |
| +#include <utility> |
| +#include <vector> |
| #include "base/bind.h" |
| #include "base/memory/ptr_util.h" |
| #include "base/strings/utf_string_conversions.h" |
| +#include "components/autofill/core/browser/proto/autofill_sync.pb.h" |
| #include "components/autofill/core/browser/webdata/autofill_metadata_change_list.h" |
| #include "components/autofill/core/browser/webdata/autofill_table.h" |
| #include "components/autofill/core/browser/webdata/autofill_webdata_backend.h" |
| @@ -19,9 +22,12 @@ |
| #include "components/sync/model/sync_error.h" |
| #include "net/base/escape.h" |
| +namespace autofill { |
| + |
| namespace { |
| const char kAutocompleteEntryNamespaceTag[] = "autofill_entry|"; |
| +const char kAutocompleteTagDelimiter[] = "|"; |
| void* UserDataKey() { |
| // Use the address of a static that COMDAT folding won't ever collide |
| @@ -31,7 +37,7 @@ void* UserDataKey() { |
| } |
| std::unique_ptr<syncer::EntityData> CreateEntityData( |
| - const autofill::AutofillEntry& entry) { |
| + const AutofillEntry& entry) { |
| auto entity_data = base::MakeUnique<syncer::EntityData>(); |
| entity_data->non_unique_name = base::UTF16ToUTF8(entry.key().name()); |
| sync_pb::AutofillSpecifics* autofill = |
| @@ -44,9 +50,20 @@ std::unique_ptr<syncer::EntityData> CreateEntityData( |
| return entity_data; |
| } |
| -} // namespace |
| +std::string GetStorageKeyFromStrings(const std::string& name, |
|
Mathieu
2017/01/06 01:51:29
How about BuildSerializedStorageKey?
skym
2017/01/06 18:29:04
Done.
|
| + const std::string& value) { |
| + AutofillSyncStorageKey proto; |
| + proto.set_name(name); |
| + proto.set_value(value); |
| + return proto.SerializeAsString(); |
| +} |
| -namespace autofill { |
| +std::string GetStorageKeyFromModel(const AutofillKey& key) { |
| + return GetStorageKeyFromStrings(base::UTF16ToUTF8(key.name()), |
| + base::UTF16ToUTF8(key.value())); |
| +} |
| + |
| +} // namespace |
| // static |
| void AutocompleteSyncBridge::CreateForWebDataServiceAndBackend( |
| @@ -117,7 +134,7 @@ void AutocompleteSyncBridge::AutocompleteSyncBridge::GetData( |
| std::vector<AutofillEntry> entries; |
| GetAutofillTable()->GetAllAutofillEntries(&entries); |
| for (const AutofillEntry& entry : entries) { |
| - std::string key = GetStorageKeyFromAutofillEntry(entry); |
| + std::string key = GetStorageKeyFromModel(entry.key()); |
| if (keys_set.find(key) != keys_set.end()) { |
| batch->Put(key, CreateEntityData(entry)); |
| } |
| @@ -131,7 +148,7 @@ void AutocompleteSyncBridge::GetAllData(DataCallback callback) { |
| std::vector<AutofillEntry> entries; |
| GetAutofillTable()->GetAllAutofillEntries(&entries); |
| for (const AutofillEntry& entry : entries) { |
| - batch->Put(GetStorageKeyFromAutofillEntry(entry), CreateEntityData(entry)); |
| + batch->Put(GetStorageKeyFromModel(entry.key()), CreateEntityData(entry)); |
| } |
| callback.Run(syncer::SyncError(), std::move(batch)); |
| } |
| @@ -139,18 +156,18 @@ void AutocompleteSyncBridge::GetAllData(DataCallback callback) { |
| std::string AutocompleteSyncBridge::GetClientTag( |
| const syncer::EntityData& entity_data) { |
| DCHECK(entity_data.specifics.has_autofill()); |
| - |
| const sync_pb::AutofillSpecifics specifics = entity_data.specifics.autofill(); |
| - std::string storage_key = |
| - FormatStorageKey(specifics.name(), specifics.value()); |
| - std::string prefix(kAutocompleteEntryNamespaceTag); |
| - return prefix + storage_key; |
| + return std::string(kAutocompleteEntryNamespaceTag) + |
| + net::EscapePath(specifics.name()) + |
| + std::string(kAutocompleteTagDelimiter) + |
| + net::EscapePath(specifics.value()); |
| } |
| std::string AutocompleteSyncBridge::GetStorageKey( |
| const syncer::EntityData& entity_data) { |
| + DCHECK(entity_data.specifics.has_autofill()); |
| const sync_pb::AutofillSpecifics specifics = entity_data.specifics.autofill(); |
| - return FormatStorageKey(specifics.name(), specifics.value()); |
| + return GetStorageKeyFromStrings(specifics.name(), specifics.value()); |
| } |
| // AutofillWebDataServiceObserverOnDBThread implementation. |
| @@ -178,16 +195,4 @@ AutofillTable* AutocompleteSyncBridge::GetAutofillTable() const { |
| return AutofillTable::FromWebDatabase(web_data_backend_->GetDatabase()); |
| } |
| -std::string AutocompleteSyncBridge::GetStorageKeyFromAutofillEntry( |
| - const autofill::AutofillEntry& entry) { |
| - return FormatStorageKey(base::UTF16ToUTF8(entry.key().name()), |
| - base::UTF16ToUTF8(entry.key().value())); |
| -} |
| - |
| -// static |
| -std::string AutocompleteSyncBridge::FormatStorageKey(const std::string& name, |
| - const std::string& value) { |
| - return net::EscapePath(name) + "|" + net::EscapePath(value); |
| -} |
| - |
| } // namespace autofill |