| OLD | NEW |
| (Empty) | |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #include "components/autofill/core/browser/webdata/autocomplete_sync_bridge.h" |
| 6 |
| 7 #include "base/bind.h" |
| 8 #include "base/memory/ptr_util.h" |
| 9 #include "components/autofill/core/browser/webdata/autofill_table.h" |
| 10 #include "components/autofill/core/browser/webdata/autofill_webdata_backend.h" |
| 11 #include "components/autofill/core/browser/webdata/autofill_webdata_service.h" |
| 12 #include "components/sync/model/entity_data.h" |
| 13 #include "components/sync/model/model_type_change_processor.h" |
| 14 #include "components/sync/model/sync_error.h" |
| 15 #include "net/base/escape.h" |
| 16 |
| 17 namespace { |
| 18 |
| 19 const char kAutocompleteEntryNamespaceTag[] = "autofill_entry|"; |
| 20 |
| 21 void* UserDataKey() { |
| 22 // Use the address of a static that COMDAT folding won't ever collide |
| 23 // with something else. |
| 24 static int user_data_key = 0; |
| 25 return reinterpret_cast<void*>(&user_data_key); |
| 26 } |
| 27 |
| 28 const std::string FormatStorageKey(const std::string name, |
| 29 const std::string value) { |
| 30 return net::EscapePath(name) + "|" + net::EscapePath(value); |
| 31 } |
| 32 |
| 33 } // namespace |
| 34 |
| 35 namespace autofill { |
| 36 |
| 37 // static |
| 38 void AutocompleteSyncBridge::CreateForWebDataServiceAndBackend( |
| 39 AutofillWebDataService* web_data_service, |
| 40 AutofillWebDataBackend* web_data_backend) { |
| 41 web_data_service->GetDBUserData()->SetUserData( |
| 42 UserDataKey(), |
| 43 new AutocompleteSyncBridge( |
| 44 web_data_backend, |
| 45 base::Bind(&syncer::ModelTypeChangeProcessor::Create))); |
| 46 } |
| 47 |
| 48 // static |
| 49 AutocompleteSyncBridge* AutocompleteSyncBridge::FromWebDataService( |
| 50 AutofillWebDataService* web_data_service) { |
| 51 return static_cast<AutocompleteSyncBridge*>( |
| 52 web_data_service->GetDBUserData()->GetUserData(UserDataKey())); |
| 53 } |
| 54 |
| 55 AutocompleteSyncBridge::AutocompleteSyncBridge( |
| 56 AutofillWebDataBackend* backend, |
| 57 const ChangeProcessorFactory& change_processor_factory) |
| 58 : ModelTypeSyncBridge(change_processor_factory, syncer::AUTOFILL), |
| 59 web_data_backend_(backend), |
| 60 scoped_observer_(this) { |
| 61 DCHECK(web_data_backend_); |
| 62 |
| 63 scoped_observer_.Add(web_data_backend_); |
| 64 } |
| 65 |
| 66 AutocompleteSyncBridge::~AutocompleteSyncBridge() { |
| 67 DCHECK(thread_checker_.CalledOnValidThread()); |
| 68 } |
| 69 |
| 70 // syncer::ModelTypeService implementation. |
| 71 std::unique_ptr<syncer::MetadataChangeList> |
| 72 AutocompleteSyncBridge::CreateMetadataChangeList() { |
| 73 DCHECK(thread_checker_.CalledOnValidThread()); |
| 74 NOTIMPLEMENTED(); |
| 75 return nullptr; |
| 76 } |
| 77 |
| 78 syncer::SyncError AutocompleteSyncBridge::MergeSyncData( |
| 79 std::unique_ptr<syncer::MetadataChangeList> metadata_change_list, |
| 80 syncer::EntityDataMap entity_data_map) { |
| 81 DCHECK(thread_checker_.CalledOnValidThread()); |
| 82 NOTIMPLEMENTED(); |
| 83 return syncer::SyncError(); |
| 84 } |
| 85 |
| 86 syncer::SyncError AutocompleteSyncBridge::ApplySyncChanges( |
| 87 std::unique_ptr<syncer::MetadataChangeList> metadata_change_list, |
| 88 syncer::EntityChangeList entity_changes) { |
| 89 DCHECK(thread_checker_.CalledOnValidThread()); |
| 90 NOTIMPLEMENTED(); |
| 91 return syncer::SyncError(); |
| 92 } |
| 93 void AutocompleteSyncBridge::AutocompleteSyncBridge::GetData( |
| 94 StorageKeyList storage_keys, |
| 95 DataCallback callback) { |
| 96 DCHECK(thread_checker_.CalledOnValidThread()); |
| 97 NOTIMPLEMENTED(); |
| 98 } |
| 99 |
| 100 void AutocompleteSyncBridge::GetAllData(DataCallback callback) { |
| 101 DCHECK(thread_checker_.CalledOnValidThread()); |
| 102 NOTIMPLEMENTED(); |
| 103 } |
| 104 |
| 105 std::string AutocompleteSyncBridge::GetClientTag( |
| 106 const syncer::EntityData& entity_data) { |
| 107 DCHECK(entity_data.specifics.has_autofill()); |
| 108 |
| 109 const sync_pb::AutofillSpecifics specifics = entity_data.specifics.autofill(); |
| 110 std::string storage_key = |
| 111 FormatStorageKey(specifics.name(), specifics.value()); |
| 112 std::string prefix(kAutocompleteEntryNamespaceTag); |
| 113 return prefix + storage_key; |
| 114 } |
| 115 |
| 116 std::string AutocompleteSyncBridge::GetStorageKey( |
| 117 const syncer::EntityData& entity_data) { |
| 118 const sync_pb::AutofillSpecifics specifics = entity_data.specifics.autofill(); |
| 119 return FormatStorageKey(specifics.name(), specifics.value()); |
| 120 } |
| 121 |
| 122 // AutofillWebDataServiceObserverOnDBThread implementation. |
| 123 void AutocompleteSyncBridge::AutofillEntriesChanged( |
| 124 const AutofillChangeList& changes) { |
| 125 DCHECK(thread_checker_.CalledOnValidThread()); |
| 126 } |
| 127 |
| 128 } // namespace autofill |
| OLD | NEW |