| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/autofill/personal_data_manager.h" | 5 #include "chrome/browser/autofill/personal_data_manager.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <iterator> | 8 #include <iterator> |
| 9 | 9 |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| 11 #include "base/string_number_conversions.h" | 11 #include "base/string_number_conversions.h" |
| 12 #include "base/utf_string_conversions.h" | 12 #include "base/utf_string_conversions.h" |
| 13 #include "chrome/browser/autofill/autofill-inl.h" | 13 #include "chrome/browser/autofill/autofill-inl.h" |
| 14 #include "chrome/browser/autofill/autofill_field.h" | 14 #include "chrome/browser/autofill/autofill_field.h" |
| 15 #include "chrome/browser/autofill/autofill_metrics.h" | 15 #include "chrome/browser/autofill/autofill_metrics.h" |
| 16 #include "chrome/browser/autofill/autofill_regexes.h" | 16 #include "chrome/browser/autofill/autofill_regexes.h" |
| 17 #include "chrome/browser/autofill/form_structure.h" | 17 #include "chrome/browser/autofill/form_structure.h" |
| 18 #include "chrome/browser/autofill/personal_data_manager_observer.h" | 18 #include "chrome/browser/autofill/personal_data_manager_observer.h" |
| 19 #include "chrome/browser/autofill/phone_number.h" | 19 #include "chrome/browser/autofill/phone_number.h" |
| 20 #include "chrome/browser/autofill/phone_number_i18n.h" | 20 #include "chrome/browser/autofill/phone_number_i18n.h" |
| 21 #include "chrome/browser/autofill/select_control_handler.h" | 21 #include "chrome/browser/autofill/select_control_handler.h" |
| 22 #include "chrome/browser/prefs/pref_service.h" | 22 #include "chrome/browser/prefs/pref_service.h" |
| 23 #include "chrome/browser/profiles/profile.h" | 23 #include "chrome/browser/profiles/profile.h" |
| 24 #include "chrome/browser/sync/profile_sync_service.h" | 24 #include "chrome/browser/sync/profile_sync_service.h" |
| 25 #include "chrome/browser/sync/profile_sync_service_factory.h" | 25 #include "chrome/browser/sync/profile_sync_service_factory.h" |
| 26 #include "chrome/browser/webdata/autofill_entry.h" | 26 #include "chrome/browser/webdata/autofill_entry.h" |
| 27 #include "chrome/browser/webdata/web_data_service.h" | 27 #include "chrome/browser/webdata/web_data_service.h" |
| 28 #include "chrome/browser/webdata/web_data_service_factory.h" |
| 28 #include "chrome/common/chrome_notification_types.h" | 29 #include "chrome/common/chrome_notification_types.h" |
| 29 #include "chrome/common/pref_names.h" | 30 #include "chrome/common/pref_names.h" |
| 30 #include "content/public/browser/browser_thread.h" | 31 #include "content/public/browser/browser_thread.h" |
| 31 #include "content/public/browser/notification_source.h" | 32 #include "content/public/browser/notification_source.h" |
| 32 | 33 |
| 33 namespace { | 34 namespace { |
| 34 | 35 |
| 35 template<typename T> | 36 template<typename T> |
| 36 class FormGroupMatchesByGUIDFunctor { | 37 class FormGroupMatchesByGUIDFunctor { |
| 37 public: | 38 public: |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 163 FOR_EACH_OBSERVER(PersonalDataManagerObserver, observers_, | 164 FOR_EACH_OBSERVER(PersonalDataManagerObserver, observers_, |
| 164 OnPersonalDataChanged()); | 165 OnPersonalDataChanged()); |
| 165 | 166 |
| 166 // As all Autofill data is ready, the Autocomplete data is ready as well. | 167 // As all Autofill data is ready, the Autocomplete data is ready as well. |
| 167 // If sync is not set, cull older entries of the autocomplete. Otherwise, | 168 // If sync is not set, cull older entries of the autocomplete. Otherwise, |
| 168 // the entries will be culled when sync is connected. | 169 // the entries will be culled when sync is connected. |
| 169 ProfileSyncService* sync_service = | 170 ProfileSyncService* sync_service = |
| 170 ProfileSyncServiceFactory::GetInstance()->GetForProfile(profile_); | 171 ProfileSyncServiceFactory::GetInstance()->GetForProfile(profile_); |
| 171 if (sync_service && (!sync_service->HasSyncSetupCompleted() || | 172 if (sync_service && (!sync_service->HasSyncSetupCompleted() || |
| 172 !profile_->GetPrefs()->GetBoolean(prefs::kSyncAutofill))) { | 173 !profile_->GetPrefs()->GetBoolean(prefs::kSyncAutofill))) { |
| 173 WebDataService* wds = | 174 scoped_refptr<WebDataService> web_data_service = |
| 174 profile_->GetWebDataService(Profile::EXPLICIT_ACCESS); | 175 WebDataServiceFactory::GetForProfile(profile_, |
| 175 if (wds) | 176 Profile::EXPLICIT_ACCESS); |
| 176 wds->RemoveExpiredFormElements(); | 177 if (web_data_service) |
| 178 web_data_service->RemoveExpiredFormElements(); |
| 177 } | 179 } |
| 178 } | 180 } |
| 179 } | 181 } |
| 180 | 182 |
| 181 void PersonalDataManager::SetObserver(PersonalDataManagerObserver* observer) { | 183 void PersonalDataManager::SetObserver(PersonalDataManagerObserver* observer) { |
| 182 // TODO(dhollowa): RemoveObserver is for compatibility with old code, it | 184 // TODO(dhollowa): RemoveObserver is for compatibility with old code, it |
| 183 // should be nuked. | 185 // should be nuked. |
| 184 observers_.RemoveObserver(observer); | 186 observers_.RemoveObserver(observer); |
| 185 observers_.AddObserver(observer); | 187 observers_.AddObserver(observer); |
| 186 } | 188 } |
| 187 | 189 |
| 188 void PersonalDataManager::RemoveObserver( | 190 void PersonalDataManager::RemoveObserver( |
| 189 PersonalDataManagerObserver* observer) { | 191 PersonalDataManagerObserver* observer) { |
| 190 observers_.RemoveObserver(observer); | 192 observers_.RemoveObserver(observer); |
| 191 } | 193 } |
| 192 | 194 |
| 193 // The |PersonalDataManager| is set up as a listener of the sync service in | 195 // The |PersonalDataManager| is set up as a listener of the sync service in |
| 194 // |EmptyMigrationTrash| in the case where sync is not yet ready to receive | 196 // |EmptyMigrationTrash| in the case where sync is not yet ready to receive |
| 195 // changes. This method, |OnStateChange| acts as a deferred call to | 197 // changes. This method, |OnStateChange| acts as a deferred call to |
| 196 // |EmptyMigrationTrash| once the sync service becomes available. | 198 // |EmptyMigrationTrash| once the sync service becomes available. |
| 197 void PersonalDataManager::OnStateChanged() { | 199 void PersonalDataManager::OnStateChanged() { |
| 198 if (!profile_ || profile_->IsOffTheRecord()) | 200 if (!profile_ || profile_->IsOffTheRecord()) |
| 199 return; | 201 return; |
| 200 | 202 |
| 201 WebDataService* web_data_service = | 203 scoped_refptr<WebDataService> web_data_service = |
| 202 profile_->GetWebDataService(Profile::EXPLICIT_ACCESS); | 204 WebDataServiceFactory::GetForProfile(profile_, Profile::EXPLICIT_ACCESS); |
| 203 if (!web_data_service) { | 205 if (!web_data_service.get()) { |
| 204 NOTREACHED(); | 206 NOTREACHED(); |
| 205 return; | 207 return; |
| 206 } | 208 } |
| 207 | 209 |
| 208 ProfileSyncService* sync_service = | 210 ProfileSyncService* sync_service = |
| 209 ProfileSyncServiceFactory::GetInstance()->GetForProfile(profile_); | 211 ProfileSyncServiceFactory::GetInstance()->GetForProfile(profile_); |
| 210 if (!sync_service) | 212 if (!sync_service) |
| 211 return; | 213 return; |
| 212 | 214 |
| 213 if (sync_service->ShouldPushChanges()) { | 215 if (sync_service->ShouldPushChanges()) { |
| 214 web_data_service->EmptyMigrationTrash(true); | 216 web_data_service->EmptyMigrationTrash(true); |
| 215 sync_service->RemoveObserver(this); | 217 sync_service->RemoveObserver(this); |
| 216 } | 218 } |
| 217 } | 219 } |
| 218 | 220 |
| 219 void PersonalDataManager::Shutdown() { | 221 void PersonalDataManager::Shutdown() { |
| 220 CancelPendingQuery(&pending_profiles_query_); | 222 CancelPendingQuery(&pending_profiles_query_); |
| 221 CancelPendingQuery(&pending_creditcards_query_); | 223 CancelPendingQuery(&pending_creditcards_query_); |
| 222 notification_registrar_.RemoveAll(); | 224 notification_registrar_.RemoveAll(); |
| 223 } | 225 } |
| 224 | 226 |
| 225 void PersonalDataManager::Observe(int type, | 227 void PersonalDataManager::Observe(int type, |
| 226 const content::NotificationSource& source, | 228 const content::NotificationSource& source, |
| 227 const content::NotificationDetails& details) { | 229 const content::NotificationDetails& details) { |
| 228 DCHECK_EQ(type, chrome::NOTIFICATION_AUTOFILL_MULTIPLE_CHANGED); | 230 DCHECK_EQ(type, chrome::NOTIFICATION_AUTOFILL_MULTIPLE_CHANGED); |
| 229 WebDataService* web_data_service = | 231 scoped_refptr<WebDataService> web_data_service = |
| 230 content::Source<WebDataService>(source).ptr(); | 232 content::Source<WebDataService>(source).ptr(); |
| 231 | 233 |
| 232 DCHECK(web_data_service && | 234 DCHECK(web_data_service.get() && |
| 233 web_data_service == | 235 web_data_service.get() == WebDataServiceFactory::GetForProfile( |
| 234 profile_->GetWebDataService(Profile::EXPLICIT_ACCESS)); | 236 profile_, Profile::EXPLICIT_ACCESS).get()); |
| 235 Refresh(); | 237 Refresh(); |
| 236 } | 238 } |
| 237 | 239 |
| 238 bool PersonalDataManager::ImportFormData( | 240 bool PersonalDataManager::ImportFormData( |
| 239 const FormStructure& form, | 241 const FormStructure& form, |
| 240 const CreditCard** imported_credit_card) { | 242 const CreditCard** imported_credit_card) { |
| 241 scoped_ptr<AutofillProfile> imported_profile(new AutofillProfile); | 243 scoped_ptr<AutofillProfile> imported_profile(new AutofillProfile); |
| 242 scoped_ptr<CreditCard> local_imported_credit_card(new CreditCard); | 244 scoped_ptr<CreditCard> local_imported_credit_card(new CreditCard); |
| 243 | 245 |
| 244 // Parse the form and construct a profile based on the information that is | 246 // Parse the form and construct a profile based on the information that is |
| (...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 357 if (profile_->IsOffTheRecord()) | 359 if (profile_->IsOffTheRecord()) |
| 358 return; | 360 return; |
| 359 | 361 |
| 360 if (profile.IsEmpty()) | 362 if (profile.IsEmpty()) |
| 361 return; | 363 return; |
| 362 | 364 |
| 363 // Don't add an existing profile. | 365 // Don't add an existing profile. |
| 364 if (FindByGUID<AutofillProfile>(web_profiles_, profile.guid())) | 366 if (FindByGUID<AutofillProfile>(web_profiles_, profile.guid())) |
| 365 return; | 367 return; |
| 366 | 368 |
| 367 WebDataService* wds = profile_->GetWebDataService(Profile::EXPLICIT_ACCESS); | 369 scoped_refptr<WebDataService> wds = WebDataServiceFactory::GetForProfile( |
| 368 if (!wds) | 370 profile_, Profile::EXPLICIT_ACCESS); |
| 371 if (!wds.get()) |
| 369 return; | 372 return; |
| 370 | 373 |
| 371 // Don't add a duplicate. | 374 // Don't add a duplicate. |
| 372 if (FindByContents(web_profiles_, profile)) | 375 if (FindByContents(web_profiles_, profile)) |
| 373 return; | 376 return; |
| 374 | 377 |
| 375 // Add the new profile to the web database. | 378 // Add the new profile to the web database. |
| 376 wds->AddAutofillProfile(profile); | 379 wds->AddAutofillProfile(profile); |
| 377 | 380 |
| 378 // Refresh our local cache and send notifications to observers. | 381 // Refresh our local cache and send notifications to observers. |
| 379 Refresh(); | 382 Refresh(); |
| 380 } | 383 } |
| 381 | 384 |
| 382 void PersonalDataManager::UpdateProfile(const AutofillProfile& profile) { | 385 void PersonalDataManager::UpdateProfile(const AutofillProfile& profile) { |
| 383 if (profile_->IsOffTheRecord()) | 386 if (profile_->IsOffTheRecord()) |
| 384 return; | 387 return; |
| 385 | 388 |
| 386 if (!FindByGUID<AutofillProfile>(web_profiles_, profile.guid())) | 389 if (!FindByGUID<AutofillProfile>(web_profiles_, profile.guid())) |
| 387 return; | 390 return; |
| 388 | 391 |
| 389 if (profile.IsEmpty()) { | 392 if (profile.IsEmpty()) { |
| 390 RemoveProfile(profile.guid()); | 393 RemoveProfile(profile.guid()); |
| 391 return; | 394 return; |
| 392 } | 395 } |
| 393 | 396 |
| 394 WebDataService* wds = profile_->GetWebDataService(Profile::EXPLICIT_ACCESS); | 397 scoped_refptr<WebDataService> wds = WebDataServiceFactory::GetForProfile( |
| 395 if (!wds) | 398 profile_, Profile::EXPLICIT_ACCESS); |
| 399 if (!wds.get()) |
| 396 return; | 400 return; |
| 397 | 401 |
| 398 // Make the update. | 402 // Make the update. |
| 399 wds->UpdateAutofillProfile(profile); | 403 wds->UpdateAutofillProfile(profile); |
| 400 | 404 |
| 401 // Refresh our local cache and send notifications to observers. | 405 // Refresh our local cache and send notifications to observers. |
| 402 Refresh(); | 406 Refresh(); |
| 403 } | 407 } |
| 404 | 408 |
| 405 void PersonalDataManager::RemoveProfile(const std::string& guid) { | 409 void PersonalDataManager::RemoveProfile(const std::string& guid) { |
| 406 if (profile_->IsOffTheRecord()) | 410 if (profile_->IsOffTheRecord()) |
| 407 return; | 411 return; |
| 408 | 412 |
| 409 if (!FindByGUID<AutofillProfile>(web_profiles_, guid)) | 413 if (!FindByGUID<AutofillProfile>(web_profiles_, guid)) |
| 410 return; | 414 return; |
| 411 | 415 |
| 412 WebDataService* wds = profile_->GetWebDataService(Profile::EXPLICIT_ACCESS); | 416 scoped_refptr<WebDataService> wds = WebDataServiceFactory::GetForProfile( |
| 413 if (!wds) | 417 profile_, Profile::EXPLICIT_ACCESS); |
| 418 if (!wds.get()) |
| 414 return; | 419 return; |
| 415 | 420 |
| 416 // Remove the profile. | 421 // Remove the profile. |
| 417 wds->RemoveAutofillProfile(guid); | 422 wds->RemoveAutofillProfile(guid); |
| 418 | 423 |
| 419 // Refresh our local cache and send notifications to observers. | 424 // Refresh our local cache and send notifications to observers. |
| 420 Refresh(); | 425 Refresh(); |
| 421 } | 426 } |
| 422 | 427 |
| 423 AutofillProfile* PersonalDataManager::GetProfileByGUID( | 428 AutofillProfile* PersonalDataManager::GetProfileByGUID( |
| 424 const std::string& guid) { | 429 const std::string& guid) { |
| 425 for (std::vector<AutofillProfile*>::iterator iter = web_profiles_->begin(); | 430 for (std::vector<AutofillProfile*>::iterator iter = web_profiles_->begin(); |
| 426 iter != web_profiles_->end(); ++iter) { | 431 iter != web_profiles_->end(); ++iter) { |
| 427 if ((*iter)->guid() == guid) | 432 if ((*iter)->guid() == guid) |
| 428 return *iter; | 433 return *iter; |
| 429 } | 434 } |
| 430 return NULL; | 435 return NULL; |
| 431 } | 436 } |
| 432 | 437 |
| 433 void PersonalDataManager::AddCreditCard(const CreditCard& credit_card) { | 438 void PersonalDataManager::AddCreditCard(const CreditCard& credit_card) { |
| 434 if (profile_->IsOffTheRecord()) | 439 if (profile_->IsOffTheRecord()) |
| 435 return; | 440 return; |
| 436 | 441 |
| 437 if (credit_card.IsEmpty()) | 442 if (credit_card.IsEmpty()) |
| 438 return; | 443 return; |
| 439 | 444 |
| 440 if (FindByGUID<CreditCard>(credit_cards_, credit_card.guid())) | 445 if (FindByGUID<CreditCard>(credit_cards_, credit_card.guid())) |
| 441 return; | 446 return; |
| 442 | 447 |
| 443 WebDataService* wds = profile_->GetWebDataService(Profile::EXPLICIT_ACCESS); | 448 scoped_refptr<WebDataService> wds = WebDataServiceFactory::GetForProfile( |
| 444 if (!wds) | 449 profile_, Profile::EXPLICIT_ACCESS); |
| 450 if (!wds.get()) |
| 445 return; | 451 return; |
| 446 | 452 |
| 447 // Don't add a duplicate. | 453 // Don't add a duplicate. |
| 448 if (FindByContents(credit_cards_, credit_card)) | 454 if (FindByContents(credit_cards_, credit_card)) |
| 449 return; | 455 return; |
| 450 | 456 |
| 451 // Add the new credit card to the web database. | 457 // Add the new credit card to the web database. |
| 452 wds->AddCreditCard(credit_card); | 458 wds->AddCreditCard(credit_card); |
| 453 | 459 |
| 454 // Refresh our local cache and send notifications to observers. | 460 // Refresh our local cache and send notifications to observers. |
| 455 Refresh(); | 461 Refresh(); |
| 456 } | 462 } |
| 457 | 463 |
| 458 void PersonalDataManager::UpdateCreditCard(const CreditCard& credit_card) { | 464 void PersonalDataManager::UpdateCreditCard(const CreditCard& credit_card) { |
| 459 if (profile_->IsOffTheRecord()) | 465 if (profile_->IsOffTheRecord()) |
| 460 return; | 466 return; |
| 461 | 467 |
| 462 if (!FindByGUID<CreditCard>(credit_cards_, credit_card.guid())) | 468 if (!FindByGUID<CreditCard>(credit_cards_, credit_card.guid())) |
| 463 return; | 469 return; |
| 464 | 470 |
| 465 if (credit_card.IsEmpty()) { | 471 if (credit_card.IsEmpty()) { |
| 466 RemoveCreditCard(credit_card.guid()); | 472 RemoveCreditCard(credit_card.guid()); |
| 467 return; | 473 return; |
| 468 } | 474 } |
| 469 | 475 |
| 470 WebDataService* wds = profile_->GetWebDataService(Profile::EXPLICIT_ACCESS); | 476 scoped_refptr<WebDataService> wds = WebDataServiceFactory::GetForProfile( |
| 471 if (!wds) | 477 profile_, Profile::EXPLICIT_ACCESS); |
| 478 if (!wds.get()) |
| 472 return; | 479 return; |
| 473 | 480 |
| 474 // Make the update. | 481 // Make the update. |
| 475 wds->UpdateCreditCard(credit_card); | 482 wds->UpdateCreditCard(credit_card); |
| 476 | 483 |
| 477 // Refresh our local cache and send notifications to observers. | 484 // Refresh our local cache and send notifications to observers. |
| 478 Refresh(); | 485 Refresh(); |
| 479 } | 486 } |
| 480 | 487 |
| 481 void PersonalDataManager::RemoveCreditCard(const std::string& guid) { | 488 void PersonalDataManager::RemoveCreditCard(const std::string& guid) { |
| 482 if (profile_->IsOffTheRecord()) | 489 if (profile_->IsOffTheRecord()) |
| 483 return; | 490 return; |
| 484 | 491 |
| 485 if (!FindByGUID<CreditCard>(credit_cards_, guid)) | 492 if (!FindByGUID<CreditCard>(credit_cards_, guid)) |
| 486 return; | 493 return; |
| 487 | 494 |
| 488 WebDataService* wds = profile_->GetWebDataService(Profile::EXPLICIT_ACCESS); | 495 scoped_refptr<WebDataService> wds = WebDataServiceFactory::GetForProfile( |
| 489 if (!wds) | 496 profile_, Profile::EXPLICIT_ACCESS); |
| 497 if (!wds.get()) |
| 490 return; | 498 return; |
| 491 | 499 |
| 492 // Remove the credit card. | 500 // Remove the credit card. |
| 493 wds->RemoveCreditCard(guid); | 501 wds->RemoveCreditCard(guid); |
| 494 | 502 |
| 495 // Refresh our local cache and send notifications to observers. | 503 // Refresh our local cache and send notifications to observers. |
| 496 Refresh(); | 504 Refresh(); |
| 497 } | 505 } |
| 498 | 506 |
| 499 CreditCard* PersonalDataManager::GetCreditCardByGUID(const std::string& guid) { | 507 CreditCard* PersonalDataManager::GetCreditCardByGUID(const std::string& guid) { |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 565 pending_creditcards_query_(0), | 573 pending_creditcards_query_(0), |
| 566 metric_logger_(new AutofillMetrics), | 574 metric_logger_(new AutofillMetrics), |
| 567 has_logged_profile_count_(false) { | 575 has_logged_profile_count_(false) { |
| 568 } | 576 } |
| 569 | 577 |
| 570 void PersonalDataManager::Init(Profile* profile) { | 578 void PersonalDataManager::Init(Profile* profile) { |
| 571 profile_ = profile; | 579 profile_ = profile; |
| 572 metric_logger_->LogIsAutofillEnabledAtStartup(IsAutofillEnabled()); | 580 metric_logger_->LogIsAutofillEnabledAtStartup(IsAutofillEnabled()); |
| 573 | 581 |
| 574 // WebDataService may not be available in tests. | 582 // WebDataService may not be available in tests. |
| 575 WebDataService* web_data_service = | 583 scoped_refptr<WebDataService> web_data_service = |
| 576 profile_->GetWebDataService(Profile::EXPLICIT_ACCESS); | 584 WebDataServiceFactory::GetForProfile(profile_, Profile::EXPLICIT_ACCESS); |
| 577 if (!web_data_service) | 585 if (!web_data_service.get()) |
| 578 return; | 586 return; |
| 579 | 587 |
| 580 LoadProfiles(); | 588 LoadProfiles(); |
| 581 LoadCreditCards(); | 589 LoadCreditCards(); |
| 582 | 590 |
| 583 notification_registrar_.Add( | 591 notification_registrar_.Add( |
| 584 this, | 592 this, |
| 585 chrome::NOTIFICATION_AUTOFILL_MULTIPLE_CHANGED, | 593 chrome::NOTIFICATION_AUTOFILL_MULTIPLE_CHANGED, |
| 586 content::Source<WebDataService>(web_data_service)); | 594 content::Source<WebDataService>(web_data_service)); |
| 587 } | 595 } |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 660 | 668 |
| 661 // Ensure that profile labels are up to date. Currently, sync relies on | 669 // Ensure that profile labels are up to date. Currently, sync relies on |
| 662 // labels to identify a profile. | 670 // labels to identify a profile. |
| 663 // TODO(dhollowa): We need to deprecate labels and update the way sync | 671 // TODO(dhollowa): We need to deprecate labels and update the way sync |
| 664 // identifies profiles. | 672 // identifies profiles. |
| 665 std::vector<AutofillProfile*> profile_pointers(profiles->size()); | 673 std::vector<AutofillProfile*> profile_pointers(profiles->size()); |
| 666 std::transform(profiles->begin(), profiles->end(), profile_pointers.begin(), | 674 std::transform(profiles->begin(), profiles->end(), profile_pointers.begin(), |
| 667 address_of<AutofillProfile>); | 675 address_of<AutofillProfile>); |
| 668 AutofillProfile::AdjustInferredLabels(&profile_pointers); | 676 AutofillProfile::AdjustInferredLabels(&profile_pointers); |
| 669 | 677 |
| 670 WebDataService* wds = profile_->GetWebDataService(Profile::EXPLICIT_ACCESS); | 678 scoped_refptr<WebDataService> wds = WebDataServiceFactory::GetForProfile( |
| 671 if (!wds) | 679 profile_, Profile::EXPLICIT_ACCESS); |
| 680 if (!wds.get()) |
| 672 return; | 681 return; |
| 673 | 682 |
| 674 // Any profiles that are not in the new profile list should be removed from | 683 // Any profiles that are not in the new profile list should be removed from |
| 675 // the web database. | 684 // the web database. |
| 676 for (std::vector<AutofillProfile*>::const_iterator iter = | 685 for (std::vector<AutofillProfile*>::const_iterator iter = |
| 677 web_profiles_.begin(); | 686 web_profiles_.begin(); |
| 678 iter != web_profiles_.end(); ++iter) { | 687 iter != web_profiles_.end(); ++iter) { |
| 679 if (!FindByGUID<AutofillProfile>(*profiles, (*iter)->guid())) | 688 if (!FindByGUID<AutofillProfile>(*profiles, (*iter)->guid())) |
| 680 wds->RemoveAutofillProfile((*iter)->guid()); | 689 wds->RemoveAutofillProfile((*iter)->guid()); |
| 681 } | 690 } |
| (...skipping 29 matching lines...) Expand all Loading... |
| 711 if (profile_->IsOffTheRecord()) | 720 if (profile_->IsOffTheRecord()) |
| 712 return; | 721 return; |
| 713 | 722 |
| 714 // Remove empty credit cards from input. | 723 // Remove empty credit cards from input. |
| 715 credit_cards->erase( | 724 credit_cards->erase( |
| 716 std::remove_if( | 725 std::remove_if( |
| 717 credit_cards->begin(), credit_cards->end(), | 726 credit_cards->begin(), credit_cards->end(), |
| 718 std::mem_fun_ref(&CreditCard::IsEmpty)), | 727 std::mem_fun_ref(&CreditCard::IsEmpty)), |
| 719 credit_cards->end()); | 728 credit_cards->end()); |
| 720 | 729 |
| 721 WebDataService* wds = profile_->GetWebDataService(Profile::EXPLICIT_ACCESS); | 730 scoped_refptr<WebDataService> wds = WebDataServiceFactory::GetForProfile( |
| 722 if (!wds) | 731 profile_, Profile::EXPLICIT_ACCESS); |
| 732 if (!wds.get()) |
| 723 return; | 733 return; |
| 724 | 734 |
| 725 // Any credit cards that are not in the new credit card list should be | 735 // Any credit cards that are not in the new credit card list should be |
| 726 // removed. | 736 // removed. |
| 727 for (std::vector<CreditCard*>::const_iterator iter = credit_cards_.begin(); | 737 for (std::vector<CreditCard*>::const_iterator iter = credit_cards_.begin(); |
| 728 iter != credit_cards_.end(); ++iter) { | 738 iter != credit_cards_.end(); ++iter) { |
| 729 if (!FindByGUID<CreditCard>(*credit_cards, (*iter)->guid())) | 739 if (!FindByGUID<CreditCard>(*credit_cards, (*iter)->guid())) |
| 730 wds->RemoveCreditCard((*iter)->guid()); | 740 wds->RemoveCreditCard((*iter)->guid()); |
| 731 } | 741 } |
| 732 | 742 |
| (...skipping 17 matching lines...) Expand all Loading... |
| 750 for (std::vector<CreditCard>::iterator iter = credit_cards->begin(); | 760 for (std::vector<CreditCard>::iterator iter = credit_cards->begin(); |
| 751 iter != credit_cards->end(); ++iter) { | 761 iter != credit_cards->end(); ++iter) { |
| 752 credit_cards_.push_back(new CreditCard(*iter)); | 762 credit_cards_.push_back(new CreditCard(*iter)); |
| 753 } | 763 } |
| 754 | 764 |
| 755 // Refresh our local cache and send notifications to observers. | 765 // Refresh our local cache and send notifications to observers. |
| 756 Refresh(); | 766 Refresh(); |
| 757 } | 767 } |
| 758 | 768 |
| 759 void PersonalDataManager::LoadProfiles() { | 769 void PersonalDataManager::LoadProfiles() { |
| 760 WebDataService* web_data_service = | 770 scoped_refptr<WebDataService> web_data_service = |
| 761 profile_->GetWebDataService(Profile::EXPLICIT_ACCESS); | 771 WebDataServiceFactory::GetForProfile(profile_, Profile::EXPLICIT_ACCESS); |
| 762 if (!web_data_service) { | 772 if (!web_data_service.get()) { |
| 763 NOTREACHED(); | 773 NOTREACHED(); |
| 764 return; | 774 return; |
| 765 } | 775 } |
| 766 | 776 |
| 767 CancelPendingQuery(&pending_profiles_query_); | 777 CancelPendingQuery(&pending_profiles_query_); |
| 768 | 778 |
| 769 pending_profiles_query_ = web_data_service->GetAutofillProfiles(this); | 779 pending_profiles_query_ = web_data_service->GetAutofillProfiles(this); |
| 770 } | 780 } |
| 771 | 781 |
| 772 // Win and Linux implementations do nothing. Mac implementation fills in the | 782 // Win and Linux implementations do nothing. Mac implementation fills in the |
| 773 // contents of |auxiliary_profiles_|. | 783 // contents of |auxiliary_profiles_|. |
| 774 #if !defined(OS_MACOSX) | 784 #if !defined(OS_MACOSX) |
| 775 void PersonalDataManager::LoadAuxiliaryProfiles() const { | 785 void PersonalDataManager::LoadAuxiliaryProfiles() const { |
| 776 } | 786 } |
| 777 #endif | 787 #endif |
| 778 | 788 |
| 779 void PersonalDataManager::LoadCreditCards() { | 789 void PersonalDataManager::LoadCreditCards() { |
| 780 WebDataService* web_data_service = | 790 scoped_refptr<WebDataService> web_data_service = |
| 781 profile_->GetWebDataService(Profile::EXPLICIT_ACCESS); | 791 WebDataServiceFactory::GetForProfile(profile_, Profile::EXPLICIT_ACCESS); |
| 782 if (!web_data_service) { | 792 if (!web_data_service.get()) { |
| 783 NOTREACHED(); | 793 NOTREACHED(); |
| 784 return; | 794 return; |
| 785 } | 795 } |
| 786 | 796 |
| 787 CancelPendingQuery(&pending_creditcards_query_); | 797 CancelPendingQuery(&pending_creditcards_query_); |
| 788 | 798 |
| 789 pending_creditcards_query_ = web_data_service->GetCreditCards(this); | 799 pending_creditcards_query_ = web_data_service->GetCreditCards(this); |
| 790 } | 800 } |
| 791 | 801 |
| 792 void PersonalDataManager::ReceiveLoadedProfiles(WebDataService::Handle h, | 802 void PersonalDataManager::ReceiveLoadedProfiles(WebDataService::Handle h, |
| (...skipping 28 matching lines...) Expand all Loading... |
| 821 | 831 |
| 822 std::vector<CreditCard*> credit_cards = r->GetValue(); | 832 std::vector<CreditCard*> credit_cards = r->GetValue(); |
| 823 for (std::vector<CreditCard*>::iterator iter = credit_cards.begin(); | 833 for (std::vector<CreditCard*>::iterator iter = credit_cards.begin(); |
| 824 iter != credit_cards.end(); ++iter) { | 834 iter != credit_cards.end(); ++iter) { |
| 825 credit_cards_.push_back(*iter); | 835 credit_cards_.push_back(*iter); |
| 826 } | 836 } |
| 827 } | 837 } |
| 828 | 838 |
| 829 void PersonalDataManager::CancelPendingQuery(WebDataService::Handle* handle) { | 839 void PersonalDataManager::CancelPendingQuery(WebDataService::Handle* handle) { |
| 830 if (*handle) { | 840 if (*handle) { |
| 831 WebDataService* web_data_service = | 841 scoped_refptr<WebDataService> web_data_service = |
| 832 profile_->GetWebDataService(Profile::EXPLICIT_ACCESS); | 842 WebDataServiceFactory::GetForProfile(profile_, |
| 833 if (!web_data_service) { | 843 Profile::EXPLICIT_ACCESS); |
| 844 if (!web_data_service.get()) { |
| 834 NOTREACHED(); | 845 NOTREACHED(); |
| 835 return; | 846 return; |
| 836 } | 847 } |
| 837 web_data_service->CancelRequest(*handle); | 848 web_data_service->CancelRequest(*handle); |
| 838 } | 849 } |
| 839 *handle = 0; | 850 *handle = 0; |
| 840 } | 851 } |
| 841 | 852 |
| 842 void PersonalDataManager::SaveImportedProfile( | 853 void PersonalDataManager::SaveImportedProfile( |
| 843 const AutofillProfile& imported_profile) { | 854 const AutofillProfile& imported_profile) { |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 891 if (!merged) | 902 if (!merged) |
| 892 creditcards.push_back(imported_credit_card); | 903 creditcards.push_back(imported_credit_card); |
| 893 | 904 |
| 894 SetCreditCards(&creditcards); | 905 SetCreditCards(&creditcards); |
| 895 } | 906 } |
| 896 | 907 |
| 897 void PersonalDataManager::EmptyMigrationTrash() { | 908 void PersonalDataManager::EmptyMigrationTrash() { |
| 898 if (!profile_ || profile_->IsOffTheRecord()) | 909 if (!profile_ || profile_->IsOffTheRecord()) |
| 899 return; | 910 return; |
| 900 | 911 |
| 901 WebDataService* web_data_service = | 912 scoped_refptr<WebDataService> web_data_service = |
| 902 profile_->GetWebDataService(Profile::EXPLICIT_ACCESS); | 913 WebDataServiceFactory::GetForProfile(profile_, Profile::EXPLICIT_ACCESS); |
| 903 if (!web_data_service) { | 914 if (!web_data_service.get()) { |
| 904 NOTREACHED(); | 915 NOTREACHED(); |
| 905 return; | 916 return; |
| 906 } | 917 } |
| 907 | 918 |
| 908 ProfileSyncService* sync_service = | 919 ProfileSyncService* sync_service = |
| 909 ProfileSyncServiceFactory::GetInstance()->GetForProfile(profile_); | 920 ProfileSyncServiceFactory::GetInstance()->GetForProfile(profile_); |
| 910 if (!sync_service) | 921 if (!sync_service) |
| 911 return; | 922 return; |
| 912 | 923 |
| 913 if (!sync_service->HasSyncSetupCompleted()) { | 924 if (!sync_service->HasSyncSetupCompleted()) { |
| (...skipping 16 matching lines...) Expand all Loading... |
| 930 } | 941 } |
| 931 | 942 |
| 932 const AutofillMetrics* PersonalDataManager::metric_logger() const { | 943 const AutofillMetrics* PersonalDataManager::metric_logger() const { |
| 933 return metric_logger_.get(); | 944 return metric_logger_.get(); |
| 934 } | 945 } |
| 935 | 946 |
| 936 void PersonalDataManager::set_metric_logger( | 947 void PersonalDataManager::set_metric_logger( |
| 937 const AutofillMetrics* metric_logger) { | 948 const AutofillMetrics* metric_logger) { |
| 938 metric_logger_.reset(metric_logger); | 949 metric_logger_.reset(metric_logger); |
| 939 } | 950 } |
| OLD | NEW |