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

Side by Side Diff: chrome/browser/sync/glue/autofill_profile_model_associator.cc

Issue 5159001: Rest of the autofill work. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Couple of lint errors sneaked into my previous patch. This is clean of lint errors. Created 10 years 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698