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" | 8 #include "chrome/browser/sync/glue/autofill_profile_change_processor.h" |
9 #include "chrome/browser/sync/glue/do_optimistic_refresh_task.h" | 9 #include "chrome/browser/sync/glue/do_optimistic_refresh_task.h" |
10 #include "chrome/browser/sync/profile_sync_service.h" | 10 #include "chrome/browser/sync/profile_sync_service.h" |
(...skipping 28 matching lines...) Expand all Loading... |
39 | 39 |
40 bool AutofillProfileModelAssociator::TraverseAndAssociateChromeAutoFillProfiles( | 40 bool AutofillProfileModelAssociator::TraverseAndAssociateChromeAutoFillProfiles( |
41 sync_api::WriteTransaction* write_trans, | 41 sync_api::WriteTransaction* write_trans, |
42 const sync_api::ReadNode& autofill_root, | 42 const sync_api::ReadNode& autofill_root, |
43 const std::vector<AutoFillProfile*>& all_profiles_from_db, | 43 const std::vector<AutoFillProfile*>& all_profiles_from_db, |
44 std::set<std::string>* current_profiles, | 44 std::set<std::string>* current_profiles, |
45 std::vector<AutoFillProfile*>* updated_profiles, | 45 std::vector<AutoFillProfile*>* updated_profiles, |
46 std::vector<AutoFillProfile*>* new_profiles, | 46 std::vector<AutoFillProfile*>* new_profiles, |
47 std::vector<std::string>* profiles_to_delete) { | 47 std::vector<std::string>* profiles_to_delete) { |
48 | 48 |
49 if (VLOG_IS_ON(1)) { | 49 if (VLOG_IS_ON(2)) { |
50 VLOG(1) << "[AUTOFILL MIGRATION]" | 50 VLOG(2) << "[AUTOFILL MIGRATION]" |
51 << "Printing profiles from web db"; | 51 << "Printing profiles from web db"; |
52 | 52 |
53 for (std::vector<AutoFillProfile*>::const_iterator ix = | 53 for (std::vector<AutoFillProfile*>::const_iterator ix = |
54 all_profiles_from_db.begin(); ix != all_profiles_from_db.end(); ++ix) { | 54 all_profiles_from_db.begin(); ix != all_profiles_from_db.end(); ++ix) { |
55 AutoFillProfile* p = *ix; | 55 AutoFillProfile* p = *ix; |
56 VLOG(1) << "[AUTOFILL MIGRATION] " | 56 VLOG(2) << "[AUTOFILL MIGRATION] " |
57 << p->GetFieldText(AutoFillType(NAME_FIRST)) | 57 << p->GetFieldText(AutoFillType(NAME_FIRST)) |
58 << p->GetFieldText(AutoFillType(NAME_LAST)) | 58 << p->GetFieldText(AutoFillType(NAME_LAST)) |
59 << p->guid(); | 59 << p->guid(); |
60 } | 60 } |
61 } | 61 } |
62 | 62 |
63 VLOG(1) << "[AUTOFILL MIGRATION]" | 63 VLOG(1) << "[AUTOFILL MIGRATION]" |
64 << "Looking for the above data in sync db.."; | 64 << "Looking for the above data in sync db.."; |
65 | 65 |
66 // 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 |
67 const std::vector<AutoFillProfile*>& profiles(all_profiles_from_db); | 67 const std::vector<AutoFillProfile*>& profiles(all_profiles_from_db); |
68 for (std::vector<AutoFillProfile*>::const_iterator ix = profiles.begin(); | 68 for (std::vector<AutoFillProfile*>::const_iterator ix = profiles.begin(); |
69 ix != profiles.end(); | 69 ix != profiles.end(); |
70 ++ix) { | 70 ++ix) { |
71 std::string guid((*ix)->guid()); | 71 std::string guid((*ix)->guid()); |
72 | 72 |
73 ReadNode node(write_trans); | 73 ReadNode node(write_trans); |
74 if (node.InitByClientTagLookup(syncable::AUTOFILL_PROFILE, guid) && | 74 if (node.InitByClientTagLookup(syncable::AUTOFILL_PROFILE, guid) && |
75 // The following check is to ensure the given sync node is not already | 75 // The following check is to ensure the given sync node is not already |
76 // associated with another profile. That could happen if the user has | 76 // associated with another profile. That could happen if the user has |
77 // the same profile duplicated. | 77 // the same profile duplicated. |
78 current_profiles->find(guid) == current_profiles->end()) { | 78 current_profiles->find(guid) == current_profiles->end()) { |
79 | 79 |
80 VLOG(1) << "[AUTOFILL MIGRATION]" | 80 VLOG(2) << "[AUTOFILL MIGRATION]" |
81 << " Found in sync db: " | 81 << " Found in sync db: " |
82 << (*ix)->GetFieldText(AutoFillType(NAME_FIRST)) | 82 << (*ix)->GetFieldText(AutoFillType(NAME_FIRST)) |
83 << (*ix)->GetFieldText(AutoFillType(NAME_LAST)) | 83 << (*ix)->GetFieldText(AutoFillType(NAME_LAST)) |
84 << (*ix)->guid() | 84 << (*ix)->guid() |
85 << " so associating with node id " << node.GetId(); | 85 << " so associating with node id " << node.GetId(); |
86 const sync_pb::AutofillProfileSpecifics& autofill( | 86 const sync_pb::AutofillProfileSpecifics& autofill( |
87 node.GetAutofillProfileSpecifics()); | 87 node.GetAutofillProfileSpecifics()); |
88 if (OverwriteProfileWithServerData(*ix, autofill)) { | 88 if (OverwriteProfileWithServerData(*ix, autofill)) { |
89 updated_profiles->push_back(*ix); | 89 updated_profiles->push_back(*ix); |
90 } | 90 } |
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
297 return false; | 297 return false; |
298 } | 298 } |
299 const sync_pb::AutofillProfileSpecifics& autofill_specifics( | 299 const sync_pb::AutofillProfileSpecifics& autofill_specifics( |
300 read_node.GetAutofillProfileSpecifics()); | 300 read_node.GetAutofillProfileSpecifics()); |
301 AutoFillProfile* p = new AutoFillProfile(autofill_specifics.guid()); | 301 AutoFillProfile* p = new AutoFillProfile(autofill_specifics.guid()); |
302 OverwriteProfileWithServerData(p, autofill_specifics); | 302 OverwriteProfileWithServerData(p, autofill_specifics); |
303 new_profiles->push_back(p); | 303 new_profiles->push_back(p); |
304 std::string guid = autofill_specifics.guid(); | 304 std::string guid = autofill_specifics.guid(); |
305 Associate(&guid, sync_node_id); | 305 Associate(&guid, sync_node_id); |
306 current_profiles->insert(autofill_specifics.guid()); | 306 current_profiles->insert(autofill_specifics.guid()); |
307 VLOG(1) << "[AUTOFILL MIGRATION]" | 307 VLOG(2) << "[AUTOFILL MIGRATION]" |
308 << "Found in sync db but with a different guid: " | 308 << "Found in sync db but with a different guid: " |
309 << UTF16ToUTF8(profile.GetFieldText(AutoFillType(NAME_FIRST))) | 309 << UTF16ToUTF8(profile.GetFieldText(AutoFillType(NAME_FIRST))) |
310 << UTF16ToUTF8(profile.GetFieldText(AutoFillType(NAME_LAST))) | 310 << UTF16ToUTF8(profile.GetFieldText(AutoFillType(NAME_LAST))) |
311 << "New guid " << autofill_specifics.guid() << " sync node id " | 311 << "New guid " << autofill_specifics.guid() << " sync node id " |
312 << sync_node_id << " so associating. Profile to be deleted " | 312 << sync_node_id << " so associating. Profile to be deleted " |
313 << profile.guid(); | 313 << profile.guid(); |
314 } else { | 314 } else { |
315 sync_api::WriteNode node(trans); | 315 sync_api::WriteNode node(trans); |
316 if (!node.InitUniqueByCreation( | 316 if (!node.InitUniqueByCreation( |
317 syncable::AUTOFILL_PROFILE, autofill_root, profile.guid())) { | 317 syncable::AUTOFILL_PROFILE, autofill_root, profile.guid())) { |
318 LOG(ERROR) << "Failed to create autofill sync node."; | 318 LOG(ERROR) << "Failed to create autofill sync node."; |
319 return false; | 319 return false; |
320 } | 320 } |
321 node.SetTitle(UTF8ToWide(profile.guid())); | 321 node.SetTitle(UTF8ToWide(profile.guid())); |
322 VLOG(1) << "[AUTOFILL MIGRATION]" | 322 VLOG(2) << "[AUTOFILL MIGRATION]" |
323 << "NOT Found in sync db " | 323 << "NOT Found in sync db " |
324 << UTF16ToUTF8(profile.GetFieldText(AutoFillType(NAME_FIRST))) | 324 << UTF16ToUTF8(profile.GetFieldText(AutoFillType(NAME_FIRST))) |
325 << UTF16ToUTF8(profile.GetFieldText(AutoFillType(NAME_LAST))) | 325 << UTF16ToUTF8(profile.GetFieldText(AutoFillType(NAME_LAST))) |
326 << profile.guid() | 326 << profile.guid() |
327 << " so creating a new sync node. Sync node id " | 327 << " so creating a new sync node. Sync node id " |
328 << node.GetId(); | 328 << node.GetId(); |
329 AutofillProfileChangeProcessor::WriteAutofillProfile(profile, &node); | 329 AutofillProfileChangeProcessor::WriteAutofillProfile(profile, &node); |
330 current_profiles->insert(profile.guid()); | 330 current_profiles->insert(profile.guid()); |
331 std::string guid = profile.guid(); | 331 std::string guid = profile.guid(); |
332 Associate(&guid, node.GetId()); | 332 Associate(&guid, node.GetId()); |
(...skipping 27 matching lines...) Expand all Loading... |
360 } | 360 } |
361 return true; | 361 return true; |
362 } | 362 } |
363 | 363 |
364 void AutofillProfileModelAssociator::AddNativeProfileIfNeeded( | 364 void AutofillProfileModelAssociator::AddNativeProfileIfNeeded( |
365 const sync_pb::AutofillProfileSpecifics& profile, | 365 const sync_pb::AutofillProfileSpecifics& profile, |
366 DataBundle* bundle, | 366 DataBundle* bundle, |
367 const sync_api::ReadNode& node) { | 367 const sync_api::ReadNode& node) { |
368 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB)); | 368 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB)); |
369 | 369 |
370 VLOG(1) << "[AUTOFILL MIGRATION] " | 370 VLOG(2) << "[AUTOFILL MIGRATION] " |
371 << "Trying to lookup " | 371 << "Trying to lookup " |
372 << profile.name_first() | 372 << profile.name_first() |
373 << " " | 373 << " " |
374 << profile.name_last() | 374 << profile.name_last() |
375 << "sync node id " << node.GetId() | 375 << "sync node id " << node.GetId() |
376 << " Guid " << profile.guid() | 376 << " Guid " << profile.guid() |
377 << " in the web db"; | 377 << " in the web db"; |
378 | 378 |
379 if (bundle->current_profiles.find(profile.guid()) == | 379 if (bundle->current_profiles.find(profile.guid()) == |
380 bundle->current_profiles.end()) { | 380 bundle->current_profiles.end()) { |
381 std::string guid(profile.guid()); | 381 std::string guid(profile.guid()); |
382 Associate(&guid, node.GetId()); | 382 Associate(&guid, node.GetId()); |
383 AutoFillProfile* p = new AutoFillProfile(profile.guid()); | 383 AutoFillProfile* p = new AutoFillProfile(profile.guid()); |
384 OverwriteProfileWithServerData(p, profile); | 384 OverwriteProfileWithServerData(p, profile); |
385 bundle->new_profiles.push_back(p); | 385 bundle->new_profiles.push_back(p); |
386 VLOG(1) << "[AUTOFILL MIGRATION] " | 386 VLOG(2) << "[AUTOFILL MIGRATION] " |
387 << " Did not find one so creating it on web db"; | 387 << " Did not find one so creating it on web db"; |
388 } else { | 388 } else { |
389 VLOG(1) << "[AUTOFILL MIGRATION] " | 389 VLOG(2) << "[AUTOFILL MIGRATION] " |
390 << " Found it on web db. Moving on "; | 390 << " Found it on web db. Moving on "; |
391 } | 391 } |
392 } | 392 } |
393 | 393 |
394 bool AutofillProfileModelAssociator::SaveChangesToWebData( | 394 bool AutofillProfileModelAssociator::SaveChangesToWebData( |
395 const DataBundle& bundle) { | 395 const DataBundle& bundle) { |
396 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB)); | 396 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB)); |
397 | 397 |
398 if (IsAbortPending()) | 398 if (IsAbortPending()) |
399 return false; | 399 return false; |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
472 | 472 |
473 AutofillProfileModelAssociator::DataBundle::DataBundle() {} | 473 AutofillProfileModelAssociator::DataBundle::DataBundle() {} |
474 | 474 |
475 AutofillProfileModelAssociator::DataBundle::~DataBundle() { | 475 AutofillProfileModelAssociator::DataBundle::~DataBundle() { |
476 STLDeleteElements(&new_profiles); | 476 STLDeleteElements(&new_profiles); |
477 } | 477 } |
478 | 478 |
479 | 479 |
480 } // namespace browser_sync | 480 } // namespace browser_sync |
481 | 481 |
OLD | NEW |