OLD | NEW |
---|---|
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/sync/glue/autofill_profile_model_associator.h" | 5 #include "chrome/browser/sync/glue/autofill_profile_model_associator.h" |
6 | 6 |
7 #include "base/utf_string_conversions.h" | 7 #include "base/utf_string_conversions.h" |
8 #include "chrome/browser/sync/glue/autofill_profile_change_processor.h" | |
9 #include "chrome/browser/sync/glue/do_optimistic_refresh_Task.h" | |
8 #include "chrome/browser/sync/profile_sync_service.h" | 10 #include "chrome/browser/sync/profile_sync_service.h" |
11 #include "chrome/browser/sync/syncable/syncable.h" | |
9 #include "chrome/browser/webdata/web_database.h" | 12 #include "chrome/browser/webdata/web_database.h" |
10 | 13 |
11 using sync_api::ReadNode; | 14 using sync_api::ReadNode; |
12 namespace browser_sync { | 15 namespace browser_sync { |
13 | 16 |
14 const char kAutofillProfileTag[] = "google_chrome_autofill_profile"; | 17 const char kAutofillProfileTag[] = "google_chrome_autofill_profiles"; |
15 | 18 |
16 AutofillProfileModelAssociator::AutofillProfileModelAssociator( | 19 AutofillProfileModelAssociator::AutofillProfileModelAssociator( |
17 ProfileSyncService* sync_service, | 20 ProfileSyncService* sync_service, |
18 WebDatabase* web_database, | 21 WebDatabase* web_database, |
19 PersonalDataManager* personal_data) | 22 PersonalDataManager* personal_data) |
20 : sync_service_(sync_service), | 23 : sync_service_(sync_service), |
21 web_database_(web_database), | 24 web_database_(web_database), |
22 personal_data_(personal_data), | 25 personal_data_(personal_data), |
23 autofill_node_id_(sync_api::kInvalidId), | 26 autofill_node_id_(sync_api::kInvalidId), |
24 abort_association_pending_(false) { | 27 abort_association_pending_(false), |
28 number_of_profiles_created_(0) { | |
25 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB)); | 29 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB)); |
26 DCHECK(sync_service_); | 30 DCHECK(sync_service_); |
27 DCHECK(web_database_); | 31 DCHECK(web_database_); |
28 DCHECK(personal_data_); | 32 DCHECK(personal_data_); |
29 } | 33 } |
30 | 34 |
31 AutofillProfileModelAssociator::~AutofillProfileModelAssociator() { | 35 AutofillProfileModelAssociator::~AutofillProfileModelAssociator() { |
32 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB)); | 36 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB)); |
33 } | 37 } |
34 | 38 |
35 bool AutofillProfileModelAssociator::TraverseAndAssociateChromeAutoFillProfiles( | 39 bool AutofillProfileModelAssociator::TraverseAndAssociateChromeAutoFillProfiles( |
36 sync_api::WriteTransaction* write_trans, | 40 sync_api::WriteTransaction* write_trans, |
37 const sync_api::ReadNode& autofill_root, | 41 const sync_api::ReadNode& autofill_root, |
38 const std::vector<AutoFillProfile*>& all_profiles_from_db, | 42 const std::vector<AutoFillProfile*>& all_profiles_from_db, |
39 std::set<std::string>* current_profiles, | 43 std::set<std::string>* current_profiles, |
40 std::vector<AutoFillProfile*>* updated_profiles, | 44 std::vector<AutoFillProfile*>* updated_profiles, |
41 std::vector<AutoFillProfile*>* new_profiles, | 45 std::vector<AutoFillProfile*>* new_profiles, |
42 std::vector<std::string>* profiles_to_delete) { | 46 std::vector<std::string>* profiles_to_delete) { |
43 | 47 |
48 if (MigrationLoggingEnabled()) { | |
49 VLOG(1) << "[AUTOFILL MIGRATION]" | |
50 << "Printing profiles from web db"; | |
51 | |
52 for (std::vector<AutoFillProfile*>::const_iterator ix = | |
53 all_profiles_from_db.begin(); ix != all_profiles_from_db.end(); ++ix) { | |
54 AutoFillProfile* p = *ix; | |
55 VLOG(1) << "[AUTOFILL MIGRATION] " | |
56 << UTF16ToUTF8(p->GetFieldText(AutoFillType(NAME_FIRST))) | |
57 << UTF16ToUTF8(p->GetFieldText(AutoFillType(NAME_LAST))) | |
58 << p->guid(); | |
59 } | |
60 } | |
61 | |
62 if (MigrationLoggingEnabled()) { | |
63 VLOG(1) << "[AUTOFILL MIGRATION]" | |
64 << "Looking for the above data in sync db.."; | |
65 } | |
44 // Alias the all_profiles_from_db so we fit in 80 characters | 66 // Alias the all_profiles_from_db so we fit in 80 characters |
45 const std::vector<AutoFillProfile*>& profiles(all_profiles_from_db); | 67 const std::vector<AutoFillProfile*>& profiles(all_profiles_from_db); |
46 for (std::vector<AutoFillProfile*>::const_iterator ix = profiles.begin(); | 68 for (std::vector<AutoFillProfile*>::const_iterator ix = profiles.begin(); |
47 ix != profiles.end(); | 69 ix != profiles.end(); |
48 ++ix) { | 70 ++ix) { |
49 std::string guid((*ix)->guid()); | 71 std::string guid((*ix)->guid()); |
50 | 72 |
51 ReadNode node(write_trans); | 73 ReadNode node(write_trans); |
52 if (node.InitByClientTagLookup(syncable::AUTOFILL_PROFILE, guid)) { | 74 if (node.InitByClientTagLookup(syncable::AUTOFILL_PROFILE, guid)) { |
75 if (MigrationLoggingEnabled()) { | |
76 VLOG(1) << "[AUTOFILL MIGRATION]" | |
77 << " Found in sync db: " | |
78 << UTF16ToUTF8((*ix)->GetFieldText(AutoFillType(NAME_FIRST))) | |
79 << UTF16ToUTF8((*ix)->GetFieldText(AutoFillType(NAME_LAST))) | |
80 << (*ix)->guid() | |
81 << " so associating"; | |
82 } | |
53 const sync_pb::AutofillProfileSpecifics& autofill( | 83 const sync_pb::AutofillProfileSpecifics& autofill( |
54 node.GetAutofillProfileSpecifics()); | 84 node.GetAutofillProfileSpecifics()); |
55 if (OverwriteProfileWithServerData(*ix, autofill)) { | 85 if (OverwriteProfileWithServerData(*ix, autofill)) { |
56 updated_profiles->push_back(*ix); | 86 updated_profiles->push_back(*ix); |
57 } | 87 } |
58 Associate(&guid, node.GetId()); | 88 Associate(&guid, node.GetId()); |
59 current_profiles->insert(guid); | 89 current_profiles->insert(guid); |
60 } else { | 90 } else { |
61 MakeNewAutofillProfileSyncNodeIfNeeded(write_trans, | 91 MakeNewAutofillProfileSyncNodeIfNeeded(write_trans, |
62 autofill_root, | 92 autofill_root, |
63 (**ix), | 93 (**ix), |
64 new_profiles, | 94 new_profiles, |
65 current_profiles, | 95 current_profiles, |
66 profiles_to_delete); | 96 profiles_to_delete); |
67 } | 97 } |
68 } | 98 } |
69 | |
70 return true; | 99 return true; |
71 } | 100 } |
72 | 101 |
102 bool AutofillProfileModelAssociator::GetSyncIdForTaggedNode( | |
103 const std::string& tag, | |
104 int64* sync_id) { | |
105 sync_api::ReadTransaction trans( | |
106 sync_service_->backend()->GetUserShareHandle()); | |
107 sync_api::ReadNode sync_node(&trans); | |
108 if (!sync_node.InitByTagLookup(tag.c_str())) | |
109 return false; | |
110 *sync_id = sync_node.GetId(); | |
111 return true; | |
112 } | |
113 | |
73 bool AutofillProfileModelAssociator::LoadAutofillData( | 114 bool AutofillProfileModelAssociator::LoadAutofillData( |
74 std::vector<AutoFillProfile*>* profiles) { | 115 std::vector<AutoFillProfile*>* profiles) { |
75 if (IsAbortPending()) | 116 if (IsAbortPending()) |
76 return false; | 117 return false; |
77 | 118 |
78 if (!web_database_->GetAutoFillProfiles(profiles)) | 119 if (!web_database_->GetAutoFillProfiles(profiles)) |
79 return false; | 120 return false; |
80 | 121 |
81 return true; | 122 return true; |
82 } | 123 } |
83 | 124 |
84 bool AutofillProfileModelAssociator::AssociateModels() { | 125 bool AutofillProfileModelAssociator::AssociateModels() { |
85 VLOG(1) << "Associating Autofill Models"; | 126 VLOG(1) << "Associating Autofill Models"; |
86 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB)); | 127 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB)); |
87 { | 128 { |
88 AutoLock lock(abort_association_pending_lock_); | 129 AutoLock lock(abort_association_pending_lock_); |
89 abort_association_pending_ = false; | 130 abort_association_pending_ = false; |
90 } | 131 } |
91 | 132 |
92 ScopedVector<AutoFillProfile> profiles; | 133 ScopedVector<AutoFillProfile> profiles; |
93 | 134 |
94 if (!LoadAutofillData(&profiles.get())) { | 135 if (!LoadAutofillData(&profiles.get())) { |
95 LOG(ERROR) << "Could not get the autofill data from WebDatabase."; | 136 LOG(ERROR) << "Could not get the autofill data from WebDatabase."; |
96 return false; | 137 return false; |
97 } | 138 } |
98 | 139 |
140 if (MigrationLoggingEnabled()) { | |
141 VLOG(1) << "[AUTOFILL MIGRATION]" | |
142 << " Now associating to the new autofill profile model associator" | |
143 << "root node"; | |
144 } | |
99 DataBundle bundle; | 145 DataBundle bundle; |
100 { | 146 { |
101 // The write transaction lock is held inside this block. | 147 // The write transaction lock is held inside this block. |
102 // We do all the web db operations outside this block. | 148 // We do all the web db operations outside this block. |
103 sync_api::WriteTransaction trans( | 149 sync_api::WriteTransaction trans( |
104 sync_service_->backend()->GetUserShareHandle()); | 150 sync_service_->backend()->GetUserShareHandle()); |
105 | 151 |
106 sync_api::ReadNode autofill_root(&trans); | 152 sync_api::ReadNode autofill_root(&trans); |
107 if (!autofill_root.InitByTagLookup(kAutofillProfileTag)) { | 153 if (!autofill_root.InitByTagLookup(kAutofillProfileTag)) { |
108 LOG(ERROR) << "Server did not create the top-level autofill node. We " | 154 LOG(ERROR) << "Server did not create the top-level autofill node. We " |
109 << "might be running against an out-of-date server."; | 155 << "might be running against an out-of-date server."; |
110 return false; | 156 return false; |
111 } | 157 } |
112 | 158 |
113 if (!TraverseAndAssociateChromeAutoFillProfiles(&trans, autofill_root, | 159 if (!TraverseAndAssociateChromeAutoFillProfiles(&trans, autofill_root, |
114 profiles.get(), &bundle.current_profiles, | 160 profiles.get(), &bundle.current_profiles, |
115 &bundle.updated_profiles, | 161 &bundle.updated_profiles, |
116 &bundle.new_profiles, | 162 &bundle.new_profiles, |
117 &bundle.profiles_to_delete) || | 163 &bundle.profiles_to_delete) || |
118 !TraverseAndAssociateAllSyncNodes(&trans, autofill_root, &bundle)) { | 164 !TraverseAndAssociateAllSyncNodes(&trans, autofill_root, &bundle)) { |
119 return false; | 165 return false; |
120 } | 166 } |
121 } | 167 } |
122 | 168 |
123 if (!SaveChangesToWebData(bundle)) { | 169 if (!SaveChangesToWebData(bundle)) { |
124 LOG(ERROR) << "Failed to update autofill entries."; | 170 LOG(ERROR) << "Failed to update autofill entries."; |
125 return false; | 171 return false; |
126 } | 172 } |
127 | 173 |
128 // TODO(lipalani) Bug 64111- split out the OptimisticRefreshTask | 174 if (sync_service_->backend()->GetAutofillMigrationState() != |
129 // into its own class | 175 syncable::MIGRATED) { |
130 // from autofill_model_associator | 176 syncable::AutofillMigrationDebugInfo debug_info; |
131 // Will be done as part of the autofill_model_associator work. | 177 debug_info.autofill_profile_added_during_migration = |
132 // BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, | 178 number_of_profiles_created_; |
133 // new DoOptimisticRefreshTask(personal_data_)); | 179 sync_service_->backend()->SetAutofillMigrationDebugInfo( |
180 syncable::AutofillMigrationDebugInfo::PROFILES_ADDED, | |
181 debug_info); | |
182 sync_service()->backend()->SetAutofillMigrationState( | |
183 syncable::MIGRATED); | |
184 } | |
185 | |
186 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, | |
187 new DoOptimisticRefreshForAutofill(personal_data_)); | |
tim (not reviewing)
2010/12/13 19:24:33
nit indent
lipalani
2010/12/15 09:08:33
Done.
| |
134 return true; | 188 return true; |
135 } | 189 } |
136 | 190 |
137 bool AutofillProfileModelAssociator::DisassociateModels() { | 191 bool AutofillProfileModelAssociator::DisassociateModels() { |
138 id_map_.clear(); | 192 id_map_.clear(); |
139 id_map_inverse_.clear(); | 193 id_map_inverse_.clear(); |
140 return true; | 194 return true; |
141 } | 195 } |
142 | 196 |
143 // Helper to compare the local value and cloud value of a field, merge into | 197 // Helper to compare the local value and cloud value of a field, merge into |
144 // the local value if they differ, and return whether the merge happened. | 198 // the local value if they differ, and return whether the merge happened. |
145 bool AutofillProfileModelAssociator::MergeField(FormGroup* f, | 199 bool AutofillProfileModelAssociator::MergeField(FormGroup* f, |
146 AutoFillFieldType t, | 200 AutoFillFieldType t, |
147 const std::string& specifics_field) { | 201 const std::string& specifics_field) { |
148 if (UTF16ToUTF8(f->GetFieldText(AutoFillType(t))) == specifics_field) | 202 if (UTF16ToUTF8(f->GetFieldText(AutoFillType(t))) == specifics_field) |
149 return false; | 203 return false; |
150 f->SetInfo(AutoFillType(t), UTF8ToUTF16(specifics_field)); | 204 f->SetInfo(AutoFillType(t), UTF8ToUTF16(specifics_field)); |
151 return true; | 205 return true; |
152 } | 206 } |
153 bool AutofillProfileModelAssociator::SyncModelHasUserCreatedNodes( | 207 bool AutofillProfileModelAssociator::SyncModelHasUserCreatedNodes( |
154 bool *has_nodes) { | 208 bool *has_nodes) { |
155 CHECK_NE(has_nodes, reinterpret_cast<bool*>(NULL)); | 209 CHECK_NE(has_nodes, reinterpret_cast<bool*>(NULL)); |
156 sync_api::ReadTransaction trans( | 210 sync_api::ReadTransaction trans( |
157 sync_service_->backend()->GetUserShareHandle()); | 211 sync_service_->backend()->GetUserShareHandle()); |
158 | 212 |
159 sync_api::ReadNode node(&trans); | 213 sync_api::ReadNode node(&trans); |
160 | 214 |
161 if (!node.InitByClientTagLookup( | 215 if (!node.InitByTagLookup(kAutofillProfileTag)) { |
162 syncable::AUTOFILL_PROFILE, | |
163 kAutofillProfileTag)) { | |
164 LOG(ERROR) << "Sever did not create a top level node" | 216 LOG(ERROR) << "Sever did not create a top level node" |
165 << "Out of data server or autofill type not enabled"; | 217 << "Out of data server or autofill type not enabled"; |
166 return false; | 218 return false; |
167 } | 219 } |
168 | 220 |
169 *has_nodes = sync_api::kInvalidId != node.GetFirstChildId(); | 221 *has_nodes = sync_api::kInvalidId != node.GetFirstChildId(); |
170 return true; | 222 return true; |
171 } | 223 } |
172 // static | 224 // static |
173 bool AutofillProfileModelAssociator::OverwriteProfileWithServerData( | 225 bool AutofillProfileModelAssociator::OverwriteProfileWithServerData( |
(...skipping 22 matching lines...) Expand all Loading... | |
196 | 248 |
197 | 249 |
198 int64 AutofillProfileModelAssociator::FindSyncNodeWithProfile( | 250 int64 AutofillProfileModelAssociator::FindSyncNodeWithProfile( |
199 sync_api::WriteTransaction* trans, | 251 sync_api::WriteTransaction* trans, |
200 const sync_api::BaseNode& autofill_root, | 252 const sync_api::BaseNode& autofill_root, |
201 const AutoFillProfile& profile_from_db) { | 253 const AutoFillProfile& profile_from_db) { |
202 int64 sync_child_id = autofill_root.GetFirstChildId(); | 254 int64 sync_child_id = autofill_root.GetFirstChildId(); |
203 while (sync_child_id != sync_api::kInvalidId) { | 255 while (sync_child_id != sync_api::kInvalidId) { |
204 ReadNode read_node(trans); | 256 ReadNode read_node(trans); |
205 AutoFillProfile p; | 257 AutoFillProfile p; |
206 if (read_node.InitByIdLookup(sync_child_id)) { | 258 if (!read_node.InitByIdLookup(sync_child_id)) { |
207 LOG(ERROR) << "unable to find the id given by getfirst child " << | 259 LOG(ERROR) << "unable to find the id given by getfirst child " << |
208 sync_child_id; | 260 sync_child_id; |
209 return sync_api::kInvalidId; | 261 return sync_api::kInvalidId; |
210 } | 262 } |
211 const sync_pb::AutofillProfileSpecifics& autofill_specifics( | 263 const sync_pb::AutofillProfileSpecifics& autofill_specifics( |
212 read_node.GetAutofillProfileSpecifics()); | 264 read_node.GetAutofillProfileSpecifics()); |
213 OverwriteProfileWithServerData(&p, autofill_specifics); | 265 OverwriteProfileWithServerData(&p, autofill_specifics); |
214 if (p.Compare(profile_from_db) == 0) { | 266 if (p.Compare(profile_from_db) == 0) { |
215 return sync_child_id; | 267 return sync_child_id; |
216 } | 268 } |
(...skipping 21 matching lines...) Expand all Loading... | |
238 return false; | 290 return false; |
239 } | 291 } |
240 const sync_pb::AutofillProfileSpecifics& autofill_specifics( | 292 const sync_pb::AutofillProfileSpecifics& autofill_specifics( |
241 read_node.GetAutofillProfileSpecifics()); | 293 read_node.GetAutofillProfileSpecifics()); |
242 AutoFillProfile* p = new AutoFillProfile(autofill_specifics.guid()); | 294 AutoFillProfile* p = new AutoFillProfile(autofill_specifics.guid()); |
243 OverwriteProfileWithServerData(p, autofill_specifics); | 295 OverwriteProfileWithServerData(p, autofill_specifics); |
244 new_profiles->push_back(p); | 296 new_profiles->push_back(p); |
245 std::string guid = autofill_specifics.guid(); | 297 std::string guid = autofill_specifics.guid(); |
246 Associate(&guid, sync_node_id); | 298 Associate(&guid, sync_node_id); |
247 current_profiles->insert(autofill_specifics.guid()); | 299 current_profiles->insert(autofill_specifics.guid()); |
300 if (MigrationLoggingEnabled()) { | |
301 VLOG(1) << "[AUTOFILL MIGRATION]" | |
302 << "Found in sync db but with a different guid: " | |
303 << UTF16ToUTF8(profile.GetFieldText(AutoFillType(NAME_FIRST))) | |
304 << UTF16ToUTF8(profile.GetFieldText(AutoFillType(NAME_LAST))) | |
305 << "New guid " << autofill_specifics.guid() | |
306 << " so associating"; | |
307 } | |
248 } else { | 308 } else { |
249 sync_api::WriteNode node(trans); | 309 sync_api::WriteNode node(trans); |
250 if (!node.InitUniqueByCreation( | 310 if (!node.InitUniqueByCreation( |
251 syncable::AUTOFILL_PROFILE, autofill_root, profile.guid())) { | 311 syncable::AUTOFILL_PROFILE, autofill_root, profile.guid())) { |
252 LOG(ERROR) << "Failed to create autofill sync node."; | 312 LOG(ERROR) << "Failed to create autofill sync node."; |
253 return false; | 313 return false; |
254 } | 314 } |
255 node.SetTitle(UTF8ToWide(profile.guid())); | 315 node.SetTitle(UTF8ToWide(profile.guid())); |
316 if (MigrationLoggingEnabled()) { | |
317 VLOG(1) << "[AUTOFILL MIGRATION]" | |
318 << "NOT Found in sync db " | |
319 << UTF16ToUTF8(profile.GetFieldText(AutoFillType(NAME_FIRST))) | |
320 << UTF16ToUTF8(profile.GetFieldText(AutoFillType(NAME_LAST))) | |
321 << profile.guid() | |
322 << " so creating a new sync node."; | |
323 } | |
324 AutofillProfileChangeProcessor::WriteAutofillProfile(profile, &node); | |
325 current_profiles->insert(profile.guid()); | |
326 number_of_profiles_created_++; | |
256 | 327 |
257 // TODO(lipalani) -Bug 64111 This needs rewriting. This will be tackled | |
258 // when rewriting autofill change processor. | |
259 // AutofillChangeProcessor::WriteAutofillProfile(profile, &node); | |
260 } | 328 } |
261 return true; | 329 return true; |
262 } | 330 } |
263 | 331 |
264 bool AutofillProfileModelAssociator::TraverseAndAssociateAllSyncNodes( | 332 bool AutofillProfileModelAssociator::TraverseAndAssociateAllSyncNodes( |
265 sync_api::WriteTransaction* write_trans, | 333 sync_api::WriteTransaction* write_trans, |
266 const sync_api::ReadNode& autofill_root, | 334 const sync_api::ReadNode& autofill_root, |
267 DataBundle* bundle) { | 335 DataBundle* bundle) { |
268 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB)); | 336 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB)); |
269 | 337 |
338 if (MigrationLoggingEnabled()) { | |
339 VLOG(1) << "[AUTOFILL MIGRATION] " | |
340 << " Iterating over sync nodes of autofill profile root node"; | |
341 } | |
270 int64 sync_child_id = autofill_root.GetFirstChildId(); | 342 int64 sync_child_id = autofill_root.GetFirstChildId(); |
271 while (sync_child_id != sync_api::kInvalidId) { | 343 while (sync_child_id != sync_api::kInvalidId) { |
272 ReadNode sync_child(write_trans); | 344 ReadNode sync_child(write_trans); |
273 if (!sync_child.InitByIdLookup(sync_child_id)) { | 345 if (!sync_child.InitByIdLookup(sync_child_id)) { |
274 LOG(ERROR) << "Failed to fetch child node."; | 346 LOG(ERROR) << "Failed to fetch child node."; |
275 return false; | 347 return false; |
276 } | 348 } |
277 const sync_pb::AutofillProfileSpecifics& autofill( | 349 const sync_pb::AutofillProfileSpecifics& autofill( |
278 sync_child.GetAutofillProfileSpecifics()); | 350 sync_child.GetAutofillProfileSpecifics()); |
279 | 351 |
280 AddNativeProfileIfNeeded(autofill, bundle, sync_child); | 352 AddNativeProfileIfNeeded(autofill, bundle, sync_child); |
281 | 353 |
282 sync_child_id = sync_child.GetSuccessorId(); | 354 sync_child_id = sync_child.GetSuccessorId(); |
283 } | 355 } |
284 return true; | 356 return true; |
285 } | 357 } |
286 | 358 |
287 void AutofillProfileModelAssociator::AddNativeProfileIfNeeded( | 359 void AutofillProfileModelAssociator::AddNativeProfileIfNeeded( |
288 const sync_pb::AutofillProfileSpecifics& profile, | 360 const sync_pb::AutofillProfileSpecifics& profile, |
289 DataBundle* bundle, | 361 DataBundle* bundle, |
290 const sync_api::ReadNode& node) { | 362 const sync_api::ReadNode& node) { |
291 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB)); | 363 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB)); |
292 | 364 |
365 if (MigrationLoggingEnabled()) { | |
366 VLOG(1) << "[AUTOFILL MIGRATION] " | |
367 << "Trying to lookup " | |
368 << profile.name_first() | |
369 << " " | |
370 << profile.name_last() | |
371 << " in the web db"; | |
372 } | |
293 if (bundle->current_profiles.find(profile.guid()) == | 373 if (bundle->current_profiles.find(profile.guid()) == |
294 bundle->current_profiles.end()) { | 374 bundle->current_profiles.end()) { |
295 std::string guid(profile.guid()); | 375 std::string guid(profile.guid()); |
296 Associate(&guid, node.GetId()); | 376 Associate(&guid, node.GetId()); |
297 AutoFillProfile* p = new AutoFillProfile(profile.guid()); | 377 AutoFillProfile* p = new AutoFillProfile(profile.guid()); |
298 OverwriteProfileWithServerData(p, profile); | 378 OverwriteProfileWithServerData(p, profile); |
299 bundle->new_profiles.push_back(p); | 379 bundle->new_profiles.push_back(p); |
380 if (MigrationLoggingEnabled()) { | |
381 VLOG(1) << "[AUTOFILL MIGRATION] " | |
382 << " Did not find one so creating it on web db"; | |
383 } | |
384 } else { | |
385 if (MigrationLoggingEnabled()) { | |
386 VLOG(1) << "[AUTOFILL MIGRATION] " | |
387 << " Found it on web db. Moving on "; | |
388 } | |
300 } | 389 } |
301 } | 390 } |
302 | 391 |
303 bool AutofillProfileModelAssociator::SaveChangesToWebData( | 392 bool AutofillProfileModelAssociator::SaveChangesToWebData( |
304 const DataBundle& bundle) { | 393 const DataBundle& bundle) { |
305 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB)); | 394 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB)); |
306 | 395 |
307 if (IsAbortPending()) | 396 if (IsAbortPending()) |
308 return false; | 397 return false; |
309 | 398 |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
355 AutofillToSyncIdMap::const_iterator iter = id_map_.find(autofill); | 444 AutofillToSyncIdMap::const_iterator iter = id_map_.find(autofill); |
356 return iter == id_map_.end() ? sync_api::kInvalidId : iter->second; | 445 return iter == id_map_.end() ? sync_api::kInvalidId : iter->second; |
357 } | 446 } |
358 | 447 |
359 void AutofillProfileModelAssociator::AbortAssociation() { | 448 void AutofillProfileModelAssociator::AbortAssociation() { |
360 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 449 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
361 AutoLock lock(abort_association_pending_lock_); | 450 AutoLock lock(abort_association_pending_lock_); |
362 abort_association_pending_ = true; | 451 abort_association_pending_ = true; |
363 } | 452 } |
364 | 453 |
454 const std::string* AutofillProfileModelAssociator::GetChromeNodeFromSyncId( | |
455 int64 sync_id) { | |
456 SyncIdToAutofillMap::const_iterator iter = id_map_inverse_.find(sync_id); | |
457 return iter == id_map_inverse_.end() ? NULL : &(iter->second); | |
458 } | |
459 | |
365 bool AutofillProfileModelAssociator::IsAbortPending() { | 460 bool AutofillProfileModelAssociator::IsAbortPending() { |
366 AutoLock lock(abort_association_pending_lock_); | 461 AutoLock lock(abort_association_pending_lock_); |
367 return abort_association_pending_; | 462 return abort_association_pending_; |
368 } | 463 } |
369 | 464 |
465 bool AutofillProfileModelAssociator::MigrationLoggingEnabled() { | |
466 // [TODO] enable logging via a command line flag. | |
467 return false; | |
468 } | |
469 | |
370 } // namespace browser_sync | 470 } // namespace browser_sync |
371 | 471 |
OLD | NEW |